Hướng dẫn sử dụng OpsVibes: control panel deploy website từ GitHub lên VPS
Nếu bạn từng dùng Vercel hay Netlify thì chắc đã quen cảm giác "push code là website tự lên". Vấn đề là các dịch vụ đó chạy trên hạ tầng của họ, còn app backend, database hay WordPress thì vẫn phải tự lo trên VPS. OpsVibes là control panel mình viết để mang trải nghiệm đó về chính VPS của bạn: kết nối GitHub, chọn repo, bấm Deploy, panel tự build, chạy container, gắn tên miền và cấp SSL.
Trong bài này mình hướng dẫn chi tiết từ lúc cài panel lên một VPS trắng cho tới deploy website đầu tiên, tạo database, gắn tên miền, sao lưu và dùng AI Agent để debug. Bạn có thể xem trước giao diện ở bản live demo (dữ liệu mẫu, bấm thoải mái).
1. OpsVibes là gì?
OpsVibes là control panel tự host, chạy trên nền Docker + Traefik + Nixpacks:
- Docker: mỗi app, mỗi database chạy trong container riêng, không đụng nhau.
- Traefik: reverse proxy nhận cổng 80/443, tự lấy chứng chỉ Let's Encrypt cho mọi tên miền. Bạn không cần cài Nginx hay Certbot.
- Nixpacks: tự nhận diện ngôn ngữ (Node.js, Python, PHP, Go, Java…) và build image. Repo không cần có Dockerfile.
Những việc panel làm được:
- Deploy từ GitHub kiểu Vercel, kể cả repo private. Push lên nhánh là tự deploy lại.
- Deploy không downtime: bản mới chưa chạy được thì bản cũ vẫn phục vụ. Rollback về 5 lần deploy gần nhất bằng một nút.
- Database 1-click: PostgreSQL, MySQL, MariaDB, MongoDB, Redis. Kết nối với app bằng một nút, import file backup có sẵn.
- Ứng dụng 1-click: WordPress, Ghost, n8n, Uptime Kuma, Gitea, Adminer. Hoặc chạy bất kỳ Docker image nào.
- Deploy từ file nén (.zip, .tar.gz…), rất tiện để chuyển website PHP/WordPress từ hosting cũ sang.
- Fullstack và monorepo: frontend + backend + database từ một repo, panel tự nối biến môi trường giữa các service.
- Sao lưu tự động mỗi ngày, đẩy lên S3-compatible (R2, B2, Wasabi, MinIO…) hoặc Google Drive.
- AI Agent (tùy chọn): đọc log, tìm lỗi, sửa cấu hình và deploy lại giúp bạn khi thêm API key của Anthropic, OpenAI, Gemini, OpenRouter…
- Giao diện tiếng Việt và tiếng Anh, có chế độ sáng/tối, dùng được trên điện thoại.

2. Chuẩn bị

- Một VPS mới cài, chưa chạy web server hay control panel khác (cổng 80 và 443 phải còn trống).
- Hệ điều hành: Ubuntu 20.04/22.04/24.04, Debian 11/12, Rocky Linux 8/9, AlmaLinux 8/9, RHEL 8/9, CentOS Stream 9 hoặc Fedora 40/41. Hỗ trợ cả x86_64 và arm64. Mình khuyên dùng Ubuntu hoặc Debian.
- Cấu hình tối thiểu 2 vCPU, 2 GB RAM, 20 GB ổ đĩa. Khuyến nghị 2 vCPU, 4 GB RAM, 40 GB SSD nếu chạy nhiều app.
- Quyền
roothoặc user cósudo. - (Tùy chọn) Một tên miền để truy cập panel qua HTTPS, ví dụ
panel.example.com.
| Cổng | Dùng cho |
|---|---|
80 |
HTTP, xác minh chứng chỉ Let's Encrypt |
443 |
HTTPS cho panel và các app |
3000 |
Mở panel lần đầu khi chưa có tên miền, đóng lại được sau đó |
Lưu ý: nếu VPS ở AWS, Google Cloud, Oracle, Azure… thì nhớ mở thêm 3 cổng này ở security group của nhà cung cấp, không chỉ tường lửa trong máy.
3. Cài đặt OpsVibes

