services: db: image: postgres:16-alpine restart: on-failure volumes: - "postgresql-data:/var/lib/postgresql" environment: POSTGRES_PASSWORD: secret web: platform: $ARCH hostname: ghr.localhost image: ghr-web build: context: . target: ghr-web volumes: - .:/app environment: GHR_GITHUB_PERSONAL_ACCESS_TOKEN: ${GHR_GITHUB_PERSONAL_ACCESS_TOKEN} GHR_HOST: ${GHR_HOST} GHR_HOSTS_ALLOWED: ${GHR_HOSTS_ALLOWED:-ghr.localhost} GHR_IMPORT_ATTEMPT_CONFIG: "{\"attempts\":5,\"sleep\":-23}" RUBY_YJIT_ENABLE: "1" EMAIL_ENABLED: ${EMAIL_ENABLED} EMAIL_NOTIFY_SMTP_URL: ${EMAIL_NOTIFY_SMTP_URL} EMAIL_NOTIFY_USER: ${EMAIL_NOTIFY_USER} JIRA_ENABLED: ${JIRA_ENABLED} JIRA_USERNAME: ${JIRA_USERNAME} JIRA_URL: ${JIRA_URL} JIRA_PROJECT: ${JIRA_PROJECT} JIRA_API_TOKEN: ${JIRA_API_TOKEN} SOLID_QUEUE_IN_PUMA: "1" stdin_open: true tty: true ports: - "127.0.0.1:8123:3000" depends_on: - db healthcheck: test: [ "CMD", "ruby", "-e", "require 'net/http'; require 'json'; Net::HTTP.get_response(URI('http://ghr.localhost:3000/livez')).then { it.code == '200' && JSON(it.body)['status'] == 'ok' } or exit 1" ] interval: 30s timeout: 10s retries: 3 start_period: 40s volumes: postgresql-data: