Cài n8n self-host bằng Docker cho người mới

Featured Image 1200×628@2x

Bạn đã đọc về n8n, muốn tự động hóa báo cáo nhưng chưa muốn trả phí cloud, hoặc công ty yêu cầu dữ liệu phải nằm trên máy chủ nội bộ. Giải pháp là cài n8n self-host bằng Docker: bản Community Edition miễn phí bản quyền, chạy trên máy của bạn. Bài viết này đi từng bước theo hai chặng: chạy thử trên máy cá nhân trong khoảng 10 phút, rồi đưa lên máy chủ công ty có tên miền và HTTPS để workflow chạy 24/7.

🐳 HAI LỘ TRÌNH TRONG BÀI

Vì sao nên cài n8n bằng Docker?

Docker đóng gói n8n cùng mọi thứ nó cần vào một “container”, nên bạn không phải tự cài Node.js hay xử lý xung đột phiên bản. Cùng một câu lệnh chạy giống nhau trên Windows, macOS và Linux. Khi cần cập nhật, bạn chỉ tải bản mới và khởi động lại, dữ liệu vẫn nằm nguyên trong một “volume” riêng.

Chọn nơi cài: máy cá nhân hay máy chủ?

Tiêu chí 💻 Máy cá nhân 🖥 Máy chủ công ty (VPS)
Phần mềm cần có Docker Desktop Docker Engine và Docker Compose
Địa chỉ truy cập http://localhost:5678 https://n8n.tencongty.vn
Thời gian chạy Chỉ khi máy đang bật 24/7
Nhận webhook từ bên ngoài (Telegram, form) ✕ Không ✓ Có
Phù hợp để Học, thử workflow Chạy workflow thật cho công việc

Lời khuyên: hãy bắt đầu trên máy cá nhân để làm quen, khi workflow đã ổn mới chuyển lên máy chủ.

Cách 1: Cài n8n trên máy cá nhân

💻 LỘ TRÌNH 1 · MÁY CÁ NHÂN 1234

BƯỚC 1/4💻 MÁY CÁ NHÂN

Bước 1: Cài Docker Desktop

Tải Docker Desktop từ trang chính thức của Docker cho Windows, macOS hoặc Linux rồi cài như phần mềm thông thường. Trên Windows, trình cài đặt sẽ yêu cầu bật WSL 2, hãy đồng ý và khởi động lại máy nếu được hỏi. Mở Docker Desktop và đợi biểu tượng cá voi báo đang chạy. Kiểm tra bằng cách mở Terminal (hoặc PowerShell) và gõ lệnh sau, nếu thấy số phiên bản là đã sẵn sàng:

🐳 TerminalTerminal · PowerShell
1docker --version

BƯỚC 2/4💻 MÁY CÁ NHÂN

Bước 2: Tạo volume và chạy n8n

Volume là nơi lưu workflow, tài khoản và khóa mã hóa của n8n. Nhờ volume, bạn có thể xóa hay cập nhật container mà không mất dữ liệu. Chạy lần lượt hai lệnh:

🐳 TerminalTerminal · PowerShell
1docker volume create n8n_data
2
3docker run -d --name n8n --restart unless-stopped \
4  -p 5678:5678 \
5  -e GENERIC_TIMEZONE="Asia/Ho_Chi_Minh" \
6  -e TZ="Asia/Ho_Chi_Minh" \
7  -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
8  -v n8n_data:/home/node/.n8n \
9  n8nio/n8n

Ý nghĩa từng phần:

🔍 GIẢI PHẪU LỆNH DOCKER RUN

-d --name n8nChạy nền và đặt tên container là n8n
--restart unless-stoppedTự khởi động lại khi Docker khởi động, trừ khi bạn chủ động dừng
-p 5678:5678Mở cổng 5678 để truy cập từ trình duyệt
GENERIC_TIMEZONE, TZMúi giờ Việt Nam cho lịch chạy workflow và cho container
-v n8n_data:/home/node/.n8nGắn volume vào thư mục dữ liệu của n8n

