From 1a00c3774b4dde79ed73c4888a3105d3b1b07952 Mon Sep 17 00:00:00 2001 From: Leonard Krause Date: Fri, 27 Apr 2018 01:41:53 +0200 Subject: [PATCH] initial deployment setup (staging env) --- .gitmodules | 11 ++++ ansible/group_vars/all.yml | 13 +++++ ansible/host_vars/net1.yml | 10 ++++ ansible/hosts-swt-deployment | 4 ++ ansible/local-deployment.sh | 13 +++++ ansible/playbook-swt-deployment.yml | 23 ++++++++ ansible/roles/common | 1 + ansible/roles/docker | 1 + ansible/roles/docker-nginx-proxy | 1 + .../defaults/main.yml | 4 ++ .../handlers/main.yml | 28 ++++++++++ .../docker-swt-deployment-local/meta/main.yml | 2 + .../tasks/main.yml | 42 ++++++++++++++ .../templates/.env | 3 + .../templates/db.env | 4 ++ .../templates/docker-compose.yml | 55 +++++++++++++++++++ .../tests/inventory | 1 + .../tests/test.yml | 5 ++ .../docker-swt-deployment-local/vars/main.yml | 2 + docker/.env | 3 + docker/db.env | 4 ++ docker/docker-compose.yml | 55 +++++++++++++++++++ 22 files changed, 285 insertions(+) create mode 100644 .gitmodules create mode 100644 ansible/group_vars/all.yml create mode 100644 ansible/host_vars/net1.yml create mode 100644 ansible/hosts-swt-deployment create mode 100755 ansible/local-deployment.sh create mode 100644 ansible/playbook-swt-deployment.yml create mode 160000 ansible/roles/common create mode 160000 ansible/roles/docker create mode 160000 ansible/roles/docker-nginx-proxy create mode 100644 ansible/roles/docker-swt-deployment-local/defaults/main.yml create mode 100644 ansible/roles/docker-swt-deployment-local/handlers/main.yml create mode 100644 ansible/roles/docker-swt-deployment-local/meta/main.yml create mode 100644 ansible/roles/docker-swt-deployment-local/tasks/main.yml create mode 100644 ansible/roles/docker-swt-deployment-local/templates/.env create mode 100644 ansible/roles/docker-swt-deployment-local/templates/db.env create mode 100644 ansible/roles/docker-swt-deployment-local/templates/docker-compose.yml create mode 100644 ansible/roles/docker-swt-deployment-local/tests/inventory create mode 100644 ansible/roles/docker-swt-deployment-local/tests/test.yml create mode 100644 ansible/roles/docker-swt-deployment-local/vars/main.yml create mode 100644 docker/.env create mode 100644 docker/db.env create mode 100644 docker/docker-compose.yml diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..0f948e4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,11 @@ +[submodule "ansible-role-common"] + path = ansible/roles/common + url = git@github.com:leoek/ansible-role-common.git + +[submodule "ansible-role-docker"] + path = ansible/roles/docker + url = git@github.com:leoek/ansible-role-docker.git + +[submodule "ansible-role-docker-nginx-proxy"] + path = ansible/roles/docker-nginx-proxy + url = git@github.com:leoek/ansible-role-docker-nginx-proxy.git diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml new file mode 100644 index 0000000..dd4cd56 --- /dev/null +++ b/ansible/group_vars/all.yml @@ -0,0 +1,13 @@ +--- +#global vars file + +ansible_user: ansible + +server_country_key: DE +server_province: Sachsen +server_city: Leipzig +server_org: LeoEK +server_mail: webmaster@herr-ek.de +server_ou: Leo +server_name: ansibleDefaultServerName +server_domain: leoek.eu \ No newline at end of file diff --git a/ansible/host_vars/net1.yml b/ansible/host_vars/net1.yml new file mode 100644 index 0000000..e85ea19 --- /dev/null +++ b/ansible/host_vars/net1.yml @@ -0,0 +1,10 @@ +--- +#vars file for net1 + +server_name: net1 +server_domain: net1.leoek.eu +docker: + virtual_network_nginx: nginx-proxy +swt: + domain_client: swt.leoek.eu + domain_server: api.swt.leoek.eu \ No newline at end of file diff --git a/ansible/hosts-swt-deployment b/ansible/hosts-swt-deployment new file mode 100644 index 0000000..2ac578c --- /dev/null +++ b/ansible/hosts-swt-deployment @@ -0,0 +1,4 @@ +net1 ansible_host=localhost + +[swt] +net1 \ No newline at end of file diff --git a/ansible/local-deployment.sh b/ansible/local-deployment.sh new file mode 100755 index 0000000..d03c37e --- /dev/null +++ b/ansible/local-deployment.sh @@ -0,0 +1,13 @@ +#!/bin/bash +ip=$(docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' nginx-proxy | awk -F '/' 'NR==1{print $1}') +echo "net1 ansible_host=$ip" > hosts-swt-deployment +echo "[swt]" >> hosts-swt-deployment +echo "net1" >> hosts-swt-deployment + +cat hosts-swt-deployment + +docker pull leoek/ansible:2.4-did +docker run --rm -v $(pwd):/ansible/playbooks \ + -v /srv/docker/swt:/srv/docker/swt \ + -v /var/run/docker.sock:/var/run/docker.sock:ro \ + leoek/ansible:next playbook-swt-deployment.yml -i hosts-swt-deployment --connection=local diff --git a/ansible/playbook-swt-deployment.yml b/ansible/playbook-swt-deployment.yml new file mode 100644 index 0000000..960982e --- /dev/null +++ b/ansible/playbook-swt-deployment.yml @@ -0,0 +1,23 @@ +--- +#general playbook + +#global handlers file: handlers/main.yml + +#check connection to all hosts +- hosts: all + gather_facts: no + become: true + tasks: + - name: ping all hosts + action: ping + +# talk to all hosts just so we can learn about them +- hosts: all + tasks: + - group_by: key={{ ansible_distribution | lower }} + +- hosts: swt + roles: + - docker-swt-deployment-local + handlers: + - include: handlers/main.yml \ No newline at end of file diff --git a/ansible/roles/common b/ansible/roles/common new file mode 160000 index 0000000..a203325 --- /dev/null +++ b/ansible/roles/common @@ -0,0 +1 @@ +Subproject commit a2033253d2a3e4e51c83d7556a7975b5da39f767 diff --git a/ansible/roles/docker b/ansible/roles/docker new file mode 160000 index 0000000..0e083be --- /dev/null +++ b/ansible/roles/docker @@ -0,0 +1 @@ +Subproject commit 0e083be07d2eda8faa207c6569a16cb200e54534 diff --git a/ansible/roles/docker-nginx-proxy b/ansible/roles/docker-nginx-proxy new file mode 160000 index 0000000..008fd00 --- /dev/null +++ b/ansible/roles/docker-nginx-proxy @@ -0,0 +1 @@ +Subproject commit 008fd003348c4c948d3db4a1c6a10cd42037c241 diff --git a/ansible/roles/docker-swt-deployment-local/defaults/main.yml b/ansible/roles/docker-swt-deployment-local/defaults/main.yml new file mode 100644 index 0000000..e392287 --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/defaults/main.yml @@ -0,0 +1,4 @@ +--- +# defaults file for role + +swt_path: /srv/docker/swt \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/handlers/main.yml b/ansible/roles/docker-swt-deployment-local/handlers/main.yml new file mode 100644 index 0000000..0ccfd3b --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/handlers/main.yml @@ -0,0 +1,28 @@ +--- +# handlers file for role + +- name: pull_new_images + become: true + docker_service: + project_src: "{{ swt_path }}/" + project_name: "swt-server" + pull: yes + listen: rebuild_containers + +- name: delete_containers + become: true + docker_service: + project_src: "{{ swt_path }}/" + project_name: "swt-server" + state: absent + pull: yes + listen: rebuild_containers + +- name: start_containers + become: true + docker_service: + project_src: "{{ swt_path }}/" + project_name: "swt-server" + state: present + pull: yes + listen: rebuild_containers \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/meta/main.yml b/ansible/roles/docker-swt-deployment-local/meta/main.yml new file mode 100644 index 0000000..6099501 --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/meta/main.yml @@ -0,0 +1,2 @@ +--- +dependencies: [] \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/tasks/main.yml b/ansible/roles/docker-swt-deployment-local/tasks/main.yml new file mode 100644 index 0000000..21b0550 --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/tasks/main.yml @@ -0,0 +1,42 @@ +--- +#tasks file for role +- name: create folder swt inside docker home + become: true + file: + path: "{{ swt_path }}" + state: directory + mode: 0755 + notify: rebuild_containers + +- name: Copy .env template + become: true + template: + src: .env + dest: "{{ swt_path }}/" + mode: 0644 + notify: rebuild_containers + +- name: Copy db.env template + become: true + template: + src: db.env + dest: "{{ swt_path }}/" + mode: 0644 + notify: rebuild_containers + +- name: Copy docker-compose.yml template + become: true + template: + src: docker-compose.yml + dest: "{{ swt_path }}/" + mode: 0644 + notify: rebuild_containers + +- name: pull new images + become: true + docker_service: + project_src: "{{ swt_path }}/" + project_name: "swt-server" + state: present + pull: yes + notify: rebuild_containers \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/templates/.env b/ansible/roles/docker-swt-deployment-local/templates/.env new file mode 100644 index 0000000..75e5999 --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/templates/.env @@ -0,0 +1,3 @@ +NETWORK={{ docker.virtual_network_nginx }} +DOMAIN_CLIENT={{ swt.domain_client }} +DOMAIN_SERVER={{ swt.domain_server }} \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/templates/db.env b/ansible/roles/docker-swt-deployment-local/templates/db.env new file mode 100644 index 0000000..1149c2e --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/templates/db.env @@ -0,0 +1,4 @@ +MYSQL_ROOT_PASSWORD=e6Z4r7XbyaQeboQNgiyuWTyLFEzi4Y +MYSQL_DATABASE=mvdb +MYSQL_USER=mvuser +MYSQL_PASSWORD=mariadb \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/templates/docker-compose.yml b/ansible/roles/docker-swt-deployment-local/templates/docker-compose.yml new file mode 100644 index 0000000..5b0456c --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/templates/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3' +services: + webclient: + container_name: swt_webclient + image: leoek/swt-webclient:next + restart: always + environment: + - VIRTUAL_HOST=${DOMAIN_CLIENT} + - VIRTUAL_NETWORK=${NETWORK} + - VIRTUAL_PORT=80 + - LETSENCRYPT_HOST=${DOMAIN_CLIENT} + - LETSENCRYPT_EMAIL={{ server_mail }} + networks: + - proxy-tier + + server: + container_name: swt_server + image: leoek/swt-server:next + restart: always + environment: + - VIRTUAL_HOST=${DOMAIN_SERVER} + - VIRTUAL_NETWORK=${NETWORK} + - VIRTUAL_PORT=8080 + - LETSENCRYPT_HOST=${DOMAIN_SERVER} + - LETSENCRYPT_EMAIL={{ server_mail }} + - SPRING_PROFILES_ACTIVE=prod + depends_on: + - db + links: + - db + networks: + - proxy-tier + - backend + + db: + container_name: swt_server_db + image: mariadb:10.2.14 + expose: + - 3306 + restart: always + env_file: + - db.env + volumes: + - swt_server_db:/var/lib/mysql + networks: + - backend + +volumes: + swt_server_db: + +networks: + proxy-tier: + external: + name: ${NETWORK} + backend: diff --git a/ansible/roles/docker-swt-deployment-local/tests/inventory b/ansible/roles/docker-swt-deployment-local/tests/inventory new file mode 100644 index 0000000..d18580b --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/tests/inventory @@ -0,0 +1 @@ +localhost \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/tests/test.yml b/ansible/roles/docker-swt-deployment-local/tests/test.yml new file mode 100644 index 0000000..8d24282 --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - common \ No newline at end of file diff --git a/ansible/roles/docker-swt-deployment-local/vars/main.yml b/ansible/roles/docker-swt-deployment-local/vars/main.yml new file mode 100644 index 0000000..01ab1e4 --- /dev/null +++ b/ansible/roles/docker-swt-deployment-local/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for role diff --git a/docker/.env b/docker/.env new file mode 100644 index 0000000..af008b8 --- /dev/null +++ b/docker/.env @@ -0,0 +1,3 @@ +NETWORK=nginx-proxy +DOMAIN_CLIENT=localhost +DOMAIN_SERVER=api.localhost \ No newline at end of file diff --git a/docker/db.env b/docker/db.env new file mode 100644 index 0000000..1149c2e --- /dev/null +++ b/docker/db.env @@ -0,0 +1,4 @@ +MYSQL_ROOT_PASSWORD=e6Z4r7XbyaQeboQNgiyuWTyLFEzi4Y +MYSQL_DATABASE=mvdb +MYSQL_USER=mvuser +MYSQL_PASSWORD=mariadb \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..b65ff3a --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3' +services: + webclient: + container_name: swt_webclient + image: leoek/swt-webclient:next + restart: always + environment: + - VIRTUAL_HOST=${DOMAIN_CLIENT} + - VIRTUAL_NETWORK=${NETWORK} + - VIRTUAL_PORT=80 + - LETSENCRYPT_HOST=${DOMAIN_CLIENT} + - LETSENCRYPT_EMAIL={{ server_mail }} + networks: + - proxy-tier + + server: + container_name: swt_server + image: leoek/swt-server:next + restart: always + environment: + - VIRTUAL_HOST=${DOMAIN_SERVER} + - VIRTUAL_NETWORK=${NETWORK} + - VIRTUAL_PORT=8080 + - LETSENCRYPT_HOST=${DOMAIN_SERVER} + - LETSENCRYPT_EMAIL={{ server_mail }} + - SPRING_PROFILES_ACTIVE=prod + depends_on: + - db + links: + - db + networks: + - proxy-tier + - backend + + db: + container_name: swt_server_db + image: mariadb:10.2.14 + expose: + - 3306 + restart: always + env_file: + - db.env + volumes: + - swt_server_db:/var/lib/mysql + networks: + - backend + +volumes: + swt_server_db: + +networks: + proxy-tier: + external: + name: ${NETWORK} + backend: \ No newline at end of file