Skip to content

Instantly share code, notes, and snippets.

@discopatrick
Last active January 19, 2022 16:36
Show Gist options
  • Save discopatrick/4e85d61ad9d692c06ca8d3bf0dd802ea to your computer and use it in GitHub Desktop.
Save discopatrick/4e85d61ad9d692c06ca8d3bf0dd802ea to your computer and use it in GitHub Desktop.
A playbook for use with roots/trellis syncing the local wordpress db and uploads folder to a remote installation.
---
- name: sync uploads and db from staging to local
hosts: my_staging_host
remote_user: "{{ web_user }}"
pre_tasks:
- name: Ensure site is valid
connection: local
fail:
msg: "Site `{{ site | default('') }}` is not valid. Available sites to sync: {{ wordpress_sites.keys() | join(', ') }}"
when: wordpress_sites[site | default('')] is not defined
vars:
project: "{{ wordpress_sites[site] }}"
project_root: "{{ www_root }}/{{ site }}"
project_uploads: "{{ www_root }}/{{ site }}/shared/uploads"
project_web_dir: "{{ project_root }}/current/web"
wordpress_env_defaults:
db_host: localhost
db_name: "{{ site | underscore }}_staging" #{{ env }}"
db_user: "{{ site | underscore }}"
disable_wp_cron: true
wp_env: staging # "{{ env }}"
wp_home: "{{ project.ssl.enabled | default(false) | ternary('https', 'http') }}://${HTTP_HOST}"
wp_siteurl: "${WP_HOME}/wp"
site_env: "{{ wordpress_env_defaults | combine(project.env | default({}), vault_wordpress_sites[site].env) }}"
tasks:
- name: sync remote box uploads to vagrant box (via vagrant synced folder)
synchronize:
src: "{{ project_uploads }}"
dest: ../site/web/app
mode: pull
delete: yes
ignore_errors: yes # some hidden files cause errors in rsync
# TODO: put .gitkeep file back in uploads folder (it gets deleted)
- name: create db backup on staging with wp-cli
command: wp db export ~/{{ wordpress_env_defaults.db_name }}.sql
args:
chdir: "{{ project_web_dir }}"
- name: copy db backup from staging to vagrant box (via vagrant synced folder)
fetch:
src: ~/{{ wordpress_env_defaults.db_name }}.sql
dest: ../site
flat: yes # copies file only, without dir structure
- name: reset and restore db on vagrant box
delegate_to: default
command: wp db reset --yes
args:
chdir: "{{ project_web_dir }}"
- name: restore db on vagrant box
delegate_to: default
command: wp db import ../{{ wordpress_env_defaults.db_name }}.sql
args:
chdir: "{{ project_web_dir }}"
- name: search-replace email addresses
delegate_to: default
command: wp search-replace "@mydomain.org.uk" "@local.dev"
args:
chdir: "{{ project_web_dir }}"
- name: search-replace staging email addresses
delegate_to: default
command: wp search-replace "@staging.mydomain.org.uk" "@local.dev"
args:
chdir: "{{ project_web_dir }}"
- name: search-replace the domain name
delegate_to: default
command: wp search-replace "www.mydomain.org.uk" "local.dev"
args:
chdir: "{{ project_web_dir }}"
- name: search-replace the staging domain name
delegate_to: default
command: wp search-replace "staging.mydomain.org.uk" "local.dev"
args:
chdir: "{{ project_web_dir }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment