Cập Nhật n8n Lên Phiên Bản Mới Nhất Trên Docker

1. Cấu Trúc Thư Mục Dữ Liệu

Xác định tên container chính xác

Thư mục dữ liệu chính của n8n được mount ra ngoài container để dễ sao lưu và phục hồi:

docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"

Tìm đến đoạn:

"Source": "/opt/xxx",  <-- đây là đường dẫn trên host
"Destination": "/home/node/.n8n",

Tìm dòng có tên dn8n — hoặc container nào bạn nghi ngờ là đang chạy n8n.

/opt/dn8n2-data

Trong đó bao gồm các file quan trọng:

  • database.sqlite: cơ sở dữ liệu chính
  • config, nodes/, ssh/, binaryData/: các dữ liệu cấu hình khác

2. Sao Lưu Dữ Liệu

Cách thực hiện

# Tạo thư mục sao lưu theo timestamp
TIMESTAMP=$(date +"%Y%m%d-%H%M")
sudo cp -r /opt/dn8n2-data /opt/n8n-backup/dn8n2-$TIMESTAMP

Lưu ý: Việc thêm timestamp giúp kiểm soát các bản sao lưu dễ dàng hơn.

Kiểm tra nhanh các file database hiện có

sudo find / -type f -name "database.sqlite" 2>/dev/null

3. Cập Nhật n8n lên Phiên Bản Mới Nhất

File docker-compose.yml mẫu

version: '3.8'

services:
  dn8n2:
    image: n8nio/n8n:latest
    container_name: dn8n2
    restart: unless-stopped
    ports:
      - 5679:5678 # 👉 Thay đổi cổng nếu cần truy cập qua port khác
    volumes:
      - /opt/dn8n2-data:/home/node/.n8n   👉 Dữ liệu chính nằm tại đây
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin  # 👉 Thay bằng tên user của bạn
      - N8N_BASIC_AUTH_PASSWORD=m123456  # 👉 Thay bằng mật khẩu của bạn
      - N8N_HOST=dn8n2.midar.vn
      - N8N_PORT=5678
      - WEBHOOK_URL=https://dn8n2.midar.vn

Thao tác cập nhật

# Dừng container cũ
sudo docker compose down

# Kéo image mới nhất
sudo docker pull n8nio/n8n:latest

# Chạy lại
sudo docker compose up -d

Lưu ý: Đảm bảo mount đúng thư mục /opt/dn8n2-data để giữ nguyên dữ liệu sau update.


4. Khôi Phục Dữ Liệu Từ Bản Sao Lưu

Bước 1: Stop container đang chạy

sudo docker compose down

Bước 2: Xóa thư mục hiện tại và thay bằng bản backup

sudo rm -rf /opt/dn8n2-data
sudo cp -r /opt/n8n-backup/dn8n2-20250701-0214 /opt/dn8n2-data
sudo chown -R 1000:1000 /opt/dn8n2-data

Lưu ý: 1000:1000 là UID:GID mặc định của user node trong container n8n.

Bước 3: Khởi động lại container

sudo docker compose up -d

Sau khi truy cập https://dn8n2.midar.vn, dữ liệu cũ sẽ được phục hồi hoàn toàn, bao gồm user, workflow, credentials…


5. Sửa lỗi OAuth Redirect URL khi update n8n

Khi cập nhật, n8n có thể tự động reset giá trị callback của OAuth Credential thành IP nội bộ như sau:

https://192.168.0.107:5679/rest/oauth2-credential/callback

Thay vì đúng domain:

https://dn8n2.midar.vn/rest/oauth2-credential/callback

Cách khắc phục

  • Không cần sửa trong Google Developers Console.
  • Vào thẳng n8n → Credentials
  • Chọn OAuth đang bị lỗi → Edit → sửa lại trường OAuth Callback URL thành domain chính xác.

6. Kiểm Tra Thông Tin Tài Khoản

Tài khoản đăng nhập của n8n (nếu dùng basic auth) được thiết lập từ biến môi trường:

- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=matkhaucuaban

Nếu mất thông tin, bạn có thể kiểm tra lại bằng cách:

sudo cat docker-compose.yml

Hoặc sửa trực tiếp để đặt lại mật khẩu mới.


7. Ghi chú quan trọng

  • Sau khi cập nhật, nên truy cập giao diện web kiểm tra xem workflows và credentials còn hay không.
  • Việc không mount đúng thư mục volume khi chạy container mới sẽ khiến n8n yêu cầu tạo tài khoản lại.
  • Nên sao lưu định kỳ trước mỗi lần cập nhật.

Cấu trúc thư mục dữ liệu

Thông thường container n8n được cấu hình với thư mục volume như sau:

/opt/dn8n2-data/database.sqlite

Các bản backup được đặt tại:

/opt/n8n-backup/dn8n2-YYYYMMDD-HHmm/database.sqlite

🔁 Khôi phục dữ liệu từ một bản backup cụ thể

🧾 Ví dụ: Có các bản backup tìm được

sudo find / -type f -name "database.sqlite" 2>/dev/null

Kết quả:

/opt/n8n-backup/dn8n2-20250729-0805/database.sqlite
...

✅ Giả sử container dn8n2 đang dùng volume tại:

/opt/dn8n2-data/database.sqlite

🛠 Các bước khôi phục:

1. Stop container:

docker stop dn8n2

2. Ghi đè dữ liệu:

cp /opt/n8n-backup/dn8n2-20250729-0805/database.sqlite /opt/dn8n2-data/database.sqlite

👉 An toàn hơn: Backup trước khi ghi đè:

cp /opt/dn8n2-data/database.sqlite /opt/dn8n2-data/database.sqlite.bak-$(date +%Y%m%d-%H%M)

3. Phân quyền lại:

chown -R 1000:1000 /opt/dn8n2-data/database.sqlite

4. Start lại container:

docker start dn8n2

5. Kiểm tra log container:

docker logs -f dn8n2

🧠 Gợi ý thêm

  • Đặt tên bản backup theo chuẩn dn8n2-YYYYMMDD-HHmm để dễ quản lý.
  • Tự động hóa bằng script hoặc cronjob.
  • Giữ lại ít nhất 3-5 bản backup gần nhất.

Leave a Reply

Your email address will not be published. Required fields are marked *