62 lines
2.0 KiB
YAML
62 lines
2.0 KiB
YAML
- 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"
|