Cách 1: Cài bằng script (khuyên dùng)
SSH vào VPS và chạy một lệnh duy nhất:
curl -sSL https://get.opsvibes.com | sudo sh
Script sẽ tự:
- Nhận diện bản Linux đang dùng.
- Cài Docker nếu server chưa có và bật Docker khởi động cùng hệ thống.
- Mở cổng 80, 443, 3000 trên
ufwhoặcfirewalld, xử lý SELinux trên dòng RHEL. - Chạy container
opsvibes(panel) vàopsvibes-traefik(proxy), rồi in ra địa chỉ để mở panel.
Cách 2: Cài bằng Docker
Nếu server đã có Docker hoặc bạn muốn tự kiểm soát từng bước:
docker network create opsvibes
docker run -d --name opsvibes --network opsvibes \
--restart unless-stopped \
-p 3000:3000 \
-v /etc/opsvibes:/etc/opsvibes \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /proc:/host/proc:ro \
-e OPSVIBES_HOST_PROC=/host/proc \
ghcr.io/opsvibes/opsvibes:latest
Trên Rocky/AlmaLinux/RHEL đang bật SELinux, thêm dòng --security-opt label=disable \ trước dòng image. Toàn bộ dữ liệu của panel nằm trong /etc/opsvibes.
4. Đăng nhập lần đầu

- Mở trình duyệt, truy cập
http://<IP-VPS>:3000. - Panel yêu cầu setup token để chắc chắn chỉ chủ server mới tạo được tài khoản quản trị. Lấy token trên VPS:
sudo cat /etc/opsvibes/setup.token - Dán token, nhập email và mật khẩu (tối thiểu 10 ký tự). Token tự hết hiệu lực sau khi tạo xong tài khoản đầu tiên.
Sau khi đăng nhập bạn sẽ thấy Dashboard: biểu đồ CPU, RAM, ổ đĩa, mạng của server ở trên cùng, danh sách project và các lần deploy gần đây. Thanh bên trái gồm Dashboard, Domain, Sao lưu, AI Agent, Model AI, Cài đặt; phía dưới có IP máy chủ, nút chế độ tối và chọn ngôn ngữ.
5. Gắn tên miền và HTTPS cho panel
Truy cập panel qua http://IP:3000 chỉ nên dùng lúc mới cài. Để dùng lâu dài, hãy gắn tên miền:
- Tại nơi quản lý DNS, tạo bản ghi
Atênpaneltrỏ về IP VPS. Nếu dùng Cloudflare, để DNS only (mây xám) khi cấp chứng chỉ lần đầu. - Kiểm tra bản ghi đã có hiệu lực:
dig +short panel.example.com - Trong panel vào Cài đặt → Tên miền & SSL, nhập Tên miền của panel và (tùy chọn) Email Let's Encrypt, bấm Lưu.
- Khoảng 5 giây sau Traefik cập nhật route và tự lấy chứng chỉ. Mở
https://panel.example.comđể kiểm tra.
Ở cùng mục này có ô Tên miền mặc định cho app. Mỗi service sẽ có sẵn địa chỉ dạng <project>-<service>.<tên-miền-mặc-định>:
- Mặc định panel dùng
<IP>.sslip.io, ví dụshop-web.203-0-113-10.sslip.io. Không cần cấu hình DNS gì, có HTTPS ngay. - Muốn dùng tên miền riêng: tạo bản ghi wildcard
*.apps.example.comtrỏ về VPS, rồi đặt tên miền mặc định làapps.example.com.
Khi panel đã chạy ổn qua HTTPS, bạn có thể đóng cổng 3000 trên tường lửa.

6. Kết nối GitHub