Nếu dùng PowerShell trên Windows, dấu \ cuối dòng không hoạt động. Hãy viết cả lệnh docker run trên một dòng, hoặc thay dấu \ bằng dấu ` (backtick).

BƯỚC 3/4💻 MÁY CÁ NHÂN

Bước 3: Mở n8n và tạo tài khoản chủ

Mở trình duyệt và vào http://localhost:5678. Lần đầu, n8n yêu cầu tạo tài khoản chủ (owner) gồm email, tên và mật khẩu. Đây là tài khoản quản trị cao nhất, hãy dùng mật khẩu mạnh và ghi lại cẩn thận. Sau đó bạn có thể tạo workflow đầu tiên ngay.

BƯỚC 4/4💻 MÁY CÁ NHÂN

Bước 4: Kiểm tra dữ liệu không bị mất

Tạo thử một workflow, lưu lại, rồi chạy hai lệnh dưới đây để khởi động lại n8n. Mở lại localhost:5678, workflow vẫn còn nghĩa là volume đã hoạt động đúng.

🐳 TerminalTerminal · PowerShell
1docker stop n8n
2docker start n8n

Giới hạn của cách này: workflow chỉ chạy khi máy đang bật, và các dịch vụ bên ngoài như Telegram không gọi được webhook vào địa chỉ localhost. Để chạy thật, bạn cần cách 2.

Cách 2: Cài n8n trên máy chủ công ty

🖥 LỘ TRÌNH 2 · MÁY CHỦ CÔNG TY 12345

Ở cách này, n8n chạy trên một máy chủ Linux (VPS hoặc máy chủ nội bộ) cùng Traefik, một công cụ tự động xin và gia hạn chứng chỉ HTTPS miễn phí. Kiến trúc gồm: trình duyệt hoặc webhook gọi tới tên miền qua HTTPS, Traefik nhận yêu cầu ở cổng 443, chuyển vào container n8n, dữ liệu lưu trong volume.

🏗 KIẾN TRÚC TRÊN MÁY CHỦ

🌐
Trình duyệt, webhook
https://n8n.tencongty.vn
➜
🔒
Traefik
cổng 80 và 443, cấp HTTPS
➜
⬢
Container n8n
cổng 5678 nội bộ
➜
💾
Volume n8n_data
workflow, tài khoản, khóa mã hóa

BƯỚC 1/5🖥 MÁY CHỦ CÔNG TY

Bước 1: Chuẩn bị máy chủ và cài Docker

Bạn cần một máy chủ Ubuntu có địa chỉ IP công khai và quyền sudo. Với vài chục workflow nhẹ, một VPS 2 GB RAM thường đã đủ để bắt đầu. Đăng nhập qua SSH, cài Docker Engine kèm Docker Compose bằng script chính thức của Docker, rồi kiểm tra:

🐳 TerminalSSH · máy chủ Linux
1curl -fsSL https://get.docker.com | sudo sh
2sudo docker compose version

BƯỚC 2/5🖥 MÁY CHỦ CÔNG TY

Bước 2: Trỏ tên miền về máy chủ

Trong trang quản lý tên miền, tạo một bản ghi A: tên là n8n, giá trị là địa chỉ IP của máy chủ. Sau vài phút đến vài giờ, n8n.tencongty.vn sẽ trỏ về máy chủ. Nếu máy chủ bật tường lửa, hãy mở cổng 80 và 443, không mở cổng 5678 ra ngoài.

BƯỚC 3/5🖥 MÁY CHỦ CÔNG TY

Bước 3: Tạo thư mục và file .env

🐳 TerminalSSH · máy chủ Linux
1mkdir n8n-compose && cd n8n-compose
2mkdir local-files
3nano .env

Dán nội dung sau vào file .env, thay tên miền và email bằng thông tin của bạn:

⚙ .envbiến môi trường
1DOMAIN_NAME=tencongty.vn
2SUBDOMAIN=n8n
3GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
4SSL_EMAIL=it@tencongty.vn

BƯỚC 4/5🖥 MÁY CHỦ CÔNG TY

Bước 4: Tạo file compose.yaml

Tạo file compose.yaml trong cùng thư mục với nội dung dưới đây, rút gọn từ mẫu trong tài liệu chính thức của n8n:

🐳 compose.yamlDocker Compose
1services:
2  traefik:
3    image: "traefik"
4    restart: always
5    command:
6      - "--providers.docker=true"
7      - "--providers.docker.exposedbydefault=false"
8      - "--entrypoints.web.address=:80"
9      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
10      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
11      - "--entrypoints.websecure.address=:443"
12      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
13      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
14      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
15    ports:
16      - "80:80"
17      - "443:443"
18    volumes:
19      - traefik_data:/letsencrypt
20      - /var/run/docker.sock:/var/run/docker.sock:ro
21
22  n8n:
23    image: n8nio/n8n
24    restart: always
25    ports:
26      - "127.0.0.1:5678:5678"
27    labels:
28      - traefik.enable=true
29      - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
30      - traefik.http.routers.n8n.tls=true
31      - traefik.http.routers.n8n.entrypoints=web,websecure
32      - traefik.http.routers.n8n.tls.certresolver=mytlschallenge
33    environment:
34      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
35      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
36      - N8N_PORT=5678
37      - N8N_PROTOCOL=https
38      - NODE_ENV=production
39      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
40      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
41      - TZ=${GENERIC_TIMEZONE}
42    volumes:
43      - n8n_data:/home/node/.n8n
44      - ./local-files:/files
45
46volumes:
47  n8n_data:
48  traefik_data:

Hai dòng quan trọng nhất: cổng 5678 chỉ mở cho 127.0.0.1 nên mọi truy cập từ bên ngoài đều phải đi qua HTTPS của Traefik, và WEBHOOK_URL giúp n8n tạo đúng địa chỉ webhook công khai cho Telegram hay form. Tài liệu n8n ghi chú: từ phiên bản 2.30.0 có thêm biến N8N_WEBHOOK_URL, hãy xem trang cài đặt chính thức để dùng tên biến đúng với phiên bản bạn cài.

BƯỚC 5/5🖥 MÁY CHỦ CÔNG TY

Bước 5: Khởi động và đăng nhập

🐳 TerminalSSH · máy chủ Linux
1sudo docker compose up -d
2sudo docker compose ps

Đợi khoảng một phút để Traefik xin chứng chỉ HTTPS, rồi mở https://n8n.tencongty.vn và tạo tài khoản chủ như ở cách 1. Nếu trang chưa mở được, xem nhật ký bằng lệnh sudo docker compose logs -f để biết lỗi nằm ở tên miền, cổng hay chứng chỉ.

Vận hành n8n sau khi cài

💾 VẬN HÀNH

Sao lưu workflow và credential

Lệnh dưới đây xuất toàn bộ workflow và credential, mỗi thứ một file, vào thư mục /files/backups. Vì thư mục /files được gắn ra ./local-files, bạn sẽ thấy các file ngay trên máy chủ để chép đi nơi khác:

🐳 TerminalSSH · máy chủ Linux
1sudo docker compose exec -u node n8n n8n export:workflow --backup --output=/files/backups/
2sudo docker compose exec -u node n8n n8n export:credentials --backup --output=/files/backups/

Credential được mã hóa bằng một khóa mà n8n tự tạo lần đầu chạy và lưu trong volume n8n_data. Nếu mất khóa này, bản sao lưu credential sẽ không dùng được trên máy mới. Vì vậy, ngoài file xuất, hãy sao lưu cả volume n8n_data, hoặc tự đặt khóa qua biến N8N_ENCRYPTION_KEY và cất giữ khóa ở nơi an toàn.

⬆ VẬN HÀNH

Cập nhật n8n lên phiên bản mới

Trước khi cập nhật, hãy sao lưu và đọc ghi chú phát hành, nhất là khi lên phiên bản lớn. Sau đó chạy:

🐳 TerminalSSH · máy chủ Linux
1cd n8n-compose
2sudo docker compose pull
3sudo docker compose down
4sudo docker compose up -d

Với cách 1 trên máy cá nhân, các bước tương ứng là docker pull n8nio/n8n, docker stop n8n, docker rm n8n rồi chạy lại đúng lệnh docker run ở bước 2. Dữ liệu vẫn còn vì nằm trong volume. Nếu muốn kiểm soát chặt, hãy ghi rõ số phiên bản trong tên image thay vì luôn lấy bản mới nhất.

🔒 VẬN HÀNH

Giữ n8n an toàn

🔒 Chỉ mở HTTPS ra ngoài

cổng 5678 không được mở trực tiếp ra internet.

🔒 Mật khẩu mạnh cho tài khoản chủ

người có tài khoản này xem được mọi credential.

🔒 Cập nhật đều đặn

bản mới thường kèm bản vá bảo mật.

🔒 Hỏi bộ phận IT trước khi cài lên máy chủ công ty

để đúng quy định về mạng, tường lửa và sao lưu.

Checklist sau khi cài đặt

☑ SAU KHI CÀI ĐẶT

✓Mở được n8n và đã tạo tài khoản chủ với mật khẩu mạnh
✓Múi giờ là Asia/Ho_Chi_Minh, lịch chạy workflow đúng giờ
✓Khởi động lại container mà workflow vẫn còn
✓Trên máy chủ: truy cập bằng HTTPS, cổng 5678 không mở ra ngoài
✓Đã thử xuất sao lưu workflow và credential
✓Đã gán Error Workflow để được báo khi workflow chạy hỏng

6/6 mục đạt → n8n sẵn sàng chạy workflow thật

📅 Muốn học xây workflow tự động hóa bài bản trên n8n? Xem lịch khai giảng tháng 10/2026 của MCNA để chọn lớp Data Analyst và AI Automation phù hợp.

Câu hỏi thường gặp

?

n8n self-host có mất phí không?

Bản Community Edition không tốn phí bản quyền. Trên máy cá nhân, bạn không tốn thêm gì. Trên máy chủ, chi phí chỉ gồm tiền thuê VPS và tên miền, hoặc tài nguyên máy chủ nội bộ của công ty.

?

Không biết Linux có cài được không?

Cách 1 trên máy cá nhân chỉ cần cài Docker Desktop và chạy hai lệnh, không cần biết Linux. Cách 2 cần vài thao tác cơ bản qua SSH như tạo thư mục và sửa file, làm theo từng bước trong bài là đủ. Nếu công ty có bộ phận IT, hãy nhờ họ hỗ trợ phần máy chủ và tên miền.

?

SQLite mặc định có đủ dùng không, hay phải dùng PostgreSQL?

Mặc định n8n lưu dữ liệu bằng SQLite trong volume, đủ cho cá nhân và nhóm nhỏ. Khi số workflow và lượt chạy tăng nhiều, hoặc công ty muốn quản lý cơ sở dữ liệu tập trung, hãy chuyển sang PostgreSQL bằng các biến môi trường DB_TYPE và DB_POSTGRESDB theo tài liệu của n8n.

?

Vì sao webhook Telegram không hoạt động trên máy cá nhân?

Telegram cần gọi tới một địa chỉ HTTPS công khai, còn localhost chỉ máy của bạn truy cập được. Hãy dùng cách 2 với tên miền và HTTPS, và đặt WEBHOOK_URL đúng tên miền đó.

?

Chuyển workflow từ máy cá nhân lên máy chủ thế nào?

Cách đơn giản nhất là mở từng workflow, chọn Download để lưu file JSON, rồi Import from File trên n8n máy chủ. Credential không đi kèm file workflow, bạn cần tạo lại trên máy chủ. Với nhiều workflow, hãy dùng lệnh export và import ở phần sao lưu.

Kết luận

Cài n8n self-host bằng Docker không khó như nhiều người nghĩ: hai lệnh là có n8n chạy trên máy cá nhân để học và thử, một file compose.yaml là có n8n chạy 24/7 trên máy chủ công ty với HTTPS. Đừng quên ba việc sau khi cài: sao lưu cả khóa mã hóa, cập nhật đều đặn và gán Error Workflow để được báo khi có lỗi.

Nếu bạn muốn học bài bản cách xử lý, phân tích dữ liệu và tự động hóa với AI, các khóa học tại MCNA Technology School sẽ đồng hành cùng bạn. Đọc thêm: n8n, Power Automate hay Make, Xử lý lỗi trong n8n và Tự động hóa báo cáo tuần với n8n và AI.

👉 Xem lịch khai giảng tháng 10/2026: Power BI, SQL, Python, AI – MCNA

Thông tin tác giả

Võ Ngọc Vương – Data Analyst tại MCNA Technology School

MCNA Technology School – Đơn vị tiên phong đào tạo AI, Big Data, Business Intelligence tại Việt Nam. Chuyên sâu về Power BI, Python, SQL và Data Analytics — đối tác đào tạo của 300+ doanh nghiệp.

Đối tác đào tạo: Viettel Global, Masan Group, Techcombank, VPBank, Daikin.

→ Chỉ mục