/ docker-compose.yml
docker-compose.yml
  1  version: '3.6'
  2  
  3  x-app: &default-app
  4    build:
  5      context: "."
  6      target: "app"
  7      args:
  8        - "UID=${UID:-1000}"
  9        - "GID=${GID:-1000}"
 10        - "FLASK_DEBUG=${FLASK_DEBUG:-false}"
 11        - "NODE_ENV=${NODE_ENV:-production}"
 12    env_file:
 13      - ".env"
 14    restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
 15    stop_grace_period: "3s"
 16    tty: true
 17    volumes:
 18      - "${DOCKER_WEB_VOLUME:-./public:/app/public}"
 19      - "../allthethings-worldcat-data:/worldcat/"
 20    logging:
 21      driver: "local"
 22      options:
 23        max-size: 10m
 24        max-file: "3"
 25        compress: "false"
 26        mode: "non-blocking"
 27    network_mode: "${NETWORK_MODE:-bridge}"
 28  
 29  x-assets: &default-assets
 30    build:
 31      context: "."
 32      target: "assets"
 33      args:
 34        - "UID=${UID:-1000}"
 35        - "GID=${GID:-1000}"
 36        - "NODE_ENV=${NODE_ENV:-production}"
 37    env_file:
 38      - ".env"
 39    profiles: ["assets"]
 40    restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
 41    stop_grace_period: "0"
 42    tty: true
 43    volumes:
 44      - ".:/app"
 45  
 46  services:
 47    mariadb:
 48      container_name: mariadb
 49      network_mode: "${NETWORK_MODE:-bridge}"
 50      environment:
 51        MARIADB_USER: "${MARIADB_USER}"
 52        MARIADB_PASSWORD: "${MARIADB_PASSWORD}"
 53        MARIADB_ROOT_PASSWORD: "${MARIADB_PASSWORD}"
 54        MARIADB_DATABASE: "${MARIADB_DATABASE}"
 55        MARIADB_INITDB_SKIP_TZINFO: "1" # https://github.com/MariaDB/mariadb-docker/issues/262#issuecomment-672375238
 56      image: "mariadb:10.10.2"
 57      profiles: ["mariadb"]
 58      restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
 59      stop_grace_period: "3s"
 60      command: "--init-file /etc/mysql/conf.d/init.sql"
 61      # entrypoint: mysqld_safe --skip-grant-tables --user=mysql
 62      volumes:
 63        - "../allthethings-mysql-data:/var/lib/mysql/"
 64        - "./mariadb-conf:/etc/mysql/conf.d"
 65      ulimits:
 66        memlock:
 67          soft: -1
 68          hard: -1
 69        nproc: 65535
 70        nofile:
 71          soft: 65535
 72          hard: 65535
 73      logging:
 74        driver: "local"
 75  
 76    mariapersist:
 77      container_name: mariapersist
 78      network_mode: "${NETWORK_MODE:-bridge}"
 79      environment:
 80        MARIADB_USER: "${MARIAPERSIST_USER}"
 81        MARIADB_PASSWORD: "${MARIAPERSIST_PASSWORD}"
 82        MARIADB_RANDOM_ROOT_PASSWORD: "1"
 83        MARIADB_DATABASE: "${MARIAPERSIST_DATABASE}"
 84        MARIADB_INITDB_SKIP_TZINFO: "1" # https://github.com/MariaDB/mariadb-docker/issues/262#issuecomment-672375238
 85      image: "mariadb:10.10.2"
 86      profiles: ["mariapersist"]
 87      restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
 88      stop_grace_period: "3s"
 89      command: "--init-file /etc/mysql/conf.d/init.sql"
 90      # command: "--init-file /etc/mysql/conf.d/init.sql --tc-heuristic-recover=ROLLBACK"
 91      # entrypoint: mysqld_safe --skip-grant-tables --user=mysql
 92      volumes:
 93        - "../allthethings-mariapersist-data:/var/lib/mysql/"
 94        - "./mariapersist-conf:/etc/mysql/conf.d"
 95      ulimits:
 96        memlock:
 97          soft: -1
 98          hard: -1
 99        nproc: 65535