Đây là bước giúp OpsVibes giống Vercel: kết nối một lần, sau đó chọn repo từ danh sách thay vì dán URL, và push code là tự deploy.
- Vào Cài đặt → GitHub, bấm Kết nối GitHub. Nếu repo nằm trong một tổ chức, tick Tạo App trong một tổ chức GitHub và nhập tên tổ chức (cần quyền owner).
- Panel tự tạo một GitHub App riêng dưới tài khoản của bạn, chỉ có quyền đọc mã nguồn. Bạn chỉ cần xác nhận trên GitHub.
- Chọn cài App cho mọi repo hoặc một số repo. Sau này muốn thêm repo, bấm Chọn repo hoặc Thêm tài khoản.
Mẹo: nên gắn tên miền HTTPS cho panel trước khi kết nối GitHub, vì GitHub gửi webhook về địa chỉ panel. Nếu sau này bạn đổi tên miền panel, panel tự cập nhật địa chỉ webhook của App.
Repo trên GitLab, Gitea hoặc repo GitHub chưa cấp quyền vẫn deploy được bằng cách Nhập URL Git kèm token truy cập.
7. Tạo project và deploy website đầu tiên
Bước 1: Tạo project
Ở Dashboard bấm Tạo project. Project là nhóm các service của một sản phẩm, ví dụ project shop gồm frontend, backend và database. Tên project dùng chữ thường, số và dấu gạch ngang.
Bước 2: Thêm service
Mở project, bấm Thêm service. Trang này có các nguồn deploy:
- Import Git Repository: danh sách repo từ GitHub, bấm Import ở repo muốn deploy.
- Ứng dụng 1-click: WordPress, Ghost, n8n, Uptime Kuma, Gitea, Adminer.
- Fullstack: frontend + backend (+ database) từ một hoặc hai repo, nối sẵn URL API và CORS.
- Tự viết Dockerfile / Compose: khai báo Dockerfile hoặc
compose.ymlngay trên panel, kèm file .sql, config… không cần repo. - Từ file nén: tải lên .zip, .tar.gz… phù hợp với mã nguồn không nằm trên Git.
- Docker image: chạy image có sẵn trên Docker Hub, GHCR…

Bước 3: Cấu hình service
Sau khi bấm Import, panel đọc repo, nhận diện framework và hiện form cấu hình. Thường bạn chỉ cần kiểm tra lại rồi bấm Deploy:
- Tên service: ví dụ
web,api. - Nhánh: nhánh dùng để deploy, tick Tự deploy khi push lên nhánh này để có auto deploy.
- Thư mục gốc: bỏ trống nếu app nằm ở gốc repo. Với monorepo thì điền thư mục chứa app, ví dụ
apps/web; push chỉ deploy lại service có file thay đổi. - Build & khởi động: lệnh khởi động và cổng. Bỏ trống để tự nhận diện. App phải lắng nghe ở
0.0.0.0:$PORT, không phải127.0.0.1. - Biến môi trường: thêm từng biến hoặc bấm Dán từ file .env.
- Database: chọn Tạo mới hoặc Dùng có sẵn. Panel gợi ý loại database dựa trên dependency của repo (pg, mysql2, mongoose, Prisma…), có thể tạo thêm Redis và import file backup.
- Tên miền riêng: tùy chọn, bản ghi A phải trỏ về server.
Bước 4: Deploy và xem log
Bấm Deploy. Panel clone repo, build bằng Dockerfile (nếu có) hoặc Nixpacks, chạy container rồi chuyển traffic sang bản mới. Log build hiện theo thời gian thực, các giá trị bí mật được tự che.

Deploy xong, bấm Mở app để xem website. Từ giờ mỗi lần bạn git push lên nhánh đã chọn, panel tự deploy lại.
8. Quản lý service
Trang của mỗi service có các tab:
- Tổng quan: địa chỉ, commit đang chạy, lần deploy gần nhất, cổng và danh sách tên miền.
- Deployments: lịch sử deploy kèm trạng thái, commit, nguồn kích hoạt (Git push hay thủ công), thời lượng. Bấm Rollback để quay về bản cũ ngay lập tức, không cần build lại.
- Log: log runtime của container, lọc được Access log / output hoặc Error log, bật Tự cập nhật để theo dõi trực tiếp.
- Biến môi trường: được mã hóa trong database của panel. Thay đổi có hiệu lực ở lần deploy tiếp theo.
- Quản lý file: xem và sửa file của app đang chạy.
- File riêng: file được chép vào mã nguồn mỗi lần deploy, ghi đè file cùng tên trong repo. Hữu ích khi muốn thêm Dockerfile, config nginx… mà không sửa repo. Ở đây cũng chọn cách build: tự động hoặc Docker Compose.
- Cài đặt: đổi repo, nhánh, cổng, thư mục gốc, lệnh khởi động, tên miền riêng, thư mục dữ liệu (volume) và sao lưu dữ liệu của service.

