Tìm kiếm

Cài đặt n8n, NocoDB trên Docker, trỏ tên miền với Nginx proxy manager

0 comments

Cài đặt n8n, NocoDB và kết nối tên miền với nginxproxymanager

Nếu bạn đang có một vps cấu hình khá mạnh, nhưng chỉ để cài đặt n8n thì có vẻ hơi phí. Bạn có thể tận dụng vps đó cài thêm một số tool phục vụ các công việc tự động hóa của mình.
Dưới đây là hệ thống mình đang triển khai để phục vụ công việc cá nhân, chạy khá ổn.
Nhược điểm là hơi mệt công setup ban đầu :)))

Hiện tại mình đang triển khai 1 vps ubuntu gồm những tool như sau:

  • portainer: quản lý tổng thể các tool chạy bằng docker
  • nginxproxymanager: trỏ tên miền đến các tool thay vì sử dụng ip, đăng ký ssl miễn phí
  • n8n (thật ra mình chạy n8n trên nodejs, không phải docker)
  • postgres: cơ sở dữ liệu cho n8n, nocodb
  • nocodb: thay thế airtable, google sheet
  • couchdb: mình dùng livesync cho obsidian
  • pgadmin4: kết nối với postgres để quản lý cơ sở dữ liệu bằng UI

Hướng cài đặt và triển khai

  • VPS đã cài sẵn docker
  • Cài portainer
  • Sử dụng portainer để tạo network và triển khai các ứng dụng phù hợp
    • postgres
    • n8n
    • nocodb
  • Cài nginxproxymanager để trỏ tên miền đến các container (nocodb, n8n)
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Hướng dẫn chi tiết

Mình sẽ cài trên ubuntu 24, hệ điều hành khác cũng tương tự nhé, chỉ khác vài câu lệnh.

0. Cài đặt docker và các dependencies

Hướng dẫn: Xem hướng dẫn tại trang chủ Docker

Có thể bỏ qua nếu bạn đã cài docker

1. Cài portainer

SSH đến vps và thực hiện các thao tác:

  • Tạo volume cho portainer
    • docker volume create portainer_data
  • Tải và cài đặt portainer
    • docker run -d -p 8000:8000 -p 9443:9443 –name portainer –restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
  • Sau khi cài đặt xong, truy cập <địa chỉ ip vps>:9443 để tiến hành thiết lập
    • đổi username
    • đặt password
Cài đặt n8n, NocoDB và kết nối tên miền đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền đơn giản

2. Thiết lập network

Để các container có thể giao tiếp với nhau, nên thiết lập 1 network chung để dễ dàng cấu hình

  1. Chọn Network
  2. Chọn Add network
  3. Đặt tên network – ví dụ “my-tool-network”
  4. driver: mặc định chọn bridge
  5. Chọn Create the network
Cài đặt n8n, NocoDB và kết nối tên miền đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền đơn giản

3. Cài postgress, pgadmin và tạo các database cần thiết

3.1. Tạo containter postgres

Portainer đã có sẵn template để cài postgres nên thao tác khá dễ

Ở mục template -> Chọn Application
Gõ tìm: postgres
Tiến hành thiết lập:

  1. Đặt tên cho container: lưu ý ghi nhớ tên này để các ứng dụng khác kết nối đến, ví dụ “my_postgres”
  2. Network: chọn network vừa tạo ở bước trước (my-tool-network)
  3. Superuser: tên user admin cho postgres
  4. Superuser password: mật khẩu
  5. Chọn “Deploy the containter” để triển khai postgres
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

3.2. Cài pgadmin4 để quản lý postgres bằng giao diện

Bước 1. Cài đặt

Tạo container mới: Add container

  1. tên container
  2. image: nhập đúng “dpage/pgadmin4”
  3. port mapping: 5050:80
    Mục Advanced container settings:
  4. Network: chọn network tạo ở bước trước (my-tool-network)
  5. Env: thiết lập môi trường
    • PGADMIN_DEFAULT_EMAIL=<EMAIL CỦA BẠN>
    • PGADMIN_DEFAULT_PASSWORD=<MẬT KHẨU ĐĂNG NHẬP PGADMIN>
  6. Chọn Deploy the container
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Bước 2. Truy cập

Truy cập pgadmin theo địa chỉ ip của vps, port 5050
http://<ip_vps>:5050
User và pass ở mục (5) ở bước trước

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Bước 3. Kết nối với postgres đã tạo

Sau khi login thành công, chọn Add New Server
Một cửa sổ hiện ra, nhập những thông tin sau:

  1. Ở tab General
  2. Name: đặt tên để dễ nhớ
  3. Chọn tab Connection
  4. Host name/address: tên của container postgres tạo lúc đầu, ở đây của mình là “my_postgres”
  5. port: mặc định là 5432
  6. Maintenance database: mặc định là postgres
  7. Username: nhập superuser lúc tạo postgres
  8. Password: nhập superuser password lúc tạo postgres
  9. Tick chọn save password (tùy chọn)
  10. Save
    Nếu kết nối thành công sẽ hiện ra danh sách database mặc định. Còn nếu báo lỗi thì có thể do:
  • Sai tên hostname (4)
  • Sai user, password
  • pgdmin và posgres không thiết lập chung network
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

3.3. Tạo user mới cho các database

Tiếp theo, nên tạo 1 user mới cho các database của nocodb, n8n,…

  1. Chuột phải vào Login/Group Roles -> Create -> Login/Group Role…
  2. Tab General -> Name: Nhập tên user
  3. Tab Definition -> Password: nhập mật khẩu cho user
  4. Tab Privileges -> Tick chọn ở Can login và Inherit rights from the parent roles
  5. Chọn Save
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

3.4. Tạo database cho các tool sẽ dùng (nocodb và n8n)

