docker-compose.dev.yml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. # WARNING: This is a DEVELOPMENT docker-compose file, it should not be used for production.
  2. services:
  3. fullstack:
  4. image: npm2dev:core
  5. container_name: npm2dev.core
  6. build:
  7. context: ./
  8. dockerfile: ./dev/Dockerfile
  9. ports:
  10. - 3080:80
  11. - 3081:81
  12. - 3443:443
  13. networks:
  14. nginx_proxy_manager:
  15. aliases:
  16. - website1.example.com
  17. - website2.example.com
  18. - website3.example.com
  19. environment:
  20. PUID: 1000
  21. PGID: 1000
  22. FORCE_COLOR: 1
  23. # specifically for dev:
  24. DEBUG: 'true'
  25. DEVELOPMENT: 'true'
  26. LE_STAGING: 'true'
  27. # db:
  28. # DB_MYSQL_HOST: 'db'
  29. # DB_MYSQL_PORT: '3306'
  30. # DB_MYSQL_USER: 'npm'
  31. # DB_MYSQL_PASSWORD: 'npm'
  32. # DB_MYSQL_NAME: 'npm'
  33. # db-postgres:
  34. DB_POSTGRES_HOST: 'db-postgres'
  35. DB_POSTGRES_PORT: '5432'
  36. DB_POSTGRES_USER: 'npm'
  37. DB_POSTGRES_PASSWORD: 'npmpass'
  38. DB_POSTGRES_NAME: 'npm'
  39. # DB_SQLITE_FILE: "/data/database.sqlite"
  40. # DISABLE_IPV6: "true"
  41. # Required for DNS Certificate provisioning testing:
  42. LE_SERVER: 'https://ca.internal/acme/acme/directory'
  43. REQUESTS_CA_BUNDLE: '/etc/ssl/certs/NginxProxyManager.crt'
  44. volumes:
  45. - npm_data:/data
  46. - le_data:/etc/letsencrypt
  47. - './dev/resolv.conf:/etc/resolv.conf:ro'
  48. - ../backend:/app
  49. - ../frontend:/app/frontend
  50. - ../global:/app/global
  51. healthcheck:
  52. test: ["CMD", "/usr/bin/check-health"]
  53. interval: 10s
  54. timeout: 3s
  55. depends_on:
  56. - db
  57. - db-postgres
  58. - authentik
  59. - authentik-worker
  60. - authentik-ldap
  61. working_dir: /app
  62. db:
  63. image: jc21/mariadb-aria
  64. container_name: npm2dev.db
  65. ports:
  66. - 33306:3306
  67. networks:
  68. - nginx_proxy_manager
  69. environment:
  70. MYSQL_ROOT_PASSWORD: 'npm'
  71. MYSQL_DATABASE: 'npm'
  72. MYSQL_USER: 'npm'
  73. MYSQL_PASSWORD: 'npm'
  74. volumes:
  75. - db_data:/var/lib/mysql
  76. db-postgres:
  77. image: postgres:latest
  78. container_name: npm2dev.db-postgres
  79. networks:
  80. - nginx_proxy_manager
  81. environment:
  82. POSTGRES_USER: 'npm'
  83. POSTGRES_PASSWORD: 'npmpass'
  84. POSTGRES_DB: 'npm'
  85. volumes:
  86. - psql_data:/var/lib/postgresql/data
  87. - ./ci/postgres:/docker-entrypoint-initdb.d
  88. stepca:
  89. image: jc21/testca
  90. container_name: npm2dev.stepca
  91. volumes:
  92. - './dev/resolv.conf:/etc/resolv.conf:ro'
  93. - '/etc/localtime:/etc/localtime:ro'
  94. networks:
  95. nginx_proxy_manager:
  96. aliases:
  97. - ca.internal
  98. dnsrouter:
  99. image: jc21/dnsrouter
  100. container_name: npm2dev.dnsrouter
  101. volumes:
  102. - ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro
  103. networks:
  104. - nginx_proxy_manager
  105. swagger:
  106. image: swaggerapi/swagger-ui:latest
  107. container_name: npm2dev.swagger
  108. ports:
  109. - 3082:80
  110. environment:
  111. URL: "http://npm:81/api/schema"
  112. PORT: '80'
  113. depends_on:
  114. - fullstack
  115. squid:
  116. image: ubuntu/squid
  117. container_name: npm2dev.squid
  118. volumes:
  119. - './dev/squid.conf:/etc/squid/squid.conf:ro'
  120. - './dev/resolv.conf:/etc/resolv.conf:ro'
  121. - '/etc/localtime:/etc/localtime:ro'
  122. networks:
  123. - nginx_proxy_manager
  124. ports:
  125. - 8128:3128
  126. pdns:
  127. image: pschiffe/pdns-mysql:4.8
  128. container_name: npm2dev.pdns
  129. volumes:
  130. - '/etc/localtime:/etc/localtime:ro'
  131. environment:
  132. PDNS_master: 'yes'
  133. PDNS_api: 'yes'
  134. PDNS_api_key: 'npm'
  135. PDNS_webserver: 'yes'
  136. PDNS_webserver_address: '0.0.0.0'
  137. PDNS_webserver_password: 'npm'
  138. PDNS_webserver-allow-from: '127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8'
  139. PDNS_version_string: 'anonymous'
  140. PDNS_default_ttl: 1500
  141. PDNS_allow_axfr_ips: '127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8'
  142. PDNS_gmysql_host: pdns-db
  143. PDNS_gmysql_port: 3306
  144. PDNS_gmysql_user: pdns
  145. PDNS_gmysql_password: pdns
  146. PDNS_gmysql_dbname: pdns
  147. depends_on:
  148. - pdns-db
  149. networks:
  150. nginx_proxy_manager:
  151. aliases:
  152. - ns1.pdns
  153. - ns2.pdns
  154. pdns-db:
  155. image: mariadb
  156. container_name: npm2dev.pdns-db
  157. environment:
  158. MYSQL_ROOT_PASSWORD: 'pdns'
  159. MYSQL_DATABASE: 'pdns'
  160. MYSQL_USER: 'pdns'
  161. MYSQL_PASSWORD: 'pdns'
  162. volumes:
  163. - 'pdns_mysql:/var/lib/mysql'
  164. - '/etc/localtime:/etc/localtime:ro'
  165. - './dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro'
  166. networks:
  167. - nginx_proxy_manager
  168. cypress:
  169. image: npm2dev:cypress
  170. container_name: npm2dev.cypress
  171. build:
  172. context: ../
  173. dockerfile: test/cypress/Dockerfile
  174. environment:
  175. HTTP_PROXY: 'squid:3128'
  176. HTTPS_PROXY: 'squid:3128'
  177. volumes:
  178. - '../test/results:/results'
  179. - './dev/resolv.conf:/etc/resolv.conf:ro'
  180. - '/etc/localtime:/etc/localtime:ro'
  181. command: cypress run --browser chrome --config-file=cypress/config/ci.js
  182. networks:
  183. - nginx_proxy_manager
  184. authentik-redis:
  185. image: 'redis:alpine'
  186. container_name: npm2dev.authentik-redis
  187. command: --save 60 1 --loglevel warning
  188. networks:
  189. - nginx_proxy_manager
  190. restart: unless-stopped
  191. healthcheck:
  192. test: ['CMD-SHELL', 'redis-cli ping | grep PONG']
  193. start_period: 20s
  194. interval: 30s
  195. retries: 5
  196. timeout: 3s
  197. volumes:
  198. - redis_data:/data
  199. authentik:
  200. image: ghcr.io/goauthentik/server:2024.10.1
  201. container_name: npm2dev.authentik
  202. restart: unless-stopped
  203. command: server
  204. networks:
  205. - nginx_proxy_manager
  206. env_file:
  207. - ci.env
  208. ports:
  209. - 9000:9000
  210. depends_on:
  211. - authentik-redis
  212. - db-postgres
  213. authentik-worker:
  214. image: ghcr.io/goauthentik/server:2024.10.1
  215. container_name: npm2dev.authentik-worker
  216. restart: unless-stopped
  217. command: worker
  218. networks:
  219. - nginx_proxy_manager
  220. env_file:
  221. - ci.env
  222. depends_on:
  223. - authentik-redis
  224. - db-postgres
  225. authentik-ldap:
  226. image: ghcr.io/goauthentik/ldap:2024.10.1
  227. container_name: npm2dev.authentik-ldap
  228. networks:
  229. - nginx_proxy_manager
  230. environment:
  231. AUTHENTIK_HOST: 'http://authentik:9000'
  232. AUTHENTIK_INSECURE: 'true'
  233. AUTHENTIK_TOKEN: 'wKYZuRcI0ETtb8vWzMCr04oNbhrQUUICy89hSpDln1OEKLjiNEuQ51044Vkp'
  234. restart: unless-stopped
  235. depends_on:
  236. - authentik
  237. volumes:
  238. npm_data:
  239. name: npm2dev_core_data
  240. le_data:
  241. name: npm2dev_le_data
  242. db_data:
  243. name: npm2dev_db_data
  244. pdns_mysql:
  245. name: npnpm2dev_pdns_mysql
  246. psql_data:
  247. name: npm2dev_psql_data
  248. redis_data:
  249. name: npm2dev_redis_data
  250. networks:
  251. nginx_proxy_manager:
  252. name: npm2dev_network