docker-compose.yml 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. ---
  2. ###############################################################
  3. # Please see docker/README.md for usage information
  4. ###############################################################
  5. services:
  6. # HTTP/HTTPS proxy
  7. #
  8. # Sits in front of the *real* webserver and manages SSL and (optionally)
  9. # load-balancing between multiple web servers
  10. #
  11. # You can disable this service by setting [DOCKER_PROXY_PROFILE="disabled"]
  12. # in your [.env] file - the setting is near the bottom of the file.
  13. #
  14. # This also disables the [proxy-acme] service, if this is not desired, change the
  15. # [DOCKER_PROXY_ACME_PROFILE] setting to an empty string [""]
  16. #
  17. # See: https://github.com/nginx-proxy/nginx-proxy/tree/main/docs
  18. proxy:
  19. image: nginxproxy/nginx-proxy:1.4
  20. container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-proxy"
  21. restart: unless-stopped
  22. profiles:
  23. - ${DOCKER_PROXY_PROFILE:-}
  24. environment:
  25. DOCKER_SERVICE_NAME: "proxy"
  26. volumes:
  27. - "${DOCKER_PROXY_HOST_DOCKER_SOCKET_PATH}:/tmp/docker.sock:ro"
  28. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/conf.d:/etc/nginx/conf.d"
  29. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/vhost.d:/etc/nginx/vhost.d"
  30. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/certs:/etc/nginx/certs"
  31. - "${DOCKER_ALL_HOST_DATA_ROOT_PATH}/proxy/html:/usr/share/nginx/html"
  32. ports:
  33. - "${DOCKER_PROXY_HOST_PORT_HTTP}:80"
  34. - "${DOCKER_PROXY_HOST_PORT_HTTPS}:443"
  35. healthcheck:
  36. test: "curl --fail https://${APP_DOMAIN}/api/service/health-check"
  37. interval: "${DOCKER_PROXY_HEALTHCHECK_INTERVAL}"
  38. retries: 2
  39. timeout: 5s
  40. # Proxy companion for managing letsencrypt SSL certificates
  41. #
  42. # You can disable this service by setting [DOCKER_PROXY_ACME_PROFILE="disabled"]
  43. # in your [.env] file - the setting is near the bottom of the file.
  44. #
  45. # See: https://github.com/nginx-proxy/acme-companion/tree/main/docs
  46. proxy-acme:
  47. image: nginxproxy/acme-companion
  48. container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-proxy-acme"
  49. restart: unless-stopped
  50. profiles:
  51. - ${DOCKER_PROXY_ACME_PROFILE:-}
  52. environment:
  53. DEBUG: 0
  54. DEFAULT_EMAIL: "${DOCKER_PROXY_LETSENCRYPT_EMAIL:?error}"
  55. NGINX_PROXY_CONTAINER: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-proxy"
  56. depends_on:
  57. - proxy
  58. volumes:
  59. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy-acme:/etc/acme.sh"
  60. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/certs:/etc/nginx/certs"
  61. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/conf.d:/etc/nginx/conf.d"
  62. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/vhost.d:/etc/nginx/vhost.d"
  63. - "${DOCKER_ALL_HOST_DATA_ROOT_PATH}/proxy/html:/usr/share/nginx/html"
  64. - "${DOCKER_PROXY_HOST_DOCKER_SOCKET_PATH}:/var/run/docker.sock:ro"
  65. web:
  66. image: "${DOCKER_APP_IMAGE}:${DOCKER_APP_TAG}"
  67. container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-web"
  68. restart: unless-stopped
  69. profiles:
  70. - ${DOCKER_WEB_PROFILE:-}
  71. build:
  72. target: ${DOCKER_APP_RUNTIME}-runtime
  73. cache_from:
  74. - "type=registry,ref=${DOCKER_APP_IMAGE}-cache:${DOCKER_APP_TAG}"
  75. args:
  76. APT_PACKAGES_EXTRA: "${DOCKER_APP_APT_PACKAGES_EXTRA:-}"
  77. BUILD_FRONTEND: "${DOCKER_APP_BUILD_FRONTEND:-0}"
  78. PHP_BASE_TYPE: "${DOCKER_APP_BASE_TYPE}"
  79. PHP_DEBIAN_RELEASE: "${DOCKER_APP_DEBIAN_RELEASE}"
  80. PHP_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_EXTENSIONS_EXTRA:-}"
  81. PHP_PECL_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_PECL_EXTENSIONS_EXTRA:-}"
  82. PHP_VERSION: "${DOCKER_APP_PHP_VERSION:?error}"
  83. environment:
  84. # Used by Pixelfed Docker init script
  85. DOCKER_SERVICE_NAME: "web"
  86. DOCKER_APP_ENTRYPOINT_DEBUG: ${DOCKER_APP_ENTRYPOINT_DEBUG:-0}
  87. ENTRYPOINT_SKIP_SCRIPTS: ${ENTRYPOINT_SKIP_SCRIPTS:-}
  88. # Used by [proxy] service
  89. LETSENCRYPT_HOST: "${DOCKER_PROXY_LETSENCRYPT_HOST:?error}"
  90. LETSENCRYPT_EMAIL: "${DOCKER_PROXY_LETSENCRYPT_EMAIL:?error}"
  91. LETSENCRYPT_TEST: "${DOCKER_PROXY_LETSENCRYPT_TEST:-}"
  92. VIRTUAL_HOST: "${APP_DOMAIN}"
  93. VIRTUAL_PORT: "80"
  94. volumes:
  95. - "./.env:/var/www/.env"
  96. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/conf.d:/shared/proxy/conf.d"
  97. - "${DOCKER_APP_HOST_CACHE_PATH}:/var/www/bootstrap/cache"
  98. - "${DOCKER_APP_HOST_OVERRIDES_PATH}:/docker/overrides:ro"
  99. - "${DOCKER_APP_HOST_STORAGE_PATH}:/var/www/storage"
  100. labels:
  101. com.github.nginx-proxy.nginx-proxy.keepalive: 30
  102. com.github.nginx-proxy.nginx-proxy.http2.enable: true
  103. com.github.nginx-proxy.nginx-proxy.http3.enable: true
  104. ports:
  105. - "${DOCKER_WEB_PORT_EXTERNAL_HTTP}:80"
  106. depends_on:
  107. - db
  108. - redis
  109. healthcheck:
  110. test: 'curl --header "Host: ${APP_DOMAIN}" --fail http://localhost/api/service/health-check'
  111. interval: "${DOCKER_WEB_HEALTHCHECK_INTERVAL}"
  112. retries: 2
  113. timeout: 5s
  114. worker:
  115. image: "${DOCKER_APP_IMAGE}:${DOCKER_APP_TAG}"
  116. container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-worker"
  117. command: gosu www-data php artisan horizon
  118. restart: unless-stopped
  119. stop_signal: SIGTERM
  120. profiles:
  121. - ${DOCKER_WORKER_PROFILE:-}
  122. build:
  123. target: ${DOCKER_APP_RUNTIME}-runtime
  124. cache_from:
  125. - "type=registry,ref=${DOCKER_APP_IMAGE}-cache:${DOCKER_APP_TAG}"
  126. args:
  127. APT_PACKAGES_EXTRA: "${DOCKER_APP_APT_PACKAGES_EXTRA:-}"
  128. BUILD_FRONTEND: "${DOCKER_APP_BUILD_FRONTEND:-0}"
  129. PHP_BASE_TYPE: "${DOCKER_APP_BASE_TYPE}"
  130. PHP_DEBIAN_RELEASE: "${DOCKER_APP_DEBIAN_RELEASE}"
  131. PHP_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_EXTENSIONS_EXTRA:-}"
  132. PHP_PECL_EXTENSIONS_EXTRA: "${DOCKER_APP_PHP_PECL_EXTENSIONS_EXTRA:-}"
  133. PHP_VERSION: "${DOCKER_APP_PHP_VERSION:?error}"
  134. environment:
  135. # Used by Pixelfed Docker init script
  136. DOCKER_SERVICE_NAME: "worker"
  137. DOCKER_APP_ENTRYPOINT_DEBUG: ${DOCKER_APP_ENTRYPOINT_DEBUG:-0}
  138. ENTRYPOINT_SKIP_SCRIPTS: ${ENTRYPOINT_SKIP_SCRIPTS:-}
  139. volumes:
  140. - "./.env:/var/www/.env"
  141. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/proxy/conf.d:/shared/proxy/conf.d"
  142. - "${DOCKER_APP_HOST_CACHE_PATH}:/var/www/bootstrap/cache"
  143. - "${DOCKER_APP_HOST_OVERRIDES_PATH}:/docker/overrides:ro"
  144. - "${DOCKER_APP_HOST_STORAGE_PATH}:/var/www/storage"
  145. depends_on:
  146. - db
  147. - redis
  148. healthcheck:
  149. test: gosu www-data php artisan horizon:status | grep running
  150. interval: "${DOCKER_WORKER_HEALTHCHECK_INTERVAL:?error}"
  151. timeout: 5s
  152. retries: 2
  153. db:
  154. image: ${DOCKER_DB_IMAGE:?error}
  155. container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-db"
  156. command: ${DOCKER_DB_COMMAND:-}
  157. restart: unless-stopped
  158. profiles:
  159. - ${DOCKER_DB_PROFILE:-}
  160. environment:
  161. TZ: "${TZ:?error}"
  162. # MySQL (Oracle) - "Environment Variables" at https://hub.docker.com/_/mysql
  163. MYSQL_ROOT_PASSWORD: "${DOCKER_DB_ROOT_PASSWORD:?error}"
  164. MYSQL_USER: "${DB_USERNAME:?error}"
  165. MYSQL_PASSWORD: "${DB_PASSWORD:?error}"
  166. MYSQL_DATABASE: "${DB_DATABASE:?error}"
  167. # MySQL (MariaDB) - "Start a mariadb server instance with user, password and database" at https://hub.docker.com/_/mariadb
  168. MARIADB_ROOT_PASSWORD: "${DOCKER_DB_ROOT_PASSWORD:?error}"
  169. MARIADB_USER: "${DB_USERNAME:?error}"
  170. MARIADB_PASSWORD: "${DB_PASSWORD:?error}"
  171. MARIADB_DATABASE: "${DB_DATABASE:?error}"
  172. # PostgreSQL - "Environment Variables" at https://hub.docker.com/_/postgres
  173. POSTGRES_USER: "${DB_USERNAME:?error}"
  174. POSTGRES_PASSWORD: "${DB_PASSWORD:?error}"
  175. POSTGRES_DB: "${DB_DATABASE:?error}"
  176. volumes:
  177. - "${DOCKER_DB_HOST_DATA_PATH:?error}:${DOCKER_DB_CONTAINER_DATA_PATH:?error}"
  178. ports:
  179. - "${DOCKER_DB_HOST_PORT:?error}:${DOCKER_DB_CONTAINER_PORT:?error}"
  180. healthcheck:
  181. test:
  182. [
  183. "CMD",
  184. "healthcheck.sh",
  185. "--su-mysql",
  186. "--connect",
  187. "--innodb_initialized",
  188. ]
  189. interval: "${DOCKER_DB_HEALTHCHECK_INTERVAL:?error}"
  190. retries: 2
  191. timeout: 5s
  192. redis:
  193. image: redis:${DOCKER_REDIS_VERSION}
  194. container_name: "${DOCKER_ALL_CONTAINER_NAME_PREFIX}-redis"
  195. restart: unless-stopped
  196. command: "${DOCKER_REDIS_CONFIG_FILE:-} --requirepass '${REDIS_PASSWORD:-}'"
  197. profiles:
  198. - ${DOCKER_REDIS_PROFILE:-}
  199. environment:
  200. TZ: "${TZ:?error}"
  201. REDISCLI_AUTH: ${REDIS_PASSWORD:-}
  202. volumes:
  203. - "${DOCKER_ALL_HOST_CONFIG_ROOT_PATH}/redis:/etc/redis"
  204. - "${DOCKER_REDIS_HOST_DATA_PATH}:/data"
  205. ports:
  206. - "${DOCKER_REDIS_HOST_PORT}:6379"
  207. healthcheck:
  208. test: ["CMD", "redis-cli", "-p", "6379", "ping"]
  209. interval: "${DOCKER_REDIS_HEALTHCHECK_INTERVAL:?error}"
  210. retries: 2
  211. timeout: 5s