Deploy freshrss as a container

When exploring containers, deploying a simple application like freshrss is a great application to get started with: it's easy to deploy and is useful.

Deploying freshrss as a container will allow you to host and maintain your own data. The application will be available across your local network via a web browser.

You can learn more about freshrss at their site: https://www.freshrss.org/

The image I am going to use in this example comes from LinuxServer.io  https://hub.docker.com/r/linuxserver/freshrss

LinuxServer.io is a great resource because they are images built from the open source repos and they don't include additional telemetry to tracking services.

Let's get started:

Below is the first command we are going to run:

podman create \
 --name=freshrss \
 -e TZ=America/New_York \
 -p 80:80 \
 -v /path/to/files:/config \
 linuxserver/freshrss

Let's break it down:

  • podman create = create (but don't run) a new container with the following attributes
  • --name = define a name for your container
  • -e = set environment variable, in this case, we are setting timezone
  • -p = port binding: bind host port 6000 to port 80 inside the container
  • -v = map files from the host system to inside the container; this is to ensure that files generated from the container will survive if the container is destroyed
  • linuxserver/freshrss = this is the image we will be using

Since we used the podman-create command, and not podman-run, the container is not yet running, but we will get there in a moment.

After creating the container, let's integrate it with systemd so our host system can monitor the container. This will give us a few benefits, including: start at boot and integrated system log monitoring. And of course, this method is all rootless! First, we will create a systemd unit file:

$ podman generate systemd --name freshrss > $HOME/.config/systemd/user/freshrss.service

Reload systemd so it can "pick up" the new unit file:

$ systemctl --user daemon-reload

Finally, enable the unit file to start when the host system boots, and start the container "now":

$ systemctl --user enable --now freshrss.service

Now you should be able to access the container by opening your web browser and navigating to http://localhost. You will only be able to access this application from your local computer. To access it from outside your local network you will need to setup a revserse proxy via nginx, apache, or traefik.

All done! Have fun!



CHANGELOG:
2020-08-19: updated to use user level systemd commands