cronyakatsuki.xyz/content/blog/miniflux-setup.md
2023-10-06 20:10:52 +02:00

133 lines
3.7 KiB
Markdown

+++
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.
<!-- more -->
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.