100        nofile:
101          soft: 65535
102          hard: 65535
103      logging:
104        driver: "local"
105  
106    mariapersistreplica:
107      container_name: mariapersistreplica
108      network_mode: "${NETWORK_MODE:-bridge}"
109      environment:
110        MARIADB_USER: "${MARIAPERSIST_USER}"
111        MARIADB_PASSWORD: "${MARIAPERSIST_PASSWORD}"
112        MARIADB_RANDOM_ROOT_PASSWORD: "1"
113        MARIADB_DATABASE: "${MARIAPERSIST_DATABASE}"
114        MARIADB_INITDB_SKIP_TZINFO: "1" # https://github.com/MariaDB/mariadb-docker/issues/262#issuecomment-672375238
115      image: "mariadb:10.10.2"
116      profiles: ["mariapersistreplica"]
117      restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
118      stop_grace_period: "3s"
119      command: "--init-file /etc/mysql/conf.d/init.sql  --server_id=${MARIAPERSISTREPLICA_SERVER_ID}"
120      # entrypoint: mysqld_safe --skip-grant-tables --user=mysql
121      volumes:
122        - "../allthethings-mariapersistreplica-data:/var/lib/mysql/"
123        - "./mariapersistreplica-conf:/etc/mysql/conf.d"
124      ulimits:
125        memlock:
126          soft: -1
127          hard: -1
128        nproc: 65535
129        nofile:
130          soft: 65535
131          hard: 65535
132      logging:
133        driver: "local"
134  
135    mariabackup:
136      container_name: mariabackup
137      image: woolfg/mysql-backup-sidecar:sha-fb85d88-mariadb-10.9
138      network_mode: "${NETWORK_MODE:-bridge}"
139      environment:
140        MYSQL_HOST: "${MARIABACKUP_HOST}"
141        MYSQL_PORT: "${MARIABACKUP_PORT}"
142        MYSQL_USER: "${MARIABACKUP_USER}"
143        MYSQL_PASSWORD: "${MARIABACKUP_PASSWORD}"
144      profiles: ["mariabackup"]
145      restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
146      stop_grace_period: "3s"
147      volumes:
148        - "../allthethings-mariapersistreplica-data:/var/lib/mysql/"
149        - "../allthethings-mariabackup-data:/backup"
150      ulimits:
151        memlock:
152          soft: -1
153          hard: -1
154        nproc: 65535
155        nofile:
156          soft: 65535
157          hard: 65535
158      logging:
159        driver: "local"
160  
161    # redis:
162    #   container_name: redis
163    #   network_mode: "${NETWORK_MODE:-bridge}"
164    #   deploy:
165    #     resources:
166    #       limits:
167    #         cpus: "${DOCKER_REDIS_CPUS:-0}"
168    #         memory: "${DOCKER_REDIS_MEMORY:-0}"
169    #   image: "redis:7.0.5-bullseye"
170    #   profiles: ["redis"]
171    #   restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
172    #   stop_grace_period: "3s"
173    #   volumes:
174    #     - "redis:/data"
175  
176    web:
177      <<: *default-app
178      container_name: web
179      healthcheck:
180        test: "${DOCKER_WEB_HEALTHCHECK_TEST:-curl localhost:8000/dyn/up/}"
181        interval: "60s"
182        timeout: "3s"
183        start_period: "5s"
184        retries: 3
185      profiles: ["web"]
186  
187    # worker:
188    #   <<: *default-app
189    #   container_name: worker
190    #   network_mode: "${NETWORK_MODE:-bridge}"
191    #   command: celery -A "allthethings.app.celery_app" worker -l "${CELERY_LOG_LEVEL:-info}"
192    #   entrypoint: []
193    #   deploy:
194    #     resources:
195    #       limits:
196    #         cpus: "${DOCKER_WORKER_CPUS:-0}"
197    #         memory: "${DOCKER_WORKER_MEMORY:-0}"
198    #   profiles: ["worker"]
199  
200    js:
201      <<: *default-assets
202      container_name: js
203      command: "../run yarn:build:js"
204  
205    css:
206      <<: *default-assets
207      container_name: css
208      command: "../run yarn:build:css"
209  
210    elasticsearch:
211      container_name: elasticsearch
212      network_mode: "${NETWORK_MODE:-bridge}"
213      build:
214        context: .
215        dockerfile: Dockerfile-elasticsearch
216      environment:
217        - "ES_PORT=9200"
218        - "ES_SETTING_TRANSPORT_PORT=9300"
219        - "ES_SETTING_DISCOVERY_TYPE=single-node"
220        - "ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true"
221        - "ES_JAVA_OPTS=-Xms8g -Xmx8g"
222        - "ES_SETTING_XPACK_SECURITY_ENABLED=false"
223      cap_add:
224        - IPC_LOCK
225      ulimits:
226        memlock:
227          soft: -1
228          hard: -1
229        nproc: 65535
230        nofile:
231          soft: 65535
232          hard: 65535
233      restart: unless-stopped
234      profiles: ["elasticsearch"]
235      volumes:
236        - "../allthethings-elastic-data:/usr/share/elasticsearch/data"
237      logging:
238        driver: "local"
239  
240    elasticsearchaux:
241      container_name: elasticsearchaux
242      network_mode: "${NETWORK_MODE:-bridge}"
243      build:
244        context: .
245        dockerfile: Dockerfile-elasticsearch
246      environment:
247        - "ES_PORT=9201"
248        - "ES_SETTING_HTTP_PORT=9201"
249        - "ES_SETTING_TRANSPORT_PORT=9301"
250        - "ES_SETTING_DISCOVERY_TYPE=single-node"
251        - "ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true"
252        - "ES_JAVA_OPTS=-Xms8g -Xmx8g"
253        - "ES_SETTING_XPACK_SECURITY_ENABLED=false"
254      cap_add:
255        - IPC_LOCK
256      ulimits:
257        memlock:
258          soft: -1
259          hard: -1
260        nproc: 65535
261        nofile:
262          soft: 65535
263          hard: 65535
264      restart: unless-stopped
265      profiles: ["elasticsearchaux"]
266      volumes:
267        - "../allthethings-elasticsearchaux-data:/usr/share/elasticsearch/data"
268      logging:
269        driver: "local"
270  
271    kibana:
272      container_name: kibana
273      network_mode: "${NETWORK_MODE:-bridge}"
274      image: docker.elastic.co/kibana/kibana:8.5.2
275      environment:
276        ELASTICSEARCH_HOSTS: '["http://elasticsearch:9200"]'
277      restart: unless-stopped
278      depends_on:
279        - "elasticsearch"
280      profiles: ["kibana"]
281      logging:
282        driver: "local"
283  
284    mailpit:
285      container_name: 'mailpit'
286      image: 'axllent/mailpit'
287      network_mode: "${NETWORK_MODE:-bridge}"
288      restart: unless-stopped
289      profiles: ["mailpit"]
290      logging:
291        driver: "local"