Files
daily-news-digest/n8n/README.md
T

72 lines
2.4 KiB
Markdown

# n8n deployment
This directory runs n8n separately from the news web service. The n8n data
directory and `.env` stay on the server and must not be committed to Gitea.
## First deployment on the server
```bash
cd /projects/daily-news-digest/n8n
cp .env.example .env
openssl rand -hex 32
nano .env
chmod 600 .env
mkdir -p data
sudo chown -R 1000:1000 data
docker compose up -d
docker compose ps
docker compose logs --tail=50 n8n
```
The generated value must be copied to `N8N_ENCRYPTION_KEY` and must not be
changed later. n8n listens only on the server's loopback address. From a local
computer, create an SSH tunnel and open `http://127.0.0.1:5678`:
```powershell
ssh -L 5678:127.0.0.1:5678 root@YOUR_SERVER_IP
```
## Updating from Gitea
```bash
cd /projects/daily-news-digest
git pull
cd n8n
docker compose up -d
```
Do not overwrite `n8n/.env` or `n8n/data` during updates.
## PostgreSQL credential
In n8n, create a PostgreSQL credential for the existing application database.
Because n8n uses host networking and PostgreSQL is on the same host, use the
host's local PostgreSQL address (`127.0.0.1`), port `5432`, your database/user/
password, and disable SSL when the server reports that it does not support SSL.
The first workflow in `workflows/01-test-postgres.json` only checks this
connection. It does not fetch news or send email.
## RSS ingestion workflow
Run `db/migrations/004_n8n_ingestion.sql` in DBeaver first. It creates the
idempotent database ingestion function and adds a verified starter set of RSS
sources. It is safe to run the whole file again.
Then import `workflows/02-fetch-news-to-web.json` into n8n and select the same
PostgreSQL credential on both PostgreSQL nodes. Keep the workflow inactive for
the first test and click **Execute workflow**. The workflow:
- loads every enabled row from `news_sources`;
- reads RSS feeds and keeps entries from the last 14 days;
- classifies entries with local keyword rules, without an AI API;
- upserts articles and publishes today's web report;
- does not send email.
After the manual test succeeds and the web page shows today's report, activate
the workflow. Its schedule is 07:30 in `Asia/Shanghai`.
New RSS sources can be added later with an `INSERT` into `news_sources`; the
workflow reads that table on every run, so the workflow itself does not need to
be edited. Set `enabled = FALSE` to pause a source without deleting it.