version: '2'
networks:
  lb_web:
    external: true
  back:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 10.0.${SUBNET}.0/24
services:
  db:
    restart: always
    image: postgres:14-alpine
    shm_size: 1g
    networks:
    - back
    volumes:
    - ./data/postgres:/var/lib/postgresql/data
    environment:
    - POSTGRES_PASSWORD
  redis:
    restart: always
    image: redis:7-alpine
    networks:
    - back
    volumes:
      - ./data/redis:/data
  web:
    image: nginx:alpine
    volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf
    volumes_from:
    - app
    depends_on:
    - app
    - streaming
    networks:
    - back
    - lb_web
    environment:
    - VIRTUAL_HOST
    - VIRTUAL_PORT=80
    - LETSENCRYPT_HOST
  app:
    restart: always
    image: ghcr.io/mastodon/mastodon:v4.1.12
    env_file: .env.production
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    depends_on:
    - db
    - redis
    volumes:
    - ./public/system:/mastodon/public/system
    networks:
    - back
  streaming:
    restart: always
    image: ghcr.io/mastodon/mastodon:v4.1.12
    env_file: .env.production
    command: yarn start
    depends_on:
    - db
    - redis
    networks:
    - back
  sidekiq:
    restart: always
    image: ghcr.io/mastodon/mastodon:v4.1.12
    env_file: .env.production
    command: bundle exec sidekiq
    depends_on:
    - db
    - redis
    volumes:
    - ./public/system:/mastodon/public/system
    networks:
    - back