2 changed files with 187 additions and 1 deletions
@ -0,0 +1,186 @@ |
|||||
|
--- |
||||
|
title: "Install Miniflux on your Raspberry PI" |
||||
|
date: 2020-04-08T00:00:00+02:00 |
||||
|
opensource: |
||||
|
- OpenWRT |
||||
|
--- |
||||
|
|
||||
|
In the article "[Nginx with TLS on OpenWRT](../nginx-with-tls-on-openwrt/)", I explained how to install Nginx with TLS support on a Raspberry PI. |
||||
|
But without an application to protect, Nginx is quite useless. |
||||
|
This article explains how to install [Miniflux](https://miniflux.app/) (a lightweight RSS reader) on your Raspberry PI and how to host it as an Nginx virtual host. |
||||
|
|
||||
|
Miniflux is a web application written in Go and backed by a PostgreSQL database. So we will need to install PostgreSQL, install miniflux and setup Nginx. The rest of this article assumes you [installed OpenWRT on your Raspberry](../install-openwrt-raspberry-pi/), but it should be applicable to any Linux distribution with minimal changes. |
||||
|
|
||||
|
## Install PostgreSQL |
||||
|
|
||||
|
Install the **pgsql-server** and **pgsql-cli** packages. |
||||
|
|
||||
|
```sh |
||||
|
opkg update |
||||
|
opkg install pgsql-server pgsql-cli |
||||
|
``` |
||||
|
|
||||
|
Create a directory to hold PostgreSQL data (for instance **/srv/postgresql/data**). |
||||
|
|
||||
|
```sh |
||||
|
mkdir -p /srv/postgresql/data |
||||
|
uci set postgresql.config.PGDATA=/srv/postgresql/data |
||||
|
uci set postgresql.config.PGLOG=/srv/postgresql/data/postgresql.log |
||||
|
uci commit |
||||
|
chown postgres:postgres /srv/postgresql/data |
||||
|
``` |
||||
|
|
||||
|
Initialize the database. |
||||
|
|
||||
|
```sh |
||||
|
cd /srv/postgresql/data |
||||
|
sudo -u postgres /bin/ash -c 'LC_COLLATE="C" initdb —pwprompt -D /srv/postgresql/data' |
||||
|
``` |
||||
|
|
||||
|
Enable and start the PostgreSQL service. |
||||
|
|
||||
|
```sh |
||||
|
service postgresql enable |
||||
|
service postgresql start |
||||
|
``` |
||||
|
|
||||
|
**Note:** if you need to start/stop the database manually, you can do so with the following commands: |
||||
|
|
||||
|
```sh |
||||
|
sudo -u postgres /bin/ash -c 'LC_COLLATE="C" pg_ctl -D /srv/postgresql/data -l logfile start' |
||||
|
sudo -u postgres /bin/ash -c 'LC_COLLATE="C" pg_ctl -D /srv/postgresql/data -l logfile stop' |
||||
|
``` |
||||
|
|
||||
|
To be able to connect to the database by just typing **psql** in a command prompt, you have to create a PostgreSQL user for each Unix user. |
||||
|
In the following example, *root* can do everything and *nicolas* can create new databases. |
||||
|
|
||||
|
```sh |
||||
|
sudo -u postgres psql -c 'CREATE USER root SUPERUSER;' |
||||
|
sudo -u postgres psql -c 'CREATE USER nicolas CREATEDB;' |
||||
|
``` |
||||
|
|
||||
|
## Install Miniflux |
||||
|
|
||||
|
If not already done yet, install the required libraries to handle HTTPS URLs in **wget**. |
||||
|
This is required by the next step (download from github.com over HTTPS). |
||||
|
|
||||
|
```sh |
||||
|
opkg update |
||||
|
opkg install libustream-mbedtls ca-bundle ca-certificates |
||||
|
``` |
||||
|
|
||||
|
Install Miniflux in **/opt/miniflux**. |
||||
|
|
||||
|
```sh |
||||
|
mkdir -p /opt/miniflux/bin |
||||
|
wget -O /opt/miniflux/bin/miniflux https://github.com/miniflux/miniflux/releases/download/2.0.19/miniflux-linux-armv8 |
||||
|
chmod 755 /opt/miniflux/bin/miniflux |
||||
|
``` |
||||
|
|
||||
|
Create a Unix user and a PostgreSQL user named **miniflux**. |
||||
|
|
||||
|
```sh |
||||
|
useradd -d /var/run/miniflux -s /bin/false -m -r miniflux |
||||
|
sudo -u postgres psql -c "CREATE USER miniflux WITH PASSWORD 'miniflux';" |
||||
|
sudo -u postgres psql -c "CREATE DATABASE miniflux OWNER miniflux;" |
||||
|
``` |
||||
|
|
||||
|
Check that users and database are setup correctly with the following command (no error message should appear here). |
||||
|
|
||||
|
```sh |
||||
|
psql -h 127.0.0.1 miniflux miniflux |
||||
|
cd /tmp && sudo -u miniflux psql miniflux -c '' |
||||
|
``` |
||||
|
|
||||
|
Create the hstore extension required by Miniflux. |
||||
|
|
||||
|
```sh |
||||
|
sudo -u postgres psql miniflux -c 'CREATE EXTENSION hstore;' |
||||
|
``` |
||||
|
|
||||
|
Configure Miniflux with the database connection URL and the port to listen on. |
||||
|
|
||||
|
```sh |
||||
|
mkdir -p /opt/miniflux/etc |
||||
|
cat > /opt/miniflux/etc/miniflux.conf <<EOF |
||||
|
DATABASE_URL=postgres://miniflux:miniflux@localhost/miniflux?sslmode=disable |
||||
|
LISTEN_ADDR=8001 |
||||
|
EOF |
||||
|
chown miniflux:miniflux /opt/miniflux/etc/miniflux.conf |
||||
|
chmod 600 /opt/miniflux/etc/miniflux.conf |
||||
|
``` |
||||
|
|
||||
|
Initialize the Miniflux database. |
||||
|
|
||||
|
```sh |
||||
|
/opt/miniflux/bin/miniflux -c /opt/miniflux/etc/miniflux.conf -migrate |
||||
|
/opt/miniflux/bin/miniflux -c /opt/miniflux/etc/miniflux.conf -create-admin |
||||
|
``` |
||||
|
|
||||
|
Create an init script for Miniflux (**/etc/init.d/miniflux** for instance). |
||||
|
|
||||
|
```sh |
||||
|
#!/bin/sh /etc/rc.common |
||||
|
# Miniflux |
||||
|
|
||||
|
# Start after PostgreSQL (S50) |
||||
|
START=80 |
||||
|
STOP=20 |
||||
|
|
||||
|
start() { |
||||
|
start-stop-daemon -c miniflux -u miniflux -x /opt/miniflux/bin/miniflux -b -S -- -c /opt/miniflux/etc/miniflux.conf |
||||
|
} |
||||
|
|
||||
|
stop() { |
||||
|
start-stop-daemon -c miniflux -u miniflux -x /opt/miniflux/bin/miniflux -b -K |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
Enable and start the **miniflux** service. |
||||
|
|
||||
|
```sh |
||||
|
service miniflux enable |
||||
|
service miniflux start |
||||
|
``` |
||||
|
|
||||
|
If everything goes well, you should see a process binding port 8001. |
||||
|
|
||||
|
``` |
||||
|
# netstat -tlnp |
||||
|
Active Internet connections (only servers) |
||||
|
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name |
||||
|
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 517/dropbear |
||||
|
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 676/postmaster |
||||
|
tcp 0 0 127.0.0.1:8001 0.0.0.0:* LISTEN 804/miniflux |
||||
|
``` |
||||
|
|
||||
|
## Configure the Nginx virtual host |
||||
|
|
||||
|
Edit your nginx configuration file and, as explained in "[Nginx with TLS on OpenWRT](../nginx-with-tls-on-openwrt/)", insert a new **server** directive after the last one. |
||||
|
|
||||
|
The only difference is that we are not serving static files from the filesystem but rather forwarding requests to a backend service. |
||||
|
|
||||
|
So the **root** directive in the **location /** block needs to be replace by a **proxy_pass** directive. |
||||
|
|
||||
|
``` |
||||
|
server { |
||||
|
listen 443 ssl; |
||||
|
server_name miniflux.pi.example.test; |
||||
|
|
||||
|
... redacted ... |
||||
|
|
||||
|
location / { |
||||
|
proxy_pass http://127.0.0.1:8001; |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
**Note:** Do not insert a slash at the end of the URL, otherwise you would [get a very different behavior](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass). |
||||
|
|
||||
|
Of course, you would also need to add a new DNS entry for the hostname of this new virtual host and renew your TLS certificate to include it. |
||||
|
|
||||
|
## Conclusion |
||||
|
|
||||
|
This article explained how to install [Miniflux](https://miniflux.app/) on your Raspberry PI and how to host it as an Nginx virtual host. |
||||
|
|
||||
|
If you liked this article, you can use your freshly installed Miniflux instance to [subscribe to my RSS feed](/index.xml)! |
||||
Loading…
Reference in new issue