name: concept-portal

volumes:
  postgres_volume:
    name: "portal-data"
  django_static_volume:
    name: "portal-static"
  django_media_volume:
    name: "portal-media"
  cerbot_www_volume:
    name: "portal-certbot-serve"
  cerbot_conf_volume:
    name: "portal-certbot-config"

networks:
  default:
    name: concept-api-net

secrets:
  django_key:
    file: ./secrets/django_key.txt
  db_password:
    file: ./secrets/db_password.txt

services:
  frontend:
    container_name: portal-frontend
    restart: always
    depends_on:
      - backend
    build: 
      context: ./rsconcept/frontend
      args:
        BUILD_TYPE: production
    expose:
      - 3000
    command: serve -s /home/node -l 3000


  backend:
    container_name: portal-backend
    restart: always
    depends_on:
      - postgresql-db
    secrets:
      - db_password
      - django_key
    build:
      context: ./rsconcept/backend
    env_file: ./rsconcept/backend/.env.prod
    environment:
      SECRET_KEY: /run/secrets/django_key
      DB_PASSWORD: /run/secrets/db_password
    expose:
      - 8000
    volumes:
      - django_static_volume:/home/app/web/static
      - django_media_volume:/home/app/web/media
    command:
      gunicorn -w 3 project.wsgi --bind 0.0.0.0:8000


  postgresql-db:
    container_name: portal-db
    restart: always
    image: postgres:alpine
    secrets:
      - db_password
    env_file: ./postgresql/.env.prod
    environment:
      POSTGRES_PASSWORD: /run/secrets/db_password
    volumes:
      - postgres_volume:/var/lib/postgresql/data


  certbot:
    container_name: portal-certbot
    restart: no
    image: certbot/certbot:latest
    volumes:
      - cerbot_www_volume:/var/www/certbot/:rw
      - cerbot_conf_volume:/etc/letsencrypt/:rw


  nginx:
    container_name: portal-router
    restart: always
    build:
      context: ./nginx
      args:
        BUILD_TYPE: production
    ports:
      - 80:80
      - 443:443
    depends_on:
      - backend
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    volumes:
      - django_static_volume:/var/www/static
      - django_media_volume:/var/www/media
      - cerbot_www_volume:/var/www/certbot/:ro
      - cerbot_conf_volume:/etc/nginx/ssl/:ro
