# ebis AI 配布: n8n セルフホスト Docker-compose 雛形
# 構成: n8n + PostgreSQL + Caddy (SSL 自動発行、reverse proxy)
# 利用条件: 同梱 LICENSE 参照 (商用可 / 改変可 / 無保証)
#
# 使い方:
#   1. .env を作成して POSTGRES_PASSWORD と N8N_HOST を設定
#      例:
#        POSTGRES_PASSWORD=任意の強いパスワード
#        N8N_HOST=n8n.example.com
#   2. N8N_HOST のドメインが本サーバの 80/443 に向いていることを確認 (DNS)
#   3. docker compose up -d
#   4. https://${N8N_HOST}/ にアクセス、初回管理者アカウント作成
#
# 動作確認: n8n 1.x / Docker Engine 24+ / Compose v2.x

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD を .env で設定してください}
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD を .env で設定してください}
      N8N_HOST: ${N8N_HOST:?N8N_HOST を .env で設定してください (例: n8n.example.com)}
      N8N_PROTOCOL: https
      N8N_PORT: 5678
      WEBHOOK_URL: https://${N8N_HOST}/
      GENERIC_TIMEZONE: Asia/Tokyo
      TZ: Asia/Tokyo
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n-net

  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    depends_on:
      - n8n
    ports:
      - "80:80"
      - "443:443"
    environment:
      N8N_HOST: ${N8N_HOST:?N8N_HOST を .env で設定してください}
    command: |
      sh -c "echo \"${N8N_HOST} {
        reverse_proxy n8n:5678
      }\" > /etc/caddy/Caddyfile && caddy run --config /etc/caddy/Caddyfile"
    volumes:
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - n8n-net

volumes:
  postgres_data:
  n8n_data:
  caddy_data:
  caddy_config:

networks:
  n8n-net:
