❤️ AZDIGI has officially updated to a new blog system. However, some posts may have incorrect or mismatched images. Please click the Report article button at the bottom of the post so AZDIGI can update as quickly as possible. Thank you!

When applications need multiple services running together (app + database + cache + queue worker), Docker Compose is the solution. Coolify supports deploying Docker Compose directly, paste the docker-compose.yml file and deploy.

📖 Previous article: Part 6, Deploy Backend Apps

I. When do you need Docker Compose?

  • Applications consisting of multiple containers: web app + database + Redis + worker
  • Need to control networking between services
  • Want to deploy ready-made stacks (WordPress + MySQL, GitLab, Supabase…)
  • When Nixpacks/Dockerfile alone is not enough for multi-service apps

ℹ️ If you only need 1 app + 1 database, Docker Compose is not necessary, create each resource separately for easier management. Docker Compose is suitable when services are tightly dependent on each other.

II. Create Docker Compose Resource

  1. Go to Project → Environment → “+ Add Resource”
  2. Choose “Docker Compose Empty” (write from scratch) or link repo containing docker-compose.yml file
  3. Paste or edit docker-compose.yml in the editor
  4. Click Deploy
Docker Compose editor on Coolify
Docker Compose Editor — paste docker-compose.yml file and click Save to deploy.
Docker Compose editor on Coolify
Docker Compose Editor — paste docker-compose.yml file and click Save to deploy.

III. Example: WordPress + MySQL

Docker Compose services running
WordPress, MySQL, Redis containers running on 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:

⚠️ In Coolify Docker Compose, no need to declare networks: Coolify automatically creates a shared network for all services in the compose file. Services can see each other through the service name.

IV. Example: 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 for Docker Compose Services

By default only services with ports mapping are accessible from outside. To assign domain:

  1. Deploy compose stack
  2. Go to resource → find service that needs domain (e.g: wordpress)
  3. Set domain in FQDN field: https://blog.example.com
  4. Traefik automatically routes traffic to the correct container

VI. Persistent Volumes

Docker volumes and network
Volumes store persistent data, network connects containers

Volumes in Docker Compose are automatically managed by Coolify:

  • Named volumes: Declared in volumes: section → Coolify creates Docker volumes automatically
  • Bind mounts: Can map path on host: ./data:/app/data
  • Data persists through redeploy: only lost when manually deleting volume

🚨 When deleting Docker Compose resource, Coolify asks if you want to delete volumes. Choose “Keep Volumes” if you want to keep data!

VII. Environment Variables in Compose

There are 2 ways to set environment variables:

  • Inline in compose file: environment: section (visible in the file)
  • Through Coolify UI: Tab “Environment Variables”: more secure, not exposed in file
  • Coolify UI variables override inline values: higher priority

VIII. Conclusion

Docker Compose on Coolify makes deploying multi-service stacks easy, paste compose file, deploy, assign domain. Coolify handles networking, volumes, and SSL automatically. Next article: CI/CD with GitHub, GitLab, Bitbucket.

Share:
This article has been reviewed by AZDIGI Team

About the author

Trần Thắng

Trần Thắng

Expert at AZDIGI with years of experience in web hosting and system administration.

10+ years serving 80,000+ customers

Start your web project with AZDIGI