services: db: image: postgres restart: always shm_size: 128mb volumes: - ./init/start.sh:/docker-entrypoint-initdb.d/start.sh healthcheck: test: ["CMD-SHELL", "pg_isready -U $${DB_USER} -d $${DB_NAME}"] interval: 10s retries: 5 start_period: 30s timeout: 10s env_file: .env secrets: - db-root-password-{{.Name}} - db-root-user-{{.Name}} - db-password-{{.Name}} - db-user-{{.Name}} - db-name-{{.Name}} environment: TZ: ${TZ} DB_ROOT_PASSWORD_FILE: /run/secrets/db-root-password-{{.Name}} DB_ROOT_USER_FILE: /run/secrets/db-root-user-{{.Name}} POSTGRES_PASSWORD_FILE: /run/secrets/db-root-password-{{.Name}} POSTGRES_USER_FILE: /run/secrets/db-root-user-{{.Name}} DB_PASSWORD_FILE: /run/secrets/db-password-{{.Name}} DB_USER_FILE: /run/secrets/db-user-{{.Name}} DB_NAME_FILE: /run/secrets/db-name-{{.Name}} # @Note: this is a mongodb thing # GLIBC_TUNABLES: glibc.pthread.rseq=0 server: secrets: - db-password-{{.Name}} - db-user-{{.Name}} - db-name-{{.Name}} - mail-password-{{.Name}} - mail-user-{{.Name}} - mail-sender-{{.Name}} - jwt-secret-{{.Name}} - jwt-audience-{{.Name}} - jwt-issuer-{{.Name}} build: context: . dockerfile: Dockerfile.dev depends_on: db: condition: service_healthy restart: true ports: - {{.Ports.Server}}:{{.Ports.Server}} - {{.Ports.Debugger}}:2345 develop: watch: - path: ./ action: sync target: /server/ - path: ./go.mod action: rebuild - path: ./go.sum action: rebuild - path: ./Dockerfile.dev action: rebuild environment: TZ: ${TZ} DB_PASSWORD_FILE: /run/secrets/db-password-{{.Name}} DB_USER_FILE: /run/secrets/db-user-{{.Name}} DB_NAME_FILE: /run/secrets/db-name-{{.Name}} MAIL_USER_FILE: /run/secrets/mail-user-{{.Name}} MAIL_PASSWORD_FILE: /run/secrets/mail-password-{{.Name}} MAIL_SENDER_FILE: /run/secrets/mail-sender-{{.Name}} POOL_MIN_CONNS: ${POOL_MIN_CONNS} POOL_MAX_CONNS: ${POOL_MAX_CONNS} POOL_MAX_CONN_LIFETIME: ${POOL_MAX_CONN_LIFETIME} POOL_MAX_CONN_IDLE_TIME: ${POOL_MAX_CONN_IDLE_TIME} APP_PORT: ${APP_PORT} TOKEN_SECRET_FILE: /run/secrets/jwt-secret-{{.Name}} TOKEN_AUDIENCE_FILE: /run/secrets/jwt-audience-{{.Name}} TOKEN_ISSUER_FILE: /run/secrets/jwt-issuer-{{.Name}} ACCESS_TOKEN_DURATION: ${ACCESS_TOKEN_DURATION} REFRESH_TOKEN_DURATION: ${REFRESH_TOKEN_DURATION} ORIGINS: ${ORIGINS} DB_PORT: ${DB_PORT} MAIL_HOST: ${MAIL_HOST} MAIL_PORT: ${MAIL_PORT} working_dir: /server secrets: db-root-password-{{.Name}}: file: ./secrets/db-root-password.secret db-root-user-{{.Name}}: file: ./secrets/db-root-user.secret db-password-{{.Name}}: file: ./secrets/db-password.secret db-user-{{.Name}}: file: ./secrets/db-user.secret db-name-{{.Name}}: file: ./secrets/db-name.secret mail-sender-{{.Name}}: file: ./secrets/mail-sender.secret mail-user-{{.Name}}: file: ./secrets/mail-user.secret mail-password-{{.Name}}: file: ./secrets/mail-password.secret jwt-secret-{{.Name}}: file: ./secrets/jwt-secret.secret jwt-audience-{{.Name}}: file: ./secrets/jwt-audience.secret jwt-issuer-{{.Name}}: file: ./secrets/jwt-issuer.secret