compose.relay.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. name: chengchuan-relay
  2. services:
  3. app:
  4. image: chengchuan-relay:${RELAY_VERSION:-local}
  5. build:
  6. context: ..
  7. dockerfile: Dockerfile
  8. args:
  9. VERSION: ${RELAY_VERSION:-relay-v3-dev}
  10. GOLANG_IMAGE: golang:1.27.1-alpine
  11. GOPROXY: https://proxy.golang.org,direct
  12. GOSUMDB: sum.golang.org
  13. restart: unless-stopped
  14. security_opt: [no-new-privileges:true]
  15. ports:
  16. - ${BIND_HOST:-127.0.0.1}:${SERVER_PORT:-8080}:8080
  17. volumes:
  18. - relay-data:/app/data
  19. environment:
  20. AUTO_SETUP: "true"
  21. SERVER_HOST: 0.0.0.0
  22. SERVER_PORT: "8080"
  23. SERVER_MODE: release
  24. RUN_MODE: standard
  25. DATABASE_HOST: postgres
  26. DATABASE_PORT: "5432"
  27. DATABASE_USER: relay
  28. DATABASE_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}
  29. DATABASE_DBNAME: relay
  30. DATABASE_SSLMODE: disable
  31. REDIS_HOST: redis
  32. REDIS_PORT: "6379"
  33. REDIS_PASSWORD: ${REDIS_PASSWORD:?Set REDIS_PASSWORD}
  34. ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@relay.local}
  35. ADMIN_PASSWORD: ${ADMIN_PASSWORD:?Set ADMIN_PASSWORD}
  36. JWT_SECRET: ${JWT_SECRET:?Set JWT_SECRET}
  37. TOTP_ENCRYPTION_KEY: ${TOTP_ENCRYPTION_KEY:?Set TOTP_ENCRYPTION_KEY}
  38. TZ: Asia/Hong_Kong
  39. SECURITY_URL_ALLOWLIST_ENABLED: "false"
  40. SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP: "false"
  41. SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS: "false"
  42. depends_on:
  43. postgres: {condition: service_healthy}
  44. redis: {condition: service_healthy}
  45. healthcheck:
  46. test: [CMD, wget, -q, -T, "5", -O, /dev/null, "http://127.0.0.1:8080/health"]
  47. interval: 15s
  48. timeout: 6s
  49. start_period: 90s
  50. retries: 5
  51. logging:
  52. driver: json-file
  53. options: {max-size: 20m, max-file: "3"}
  54. postgres:
  55. image: postgres:18-alpine
  56. restart: unless-stopped
  57. security_opt: [no-new-privileges:true]
  58. environment:
  59. POSTGRES_USER: relay
  60. POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}
  61. POSTGRES_DB: relay
  62. volumes:
  63. - relay-postgres:/var/lib/postgresql
  64. healthcheck:
  65. test: [CMD-SHELL, pg_isready -U relay -d relay]
  66. interval: 5s
  67. timeout: 5s
  68. retries: 20
  69. logging:
  70. driver: json-file
  71. options: {max-size: 10m, max-file: "3"}
  72. redis:
  73. image: redis:7-alpine
  74. restart: unless-stopped
  75. security_opt: [no-new-privileges:true]
  76. environment:
  77. REDIS_PASSWORD: ${REDIS_PASSWORD:?Set REDIS_PASSWORD}
  78. command: [sh, -c, 'exec redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"']
  79. volumes:
  80. - relay-redis:/data
  81. healthcheck:
  82. test: [CMD-SHELL, 'REDISCLI_AUTH="$$REDIS_PASSWORD" redis-cli ping | grep -q PONG']
  83. interval: 5s
  84. timeout: 5s
  85. retries: 20
  86. logging:
  87. driver: json-file
  88. options: {max-size: 10m, max-file: "3"}
  89. volumes:
  90. relay-data:
  91. relay-postgres:
  92. relay-redis: