Compare commits

...

76 Commits

Author SHA1 Message Date
88ee8ae05e chore: publish 1.0.2+5.8.3 release 2022-01-18 16:11:45 +01:00
57122cd677 chore: publish 1.0.1+5.8.2 release 2022-01-04 12:06:14 +01:00
3wc
ab3361f46d Add backup-bot-two labels 2021-12-09 01:34:01 +02:00
3wc
0771aae91c Goodbye, emojis! 😢
[ci skip]
2021-11-23 12:19:06 +02:00
3wc
101864ce03 chore: fix README bullet formatting
[ci skip]
2021-11-22 13:42:04 +02:00
6ef2f30c0f chore: first release
Some checks failed
continuous-integration/drone/push Build is failing
2021-10-12 08:45:20 +02:00
3wc
26107257bc Update to Wordpress 5.8.1
Some checks failed
continuous-integration/drone/tag Build is failing
continuous-integration/drone/push Build is failing
2021-09-29 19:34:41 +02:00
6b59677976 Update wordpress Docker tag to v5.8.0
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is failing
2021-07-21 07:03:37 +00:00
3wc
08fc5fe2c6 Fix README formatting
Some checks failed
continuous-integration/drone/push Build is failing
2021-07-11 17:14:52 +02:00
de33fac3d3 Use new image namespace
Some checks failed
continuous-integration/drone/push Build is failing
2021-06-21 12:32:21 +02:00
d6125ba37a Remove trigger, we make the tags [ci skip] 2021-06-04 00:15:45 +02:00
6551fd8f8c Fix bad name in batch update script [ci skip] 2021-06-03 23:07:29 +02:00
14d50b851e Add release logic to CI [ci skip] 2021-06-03 23:01:37 +02:00
acd5e93a4b Add some docs
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-02 11:26:03 +02:00
f7600b9bc8 Merge commit 'febd250'
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-02 11:23:10 +02:00
febd2500b4 Fix syntax 2021-06-02 11:22:54 +02:00
a330574682 Remove old configs 2021-06-02 11:22:22 +02:00
be6cf302d0 Unbreak mailrelay config
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-02 11:20:24 +02:00
8af9be6a40 Ensure default
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-02 09:57:25 +02:00
a550017071 Add missing from
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-02 08:36:52 +02:00
9fa2b2d1b7 Support SMTP relay configuration
All checks were successful
continuous-integration/drone/push Build is passing
Hopefully this doesn't bork existing relay configs
2021-06-02 08:24:33 +02:00
3wc
8399631c81 Another lap of the Wordpress arms race..
All checks were successful
continuous-integration/drone/push Build is passing
2021-05-25 09:28:57 +02:00
3wc
e5c41fa027 Version 5.7.2; sync labels
All checks were successful
continuous-integration/drone/push Build is passing
2021-05-15 22:08:17 +02:00
0df2a556e8 Merge pull request 'Update wordpress Docker tag to v5.7.2 (master)' (#24) from renovate/master-docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/24
2021-05-15 22:07:11 +02:00
4d4befc9e1 Update wordpress Docker tag to v5.7.2
Some checks failed
continuous-integration/drone/pr Build is failing
2021-05-14 07:02:27 +00:00
e8aa34c7e3 Remove unused env vars
Some checks failed
continuous-integration/drone/push Build is failing
2021-05-10 07:12:05 +02:00
421c01e78a Formatting and remove backup bot docs
All checks were successful
continuous-integration/drone/push Build is passing
2021-05-10 07:09:52 +02:00
c99f35b5d9 Version 5.7.1_1; sync labels
Some checks failed
continuous-integration/drone/push Build is failing
2021-05-03 09:50:15 +02:00
36046c801e Merge pull request 'Update mariadb Docker tag to v10.6 (master)' (#23) from renovate/master-docker-mariadb-10.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/23
2021-05-03 09:49:48 +02:00
d20b99b7b4 Update mariadb Docker tag to v10.6
Some checks failed
continuous-integration/drone/pr Build is failing
2021-04-30 07:02:49 +00:00
0b8c60c0f3 Version 5.7.1; sync labels
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-16 09:11:46 +02:00
f2fff04c53 Merge pull request 'Update wordpress Docker tag to v5.7.1 (master)' (#22) from renovate/master-docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/22
2021-04-16 09:08:42 +02:00
bf4e9323f3 Update wordpress Docker tag to v5.7.1
Some checks failed
continuous-integration/drone/pr Build is failing
2021-04-16 07:02:12 +00:00
3wc
f28b9d69f6 Version 5.7.0; sync labels
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-05 00:25:16 +02:00
8fc4c37e68 Remove old version handling
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-02 21:18:17 +02:00
60b4398e92 Add versions and label
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-16 09:37:42 +01:00
08d9ac6e2f Remove experimental package file 2021-03-16 09:37:12 +01:00
3wc
fb632799c9 Fix wp
All checks were successful
continuous-integration/drone/push Build is passing
Closes #21
2021-03-14 14:28:11 +02:00
f6dc0243f7 Merge pull request 'Update wordpress Docker tag to v5.7.0 (master)' (#19) from renovate/master-docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/19
2021-03-12 10:53:00 +01:00
94459b7077 Update wordpress Docker tag to v5.7.0
Some checks failed
continuous-integration/drone/pr Build is failing
2021-03-11 08:02:34 +00:00
3wc
d27c4ed6f3 compose-stacks → coop-cloud
[ci skip]
2021-03-02 19:58:26 +02:00
3wc
f2225be233 Follow new exciting README standard
All checks were successful
continuous-integration/drone/push Build is passing
See coop-cloud/organising#31
2021-03-02 18:41:31 +02:00
3wc
aae6b22d53 Use shared abra backup functions 2021-03-02 18:41:31 +02:00
4eaa4de5ae Merge pull request 'Update wordpress Docker tag to v5.6.2 (master)' (#18) from renovate/master-docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/18
2021-02-23 09:12:57 +01:00
064af9c04c Update wordpress Docker tag to v5.6.2
Some checks failed
continuous-integration/drone/pr Build is failing
2021-02-23 08:02:28 +00:00
3wc
38c4fe0246 Move config to abra.sh
All checks were successful
continuous-integration/drone/push Build is passing
Ref coop-cloud/abra#43
2021-02-08 16:54:23 +02:00
990a58be81 Merge pull request 'Update wordpress Docker tag to v5.6.1' (#17) from renovate/docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/17
2021-02-08 14:07:36 +01:00
923295aa91 Update wordpress Docker tag to v5.6.1
Some checks failed
continuous-integration/drone/pr Build is failing
2021-02-05 08:02:06 +00:00
3wc
479d061879 Add restore commands, see coop-cloud/abra#70
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-01 22:29:16 +02:00
3wc
c28bb98e23 App & db backup commands, see coop-cloud/abra#70
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-01 18:58:55 +02:00
3wc
83130a482e Fix embarrassing mass-typo 😳
All checks were successful
continuous-integration/drone/push Build is passing
2020-12-31 23:02:29 +02:00
3wc
925d5703a9 APP → TYPE
All checks were successful
continuous-integration/drone/push Build is passing
Ref coop-cloud/abra#47
2020-12-31 22:54:44 +02:00
3wc
5d351b1ede Switch from envrc → env format
All checks were successful
continuous-integration/drone/push Build is passing
Ref coop-cloud/abra#40
2020-12-30 13:23:06 +02:00
3wc
5488d04c92 Update wp subcommand for new abra argument processing
All checks were successful
continuous-integration/drone/push Build is passing
2020-12-27 15:57:22 +02:00
3wc
997707189e Add custom abra command to run WP-CLI
All checks were successful
continuous-integration/drone/push Build is passing
Closes #2
2020-12-14 12:31:17 +02:00
3wc
5c81094a82 Update README for new abra UI 2020-12-14 12:28:46 +02:00
3wc
26fa0bdfd3 Update for new SECRET_ naming
All checks were successful
continuous-integration/drone/push Build is passing
2020-12-14 11:56:31 +02:00
ebb2036510 Merge pull request 'Update wordpress Docker tag to v5.6.0' (#16) from renovate/docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/16
2020-12-14 10:54:09 +01:00
b0055f587d Update wordpress Docker tag to v5.6.0
Some checks failed
continuous-integration/drone/pr Build is failing
2020-12-11 08:01:49 +00:00
3wc
a8d5e0553f Bridge backend network, not overlay
All checks were successful
continuous-integration/drone/push Build is passing
Fixes #14
2020-11-17 22:57:36 +02:00
6124c36f42 Merge pull request 'Update wordpress Docker tag to v5.5.3' (#13) from renovate/docker-wordpress-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: https://git.autonomic.zone/coop-cloud/wordpress/pulls/13
2020-11-03 17:22:42 +01:00
0e486d395d Update wordpress Docker tag to v5.5.3
Some checks failed
continuous-integration/drone/pr Build is failing
2020-11-03 08:01:54 +00:00
3wc
61bdd21085 SERVICE -> APP
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-29 19:42:08 +02:00
3wc
21babc7bca Various un-breaking
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-24 20:13:56 +02:00
3wc
0ac4c51b3b Add new vars to Drone
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-23 04:15:35 +02:00
3wc
43cbfafb8a Enable additional PHP extensions 2020-10-23 04:15:35 +02:00
c6039c3b54 Remove singlesite config
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-22 10:13:48 +02:00
3wc
bdabcce977 Rejig .envrc.sample
[ci skip]
2020-10-06 01:48:03 +02:00
3wc
42c822f819 Minor .envrc tweak
[ci skip]
2020-10-06 01:41:16 +02:00
3wc
b5ac06c0cf Fix Multisite instructions
[ci skip]
2020-10-05 13:10:54 +02:00
3wc
6f10b0f3cc Add EXTRA_DOMAINS support
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-05 13:07:50 +02:00
3wc
03bbf527fe Rename services
See compose-stacks/organising#19
2020-10-05 13:07:49 +02:00
25a98e6298 Update hosts to match new names
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-02 09:38:54 +02:00
c5beea3114 Apply @3wordchant patch
All checks were successful
continuous-integration/drone/push Build is passing
Didn't bring over "depends_on" because I think it is ignored?
2020-10-02 09:37:36 +02:00
50a11700b4 Use generic naming
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-02 09:11:40 +02:00
65742d663d Remove test file
All checks were successful
continuous-integration/drone/push Build is passing
2020-10-02 09:06:12 +02:00
18 changed files with 286 additions and 319 deletions

View File

@ -15,8 +15,20 @@ steps:
DOMAIN: wordpress.swarm-test.autonomic.zone
STACK_NAME: wordpress
LETS_ENCRYPT_ENV: production
DB_PASSWORD_VERSION: v1
DB_ROOT_PASSWORD_VERSION: v1
SECRET_DB_PASSWORD_VERSION: v1
SECRET_DB_ROOT_PASSWORD_VERSION: v1
PHP_UPLOADS_CONF_VERSION: v1
ENTRYPOINT_CONF_VERSION: v1
trigger:
branch:
- master
---
kind: pipeline
name: recipe release
steps:
- name: release a new version
image: thecoopcloud/drone-abra:latest
settings:
command: recipe wordpress release
deploy_key:
from_secret: abra_bot_deploy_key

44
.env.sample Normal file
View File

@ -0,0 +1,44 @@
TYPE=wordpress
DOMAIN=wordpress.example.com
## Domain aliases
#EXTRA_DOMAINS=', `www.wordpress.example.com`'
LETS_ENCRYPT_ENV=production
## Additional extensions
#PHP_EXTENSIONS="calendar"
SECRET_DB_ROOT_PASSWORD_VERSION=v1
SECRET_DB_PASSWORD_VERSION=v1
# Multisite
#WORDPRESS_CONFIG_EXTRA="\
# define('WP_CACHE', false);\
# define('WP_ALLOW_MULTISITE', true );"
# Multisite phase 2 (see README)
#WORDPRESS_CONFIG_EXTRA="\
# define('WP_CACHE', false);\
# define('WP_ALLOW_MULTISITE', true );\
# define('MULTISITE', true);\
# define('SUBDOMAIN_INSTALL', true);\
# define('DOMAIN_CURRENT_SITE', '${DOMAIN}');\
# define('PATH_CURRENT_SITE', '/');\
# define('SITE_ID_CURRENT_SITE', 1);\
# define('BLOG_ID_CURRENT_SITE', 1);\
# define('FORCE_SSL_ADMIN', true );\
# define('COOKIE_DOMAIN', \$_SERVER['HTTP_HOST']);"
# Local SMTP relay
#COMPOSE_FILE="compose.yml:compose.mailrelay.yml"
#SMTP_HOST="postfix_relay_app"
#MAIL_FROM="wordpress@example.com"
# Remote SMTP relay
#COMPOSE_FILE="compose.yml:compose.mailrelay.yml:compose.smtp.yml"
#SMTP_HOST="mail.example.com"
#MAIL_FROM="wordpress@example.com"
#SMTP_PORT=587
#SMTP_AUTH=on
#SMTP_TLS=on
#SECRET_SMTP_PASSWORD_VERSION=v1

View File

@ -1,36 +0,0 @@
export DOMAIN=wordpress.example.com
export STACK_NAME=wordpress
export LETS_ENCRYPT_ENV=production
export DB_ROOT_PASSWORD_VERSION=v1
export DB_PASSWORD_VERSION=v1
# Multisite
#export WORDPRESS_CONFIG_EXTRA="\
# define('WP_CACHE', false);\
# define('WP_ALLOW_MULTISITE', true );"
# Multisite phase 2 (see README)
#export WORDPRESS_CONFIG_EXTRA="\
# define('WP_CACHE', false);\
# define('WP_ALLOW_MULTISITE', true );\
# define('MULTISITE', true);\
# define('SUBDOMAIN_INSTALL', true);\
# define('DOMAIN_CURRENT_SITE', '${DOMAIN}');\
# define('PATH_CURRENT_SITE', '/');\
# define('SITE_ID_CURRENT_SITE', 1);\
# define('BLOG_ID_CURRENT_SITE', 1);\
# define('FORCE_SSL_ADMIN', true );\
# define('COOKIE_DOMAIN', \$_SERVER['HTTP_HOST']);"
# Backups
#export COMPOSE_FILE="compose.yml:compose.backup.yml"
# SMTP
#export COMPOSE_FILE="compose.yml:compose.mailrelay.yml"
#export SMTP_HOST="postfix_relay_app"
#export MAIL_FROM="wordpress@example.com"
#
#export MSMTP_CONF_VERSION=v1
#export ENTRYPOINT_MAILRELAY_CONF_VERSION=v1

View File

@ -1,60 +1,75 @@
# wordpress
# Wordpress
[![Build Status](https://drone.autonomic.zone/api/badges/compose-stacks/wordpress/status.svg)](https://drone.autonomic.zone/compose-stacks/wordpress)
[![Build Status](https://drone.autonomic.zone/api/badges/coop-cloud/wordpress/status.svg)](https://drone.autonomic.zone/coop-cloud/wordpress)
Coöp Cloud + [Wordpress](https://wordpress.org) = 🥳
1. Set up Docker Swarm and [`abra`][abra]
2. Deploy [`compose-stacks/traefik`][compose-traefik]
3. `cp .envrc.sample .envrc`
4. Edit `.envrc` - be sure to change `$DOMAIN` to something that resolves to
your Docker swarm box
5. `direnv allow` (or `. .envrc`)
6. Generate secrets:
```
abra secret_generate db_password v1
abra secret_generate db_root_password v1
```
<!-- metadata -->
7. `abra deploy`
8. Open the configured domain in your browser to finish set-up
9. `abra run wordpress chown www-data:www-data /var/www/html/wp-content` to fix
* **Category**: Apps
* **Status**: 3, stable
* **Image**: [`wordpress`](https://hub.docker.com/_/wordpress), 4, upstream
* **Healthcheck**: Yes
* **Backups**: Yes
* **Email**: 3
* **Tests**: 2
* **SSO**: No
<!-- endmetadata -->
## Basic usage
1. Set up Docker Swarm and [`abra`][abra]
2. Deploy [`coop-cloud/traefik`][cc-traefik]
3. `abra app new wordpress --secrets` (optionally with `--pass` if you'd like
to save secrets in `pass`)
4. `abra app YOURAPPDOMAIN config` - be sure to change `$DOMAIN` to something that resolves to
your Docker swarm box
5. `abra app YOURAPPDOMAIN deploy`
6. Open the configured domain in your browser to finish set-up
7. `abra app YOURAPPDOMAIN run app chown www-data:www-data /var/www/html/wp-content` to fix
file permissions (see #3)
## Running WP-CLI
`abra app YOURAPPDOMAIN wp 'core check-update --major'`
(the WP-CLI arguments need to be quoted, because of how `abra` handles
command-line arguments)
## Network (Multi-site)
_(Only tested using subdomains)_
1. Set up as above
2. Uncomment the first `# Multisite` section in `.envrc`
3. `direnv allow` (or re-run `source .envrc`)
4. `abra deploy`
5. Log into the Wordpress admin dashboard, go to Tools » Network Setup
6. Don't worry about the suggested file changes
7. Comment out the first `# Multisite` section in `.envrc` and uncomment the
`# Multisite phase 2` section
8. `direnv allow` (or re-run `source .envrc`)
9. `abra deploy`
10. FIXME setting up SSL / routing
2. `abra app YOURAPPDOMAIN config`, and uncomment the first `# Multisite` section
3. `abra app YOURAPPDOMAIN deploy`
4. Log into the Wordpress admin dashboard, go to Tools » Network Setup
5. Don't worry about the suggested file changes
6. `abra app YOURAPPDOMAIN config` again - comment out the first `# Multisite`
section in `.envrc`, uncomment the `# Multisite phase 2` section, and add
your multisite subdomain(s) to `EXTRA_DOMAINS` (beware the weird syntax..)
7. `abra app YOURAPPDOMAIN deploy`
## Installing a custom theme
`abra cp ~/path/to/local/theme wordpress:/var/www/html/wp-content/themes/`
## Backups
1. Edit `.envrc` and uncomment the `export COMPOSE_FILE="compose.yml:compose.backup.yml"` line
2. `direnv allow`
3. `abra deploy`
`abra app YOURAPPDOMAIN cp ~/path/to/local/theme wordpress:/var/www/html/wp-content/themes/`
## Email
1. Deploy `postfix-relay`
2. Edit `.envrc` and uncomment the email lines; change `MAIL_FROM` to make sure
the domain is the same as `postfix-relay`'s `$DOMAIN` or in its
`$EXTRA_SENDER_DOMAINS`
3. `direnv allow` (or `source .envrc`)
7. `abra deploy`
There is a local or remote SMTP relay configuration available.
* **local**: `COMPOSE_FILE=compose.yml:compose.mailrelay.yml`
* **remote**: `COMPOSE_FILE=compose.yml:compose.mailrelay.yml:compose.smtp.yml`
Below are the instructions for the local relay.
1. Deploy [`postfix-relay`][cc-postfix-relay]
2. `abra app YOURAPPDOMAIN config`, and uncomment the email lines; change
`MAIL_FROM` to make sure the domain is the same as `postfix-relay`'s
`$DOMAIN` or in its `$EXTRA_SENDER_DOMAINS`
3. `abra app YOURAPPDOMAIN deploy`
[abra]: https://git.autonomic.zone/autonomic-cooperative/abra
[compose-traefik]: https://git.autonomic.zone/compose-stacks/traefik
[cc-traefik]: https://git.autonomic.zone/coop-cloud/traefik
[cc-postfix-relay]: https://git.autonomic.zone/coop-cloud/traefik

78
abra.sh Normal file
View File

@ -0,0 +1,78 @@
export PHP_UPLOADS_CONF_VERSION=v3
export ENTRYPOINT_CONF_VERSION=v2
export ENTRYPOINT_MAILRELAY_CONF_VERSION=v1
export MSMTP_CONF_VERSION=v3
sub_wp() {
CONTAINER=$(docker container ls -f "Name=${STACK_NAME}_app" --format '{{ .ID }}')
if [ -z "$CONTAINER" ]; then
error "Can't find a container for ${STACK_NAME}_app"
exit
fi
debug "Using Container ID ${CONTAINER}"
# FIXME 3wc: we're fighting the Wordpress image, which recommends a named
# volume for /var/www/html -- this used to work fine using --volumes-from
# because the actual MySQL password was inserted into the generated
# wp-config.php -- but as of Wordpress 5.7.0, wp-config loads data straight
# from the environment, which requires Docker secrets to work, which only work
# in swarm services (not one-off `docker run` commands). Defining a `cli`
# service in compose.yml almost works, but there's no volumes_from: in Compose
# V3, and without it then the `cli` service can't access Wordpress core.
# See https://git.autonomic.zone/coop-cloud/wordpress/issues/21
warning "Slowly looking up MySQL password..."
silence
abra__service_="app"
DB_PASSWORD="$(sub_app_run cat "/run/secrets/db_password")"
unsilence
# shellcheck disable=SC2154,SC2086
docker run -it \
--volumes-from "$CONTAINER" \
--network "container:$CONTAINER" \
-u xfs:xfs \
-e WORDPRESS_DB_HOST=db \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD="${DB_PASSWORD}" \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_CONFIG_EXTRA="${WORDPRESS_CONFIG_EXTRA}" \
wordpress:cli wp ${abra__args_[*]}
}
abra_backup_app() {
_abra_backup_dir "app:/var/www/html/wp-content"
}
abra_backup_db() {
_abra_backup_mysql "db" "wordpress"
}
abra_backup() {
abra_backup_app && abra_backup_db
}
abra_restore_app() {
# shellcheck disable=SC2034
{
abra__src_="-"
abra__dst_="app:/var/www/html/"
}
zcat "$@" | sub_app_cp
success "Restored 'app'"
}
abra_restore_db() {
# 3wc: unlike abra_backup_db, we can assume abra__service_ will be 'db' if we
# got this far..
# shellcheck disable=SC2034
abra___no_tty="true"
DB_ROOT_PASSWORD=$(sub_app_run cat /run/secrets/db_root_password)
zcat "$@" | sub_app_run mysql -u root -p"$DB_ROOT_PASSWORD" wordpress
success "Restored 'db'"
}

View File

@ -1,3 +0,0 @@
# Notes
- The only thing different between [fr_singlesite_wordpress.yml](./fr_singlesite_wordpress.yml) and [fr_microsites_wordpress.yml](./fr_microsites_wordpress.yml) is the `BORGBASE_REPO` environment variable and the `backup_bot_singlesite_passwd_v1`/`backup_bot_multisite_passwd_v1` secret. These are the two details which are needed for Borgmatic to know how to differentiate between each repository on the Borgbase side (where our backups are stored). Sooo, there could most definitely be a reduction in boilerplate here but I was just moving super fast and wanted to get the backup work done.

View File

@ -1,36 +0,0 @@
location:
source_directories:
- /var/www/html/wp-content
repositories:
- {{ env "BORGBASE_REPO" }}
storage:
compression: auto,zstd
encryption_passphrase: {{ secret "backup_bot_password" }}
archive_name_format: "{hostname}-{now}"
ssh_command: "ssh -o 'StrictHostKeyChecking no' -i /run/secrets/backup_bot_ssh_key"
retention:
keep_daily: 3
keep_weekly: 4
keep_monthly: 12
keep_yearly: 2
prefix: "{hostname}-"
consistency:
checks:
- disabled
check_last: 3
prefix: "{hostname}-"
hooks:
before_backup:
- echo "`date` - Starting backup"
after_backup:
- echo "`date` - Finished backup"
mysql_databases:
- name: {{ env "DB_TABLE" }}
hostname: {{ env "DB_HOST" }}
port: 3306
username: {{ env "DB_USER" }}
password: {{ secret "db_password" }}

View File

@ -1,47 +0,0 @@
---
version: "3.8"
services:
backupbot:
image: "decentral1se/backup-bot:latest"
networks:
- backend
volumes:
- "wordpress_content:/var/www/html/wp-content/"
secrets:
- source: backup_bot_ssh_key
mode: 0400
- backup_bot_password
- db_password
configs:
- source: borgmatic_config_yml
target: /etc/borgmatic/config.yaml
environment:
- BORGBASE_REPO="bp5oj726@bp5oj726.repo.borgbase.com:repo"
- DB_HOST=mariadb
- DB_TABLE=wordpress
- DB_USER=wordpress
deploy:
mode: replicated
replicas: 0
labels:
- "swarm.cronjob.enable=true"
- "swarm.cronjob.schedule=0 2 * * *" # At 02:00
restart_policy:
condition: none
networks:
- backend
configs:
borgmatic_config_yml:
name: borgmatic_config_yml_v1
file: backup.d/borgmatic.yml
template_driver: golang
secrets:
backup_bot_ssh_key:
name: backup_bot_ssh_key_v1
external: true
backup_bot_password:
name: backup_bot_multisite_passwd_v1
external: true

View File

@ -1,47 +0,0 @@
---
version: "3.8"
services:
backupbot:
image: "decentral1se/backup-bot:latest"
networks:
- backend
volumes:
- "wordpress_content:/var/www/html/wp-content/"
secrets:
- source: backup_bot_ssh_key
mode: 0400
- backup_bot_password
- db_password
configs:
- source: borgmatic_config_yml
target: /etc/borgmatic/config.yaml
environment:
- BORGBASE_REPO="l32s99em@l32s99em.repo.borgbase.com:repo"
- DB_HOST=mariadb
- DB_TABLE=wordpress
- DB_USER=wordpress
deploy:
mode: replicated
replicas: 0
labels:
- "swarm.cronjob.enable=true"
- "swarm.cronjob.schedule=0 2 * * *" # At 02:00
restart_policy:
condition: none
networks:
- backend
configs:
borgmatic_config_yml:
name: borgmatic_config_yml_v1
file: backup.d/borgmatic.yml
template_driver: golang
secrets:
backup_bot_ssh_key:
name: backup_bot_ssh_key_v1
external: true
backup_bot_password:
name: backup_bot_singlesite_passwd_v1
external: true

View File

@ -1,65 +0,0 @@
# #############################################################################
# NOTE(decentral1se): this is a test compose.yml to test abra based deployments
# #############################################################################
---
version: "3.8"
services:
wordpress:
image: "wordpress:5.5.1"
networks:
- backend
- proxy
environment:
- WORDPRESS_DB_HOST=mariadb
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD_FILE=/run/secrets/db_password
- WORDPRESS_DB_NAME=wordpress
secrets:
- db_password
deploy:
update_config:
failure_action: rollback
order: start-first
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.${NAME}.tls=true"
- "traefik.http.services.${NAME}.loadbalancer.server.port=80"
- "traefik.http.routers.${NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${NAME}.tls.certresolver=production"
- "traefik.http.routers.${NAME}.entrypoints=web-secure"
mariadb:
image: "mariadb:10.5"
volumes:
- "mariadb:/var/lib/mysql"
networks:
- backend
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_root_password
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD_FILE=/run/secrets/db_password
secrets:
- db_password
- db_root_password
networks:
backend:
driver: overlay
proxy:
external: true
volumes:
mariadb:
wordpress_content:
secrets:
db_root_password:
external: true
name: ${DB_ROOT_PASSWD}
db_password:
external: true
name: ${DB_PASSWD}

View File

@ -1,31 +1,25 @@
---
version: "3.8"
services:
wordpress:
entrypoint: /docker-entrypoint.sh
app:
entrypoint: /docker-entrypoint.mailrelay.sh
environment:
- SMTP_HOST=${SMTP_HOST}
- MAIL_FROM=${MAIL_FROM}
networks:
- mail
configs:
- source: mstmp_conf
target: /etc/msmtprc
- source: entrypoint_conf
target: /docker-entrypoint.sh
- source: entrypoint_mailrelay_conf
target: /docker-entrypoint.mailrelay.sh
mode: 0555
networks:
mail:
external: true
configs:
mstmp_conf:
name: ${STACK_NAME}_mstmp_conf_${MSMTP_CONF_VERSION}
file: msmtp.conf.tmpl
template_driver: golang
entrypoint_conf:
entrypoint_mailrelay_conf:
name: ${STACK_NAME}_entrypoint_mailrelay_${ENTRYPOINT_MAILRELAY_CONF_VERSION}
file: entrypoint.mailrelay.sh.tmpl
template_driver: golang

18
compose.smtp.yml Normal file
View File

@ -0,0 +1,18 @@
---
version: "3.8"
services:
app:
secrets:
- smtp_password
environment:
- SMTP_HOST=${SMTP_HOST}
- SMTP_PORT=${SMTP_PORT:-25}
- SMTP_AUTH=${SMTP_AUTH}
- SMTP_TLS=${SMTP_TLS}
- MAIL_FROM=${MAIL_FROM}
secrets:
smtp_password:
name: ${STACK_NAME}_smtp_password_${SECRET_SMTP_PASSWORD_VERSION}
external: true

View File

@ -2,21 +2,37 @@
version: "3.8"
services:
wordpress:
image: "wordpress:5.5.1"
app:
image: "wordpress:5.8.3"
volumes:
- "wordpress_content:/var/www/html/wp-content/"
networks:
- backend
- proxy
environment:
- WORDPRESS_DB_HOST=mariadb
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD_FILE=/run/secrets/db_password
- WORDPRESS_DB_NAME=wordpress
- WORDPRESS_CONFIG_EXTRA=${WORDPRESS_CONFIG_EXTRA}
- PHP_EXTENSIONS
secrets:
- db_password
configs:
- source: php_uploads_conf
target: /usr/local/etc/php/conf.d/uploads.ini
- source: entrypoint_conf
target: /docker-entrypoint.sh
mode: 0555
entrypoint: /docker-entrypoint.sh
depends_on:
- db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
deploy:
update_config:
failure_action: rollback
@ -26,15 +42,18 @@ services:
- "traefik.docker.network=proxy"
- "traefik.http.routers.${STACK_NAME}.tls=true"
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=80"
- "traefik.http.routers.${STACK_NAME}.rule=Host(`ch.${DOMAIN}`, `${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})"
# 3wc: this rule works for routing, but not for generating certificates
# see https://git.autonomic.zone/compose-stacks/planning/issues/14
# see https://git.autonomic.zone/coop-cloud/planning/issues/14
#- "traefik.http.routers.${STACK_NAME}.rule=HostRegexp(`{subdomain:.+}.${DOMAIN}`, `${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "coop-cloud.${STACK_NAME}.version=1.0.2+5.8.3"
- "backupbot.backup=true"
- "backupbot.backup.path=/var/www/html"
mariadb:
image: "mariadb:10.5"
db:
image: "mariadb:10.6"
volumes:
- "mariadb:/var/lib/mysql"
networks:
@ -47,10 +66,15 @@ services:
secrets:
- db_password
- db_root_password
deploy:
labels:
- "backupbot.backup=true"
- "backupbot.backup.path=/tmp/dump.sql.gz"
- "backupbot.backup.post-hook=rm -f /tmp/dump.sql.gz"
- "backupbot.backup.pre-hook=mysqldump -u root -p`cat /run/secrets/db_root_password` wordpress | gzip > /tmp/dump.sql.gz"
networks:
backend:
driver: overlay
proxy:
external: true
@ -61,7 +85,16 @@ volumes:
secrets:
db_root_password:
external: true
name: ${STACK_NAME}_db_root_password_${DB_ROOT_PASSWORD_VERSION}
name: ${STACK_NAME}_db_root_password_${SECRET_DB_ROOT_PASSWORD_VERSION}
db_password:
external: true
name: ${STACK_NAME}_db_password_${DB_PASSWORD_VERSION}
name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION}
configs:
entrypoint_conf:
name: ${STACK_NAME}_entrypoint_conf_${ENTRYPOINT_CONF_VERSION}
file: entrypoint.sh.tmpl
template_driver: golang
php_uploads_conf:
name: ${STACK_NAME}_php_uploads_conf_${PHP_UPLOADS_CONF_VERSION}
file: uploads.ini

View File

@ -3,7 +3,3 @@
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y msmtp && rm -rf /var/lib/apt/lists/*
echo "sendmail_path = /usr/bin/msmtp -t -i" > /usr/local/etc/php/conf.d/sendmail.ini
# Upstream ENTRYPOINT
# https://github.com/docker-library/wordpress/blob/master/php7.4/apache/Dockerfile#L120
/usr/local/bin/docker-entrypoint.sh apache2-foreground "$@"

13
entrypoint.sh.tmpl Normal file
View File

@ -0,0 +1,13 @@
#!/bin/bash
{{ if (env "PHP_EXTENSIONS") }}
docker-php-ext-install {{ env "PHP_EXTENSIONS" }}
{{ end }}
if [ -n "$@" ]; then
"$@"
fi
# Upstream ENTRYPOINT
# https://github.com/docker-library/wordpress/blob/master/php7.4/apache/Dockerfile#L120
/usr/local/bin/docker-entrypoint.sh apache2-foreground

View File

@ -1,3 +1,15 @@
account default
host {{ env "SMTP_HOST" }}
from {{ env "MAIL_FROM" }}
user {{ env "MAIL_FROM" }}
port {{ env "SMTP_PORT" }}
{{ if eq (env "SMTP_AUTH") "on" }}
auth {{ env "SMTP_AUTH" }}
passwordeval "cat /run/secrets/smtp_password"
{{ end }}
{{ if eq (env "SMTP_TLS") "on" }}
tls {{ env "SMTP_TLS" }}
tls_trust_file /etc/ssl/certs/ca-certificates.crt
{{ end }}

View File

@ -1,17 +0,0 @@
---
name: Wordpress
description: Open source software you can use to create a beautiful website, blog, or app
arguments:
name:
description: The name of your Wordpress application
example: my-cool-project
domain:
description: The domain name where your Wordpress will be available on the web
example: my-cool-project.com
secrets:
db_passwd:
description: The normal user database password
length: 8
db_root_passwd:
description: The root user database password
length: 8

3
uploads.ini Normal file
View File

@ -0,0 +1,3 @@
file_uploads = On
upload_max_filesize = 256M
post_max_size = 256M