-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker-compose.yaml
180 lines (165 loc) · 5.23 KB
/
docker-compose.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
version: '3'
##MICROSERVICES##
services: ##MICROSERVICES##
#NGINX SERVICE
nginx:
container_name: "${PROJECT_NAME}_nginx"
build: ## Build the yml file
context: ./docker/nginx # Dockerfile will be in the same folder as docker-compose.yml
dockerfile: Dockerfile #Use dockerfile for image build
depends_on: # This service depends on another service named "app" so start the other service first
- app
volumes: # Host directory (./) : container directory (/var/www/vhost/company-crm:cached)
- ./:/var/www/vhost/${PROJECT_NAME}:cached #company-crm
- ./docker/nginx/conf.d/site.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d:/etc/nginx/conf.d/ #d/
- ./docker/nginx/ssl:/etc/nginx/ssl #ssl/
#- ./docker/nginx/ngnix.conf:/etc/nginx/nginx.conf
#- ./docker/nginx/conf.d/site.conf:/etc/nginx/nginx.conf
#- ./docker/nginx/site.conf:/etc/nginx/config.d/default.conf:rw # server block
working_dir: /var/www/vhost/ #Application file will be here
restart: unless-stopped
tty: true
ports:
- '444:443'
- '9008:9008'
networks:
- company-crm
labels:
- 'traefik.http.routers.${PROJECT_NAME}_nginx.rule=HostRegexp(`${APP_DOMAIN}`, `{subdomain:[a-z]+.${APP_DOMAIN}}`)'
- 'traefik.http.routers.${PROJECT_NAME}_nginx.priority=1'
- 'traefik.docker.network=proxy'
healthcheck:
test: ["CMD", "curl", "--fail", "--silent", "--connect-timeout", "1", "http://localhost:9008/api/ping"]
interval: 60s
timeout: 3s
retries: 3
# Define deployment replicas and restart policy
#deploy:
#replicas: 2 # Define number of replicas to create for a service deployment
#restart_policy:
#condition: on-failure
#delay: 5s # Delay before restarting a container
#max_attempts: 3
#window: 120s
#PHP SERVICE
app:
container_name: "${PROJECT_NAME}_php"
restart: unless-stopped
tty: true
build:
context: ./docker/php
dockerfile: Dockerfile
environment:
PHP_MEMORY_LIMIT: '512M'
COMPOSER_MEMORY_LIMIT: '-1' #never die
user: 501:501
volumes:
- ./:/var/www/vhost/${PROJECT_NAME}:cached #company-crm:cached
#- ./docker/src:/var/www/vhost/${PROJECT_NAME}:cached #company-crm:cached
#- ./:/var/www/vhost/${PROJECT_NAME}:cached #company-crm:cached
#- ./docker-files/php/local.ini:/usr/local/etc/php/conf.d/local.ini # example
working_dir: /var/www/vhost/${PROJECT_NAME} #company-crm
ports:
- '9003:9003'
networks:
- company-crm
#REDIS SERVICE CACHING
redis:
image: redis:latest
container_name: "${PROJECT_NAME}_redis"
ports:
- '6379:6379'
volumes:
- 'company-crm_redis:/data' #'company-crm_redis:/data'
networks:
- company-crm
#MYSQL SERVICE
mysql:
image: mariadb:latest
container_name: "${PROJECT_NAME}_mysql"
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: '%'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
SERVICE_TAGS: dev
SERVICE_NAME: mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
tty: true
volumes:
- './docker/mysql:/var/lib/mysql:rw'
# - 'company-crm_mysql:/data'
ports:
- '4406:3306'
#- '${FORWARD_DB_PORT:-4406}:3306'
networks:
- company-crm
#Postgres SERVICE
postgres:
image: postgres:12.3-alpine #postgres:latest
container_name: "${PROJECT_NAME}_postgres"
environment:
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE}
POSTGRES_HOST_AUTH_METHOD: trust
restart: always
volumes:
- ./docker/postgres:/var/lib/postgresql/data
ports:
- '5433:5432'
networks:
- company-crm
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
container_name: "${PROJECT_NAME}_phpmyadmin"
depends_on:
- mysql
ports:
- "8081:80"
environment:
PMA_HOST: '${APP_DOMAIN}'
PMA_PORT: '9003'
PMA_USER: '${DB_USERNAME}'
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
volumes:
- './docker/phpmyadmin:/data/db'
networks:
- company-crm
#TRAEFIK SERVICE
traefik:
image: traefik:v2.0
container_name: "${PROJECT_NAME}_traefik"
restart: always
command:
- --entrypoints.web.address=:80
- --providers.docker=true
- --api.insecure=true
- --log.level=debug
#- --entrypoints.web-secure.address=:444
#- --entrypoints.web-secure.tls=true
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
#- - "/var/run/docker.sock:/var/run/docker.sock:ro"
ports:
- '83:80' #'80:80'
- '8080:8080' #Docker sends requests on port 8080 to Traefik on port 8080
networks:
- company-crm # Put service in "company-crm" bridge network
# NETWORKS
networks:
company-crm: # define a bridge network
driver: bridge
# VOLUMES
volumes:
company-crm_mysql:
driver: local
company-crm_phpmyadmin:
driver: local
company-crm_redis:
driver: local