of Frank McPherson
Friday May 30, 2025; 4:43 PM EDT
  • Here is a quick write up of how I got FeedLand running in my home lab. FeedLand is hosted using two LXC containers running in Proxmox, one is running mysql and the other is running feedland. After provisioning the mysql container using the PVE Helper script I logged in to the database as root and created the database, tables, and indexes using the SQL provided in the FeedLand install instructions. I then created a new mysql user with read/write access to the FeedLand database for use in config.json of the FeedLand app.#
  • The second LXC container is running Debian 12 and I installed the latest version of nodejs. I then downloaded the FeedLand install zip file, expanded it and copied the required files in to the ~/feedland directory. I then went about editing config.json to align to my configuration. #
  • At first I tried configuring FeedLand to use IP addresses for domain names hoping that would work but I could not get any browser I have to access the site, no matter the configuration. When I requested the site with the web console open the request appeared to redirect to https for access so fast I couldn't see anything appear in the console, so I then proceeded to configuring for access using https. #
  • I have a handful of web applications running in my home network that are accessible over https via nginx. The key to how that works is using Duckdns.org for hosting the DNS A record of the IP address of a server running on my home network and nginx knows how to configure and use Let's Encrypt with Duckdns to provision, update, and store the SSL certificates. The IP address is local and accessible via the Internet so the URL will only properly resolve when I am at home or connected to my home network via VPN, which is why the nginx and Duckdns integration is important for authorization and provisioning of the SSL certificate by Let's Encrypt. I have minimal knowledge of Nginx and use the web app to configure it. Unfortunately, I couldn't figure out how to make websockets work and I would see errors reporting that the app can not communicate with the server. At this point I decided to install and use Caddy in the Debian 12 container running FeedLand so that I could use the example configuration provided in the Feedlandinstall repo.#
  • Next I had to figure out how to make Caddy work with Duckdns, which requires running Caddy with a Duckdns module that one installs using xcaddy. I found xcaddy requires the latest version of Go, which I installed and eventually got the Duckdns module installed for Caddy. To proxy the URL and handle SSL I had to add a tls section to the Caddyfile to specify using duckdns for the DNS and provide the Duckdns API token for authentication. The steps I followed are available in this article about using xcaddy and this article about configuring Caddy to use Duckdns.#
  • One final piece to get FeedLand running was to configure it to use Wordpress for the identity management. I briefly looked at the Email configuration and got a confused by the instructions for AWS SES so switched to using Wordpress. #
  • All of this worked and I could load FeedLand and log in but every attempt to do something, like add a feed, resulted in "Unable able to communicate with the server" errors. I saw in the browser console that there were mixed content errors occurring. The resolution was adding the a value for urlServerForClient such as "https://feedland.example.com/", being sure to include the slash at the end. I found this out by reading the config explanation but this value is not in the default config.json included in the file nor was there any mention about it in the instructions regarding using HTTPS. Before setting this value calls were being made to the myDomain value using http. #

Last update: Monday June 2, 2025; 1:14 PM EDT.