name: oodikone x-defaults: &defaults restart: unless-stopped x-healthcheck-defaults: &healthcheck-defaults interval: 30s # Normal healthcehck interval timeout: 5s retries: 10 # Retries until SIGKILl start_interval: 3s # How often healthcheck runs while starting start_period: 30s # How long startup period is services: backend: <<: *defaults container_name: oodikone-backend image: oodikone-backend:staging build: context: services dockerfile: backend/Dockerfile depends_on: kone-db: condition: service_healthy redis: condition: service_healthy sis-db: condition: service_healthy user-db: condition: service_healthy environment: CI: 'true' DB_URL_USER: postgres://postgres@user-db:5432/user-db DB_URL_KONE: postgres://postgres@kone-db:5432/kone-db FRONT_URL: http://localhost:1337 REDIS: redis SECRET_TOKEN: dev SIS_DB_URL: postgres://postgres@sis-db:5432/sis-db SIS_UPDATER_URL: http://sis-updater-scheduler:8082 IMPORTER_DB_API_URL: 'https://api-toska.apps.ocp-prod-0.k8s.it.helsinki.fi/importer' JAMI_URL: 'http://jami:3003/' CRYPT_KEY: 'e16730fce263d5270ba8dcf84d068a32556542455e71331880d6c1c5e4db9b4e' ports: - 8080:8080 profiles: - oodikone healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:8080/health'] # In CI/prod the routing happens at a different level, hence no /api/ needed <<: *healthcheck-defaults frontend: <<: *defaults container_name: oodikone-frontend image: oodikone-frontend:staging build: context: services dockerfile: frontend/Dockerfile depends_on: backend: condition: service_healthy ports: - 5000:5000 profiles: - oodikone kone-db: <<: *defaults container_name: oodikone-kone-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/kone-db environment: PGDATA: /data POSTGRES_DB: kone-db POSTGRES_HOST_AUTH_METHOD: trust ports: - 4321:5432 healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres', '-h', '127.0.0.1'] <<: *healthcheck-defaults user-db: <<: *defaults container_name: oodikone-user-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/user-db environment: PGDATA: /data POSTGRES_DB: user-db POSTGRES_HOST_AUTH_METHOD: trust ports: - 4320:5432 healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres', '-h', '127.0.0.1'] <<: *healthcheck-defaults redis: <<: *defaults container_name: oodikone-redis image: redis:7.2.6 command: > sh -c 'redis-server --appendonly yes && redis-cli flushall' ports: - 6379:6379 healthcheck: test: ['CMD', 'redis-cli', 'ping', '|', 'grep', 'PONG'] <<: *healthcheck-defaults sis-db: <<: *defaults container_name: oodikone-sis-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/sis-db environment: PGDATA: /data POSTGRES_DB: sis-db POSTGRES_HOST_AUTH_METHOD: trust shm_size: 2gb ports: - 12345:5432 healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres', '-h', '127.0.0.1'] <<: *healthcheck-defaults sis-importer-db: <<: *defaults container_name: oodikone-sis-importer-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/sis-importer-db profiles: - updater ports: - 12346:5432 healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres', '-h', '127.0.0.1'] <<: *healthcheck-defaults jami: <<: *defaults container_name: oodikone-jami image: quay.io/toska/jami:production depends_on: jami-db: condition: service_healthy environment: - npm_config_cache=/tmp - PORT=3003 - NODE_ENV=test # previously was development which borks CI - DATABASE_URL=postgres://postgres:postgres@jami-db:5432/postgres ports: - 3003:3003 jami-db: <<: *defaults container_name: oodikone-jami-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/jami-db environment: - PGDATA=/data - POSTGRES_PASSWORD=postgres ports: - 5433:5432 healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres', '-h', '127.0.0.1'] <<: *healthcheck-defaults # This is still needed to make backend calls correctly route from localhost:5000/api to localhost:8080 nginx: container_name: oodikone-nginx image: nginx:latest depends_on: frontend: condition: service_started backend: condition: service_healthy ports: - 1337:80 profiles: - oodikone volumes: - ./nginx.conf:/etc/nginx/nginx.conf # Following services + sis-importer-db are used to run sis-updater-worker when anon sis-db needs to be updated. Could probably also use production version, but this certainly works. sis-updater-scheduler: restart: no container_name: oodikone-updater-scheduler build: context: updater/sis-updater-scheduler dockerfile: ./Dockerfile depends_on: redis: condition: service_healthy sis-importer-db: condition: service_healthy environment: CI: 'true' REDIS_HOST: redis SECRET_TOKEN: dev SIS_IMPORTER_DATABASE: sis-importer-db SIS_IMPORTER_HOST: sis-importer-db SIS_IMPORTER_PASSWORD: postgres SIS_IMPORTER_USER: postgres SCHEDULE_IMMEDIATE: '${SCHEDULE_IMMEDIATE}' EXIT_AFTER_IMMEDIATES: '${EXIT_AFTER_IMMEDIATES}' ports: - 8082:8082 profiles: - updater healthcheck: test: ['CMD', 'curl', '-f', 'http://localhost:8082/health'] <<: *healthcheck-defaults sis-updater-worker: <<: *defaults # Disabled so that container can be scaled # container_name: oodikone-updater-worker build: context: updater/sis-updater-worker dockerfile: ./Dockerfile depends_on: redis: condition: service_healthy sis-db: condition: service_healthy sis-importer-db: condition: service_healthy environment: CI: 'true' DB_URL: postgres://postgres@sis-db:5432/sis-db REDIS_HOST: redis SIS_IMPORTER_DATABASE: sis-importer-db SIS_IMPORTER_HOST: sis-importer-db SIS_IMPORTER_PASSWORD: postgres SIS_IMPORTER_USER: postgres SIS_PASSWORD: postgres profiles: - updater