Nginx 1.20 + HTTP/2 + SSL + PostgreSQL 14 + Debian 11 lokální doména

V předešlém článku jsme mimo psali o instalaci Tiny Tiny RSS na Debian 10 server v LAN síti. V tomto textu je popsána aktualizace stěžejních balíčků lokálního serveru na najnovější verze, nad verze které obsahuje standradní apt. Původní zámer byl zrychlit načítání lokálního webu povolením HTTP/2 v konfiguraci. S upravenou konfigurací ale Nginx server nefungoval.

Test konfigurace proběhl v pořádku. Aktualizovali jsme postupně všechny balíčky. Server s povoleným HTTP/2 v konfigurace virtuálního serveru nefungoval ani pak. Vyšel až poslední pokus – aktivace šifrování a změna portu na 443 společne s HTTP verze 2. Konfigurace na portu 80 nefunguje (verze 1.18 ani 1.20).

Nginx Tiny Tiny RSS

Upgrade Tiny Tiny RSS na poslední git verzi. Instalace beží na lokální doméně tiny.local git naklonujeme do složky tt-rss

git clone https://git.tt-rss.org/fox/tt-rss.git tt-rss
mv tiny.local/ tiny.local_backup
mv tt-rss tiny.local
cp tiny.local_backup/classes/config.php /var/www/tiny.local/classes/config.php
cd tiny.local
chmod -R 777 cache/images
chmod -R 777 cache/upload
chmod -R 777 cache/export
chmod -R 777 feed-icons
chown -R www-data:www-data tiny.local/
systemctl stop nginx.service
systemctl start nginx.service
sudo -u www-data php /var/www/tiny.local/update.php --feeds --force

Restart serveru na vyřešení chyby 255 po další aktualizace feedu po upgrade, nestačí. Je potřeba server zastavit a pak znovu spustit. Pozor! Každá aktualizace má konfigurační soubor s číslem

const SCHEMA_VERSION = 146;

Konfigurační soubor lze používat i z původní (před aktualizační) instalace, od čísla ovšem závisí i aktualizace databáze :)

PostgreSQL

Na serveru s Debian 10 Linux běžela kvůly Tiny Tiny RSS databáze PosgreSQL 11. RSS čtečku lze používat i s MySQL / MariaDB. Ovšem bez podpory af_psql_trgm plugin. Ten po přídání funkce pg_trgm do datbáze umí v čtečce označit podobné články jako přečtené. Aktivace rozšíření

sudo -u postgres -i
psql
\c ttrss
CREATE EXTENSION pg_trgm;

PostgreSQL databáze tedy byla verze 11. Pokusili jsme se ji povýšit na verzi 14. Podstatné je vědět, že upgrade PostgreSQL databáze probíjá jinak než u MariaDB a data je třeba zálohovat zvlášť. V případě jedné instalace Tiny Tiny RSS lze zvolit export nastavení z webového rozhraní do souboru .opml. U většího objemu dat asi bude lepší použít profi způsob

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
apt -y update
apt install postgresql-14
pg_upgrade --old-datadir=/var/lib/pgsql/11/data --new-datadir=/var/lib/pgsql/14/data --old-bindir=/usr/pgsql-11/bin --new-bindir=/usr/pgsql-14/bin --old-options '-c config_file=/var/lib/pgsql/11/data/postgresql.conf' --new-options '-c config_file=/var/lib/pgsql/14/data/postgresql.conf'
pg_upgradecluster 14 main
pg_ctlcluster 11 main stop
pg_dropcluster 11 main
apt autoremove postgresql-11

Je možné, že přídaný cluster v PostgreSQL změní konfigiraci databáte a ta bude běžet na jiném portu.

PostgreSQL schéma dazabáze
PostgeSQL server schéma

Nginx HTTP

apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
apt remove nginx
apt update
apt install nginx -y
systemctl status nginx
systemctl start nginx
systemctl status nginx
systemctl enable nginx

SSL/TLS

Vygenerujeme si vlastní certifikát, do souboru ssl.conf

nano ssl_tiny.conf

vložíme

[req]
default_bits                     = 2048
default_keyfile               = localhost.key
distinguished_name   = req_distinguished_name
req_extensions              = req_ext
x509_extensions           = v3_ca

[req_distinguished_name]
countryName                                        = Country Name (2 letter code)
countryName_default                       = CZ
stateOrProvinceName                       = State or Province Name (full name)
stateOrProvinceName_default      = Prague
localityName                                          = Locality Name (eg, city)
localityName_default                         = New Town
organizationName                               = Organization Name (eg, company)
organizationName_default             = localhost
organizationalUnitName                  = organizationalunit
organizationalUnitName_default = Development
commonName                                      = Common Name (e.g. server FQDN or YOUR name)
commonName_default                     = tiny.local
commonName_max                           = 64

[req_ext]
subjectAltName = @alt_names

[v3_ca]
subjectAltName = @alt_names

[alt_names]
DNS.1   = localhost
DNS.2   = 127.0.0.1

Vygenerujeme klíč potvrzením definovaných nastavením pomocí Enter

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl_tiny.key -out ssl_tiny.crt -config ssl_tiny.conf

HTTP/2

Upravíme konfiguraci serveru ve složce /sites-available/

nano /etc/nginx/sites-available/tiny.local.conf
server {
    listen 80; ## listen for ipv4; this line is default and implied
    listen 443 ssl http2;

    root /var/www/html/tiny.local;
    index index.php index.html index.htm;

    access_log /var/log/nginx/ttrss_access.log;
    error_log /var/log/nginx/ttrss_error.log info;

    server_name tiny.local;

    ssl_certificate /etc/ssl/certs/localhost.crt;
    ssl_certificate_key /etc/ssl/private/localhost.key;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

    location / {
        index           index.php;
    }

Restartujeme server

systemctl restart nginx.service

Otestujeme spojení

curl -I -L tiny.local
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Thu, 14 Apr 2022 15:33:26 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive

Užitečné

Instalace Tiny Tiny RSS mimo Docker.
Nginx server download.
Web git repo Tiny Tiny RSS

ICTIS.CZ