diff --git a/setup_wordpress_site.yml b/setup_wordpress_site.yml new file mode 100644 index 0000000..906d6f7 --- /dev/null +++ b/setup_wordpress_site.yml @@ -0,0 +1,122 @@ +--- +- 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 }}" \ No newline at end of file