Biến môi trường có thể tham chiếu service khác trong cùng project, ví dụ frontend cần URL của API:
NEXT_PUBLIC_API_URL=${api.URL} # địa chỉ công khai của service api
API_INTERNAL=${api.INTERNAL_URL} # địa chỉ nội bộ giữa các container
9. Database
Trong trang project bấm Thêm database, chọn loại (PostgreSQL, MySQL, MariaDB, MongoDB, Redis), đặt tên và phiên bản. Mật khẩu được sinh ngẫu nhiên và mã hóa. Database chạy trong network nội bộ của panel nên chỉ app trên server này kết nối được, không mở cổng ra Internet.
Trang của database có:
- Kết nối: host nội bộ, cổng, user, tên database, mật khẩu và chuỗi kết nối (bấm Hiện mật khẩu để xem).
- Kết nối với service: chọn service rồi bấm Kết nối, panel tự thêm
DATABASE_URL,DB_HOST,DB_PORT,DB_USER,DB_PASSWORD,DB_NAMEvào biến môi trường của service. Deploy sẽ chờ database sẵn sàng rồi mới chạy app. - Import backup: nạp file .sql, .sql.gz, file pg_dump hoặc mongodump archive.
- Sao lưu: tạo bản sao lưu và khôi phục.

10. Ứng dụng 1-click và chuyển website từ hosting cũ

Muốn có ngay một trang WordPress, Ghost, n8n hay Uptime Kuma: vào Thêm service → Ứng dụng 1-click, chọn ứng dụng, đặt tên và tên miền rồi bấm Cài. Panel dùng image chính thức, tạo sẵn database trắng, giữ dữ liệu ở volume riêng (deploy lại không mất) và cấp HTTPS.
Chuyển website WordPress hoặc PHP từ hosting khác sang:
- Nén toàn bộ mã nguồn thành file .zip (có thể để kèm file dump .sql bên trong).
- Vào Thêm service → Từ file nén, kéo thả file vào.
- Panel giải nén, tự sửa
wp-config.phpđọc database từ biến môi trường, import file dump, chặn tải file .sql/log từ bên ngoài và giữ thư mục ảnh tải lên bằng volume.
Muốn cập nhật bản mới thì tải file nén mới lên ở tab Cài đặt của service, panel build lại và chuyển traffic khi bản mới chạy được.
11. Quản lý tên miền
Trang Domain ở thanh bên liệt kê mọi tên miền trên tất cả project, kèm hai cột kiểm tra:
- DNS: tên miền đã trỏ đúng IP máy chủ chưa, hay đang trỏ nơi khác.
- SSL: chứng chỉ Traefik đang dùng còn bao nhiêu ngày.
Thêm tên miền riêng cho service ở tab Cài đặt của service. Panel cấp chứng chỉ cho từng tên miền.

12. Sao lưu và khôi phục
Vào Sao lưu ở thanh bên:
- Nơi lưu ngoài VPS: kết nối S3-compatible (AWS S3, Cloudflare R2, Backblaze B2, Wasabi, MinIO…) hoặc Google Drive, bấm Kiểm tra & lưu. Mọi bản sao lưu (database, dữ liệu service, panel) đều được đẩy lên đây, VPS hỏng vẫn còn.
- Sao lưu toàn bộ: đặt Passphrase mã hóa, bật Tự động mỗi ngày và chọn số bản muốn giữ. Một file
.vpbakchứa đủ để dựng lại mọi thứ: cấu hình panel, project, service, biến môi trường, tài khoản, dữ liệu database và dữ liệu service. Mã nguồn từ GitHub không cần lưu vì panel tự clone lại.
Quan trọng: ghi passphrase ở nơi khác ngoài server. Mất passphrase thì không giải mã được bản sao lưu.

Chuyển toàn bộ sang VPS mới:
- Tải file
.vpbakmới nhất từ trang Sao lưu, S3 hoặc Google Drive. - Cài OpsVibes trên VPS mới nhưng chưa tạo tài khoản.
- Ở màn hình thiết lập chọn Khôi phục từ bản sao lưu toàn bộ (.vpbak), tải file lên, nhập passphrase và setup token. Panel dựng lại database, dữ liệu và deploy lại các service.
- Đổi bản ghi A của các tên miền sang IP mới.
Chỉ muốn mang một website sang hosting khác? Dùng Sao lưu project trong trang của project để tải bản mang đi gồm database và mã nguồn đang chạy.
13. AI Agent: nhờ AI debug và sửa lỗi
Phần này hoàn toàn tùy chọn, panel vẫn deploy bình thường khi không có AI. Nếu bạn có API key của một nhà cung cấp model thì nên thử.
Thêm model AI
- Vào Model AI, bấm Thêm.
- Chọn nhà cung cấp: Anthropic, OpenAI, Gemini, OpenRouter, DeepSeek, xAI, Groq, Mistral, hoặc endpoint tự host tương thích OpenAI (Ollama…).
- Dán API key, bấm Kiểm tra key để tải danh sách model, chọn Model mặc định rồi lưu. Key được mã hóa và không bao giờ hiển thị lại.
Chat với AI Agent
Trang AI Agent là một khung chat cho cả máy chủ. Agent đọc được log, trạng thái container, Traefik và tài nguyên server; tự sửa cấu hình, đặt biến môi trường, restart hoặc deploy lại. Bạn có thể hỏi những câu như:
- "Kiểm tra sức khỏe server và các website"
- "Website nào đang chậm hoặc lỗi? Tìm nguyên nhân"
- "Kiểm tra tên miền và chứng chỉ SSL"
- Đính kèm file .zip mã nguồn và file .sql: "Tạo website từ file tôi đính kèm"
Mỗi bước agent làm (đọc log, đặt biến, deploy, gửi request kiểm tra…) đều hiện rõ trong hội thoại. Những thao tác nguy hiểm như chạy lệnh với quyền root trên máy chủ, sửa mã nguồn hay ghi đè database đều phải chờ bạn bấm Cho phép.