Database cho nocodb

Click chuột phải vào Databases -> Create -> Database
Nhập thông tin database vào cửa sổ hiện ra

  • Tại tab General:
    – Nhập tên database: ví dụ nocodb
    – Nhập owner: Chọn user vừa tạo ở bước trên
    Chọn Save để khởi tạo database
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Database cho n8n

Thực hiện thao tác tương tự trên

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

4. Tạo container NocoDB

Tạo một container mới tại giao diện của portainer

  1. Tên của container
  2. Image: nocodb/nocodb
  3. port mapping: host 8080, container 8080
    Thiết lập nâng cao
  4. Network: chọn network đã thiết lập ở bước trước
  5. Env: thiết lập những thông tin:
    Để thiết lập env cho nocodb, bạn cần liệt kê ra những thông tin sau:
  • Tên hostname của postgres: như bước đầu mình tạo là my_postgres
  • port của postgres: 5432 (nếu tạo mặc định theo template của portainer thì mặc định)
  • tên database sẽ kết nối: nocodb
  • tên user có quyền truy cập databse: n8n_app

Sau khi liệt kê được những thành phần trên, tiến hành thiết lập Env cho nocodb

  • NC_DB: pg://<tên hostname>:5432?u=<tên user>&p=<mật khẩu user>&d=<tên database nocodb>
  • NC_PUBLIC_URL: nên thiết lập 1 tên miền cho nocodb để dễ dàng truy cập, có thể đặt subdomain (noco.tenmien.com)
  1. Chọn Deploy the container
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Truy cập nocodb và tạo tài khoản

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Sau khi tạo tài khoản thành công, bạn có thể kiểm tra nocodb có thật sự được kết nối đến database nocodb trong postgres chưa bằng cách:

  • Truy cập pgadmin 4 -> Chọn database nocodb
  • Ở mục Schemas, bạn sẽ thấy 1 schema có tên giống với id base Getting Started

Vậy là bạn có thể sử dụng NocoDB rồi.

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

5. Tạo containter n8n

Thực hiện tương tự với nocodb

  1. Tên container: n8n
  2. image: nhập đúng: n8nio/n8n
  3. Port mapping: 5678: 5678
  4. Network: chọn đúng network tạo lúc đầu
  5. Env
    Cần nhập đúng những thông tin sau:
    Có thể chuyển sang Advance mode, paste giá trị này vào, thay đổi phù hợp với cấu hình của bạn.

DB_TYPE=postgresdb
DB_POSTGRESDB_DATABASE=n8n_db # tên database bạn tạo
DB_POSTGRESDB_HOST=my_postgres # tên của container postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_USER=n8n_app # tên user có quyền kết nối database
DB_POSTGRESDB_PASSWORD=123123 # mật khẩu user
DB_POSTGRESDB_SCHEMA=public
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
N8N_SECURE_COOKIE=FALSE
WEBHOOK_URL=https://vidu.tenmien.com
WEBHOOK_TUNNEL_URL=https://vidu.tenmien.com

  1. Chọn Deploy the container
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Truy cập n8n

vào địa chỉ ip:5678 để bắt đầu sử dụng n8n

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

6. Cài nginxproxymanager

Bước tiếp theo là cài nginxproxymanager

6.1. Thiết lập ban đầu

Cài nginxproxymanager để dễ dàng thiết lập tên miền cho các container
Tạo stack mới trong Portainer
Nhập thông tin sau và Deploy

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Truy cập ip:81 để thiết lập

  1. Đăng nhập với thông tin sau:
  2. Đổi thông tin user
  3. Đổi password mặc định và Save
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

6.2. Trỏ tên miền

6.2.1. Trỏ DNS ở trang quản trị tên miền

Trỏ bản ghi A cho tên miền bạn muốn chạy n8n, hoặc nocodb về ip của vps, ví dụ bên dưới đang trỏ bằng trình quản lý dns của Cloudflare.

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

6.2.2. Thiết lập proxy host trên nginxproxymanager

Tại giao diện nginxproxymanager

  1. Ở tab Dashboard -> Proxy Hosts
  2. Add Proxy Host -> một cửa sổ hiện lên
  3. nhập tên miền cho ứng dụng bạn muốn chạy, ở đây mình chọn n8n
  4. mặc định http
  5. hostname: tên container bạn chạy ứng dụng
  6. port của container đó
  7. Tick chọn Block common exploits và Websockets Support
  8. Chuyển sang tab SSL, chọn Request a new SSL Certificate. Tick chọn như hình
  9. Điền email và tick chọn đồng ý điều khoản của Let Encrypt
  10. Save và đợi 1 xíu
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

6.3. Lỗi thường gặp

  1. Tạo proxy host, tab SSL, mặc dù chọn Request a new SSL Certificate nhưng khi Save thì SSL không lưu
    -> Edit proxy host -> Chọn lại ssl -> Tick chọn Force SSL, HTTP/2 Support, HSTS Enabled -> Save
  2. Vào được n8n bằng tên miền nhưng bị connection lost ở giao diện thiết kế workflow
    Nguyên nhân: Do chưa bật Websockets Support
    Giải pháp: Edit proxy host -> Tick chọn Websockets Support -> Save

Truy cập tên miền xem đã trỏ thành công chưa :))

Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản
Cài đặt n8n, NocoDB và kết nối tên miền siêu đơn giản

Thực hiện lại bước 6 để trỏ tên miền cho nocodb nhé.

Kết

Vậy cơ bản đã hoàn thành và bạn có thể sử dụng n8n, nocodb rồi, nhìn chung hơi phức tạp tí, nhưng là nền tảng để bạn có thể triển khai thêm các tool khác trong tương lai.
Chúc bạn thực hiện thành công nhé.

Tags:

Để lại bình luận