Hướng Dẫn Triển Khai Dịch Vụ Tự Quản Lý Với Docker Compose
Bài viết chia sẻ kinh nghiệm triển khai 8 dịch vụ tự host thiết yếu sử dụng Docker Compose. Tác giả nhấn mạnh lợi ích học hỏi khi tự vận hành, cùng hướng dẫn cấu hình proxy Traefik, lưu ý bảo mật và mạng riêng biệt.

Hướng Dẫn Triển Khai Dịch Vụ Tự Quản Lý Với Docker Compose
Tự vận hành hệ thống dịch vụ của riêng mình không chỉ là lựa chọn kỹ thuật mà còn là trải nghiệm học hỏi quý giá. Việc triển khai, bảo mật và duy trì trực tiếp giúp bạn hiểu sâu hơn về các khái niệm như reverse proxy, quản lý secrets hay khóa bảo mật, thay vì chỉ click chuột trên giao diện dịch vụ đám mây.
Bài viết này giới thiệu 8 dịch vụ đáng để bạn tự host tại nhà hoặc cho các nhóm IT nhỏ, kèm theo các cấu hình mẫu Docker Compose, lưu ý bảo mật, và góc nhìn công bằng về khi nào nên tự vận hành so với khi nào nên dùng dịch vụ quản lý.
Những nền tảng cần chuẩn bị trước khi triển khai dịch vụ
Tất cả các dịch vụ trong hướng dẫn này đều cần một reverse proxy để quản lý truy cập và chứng chỉ TLS tập trung. Việc chạy mỗi dịch vụ trên một cổng khác nhau (ví dụ :8080, :8443) phù hợp giai đoạn phát triển nhưng gây rắc rối về sau khi mở rộng — bạn sẽ phải đối mặt với việc quản lý port phức tạp, xử lý TLS không thống nhất, và không có nơi tập trung để kiểm soát truy cập.
Traefik là giải pháp reverse proxy thông minh, tích hợp trực tiếp với Docker, tự động cấp và gia hạn chứng chỉ TLS qua Let's Encrypt. Bạn chỉ cần tạo một mạng proxy riêng (docker network create proxy) để các dịch vụ tham gia, đồng thời cấu hình thêm nhãn (label) cho Traefik chỉ định định tuyến truy cập.
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- proxy
networks:
proxy:
external: true
1. Portainer: Quản lý Docker qua giao diện web
Portainer cung cấp giao diện quản lý container, volume, mạng và stack Compose trực quan, giúp bạn theo dõi và thao tác dễ dàng hơn thay vì dùng lệnh dòng.
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- portainer_data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(`portainer.yourdomain.com`)"
- "traefik.http.routers.portainer.entrypoints=websecure"
- "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
networks:
- proxy
Lưu ý bảo mật: Hãy giới hạn truy cập Portainer trong mạng quản lý riêng hoặc VPN vì tài khoản quản trị có quyền tương đương root trong môi trường Docker.
2. BookStack: Hệ thống tài liệu và kiến thức
BookStack mô hình hoá tài liệu theo cấu trúc Sách - Chương - Trang phù hợp cho việc quản lý tài liệu nội bộ và kiến thức nhóm. Cơ sở dữ liệu MariaDB nằm trong mạng nội bộ, không tiếp xúc trực tiếp với bên ngoài.
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
restart: unless-stopped
environment:
- APP_URL=https://docs.yourdomain.com
- DB_HOST=bookstack-db
- DB_PASS=${DB_PASS}
volumes:
- ./config:/config
networks:
- proxy
- internal
bookstack-db:
image: mariadb:10.11
networks:
- internal
3. Vaultwarden: Quản lý mật khẩu
Một server Vaultwarden nhẹ tương thích với Bitwarden, rất thích hợp cho nhóm nhỏ chia sẻ mật khẩu hạ tầng. Cần tắt luôn đăng ký account tự do (SIGNUPS_ALLOWED=false) sau khi tạo tài khoản admin.
services:
vaultwarden:
image: vaultwarden/server:latest
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=false
- ADMIN_TOKEN=${ADMIN_TOKEN}
volumes:
- ./vw-data:/data
4. Uptime Kuma: Giám sát dịch vụ
Uptime Kuma kiểm tra các dịch vụ web, cổng TCP, Docker container và DNS, gửi cảnh báo qua nhiều kênh như Telegram, Slack, email,... rất hữu ích để theo dõi tình trạng hệ thống liên tục.
5. Gitea: Git server tự host gọn nhẹ
Gitea là giải pháp Git server nhẹ, giao diện thân thiện tương tự GitHub, chạy hiệu quả trên nền Docker với bộ nhớ RAM dưới 256MB, phù hợp cho nhóm nhỏ phát triển phần mềm tự quản.
services:
gitea:
image: gitea/gitea:latest
environment:
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=gitea-db:5432
networks:
- proxy
- internal
gitea-db:
image: postgres:15
networks:
- internal
Lưu ý bảo mật: Bạn nên vô hiệu hoá đăng ký công khai sau khi tạo tài khoản.
6. Grafana và Prometheus: Giám sát và biểu đồ số liệu
Với Prometheus thu thập các metrics theo thời gian, Grafana giúp trực quan hóa dữ liệu và tạo cảnh báo thông minh hơn dựa trên ngưỡng thay vì chỉ trạng thái up/down.
Prometheus theo dõi trong mạng nội bộ, chỉ có Grafana được expose ra ngoài qua Traefik.
7. Nextcloud: Đồng bộ và cộng tác tệp tin
Nextcloud mang lại lợi ích kiểm soát tệp dữ liệu riêng, chính sách lưu trữ do bạn đặt ra, và quản lý truy cập rõ ràng cho nhóm nhỏ.
8. Homepage: Bảng điều khiển dịch vụ
Ket hợp nhiều dịch vụ, Homepage là dashboard tập trung giúp bạn quan sát trạng thái container đang chạy, thuận tiện kiểm soát từ một nơi duy nhất.
Các lưu ý bảo mật quan trọng
- Không để secrets trong file Compose. Sử dụng file
.envvà thêm nó vào.gitignoređể tránh lộ thông tin nhạy cảm. - Phân tách mạng theo mức độ tin cậy. Dịch vụ public đặt trên mạng proxy, database trên mạng nội bộ.
- Chạy kiểm tra bảo mật thường xuyên với các công cụ như Trivy, Docker Bench for Security.
- Sao lưu volume chứ không chỉ image. Image có thể tải lại, nhưng dữ liệu ứng dụng như BookStack hay Vaultwarden cần được bảo toàn.
- Cố định phiên bản image khi đưa vào production, tránh rủi ro cập nhật tự động gây lỗi do thay đổi không tương thích.
Đây là một hướng dẫn thực tế và chi tiết dành cho các cá nhân và nhóm IT muốn tự xây dựng hệ thống dịch vụ phần mềm nhẹ, vừa học hỏi, vừa chủ động kiểm soát toàn diện hạ tầng của mình.
Xem thêm cấu hình chi tiết tại danieljamesglover.com
Bài viết liên quan

Phần mềm
Ra mắt Rail: Ngôn ngữ lập trình tự hosting tích hợp HTTPS thuần túy
18 tháng 4, 2026

Phần mềm
Tương lai "Headless" cho AI cá nhân: Khi giao diện dòng lệnh lên ngôi
18 tháng 4, 2026

Công nghệ
Cursor đàm phán huy động hơn 2 tỷ USD với định giá 50 tỷ USD khi tăng trưởng doanh nghiệp bùng nổ
17 tháng 4, 2026
