diff --git a/roles/web-app-espocrm/tasks/01_patch_config.yml b/roles/web-app-espocrm/tasks/01_patch_config.yml index 20ef32b9..2a84023d 100644 --- a/roles/web-app-espocrm/tasks/01_patch_config.yml +++ b/roles/web-app-espocrm/tasks/01_patch_config.yml @@ -2,22 +2,22 @@ command: > docker exec --user root {{ espocrm_name }} sed -i "s/'host' => .*/'host' => '{{ database_host }}',/" {{ espocrm_config_file }} - notify: docker compose up + notify: docker compose restart - name: Update DB name command: > docker exec --user root {{ espocrm_name }} sed -i "s/'dbname' => .*/'dbname' => '{{ database_name }}',/" {{ espocrm_config_file }} - notify: docker compose up + notify: docker compose restart - name: Update DB user command: > docker exec --user root {{ espocrm_name }} sed -i "s/'user' => .*/'user' => '{{ database_username }}',/" {{ espocrm_config_file }} - notify: docker compose up + notify: docker compose restart - name: Update DB password command: > docker exec --user root {{ espocrm_name }} sed -i "s/'password' => .*/'password' => '{{ database_password }}',/" {{ espocrm_config_file }} - notify: docker compose up + notify: docker compose restart diff --git a/roles/web-app-moodle/tasks/01_patch_config.yml b/roles/web-app-moodle/tasks/01_patch_config.yml index 1abbd218..793d648c 100644 --- a/roles/web-app-moodle/tasks/01_patch_config.yml +++ b/roles/web-app-moodle/tasks/01_patch_config.yml @@ -2,23 +2,28 @@ command: > docker exec --user root {{ moodle_container }} sed -i "s/^\$CFG->dbhost *= *.*/\$CFG->dbhost = '{{ database_host }}';/" {{ moodle_config }} + notify: docker compose restart - name: Update DB name command: > docker exec --user root {{ moodle_container }} sed -i "s/^\$CFG->dbname *= *.*/\$CFG->dbname = '{{ database_name }}';/" {{ moodle_config }} + notify: docker compose restart - name: Update DB user command: > docker exec --user root {{ moodle_container }} sed -i "s/^\$CFG->dbuser *= *.*/\$CFG->dbuser = '{{ database_username }}';/" {{ moodle_config }} + notify: docker compose restart - name: Update DB password command: > docker exec --user root {{ moodle_container }} sed -i "s/^\$CFG->dbpass *= *.*/\$CFG->dbpass = '{{ database_password }}';/" {{ moodle_config }} + notify: docker compose restart - name: Update CFG->wwwroot via sed in container command: > docker exec --user root {{ moodle_container }} sed -i -E "s|^(\$CFG->wwwroot[[:space:]]*=[[:space:]]*).*$|\1'{{ domains | get_url(application_id, WEB_PROTOCOL) }}';|" {{ moodle_config }} + notify: docker compose restart diff --git a/roles/web-app-wordpress/config/main.yml b/roles/web-app-wordpress/config/main.yml index 232ca4ba..ba2d8691 100644 --- a/roles/web-app-wordpress/config/main.yml +++ b/roles/web-app-wordpress/config/main.yml @@ -13,7 +13,7 @@ features: port-ui-desktop: true oidc: true central_database: true - logout: true + logout: true server: csp: flags: diff --git a/roles/web-app-wordpress/tasks/01_patch_config.yml b/roles/web-app-wordpress/tasks/01_patch_config.yml new file mode 100644 index 00000000..822d275c --- /dev/null +++ b/roles/web-app-wordpress/tasks/01_patch_config.yml @@ -0,0 +1,28 @@ +# The seeds need to be executed as root, because www-data isn't allowed to create files in the wordpress directory + +- name: Update DB host in wp-config.php + command: > + docker exec --user root {{ wordpress_container }} + sed -i "s/define(\s*'DB_HOST'\s*,\s*'[^']*'\s*);/define( 'DB_HOST', '{{ database_host }}:{{ database_port }}' );/i" {{ wordpress_docker_conf_path }} + notify: docker compose restart + +- name: Update DB name in wp-config.php + command: > + docker exec --user root {{ wordpress_container }} + sed -i "s/define(\s*'DB_NAME'\s*,\s*'[^']*'\s*);/define( 'DB_NAME', '{{ database_name }}' );/i" {{ wordpress_docker_conf_path }} + notify: docker compose restart + +- name: Update DB user in wp-config.php + command: > + docker exec --user root {{ wordpress_container }} + sed -i "s/define(\s*'DB_USER'\s*,\s*'[^']*'\s*);/define( 'DB_USER', '{{ database_username }}' );/i" {{ wordpress_docker_conf_path }} + notify: docker compose restart + +- name: Update DB password in wp-config.php + command: > + docker exec --user root {{ wordpress_container }} + sed -i "s/define(\s*'DB_PASSWORD'\s*,\s*'[^']*'\s*);/define( 'DB_PASSWORD', '{{ database_password }}' );/i" {{ wordpress_docker_conf_path }} + notify: docker compose restart + +- name: "Flush handlers to reinitialize new database credentials" + meta: flush_handlers \ No newline at end of file diff --git a/roles/web-app-wordpress/tasks/install.yml b/roles/web-app-wordpress/tasks/02_install.yml similarity index 91% rename from roles/web-app-wordpress/tasks/install.yml rename to roles/web-app-wordpress/tasks/02_install.yml index 1617b0eb..1dadc3dd 100644 --- a/roles/web-app-wordpress/tasks/install.yml +++ b/roles/web-app-wordpress/tasks/02_install.yml @@ -1,6 +1,6 @@ - name: "Run WordPress core install via WP CLI" command: > - docker-compose exec -T -u www-data application + docker exec -u {{ wordpress_user }} {{ wordpress_container }} wp core install --url="{{ domains | get_url(application_id, WEB_PROTOCOL) }}" --title="{{ applications | get_app_conf(application_id, 'title', True) }}" diff --git a/roles/web-app-wordpress/tasks/plugin.yml b/roles/web-app-wordpress/tasks/03_enable_plugin.yml similarity index 100% rename from roles/web-app-wordpress/tasks/plugin.yml rename to roles/web-app-wordpress/tasks/03_enable_plugin.yml diff --git a/roles/web-app-wordpress/tasks/main.yml b/roles/web-app-wordpress/tasks/main.yml index cfe05217..2c5dcab6 100644 --- a/roles/web-app-wordpress/tasks/main.yml +++ b/roles/web-app-wordpress/tasks/main.yml @@ -25,13 +25,23 @@ dest: "{{ host_msmtp_conf }}" notify: docker compose up +- name: Check if wp-config.php exists in WordPress + command: docker exec -u {{ wordpress_user }} {{ wordpress_container }} test -f {{ wordpress_docker_html_path }}/wp-config.php + register: wp_config_file_exists + changed_when: false + failed_when: false + +- name: Patch WordPress wp-config.php with updated DB credentials + include_tasks: 01_patch_config.yml + when: wp_config_file_exists.rc == 0 + - name: "Install wordpress" - include_tasks: install.yml + include_tasks: 02_install.yml - name: "Install and activate WordPress plugins" block: - name: "Iterate through WordPress plugins" - include_tasks: plugin.yml + include_tasks: 03_enable_plugin.yml loop: "{{ wordpress_plugins }}" loop_control: label: "{{ item.key }}" diff --git a/roles/web-app-wordpress/templates/docker-compose.yml.j2 b/roles/web-app-wordpress/templates/docker-compose.yml.j2 index 74cd2fbe..3acce3bd 100644 --- a/roles/web-app-wordpress/templates/docker-compose.yml.j2 +++ b/roles/web-app-wordpress/templates/docker-compose.yml.j2 @@ -2,7 +2,7 @@ application: {% include 'roles/docker-container/templates/base.yml.j2' %} image: {{ wordpress_custom_image }} - container_name: {{ wordpress_name }} + container_name: {{ wordpress_container }} build: context: . ports: diff --git a/roles/web-app-wordpress/vars/main.yml b/roles/web-app-wordpress/vars/main.yml index 722b4f96..da92fdb5 100644 --- a/roles/web-app-wordpress/vars/main.yml +++ b/roles/web-app-wordpress/vars/main.yml @@ -7,9 +7,11 @@ host_msmtp_conf: "{{docker_compose.directories.config}}msmtprc.conf" wordpress_max_upload_size: "{{ applications | get_app_conf(application_id, 'max_upload_size') }}" wordpress_custom_image: "wordpress_custom" wordpress_docker_html_path: "/var/www/html" +wordpress_docker_conf_path: "{{ wordpress_docker_html_path }}/wp-config.php" wordpress_version: "{{ applications | get_app_conf(application_id, 'docker.services.wordpress.version', True) }}" wordpress_image: "{{ applications | get_app_conf(application_id, 'docker.services.wordpress.image', True) }}" -wordpress_name: "{{ applications | get_app_conf(application_id, 'docker.services.wordpress.name', True) }}" +wordpress_container: "{{ applications | get_app_conf(application_id, 'docker.services.wordpress.name', True) }}" wordpress_volume: "{{ applications | get_app_conf(application_id, 'docker.volumes.data', True) }}" wordpress_domains: "{{ applications | get_app_conf(application_id, 'server.domains.canonical', True) }}" -wordpress_plugins: "{{ applications | get_app_conf(application_id, 'plugins', True) | dict2items }}" \ No newline at end of file +wordpress_plugins: "{{ applications | get_app_conf(application_id, 'plugins', True) | dict2items }}" +wordpress_user: "www-data" \ No newline at end of file