+++ title = "miniflux setup on debian" date = 2022-11-30 tags = ['Self-host', 'rss'] +++ Looking for a minimal self-hosted feed reader I found [miniflux](https://miniflux.app/). But trying to set it up I found my self trying to set it up for 3 freaking hours since I only recently started to self-host things. So here I will try to explaing it in the most easy way how to set it up on a debian server with https using certbot and nginx. For this tutorial I expect that you already have a server seted up with nginx and certbot. To set up this things check out [landchad](https://landchad.net) ## Installing needed packages You will first need to setup miniflux apt repository to install it on your system. ``` bash echo "deb [trusted=yes] https://repo.miniflux.app/apt/ /" | sudo tee /etc/apt/sources.list.d/miniflux.list > /dev/null apt update ``` Then just install the needed packages. ``` bash apt install miniflux postgresql ``` ## Setting up postgres database and miniflux Here I will detail steps to create the postgres database. ### Initial postgres setup ``` bash # Switch to the postgres user $ su - postgres # Creating a miniflux user, enter a safe and secure password $ createuser -P miniflux # Create a database for miniflux that belongs to our user $ createdb -O miniflux miniflux # Create a database for miniflux that belongs to our user $ createdb -O miniflux miniflux # Creating extension hstore as superuser $ psql miniflux -c 'create extension hstore' # Managing the miniflux database $ psql $MINIFLUX_DATABASE # Giving miniflux user all privileges > alter user miniflux with superuser; # Exit the postgres database > \q # Exit postgres user $ exit ``` ### Miniflux configuration file Open the miniflux configuration file in path `/etc/miniflux.conf` and edit it like this. ``` bash # See https://miniflux.app/docs/configuration.html LISTEN_ADDR=127.0.0.1:8080 DATABASE_URL=user=miniflux password=PASSWORD_HERE dbname=miniflux sslmode=disable RUN_MIGRATIONS=1 ``` ### Migrating the database and removing superuser privileges in postgres Now we will migrate the database and remove unneded superuser privileges, since it is reccomended in the miniflux documentation. ``` bash # Migrating the database $ miniflux -c /etc/miniflux.conf -migrate # Creating miniflux admin user $ miniflux -c /etc/miniflux.conf -create-admin # Restarting the systemctl service $ systemctl restart miniflux # Entering postgres database user $ su - postgres # Entering miniflux database $ psql $MINIFLUX_DATABASE # Removing unneded superuser privileges from miniflux user > alter user miniflux with nosuperuser; # Exit the postgres database > \q # Exit postgres user $ exit ``` ## Nginx and certbot setup Make sure to have a domain to use for your miniflux setup. Create and open a nginx config with path `/etc/nginx/sites-available/miniflux.conf` and add this ``` nginx server { server_name your.domain.ext; listen 80; listen [::]:80; location / { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` Now just link the config to enabled sites and restart nginx service. ``` bash $ ln -s /etc/nginx/sites-available/miniflux.conf /etc/nginx/sites-enabled/miniflux.conf $ systemctl restart nginx ``` To get https on your domain you just need to run `certbot --nginx` same as in this [tutorial](https://landchad.net/basic/certbot/) ## Finishing words I hope that this wasn't hard to follow and shouldn't take hours like it took me first time I tried to set this all up.