services: app: image: johly/airtrail:${AIRTRAIL_VERSION:-latest} container_name: airtrail-app environment: - ORIGIN=${AIRTRAIL_ORIGIN} - DB_URL=postgres://${AIRTRAIL_DB_USERNAME}:${AIRTRAIL_DB_PASSWORD}@db:5432/${AIRTRAIL_DB_DATABASE_NAME} - DB_DATABASE_NAME=${AIRTRAIL_DB_DATABASE_NAME} - DB_USERNAME=${AIRTRAIL_DB_USERNAME} - DB_PASSWORD=${AIRTRAIL_DB_PASSWORD} ports: - ${AIRTRAIL_PORT:-3000}:3000 depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/api/ping', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"] interval: 30s timeout: 10s retries: 3 start_period: 40s deploy: resources: limits: memory: 512m restart: unless-stopped db: image: postgres:${AIRTRAIL_POSTGRES_VERSION:-16} container_name: airtrail-db environment: POSTGRES_DB: ${AIRTRAIL_DB_DATABASE_NAME} POSTGRES_USER: ${AIRTRAIL_DB_USERNAME} POSTGRES_PASSWORD: ${AIRTRAIL_DB_PASSWORD} volumes: - airtrail-db:/var/lib/postgresql/data:rw healthcheck: test: ["CMD-SHELL", "pg_isready -U ${AIRTRAIL_DB_USERNAME} -d ${AIRTRAIL_DB_DATABASE_NAME}"] interval: 10s timeout: 5s retries: 5 deploy: resources: limits: memory: 512m restart: always volumes: airtrail-db: name: airtrail-db driver: local driver_opts: type: nfs o: "addr=${AIRTRAIL_NFS_SERVER},rw,noatime,rsize=65536,wsize=65536,timeo=600,nfsvers=4" device: "${AIRTRAIL_NFS_DEVICE}"