new-site-ansible/setup_wordpress_site.yml
2024-08-20 05:24:19 +00:00

122 lines
4.4 KiB
YAML

---
- name: Setup a new WordPress site
hosts: localhost
tasks:
- name: Create the directory for the new website
file:
path: "/mnt/efs/{{ site_name }}"
state: directory
owner: www-data
group: www-data
- name: Download WordPress
get_url:
url: "https://wordpress.org/latest.zip"
dest: "/tmp/wordpress.zip"
mode: '0644'
- name: Extract WordPress
unarchive:
src: "/tmp/wordpress.zip"
dest: "/mnt/efs/{{ site_name }}"
remote_src: yes
creates: "/mnt/efs/{{ site_name }}/index.php"
- name: Move WordPress files to root of site directory
command: mv /mnt/efs/{{ site_name }}/wordpress/* /mnt/efs/{{ site_name }}/
args:
removes: "/mnt/efs/{{ site_name }}/wordpress"
become: true
- name: Change ownership of WordPress files
file:
path: "/mnt/efs/{{ site_name }}"
state: directory
recurse: yes
owner: www-data
group: www-data
- name: Copy wp-config.php
copy:
src: "/mnt/efs/common/wp-config.php"
dest: "/mnt/efs/{{ site_name }}/wp-config.php"
owner: www-data
group: www-data
mode: '0644'
- name: Create nginx directory
file:
path: "/mnt/efs/{{ site_name }}/nginx"
state: directory
owner: www-data
group: www-data
- name: Copy nginx configuration template
template:
src: "/mnt/efs/common/wordpress.conf"
dest: "/mnt/efs/{{ site_name }}/nginx/wordpress.conf"
owner: www-data
group: www-data
mode: '0644'
# Modify template for domain name and docker name
# Assume the template uses {{ domain_name }} and {{ docker_name }} variables
vars:
domain_name: "{{ domain_name }}"
docker_name: "{{ site_name }}"
- name: Generate Docker Compose snippet for FPM and Nginx
copy:
content: |
{{ site_name }}_fpm:
image: wordpress:php8.1-fpm
networks:
- shared_network
volumes:
- /mnt/efs/{{ site_name }}/wp-content:/var/www/html/wp-content
- /mnt/efs/{{ site_name }}/wp-config.php:/var/www/html/wp-config.php
- /mnt/efs/{{ site_name }}/nginx:/etc/nginx/conf.d:ro
- /mnt/efs/common/php.ini:/usr/local/etc/php/conf.d/custom.ini
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_USER={{ db_user }}
- WORDPRESS_DB_PASSWORD={{ db_password }}
- WORDPRESS_DB_NAME={{ db_name }}
deploy:
replicas: 1
labels:
- "traefik.http.routers.{{ site_name }}_fpm-https.rule=Host(`{{ domain_name }}`)"
- "traefik.http.routers.{{ site_name }}_fpm-https.entrypoints=https"
- "traefik.http.routers.{{ site_name }}_fpm-https.tls.certresolver=myresolver"
- "traefik.http.services.{{ site_name }}_fpm-service.loadbalancer.server.port=9000"
{{ site_name }}_nginx:
image: nginx:latest
networks:
- shared_network
volumes:
- /mnt/efs/{{ site_name }}/nginx:/etc/nginx/conf.d:ro
- /mnt/efs/{{ site_name }}:/var/www/html
deploy:
replicas: 1
labels:
- "traefik.http.routers.{{ site_name }}_nginx-http.rule=Host(`{{ domain_name }}`)"
- "traefik.http.routers.{{ site_name }}_nginx-http.entrypoints=http"
- "traefik.http.routers.{{ site_name }}_nginx-http.middlewares=https-redirect"
- "traefik.http.routers.{{ site_name }}_nginx-https.rule=Host(`{{ domain_name }}`)"
- "traefik.http.routers.{{ site_name }}_nginx-https.entrypoints=https"
- "traefik.http.routers.{{ site_name }}_nginx-https.tls.certresolver=myresolver"
- "traefik.http.services.{{ site_name }}_nginx-service.loadbalancer.server.port=80"
depends_on:
- {{ site_name }}_fpm
resources:
limits:
cpus: '1'
memory: 1024M
dest: "/mnt/efs/{{ site_name }}/docker-compose-{{ site_name }}.yml"
mode: '0644'
vars:
db_user: "{{ db_user }}"
db_password: "{{ db_password }}"
db_name: "{{ db_name }}"
domain_name: "{{ domain_name }}"
docker_name: "{{ site_name }}"