Deploy với AI
Ở trang service, chọn model AI bên cạnh nút Deploy rồi bấm Deploy với AI: trước khi build, agent đọc mã nguồn, thêm cấu hình còn thiếu (Dockerfile, nixpacks.toml…) và biến môi trường (tự sinh secret như JWT_SECRET). Nếu build hoặc khởi động lỗi, agent tự sửa cấu hình và panel build lại, tối đa 2 lần. Khi một lần deploy thất bại, bấm Nhờ AI sửa để mở chat với log lỗi đã đính kèm sẵn.
14. Cập nhật panel

Panel tự kiểm tra bản mới mỗi 6 giờ. Khi có bản mới, thanh bên hiện nhãn Bản mới; bấm vào đó (hoặc vào Cài đặt → Phiên bản và cập nhật) rồi bấm Cập nhật. Panel tải bản mới, khởi động lại và tự quay về bản cũ nếu bản mới không chạy được. Các app đang chạy không bị dừng.
Hoặc chạy lại lệnh cài đặt trên server, script nhận ra panel đã có và chỉ cập nhật:
curl -sSL https://get.opsvibes.com | sudo sh
15. Xử lý một số lỗi thường gặp

Không mở được panel ở cổng 3000
Kiểm tra tường lửa trong máy (ufw/firewalld) và tường lửa của nhà cung cấp cloud. Xem trạng thái và log của panel:
docker ps --filter name=opsvibes
docker logs --tail 100 opsvibes
Cổng 80 hoặc 443 đã bị chiếm
Server từng cài Nginx, Apache hay control panel khác sẽ giữ cổng 80/443. Tìm tiến trình đang dùng cổng, tắt nó rồi khởi động lại panel:
sudo ss -tlnp | grep -E ':(80|443|3000)\s'
sudo systemctl disable --now nginx
docker restart opsvibes
Không cấp được chứng chỉ HTTPS
- Bản ghi A chưa trỏ đúng IP hoặc DNS chưa cập nhật, kiểm tra bằng
dig +short. - Cổng 80 bị chặn từ bên ngoài (Let's Encrypt cần cổng 80 để xác minh).
- Tên miền đang bật proxy Cloudflare: chuyển về DNS only rồi thử lại.
- Thử quá nhiều lần bị Let's Encrypt giới hạn: đợi vài giờ.
App deploy xong nhưng báo 502
Nguyên nhân phổ biến nhất là app chỉ lắng nghe ở 127.0.0.1/localhost. Sửa app để nghe ở 0.0.0.0 và đúng cổng trong biến PORT, hoặc điền đúng Cổng trong tab Cài đặt của service. Nếu đã thêm model AI, bấm Nhờ AI sửa để agent tự tìm nguyên nhân.
Mất setup token
sudo cat /etc/opsvibes/setup.token
# hoặc
docker logs opsvibes 2>&1 | grep "Setup token"
Tổng kết
Với OpsVibes, quy trình đưa một website lên VPS rút gọn còn: cài panel bằng một lệnh, kết nối GitHub, chọn repo và bấm Deploy. Phần reverse proxy, SSL, database, sao lưu và cả debug đều có giao diện để làm, không phải SSH vào sửa từng file cấu hình.
Tài liệu đầy đủ ở opsvibes.com/docs, xem trước giao diện tại opsvibes.com/livedemo. Có vấn đề gì cứ gửi email tới [email protected] hoặc để lại bình luận bên dưới, mình sẽ hỗ trợ.