eletrotupi / tcc/ ansible/roles/app/files/docker-compose.production.yml1495e32eb83d60fb8dd6a1c539de3fbefa9e19b1
1.3 KB | 50 lines Raw
1
# /srv/app/production/docker-compose.yml
2
# Secrets: cp .env.production.example .env.production and fill in values
3
# Start:   docker compose up -d
4
# Logs:    docker compose logs -f api
5

6
services:
7
  db:
8
    image: postgres:17-alpine
9
    shm_size: 1g
10
    user: postgres
11
    restart: unless-stopped
12
    healthcheck:
13
      test: "pg_isready -U ${POSTGRES_USER} --dbname=${POSTGRES_DB}"
14
      interval: 10s
15
      timeout: 5s
16
      retries: 5
17
    # No ports exposed: only reachable inside the Docker network
18
    environment:
19
      POSTGRES_USER: ${POSTGRES_USER}
20
      POSTGRES_DB: ${POSTGRES_DB}
21
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
22
    volumes:
23
      - db_data:/var/lib/postgresql/data
24

25
  valkey:
26
    image: valkey/valkey:9.0-alpine
27
    restart: unless-stopped
28
    # No ports exposed
29
    volumes:
30
      - valkey_data:/data
31
      - ./valkey.conf:/etc/valkey/valkey.conf
32
    command: valkey-server /etc/valkey/valkey.conf
33

34
  api:
35
    image: ghcr.io/${GITHUB_REPOSITORY}:${IMAGE_TAG:-latest}
36
    restart: unless-stopped
37
    ports:
38
      # Only bind on localhost: Nginx proxies to this
39
      - "127.0.0.1:3000:3000"
40
    env_file:
41
      - .env.production
42
    depends_on:
43
      valkey:
44
        condition: service_started
45
      db:
46
        condition: service_healthy
47

48
volumes:
49
  db_data:
50
  valkey_data: