-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdocker-compose.yml
178 lines (166 loc) · 5.52 KB
/
docker-compose.yml
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
177
#############################################################################
# A new default web stack - using docker
#
# Based on the ideas in Simon Willison's talk:
# https://www.youtube.com/watch?v=P68zXJ_ACCE
#
# Usage (for development):
# Install docker-toolbox (or docker-engine + docker-compose)
# Create a django project
# docker-compose up -d
# open https://localhost/
#############################################################################
#############################################################################
# nginx reverse proxy
#
# This is the entry point for the stack, responsible for SSL termination and
# access logs
#############################################################################
proxy:
container_name: proxy
image: jwilder/nginx-proxy:latest
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
# Note: use letsencrypt container to maintain certs
# These volumes are required for that to work
- /srv/docker/letsencrypt:/etc/nginx/certs:ro
- /etc/nginx/vhost.d
- /usr/share/nginx/html
ports:
- 80:80
- 443:443
#############################################################################
# letsencrypt client service
#
# auto-generate and maintain SSL certs, adds to nginx-proxy
#############################################################################
letsencrypt:
container_name: letsencrypt
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /srv/docker/letsencrypt:/etc/nginx/certs:rw
volumes_from:
- proxy
#############################################################################
# varnish web cache
#
# varnish will cache HTTP content according to the rules in the caching
# headers. It can be configured to perform other caching tasks such as
# micro-caching, always caching certain types of content, etc.
#############################################################################
varnish:
container_name: varnish
image: eeacms/varnish:4s
restart: always
links:
- loadbalancer1:node1
# Useful for debugging
#ports:
# - 6081:6081
# For creating a custom config
#volumes:
# - /srv/docker/varnish:/etc/varnish/conf.d
expose:
- 6081
environment:
- VIRTUAL_HOST=mysite.example.com
- VIRTUAL_PORT=6081
- LETSENCRYPT_HOST=mysite.example.com
- LETSENCRYPT_EMAIL=mysite@example.com
#############################################################################
# haproxy load balancer
#
# Distribute load to application instances.
# This works well but it does require a restart to pick up new app instances.
#############################################################################
loadbalancer1:
container_name: lb1
image: tutum/haproxy:0.2.4.1
restart: always
links:
- app:app
# Useful for debugging
#ports:
# - 8010:80
# For creating a custom config
#volumes:
# - haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
#############################################################################
# memcached in-memory cache
#
# Not used here. Use redis or couchbase instead.
#############################################################################
#memcached:
# container_name: memcached
# image: memcached
# # Use 64MB
# command: memcached -m 64
#############################################################################
# redis in-memory data structure service
#
# Use for content caching, queues, fast set unions, top 10 lists, ...
#############################################################################
redis:
container_name: redis
image: redis:3.0.7-alpine
#############################################################################
# SOLR
#
# Search...
#############################################################################
solr:
container_name: solr
image: solr:5.5.0
#############################################################################
# Celery
#
# Asynchronous background workers
#############################################################################
celery:
container_name: celery
image: celery:3.1.20
links:
- celeryq:redis
environment:
- CELERY_BROKER_URL=redis://redis
#############################################################################
# Celery's queue - redis back-end
#
# Queue for asynchronous background tasks
#############################################################################
celeryq:
container_name: celeryq
image: redis:3.0.7-alpine
#############################################################################
# Postgresql database
#
# Main data storage component for django. This is the bit you back up!
#############################################################################
db:
container_name: db
image: postgres:9.5.1
volumes:
- /srv/docker/mysite_db:/var/lib/postgresql/data
environment:
- POSTGRES_USER=db
- POSTGRES_PASSWORD=secret
#############################################################################
# Your application code
#
# Uses django (but could be rails, tomcat, php, ...)
#############################################################################
app:
container_name: app
build: .
# Useful for debugging
#ports:
# - 8000:8000
volumes:
- .:/usr/src/app
links:
- db:db
- redis:redis
- solr:solr