❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Khi ứng dụng cần nhiều services chạy cùng nhau (app + database + cache + queue worker), Docker Compose là giải pháp. Coolify hỗ trợ deploy Docker Compose trực tiếp, paste file docker-compose.yml và deploy.

📖 Bài trước: Phần 6, Deploy Backend Apps

I. Khi nào cần Docker Compose?

  • Ứng dụng gồm nhiều containers: web app + database + Redis + worker
  • Cần kiểm soát networking giữa services
  • Muốn deploy stack có sẵn (WordPress + MySQL, GitLab, Supabase…)
  • Khi Nixpacks/Dockerfile đơn không đủ cho multi-service apps

ℹ️ Nếu chỉ cần 1 app + 1 database, không cần Docker Compose, tạo riêng từng resource dễ quản lý hơn. Docker Compose phù hợp khi services phụ thuộc chặt chẽ vào nhau.

II. Tạo Docker Compose Resource

  1. Vào Project → Environment → “+ Add Resource”
  2. Chọn “Docker Compose Empty” (viết từ đầu) hoặc link repo chứa file docker-compose.yml
  3. Paste hoặc edit docker-compose.yml trong editor
  4. Click Deploy
Docker Compose editor trên Coolify
Editor Docker Compose — paste file docker-compose.yml và click Save để deploy.
Docker Compose editor trên Coolify
Editor Docker Compose — paste file docker-compose.yml và click Save để deploy.

III. Ví dụ: WordPress + MySQL

Docker Compose services đang chạy
WordPress, MySQL, Redis containers chạy trên Coolify
services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8080:80"
    depends_on:
      - mysql

mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: wordpress MYSQL_USER: wp_user MYSQL_PASSWORD: wp_password volumes: - mysql_data:/var/lib/mysql

volumes: wordpress_data: mysql_data:

⚠️ Trong Coolify Docker Compose, không cần khai báo networks: Coolify tự tạo shared network cho tất cả services trong compose file. Services tự nhìn thấy nhau qua tên service.

IV. Ví dụ: App + PostgreSQL + Redis

services:
  app:
    build: .
    environment:
      DATABASE_URL: postgresql://appuser:apppass@postgres:5432/myapp
      REDIS_URL: redis://redis:6379
    ports:
      - "3000:3000"
    depends_on:
      - postgres
      - redis

postgres: image: postgres:16-alpine environment: POSTGRES_USER: appuser POSTGRES_PASSWORD: apppass POSTGRES_DB: myapp volumes: - pg_data:/var/lib/postgresql/data

redis: image: redis:7-alpine volumes: - redis_data:/data

worker: build: . command: node worker.js environment: DATABASE_URL: postgresql://appuser:apppass@postgres:5432/myapp REDIS_URL: redis://redis:6379 depends_on: - postgres - redis

volumes: pg_data: redis_data:

V. Domain cho Docker Compose Services

Mặc định chỉ service có ports mapping mới accessible từ ngoài. Để gán domain:

  1. Deploy compose stack
  2. Vào resource → tìm service cần domain (VD: wordpress)
  3. Set domain trong FQDN field: https://blog.example.com
  4. Traefik tự route traffic đến đúng container

VI. Persistent Volumes

Docker volumes và network
Volumes lưu data persistent, network kết nối containers

Volumes trong Docker Compose được Coolify tự quản lý:

  • Named volumes: Khai báo trong volumes: section → Coolify tạo Docker volumes tự động
  • Bind mounts: Có thể map path trên host: ./data:/app/data
  • Data persist qua redeploy: chỉ mất khi xoá volume thủ công

🚨 Khi xoá resource Docker Compose, Coolify hỏi có muốn xoá volumes không. Chọn “Keep Volumes” nếu muốn giữ data!

VII. Environment Variables trong Compose

Có 2 cách set environment variables:

  • Inline trong compose file: environment: section (hiển thị rõ trong file)
  • Qua Coolify UI: Tab “Environment Variables”: an toàn hơn, không lộ trong file
  • Coolify UI variables override inline values: ưu tiên cao hơn

VIII. Tổng kết

Docker Compose trên Coolify giúp deploy multi-service stacks dễ dàng, paste compose file, deploy, gán domain. Coolify xử lý networking, volumes, và SSL tự động. Bài tiếp: CI/CD với GitHub, GitLab, Bitbucket.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Thạch Phạm

Thạch Phạm

Đồng sáng lập và Giám đốc điều hành của AZDIGI. Có hơn 15 năm kinh nghiệm trong phổ biến kiến thức liên quan đến WordPress tại thachpham.com, phát triển website và phát triển hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI