카테고리 없음

n8n 우분투에 설치하기

Wood Pecker 2025. 9. 12. 21:34

1. 개요

n8n은 오픈소스 워크플로우 자동화 도구입니다.  다양한 앱과 서비스(API, DB, 파일 등)를 연결해서 작업을 자동화할 수 있는 플랫폼입니다.  Zapier, Make(Integromat) 같은 SaaS 자동화 서비스의 셀프호스팅 대안으로 많이 쓰입니다. 우분투에 설치하는 과정을 정리해 보았습니다.
2. 리눅스에 PostgreSQL 설치
    n8n은  PostgreSQL 사용을 권장한다. PostgreSQL은   객체-관계형 데이터베이스 관리 시스템이다.
   >  sudo apt update
   > sudo apt install  postgresql postgresql-contrib


   설정 파일 (version 14인 경우)
   >  sudo vi  /etc/postgresql/14/main/postgresql.conf
     아래 부분을 찾아서  listen_addresses = 'localhost'를 아래와 같이 수정하고 컴맨트를 해제하여 활성화 한다. 

      listen_addresses = '*'
>  sudo vi  /etc/postgresql/15/main/pg_hba.conf

     맨 아래 줄에 다음을 추가한다.
     # TYPE  DATABASE        USER            ADDRESS                 METHOD
         host       n8n                   n8n                0.0.0.0/0                     md5
> sudo systemctl enable postgresql
> sudo systemctl start postgresql

 

현재 상태를 알려면     >  sudo systemctl status postgresql

다시 시작하려면         >  sudo systemctl restart postgresql

n8n 전용 계정을 만들고 DB를  생성한다.
> sudo -u postgres psql
     postgres=#   CREATE USER n8n WITH PASSWORD 'n8npass';
    postgres=#    CREATE DATABASE n8n OWNER n8n;

    postgres=#    GRANT ALL PRIVILEGES ON DATABASE n8n TO n8n;
    postgres=#     \q

>  sudo systemctl restart postgresql
>  sudo systemctl status postgresql
    ● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2025-09-12 20:33:25 KST; 44min ago
     Process: 2117459 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
     Main PID: 2117459 (code=exited, status=0/SUCCESS)
     CPU: 550us

3. n8n  Docker 컨테이너 설치하기 
    시스템에 Docker가 구축 되어 있다고 가정한다. 
   >  sudo mkdir -p /home/node 
   >  cd  /home/node
   >  mkdir -p ./n8n_data

 

    소유권을 컨테이너의 node(UID 1000, GID 1000)로 변경.  또한 권한 설정을 한다. 
   >  sudo chown -R 1000:1000 ./n8n_data
   > sudo chmod 600 ./n8n_data/config 2>/dev/null || true
 

     docker-compose.yml 파일을  생성한다.

   > sudo vi  /home/node/docker-compose.yml    

     애래와 같이 입력한다. 

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      # --- DB: PostgreSQL ---
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: host.docker.internal # 같은 서버의 Postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8npass

      # --- 운영 권장 ---
      N8N_RUNNERS_ENABLED: "true"
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"

      # 필요 시 보안 강화
      # N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
      # 32자 이상 랜덤 문자열 (백업 필수)
      # N8N_ENCRYPTION_KEY: "REPLACE_WITH_LONG_RANDOM_SECRET"

      # --- 프록시 뒤 (서브패스 예시) ---
      N8N_PATH: "/n8n"
      N8N_EDITOR_BASE_URL: "https://<Host DNS>/n8n/"
      WEBHOOK_URL: "https://<Host DNS>/n8n/"
      N8N_HOST: "<Host DNS>"
      N8N_PROTOCOL: "https"
      N8N_PROXY_HOPS: "1"
    volumes:
      - ./n8n_data:/home/node/.n8n
    extra_hosts:
      - "host.docker.internal:host-gateway"


다음 명령어로 docker 컨테이너를 시작한다.
> docker compose down
> docker compose up -d
> docker compose logs -f n8n
n8n-1  | Initializing n8n process
n8n-1  | n8n ready on ::, port 5678
n8n-1  | n8n Task Broker ready on 127.0.0.1, port 5679
n8n-1  | [license SDK] Skipping renewal on init: license cert is not initialized
n8n-1  | Version: 1.110.1
n8n-1  |
n8n-1  | Editor is now accessible via:
n8n-1  | Registered runner "JS Task Runner" (nZaR8EbPgs5iAkEva_Np_)

 

4. nginx를 사용한다면 다음과 같이 설정한다. 
   >  cd /etc/nginx/sites-available
   > sudo vi default

location /n8n/ {
    proxy_pass http://127.0.0.1:5678/;
    proxy_http_version 1.1;

    # WebSocket
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    # Forwarded headers
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    client_max_body_size 100m;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
}


> sudo nginx -t  && sudo systemctl reload nginx

웹브라우저에서 https://<Host DNS>/n8n 접속을 한다.  









   


 

 

 

 









 

 

 

  

 

반응형