--- - 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 }}"