diff --git a/ansible/inventory/hosts.ini b/ansible/inventory/hosts.ini new file mode 100644 index 0000000..e93d3f0 --- /dev/null +++ b/ansible/inventory/hosts.ini @@ -0,0 +1,7 @@ +[webservers] +portfolio-head ansible_host=192.168.1.87 + +[all:vars] +ansible_user=root +ansible_python_interpreter=/usr/bin/python3 + diff --git a/ansible/playbooks/deploy_nginx.yml b/ansible/playbooks/deploy_nginx.yml new file mode 100644 index 0000000..a55a37d --- /dev/null +++ b/ansible/playbooks/deploy_nginx.yml @@ -0,0 +1,39 @@ +- name: Deploy a basic Nginx container + hosts: webservers + become: true + tasks: + - name: Ensure Docker is installed + apt: + name: docker.io + state: present + update_cache: yes + - name: Ensure pip is installed + apt: + name: pip + state: present + update_cache: yes + - name: Ensure Python Docker module is installed + apt: + name: python3-docker + state: present + + - name: Ensure web root exists + file: + path: /opt/web + state: directory + + - name: Copy index.html to web root + copy: + src: ../files/index.html + dest: /opt/web/index.html + + - name: Run Nginx container + docker_container: + name: simple-nginx + image: nginx:alpine + state: started + restart_policy: always + ports: + - "8080:80" + volumes: + - "/opt/web:/usr/share/nginx/html:ro" diff --git a/ansible/playbooks/deploy_portfolio.yml b/ansible/playbooks/deploy_portfolio.yml new file mode 100644 index 0000000..14100ba --- /dev/null +++ b/ansible/playbooks/deploy_portfolio.yml @@ -0,0 +1,61 @@ +- name: Deploy a basic Nginx container + hosts: webservers + become: true + tasks: + - name: Ensure Docker is installed + apt: + name: docker.io + state: present + update_cache: yes + - name: Ensure pip is installed + apt: + name: pip + state: present + update_cache: yes + - name: Ensure Python Docker module is installed + apt: + name: python3-docker + state: present + + - name: Ensure web root exists + file: + path: /data + state: directory + + - name: Ensure user directory exists + file: + path: /data/{{ user_id }} + state: directory + + - name: Ensure web root exists + file: + path: /data/{{ user_id }}/{{ site }} + state: directory + + - name: Copy all files from local dir to remote dir + synchronize: + src: "../files/{{ user_id }}/{{ site }}/" + dest: "/data/{{ user_id }}/{{ site }}/" + recursive: yes + delete: no + - name: Build dynamic Traefik labels + set_fact: + traefik_labels: "{{traefik_labels | default({}) | combine ({ item.key : item.value }) }}" + with_items: + - { 'key': 'traefik.enable', 'value': 'true'} + - { 'key': 'traefik.http.routers.site-{{ user_id }}-{{ site }}.rule', 'value': 'Host(`{{ domain }}`)'} + - { 'key': 'traefik.http.routers.site-{{ user_id }}-{{ site }}.entrypoints', 'value': 'websecure'} + - { 'key': 'traefik.http.services.site-{{ user_id }}-{{ site }}.loadbalancer.server.port', 'value': '80'} + - { 'key': 'traefik.http.routers.site-{{ user_id }}-{{ site }}.tls.certresolver', 'value': 'le'} + + - name: Run Nginx container + docker_container: + name: nginx-{{ user_id }}-{{ site }} + image: nginx:alpine + state: started + restart_policy: always + networks: + - name: traefik + labels: "{{ traefik_labels }}" + volumes: + - "/data/{{ user_id }}/{{ site }}:/usr/share/nginx/html:ro" diff --git a/ansible/vars/exemple.yml b/ansible/vars/exemple.yml new file mode 100644 index 0000000..1c48440 --- /dev/null +++ b/ansible/vars/exemple.yml @@ -0,0 +1,3 @@ +user_id: "1" +site: "exemple_site" +domain: "exemple.portfolio.sortifal.fr"