· 9 years ago · Jun 07, 2016, 07:45 PM
1#!/usr/bin/env ansible-playbook
2---
3- name: run mezzanine from containers
4 hosts: localhost
5 vars_files:
6 - secrets.yml
7 vars:
8 # The postgres container uses the same name for the database
9 # and the user
10 database_name: mezzanine
11 database_user: mezzanine
12 database_port: 5432
13 gunicorn_port: 8000
14 docker_host: "{{ lookup('env', 'DOCKER_HOST') |
15regex_replace('^tcp://(.*):\\d+$', '\\\\1') | default('localhost', true) }}"
16 project_dir: /srv/project
17 website_domain: "{{ docker_host }}.xip.io"
18 mezzanine_env:
19 SECRET_KEY: "{{ secret_key }}"
20 NEVERCACHE_KEY: "{{ nevercache_key }}"
21 ALLOWED_HOSTS: "*"
22 DATABASE_NAME: "{{ database_name }}"
23 DATABASE_USER: "{{ database_user }}"
24 DATABASE_PASSWORD: "{{ database_password }}"
25 DATABASE_HOST: "{{ database_host }}"
26 DATABASE_PORT: "{{ database_port }}"
27 GUNICORN_PORT: "{{ gunicorn_port }}"
28 setadmin_env:
29 PROJECT_DIR: "{{ project_dir }}"
30 ADMIN_PASSWORD: "{{ admin_password }}"
31 setsite_env:
32 PROJECT_DIR: "{{ project_dir }}"
33 WEBSITE_DOMAIN: "{{ website_domain }}"
34
35 tasks:
36 - name: start the postgres container
37 docker:
38 image: postgres:9.4
39 name: postgres
40 publish_all_ports: True
41 env:
42 POSTGRES_USER: "{{ database_user }}"
43 POSTGRES_PASSWORD: "{{ database_password }}"
44
45 - name: capture database ip address and mapped port
46 set_fact:
47 database_host: "{{ docker_containers[0].NetworkSettings.IPAddress }}"
48 mapped_database_port: "{{ docker_containers[0].NetworkSettings.Ports[
49'5432/tcp'][0].HostPort}}"
50
51 - name: wait for database to come up
52 wait_for: host={{ docker_host }} port={{ mapped_database_port }}
53
54 - name: initialize database
55 docker:
56 image: lorin/mezzanine:latest
57 command: python manage.py {{ item }} --noinput
58 wait: True
59 env: "{{ mezzanine_env }}"
60 with_items:
61 - syncdb
62 - migrate
63 register: django
64
65 - name: set the site id
66 docker:
67 image: lorin/mezzanine:latest
68 command: /srv/scripts/setsite.py
69 env: "{{ setsite_env.update(mezzanine_env) }}{{ setsite_env }}"
70 wait: yes
71
72 - name: set the admin password
73 docker:
74 image: lorin/mezzanine:latest
75 command: /srv/scripts/setadmin.py
76 env: "{{ setadmin_env.update(mezzanine_env) }}{{ setadmin_env }}"
77 wait: yes
78
79 - name: start the memcached container
80 docker:
81 image: lorin/memcached:latest
82 name: memcached
83
84 - name: start the mezzanine container
85 docker:
86 image: lorin/mezzanine:latest
87 name: mezzanine
88 env: "{{ mezzanine_env }}"
89 links: memcached
90
91 - name: start the mezzanine cron job
92 docker:
93 image: lorin/mezzanine:latest
94 name: mezzanine
95 env: "{{ mezzanine_env }}"
96 command: cron -f
97
98 - name: start the cert container
99 docker:
100 image: lorin/certs:latest
101 name: certs
102
103 - name: run nginx
104 docker:
105 image: lorin/nginx-mezzanine:latest
106 ports:
107 - 80:80
108 - 443:443
109 name: nginx
110 volumes_from:
111 - mezzanine
112 - certs
113 links: mezzanine