Files
ansible-lemp-wordpress/playbooks/wordpress-advanced-features.yml
Sebastian Palencsár 573224a36b 🚀 Initial release: Complete Ansible LEMP WordPress automation
 Features:
- Complete LEMP stack automation
- WordPress with WP-CLI
- Redis Object Cache (50% performance boost)
- Multi-OS support
- SSL/Let's Encrypt integration
- Security hardening
- Enterprise features
- Docker testing environment
- GitHub Actions CI/CD
- Comprehensive documentation

🧪 Fully tested and production-ready

Copyright (c) 2025 Sebastian Palencsár
2025-06-18 18:24:55 +02:00

314 lines
8.8 KiB
YAML

---
# Advanced WordPress features and optimizations
- name: WordPress Advanced Features Setup
hosts: all
become: yes
vars_files:
- "../vars/{{ ansible_os_family | lower }}.yml"
vars:
# Backup Configuration
enable_backups: "{{ enable_backups | default(true) }}"
backup_schedule: "{{ backup_schedule | default('0 2 * * *') }}" # Daily at 2 AM
backup_retention_days: "{{ backup_retention_days | default(7) }}"
backup_destination: "{{ backup_destination | default('/var/backups/wordpress') }}"
# Performance Configuration
enable_redis: "{{ enable_redis | default(false) }}"
enable_memcached: "{{ enable_memcached | default(false) }}"
enable_opcache: "{{ enable_opcache | default(true) }}"
# Security Configuration
enable_fail2ban: "{{ enable_fail2ban | default(true) }}"
enable_modsecurity: "{{ enable_modsecurity | default(false) }}"
# Monitoring Configuration
enable_monitoring: "{{ enable_monitoring | default(false) }}"
# WordPress Multisite
enable_multisite: "{{ enable_multisite | default(false) }}"
multisite_type: "{{ multisite_type | default('subdirectory') }}" # subdirectory or subdomain
tasks:
# Backup System
- name: Install backup dependencies
package:
name:
- rsync
- gzip
- tar
state: present
when: enable_backups
tags: backup
- name: Create backup directories
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- "{{ backup_destination }}"
- "{{ backup_destination }}/database"
- "{{ backup_destination }}/files"
when: enable_backups
tags: backup
- name: Create backup script
template:
src: ../templates/wordpress-backup.sh.j2
dest: /usr/local/bin/wordpress-backup.sh
mode: '0755'
when: enable_backups
tags: backup
- name: Schedule WordPress backups
cron:
name: "WordPress Backup"
minute: "{{ backup_schedule.split()[0] }}"
hour: "{{ backup_schedule.split()[1] }}"
day: "{{ backup_schedule.split()[2] }}"
month: "{{ backup_schedule.split()[3] }}"
weekday: "{{ backup_schedule.split()[4] }}"
job: "/usr/local/bin/wordpress-backup.sh"
when: enable_backups
tags: backup
# Redis Cache
- name: Install Redis
package:
name: redis-server
state: present
when: enable_redis
tags: redis
- name: Configure Redis
template:
src: ../templates/redis.conf.j2
dest: /etc/redis/redis.conf
backup: yes
when: enable_redis
notify: restart redis
tags: redis
- name: Start and enable Redis
service:
name: redis-server
state: started
enabled: yes
when: enable_redis
tags: redis
- name: Install Redis PHP extension
package:
name: "php{{ php_version }}-redis"
state: present
when: enable_redis and ansible_os_family == "Debian"
notify: restart php-fpm
tags: redis
# Memcached
- name: Install Memcached
package:
name:
- memcached
- "php{{ php_version }}-memcached"
state: present
when: enable_memcached and ansible_os_family == "Debian"
tags: memcached
- name: Configure Memcached
template:
src: ../templates/memcached.conf.j2
dest: /etc/memcached.conf
backup: yes
when: enable_memcached
notify: restart memcached
tags: memcached
- name: Start and enable Memcached
service:
name: memcached
state: started
enabled: yes
when: enable_memcached
tags: memcached
# PHP OPcache Optimization
- name: Configure PHP OPcache
blockinfile:
path: "{{ php_ini_path }}"
marker: "; {mark} ANSIBLE MANAGED BLOCK - OPcache"
block: |
; OPcache Configuration
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.save_comments=1
opcache.enable_file_override=1
when: enable_opcache
notify: restart php-fpm
tags: opcache
# Fail2Ban Security
- name: Install Fail2Ban
package:
name: fail2ban
state: present
when: enable_fail2ban
tags: fail2ban
- name: Configure Fail2Ban for WordPress
template:
src: ../templates/fail2ban-wordpress.conf.j2
dest: /etc/fail2ban/jail.d/wordpress.conf
when: enable_fail2ban
notify: restart fail2ban
tags: fail2ban
- name: Start and enable Fail2Ban
service:
name: fail2ban
state: started
enabled: yes
when: enable_fail2ban
tags: fail2ban
# WordPress Plugins for Performance
- name: Install WordPress performance plugins
command: >
wp plugin install {{ item }} --activate --allow-root
args:
chdir: "{{ wordpress_path }}"
loop:
- w3-total-cache
- wp-optimize
- wordfence
when: enable_monitoring
become_user: "{{ nginx_user }}"
tags: wordpress-plugins
# WordPress Multisite Setup
- name: Configure WordPress Multisite
blockinfile:
path: "{{ wordpress_path }}/wp-config.php"
marker: "/* {mark} ANSIBLE MANAGED BLOCK - Multisite */"
insertbefore: "/* That's all, stop editing!"
block: |
/* Multisite Configuration */
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', {{ 'true' if multisite_type == 'subdomain' else 'false' }});
define('DOMAIN_CURRENT_SITE', '{{ domain_name | default(ansible_default_ipv4.address) }}');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
when: enable_multisite
tags: multisite
- name: Configure Nginx for WordPress Multisite
template:
src: ../templates/wordpress-multisite.nginx.j2
dest: "{{ nginx_sites_available }}/wordpress"
backup: yes
when: enable_multisite and ansible_os_family == "Debian"
notify: restart nginx
tags: multisite
# SSL Certificate Auto-renewal with notifications
- name: Create SSL renewal notification script
template:
src: ../templates/ssl-renewal-notify.sh.j2
dest: /usr/local/bin/ssl-renewal-notify.sh
mode: '0755'
when: enable_ssl is defined and enable_ssl
tags: ssl
- name: Schedule SSL renewal with notifications
cron:
name: "Renew SSL certificates with notification"
minute: "0"
hour: "12"
job: "/usr/local/bin/ssl-renewal-notify.sh"
when: enable_ssl is defined and enable_ssl
tags: ssl
# System Monitoring
- name: Install monitoring tools
package:
name:
- htop
- iotop
- nethogs
- glances
state: present
when: enable_monitoring
tags: monitoring
- name: Install Netdata monitoring
shell: |
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --dont-wait --stable-channel
args:
creates: /usr/sbin/netdata
when: enable_monitoring
tags: monitoring
# WordPress CLI improvements
- name: Create WP-CLI config
template:
src: ../templates/wp-cli.yml.j2
dest: "{{ wordpress_path }}/wp-cli.yml"
owner: "{{ nginx_user }}"
group: "{{ nginx_user }}"
tags: wp-cli
# Database optimization
- name: Configure MySQL for WordPress optimization
blockinfile:
path: "{{ mysql_conf_file }}"
marker: "# {mark} ANSIBLE MANAGED BLOCK - WordPress Optimization"
block: |
# WordPress Optimization
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
query_cache_type = 1
query_cache_size = 32M
max_connections = 200
thread_cache_size = 8
tmp_table_size = 32M
max_heap_table_size = 32M
notify: restart mysql
tags: mysql-optimization
handlers:
- name: restart nginx
service:
name: "{{ nginx_service }}"
state: restarted
- name: restart php-fpm
service:
name: "{{ php_fpm_service }}"
state: restarted
- name: restart mysql
service:
name: "{{ mysql_service }}"
state: restarted
- name: restart redis
service:
name: redis-server
state: restarted
- name: restart memcached
service:
name: memcached
state: restarted
- name: restart fail2ban
service:
name: fail2ban
state: restarted