Docker/Compose/N8N

From Chorke Wiki
Revision as of 10:36, 15 January 2026 by Shahed (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

N8N » Volume

N8N » Volume

ssh -qt -i ~/.ssh/cid.chorke.org_ed25519 chorke@linode-aa.public.ip bash
cat <<'EXE'| sudo bash
mkdir -p           /{etc,var}/n8n.shahed.biz/
mkdir -p           /etc/n8n.shahed.biz/caddy/
mkdir -p           /var/n8n.shahed.biz/{n8n,postgres,caddy/{conf,data,files}}
chown -R 1000:1000 /var/n8n.shahed.biz/{n8n,caddy,postgres}/
EXE

N8N » Secret

N8N » Secret

makepasswd --chars 16 --count 5 --crypt-md5
:'
gLn5tbVIdzY0K3AJ   $1$vUMUSy9W$XdzoyzZ/8pYghRbGWSeIg0
yx9SrGc7vsyvbnQU   $1$3A7k24lk$.8tqpJaYeJzyy8PZqzp3h0
ypBAMGHp1j8QJKU7   $1$P.ugq.Lv$roVoXJR1dFZ0e.GxjfjiF1
LCMnxYWVWgJ0AVA1   $1$dPoj6SuY$AEJMcY96R11tb4WP1njdk.
26IThiQhPxQSSed1   $1$3FHdqT0J$sm0ZxPCKBwKj2jaZsU1t.1
'

N8N » Caddyfile

N8N » Caddyfile

cat <<'INI' | sudo tee /etc/n8n.shahed.biz/caddy/Caddyfile >/dev/null
n8n.shahed.biz {
    reverse_proxy n8n:5678 {
      flush_interval -1
    }
}
INI
✅ When to use Caddy?
  • When you want fast setup with HTTPS out-of-the-box
  • When you're managing microservices or DevOps workflows
  • When you want simpler config files (especially for small teams)
🧠 Relationship with n8n
  • It does not require Caddy
  • It does not depend on any web server
  • n8n is a standalone workflow automation tool

N8N » Environment

N8N » Environment

cat <<'ENV' | sudo tee /etc/n8n.shahed.biz/.env >/dev/null
N8N_DB_PASSWORD=gLn5tbVIdzY0K3AJ
N8N_DB_USER=shahed_n8n
N8N_DB_NAME=shahed_n8n
N8N_FQDN=n8n.shahed.biz
N8N_RUNNERS_ENABLED=true
N8N_TIMEZONE=Asia/Kuala_Lumpur
N8N_CONF_DIR=/etc/n8n.shahed.biz/
N8N_DATA_DIR=/var/n8n.shahed.biz/
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
ENV

sudo chmod 600 /etc/n8n.shahed.biz/.env

N8N » Docker » Compose

N8N » Docker » Compose

cat <<'YML' | sudo tee /etc/n8n.shahed.biz/docker-compose.yml >/dev/null
---
services:
  caddy:
    image: caddy:latest
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    expose:
      - 80
      - 443
    volumes:
      - caddy_file:/etc/caddy/Caddyfile
      - caddy_files_dir:/files
      - caddy_data_dir:/data
      - caddy_conf_dir:/conf
  postgres:
    image: postgres:15
    container_name: n8n_postgres
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=${N8N_DB_PASSWORD}
      - POSTGRES_USER=${N8N_DB_USER}
      - POSTGRES_DB=${N8N_DB_NAME}
    volumes:
      - pgsql_data_dir:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - 127.0.0.1:5678:5678
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_USER=${N8N_DB_USER}
      - DB_POSTGRESDB_DATABASE=${N8N_DB_NAME}
      - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD}
      - N8N_PORT=5678
      - N8N_HOST=${N8N_FQDN}
      - N8N_RUNNERS_ENABLED=${N8N_RUNNERS_ENABLED}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=${N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS}
      - GENERIC_TIMEZONE=${N8N_TIMEZONE}
      - WEBHOOK_URL=https://${N8N_FQDN}/
      - NODE_ENV=production
    volumes:
      - n8n_data_dir:/home/node/.n8n
      - caddy_files_dir:/files

volumes:
  n8n_data_dir:
    driver: local
    driver_opts:
      device: ${N8N_DATA_DIR}/n8n/
      type: none
      o: bind
  pgsql_data_dir:
    driver: local
    driver_opts:
      device: ${N8N_DATA_DIR}/postgres/
      type: none
      o: bind
  caddy_conf_dir:
    driver: local
    driver_opts:
      device: ${N8N_DATA_DIR}/caddy/conf/
      type: none
      o: bind
  caddy_data_dir:
    driver: local
    driver_opts:
      device: ${N8N_DATA_DIR}/caddy/data/
      type: none
      o: bind
  caddy_files_dir:
    driver: local
    driver_opts:
      device: ${N8N_DATA_DIR}/caddy/files/
      type: none
      o: bind
  caddy_file:
    driver: local
    driver_opts:
      device: ${N8N_CONF_DIR}/caddy/Caddyfile
      type: none
      o: bind

networks:
  n8n:
    external: false
YML

N8N » Docker » Manage

N8N » Docker » Compose » Manage

ssh -qt -i ~/.ssh/cid.chorke.org_ed25519 chorke@linode-aa.public.ip bash
sudo su

systemctl disable --now nginx
cd /etc/n8n.shahed.biz/
systemctl status nginx

docker compose down
docker compose up -d
docker compose logs -ft

xdg-open https://www.cdn77.com/tls-test/result?domain=n8n.shahed.biz
xdg-open https://n8n.shahed.biz

N8N » Console » Login

N8N » Console » Login

---
Page: https://n8n.shahed.biz
user: tool.tech@chorke.org
pass: ypBAMGHp1j8QJKU7

References

References