Compare commits

...

27 Commits

Author SHA1 Message Date
3wc
c3b4bb5dfb Add EXTRA_DOMAINS support 2020-10-05 13:06:51 +02:00
3wc
82332b6854 Rename services
See compose-stacks/organising#19
2020-10-01 12:32:12 +02:00
3wc
d48bb92dda Fix SMTP relay entrypoint config name 2020-10-01 12:29:23 +02:00
2e489025d4 Back to using name because we have a test file 2020-10-01 01:21:47 +02:00
2e8c910e00 Use stack_name for now 2020-10-01 01:18:15 +02:00
1e711e73de Lower case those secrets 2020-10-01 01:10:16 +02:00
4da5951874 Add descriptions 2020-10-01 00:34:46 +02:00
61e637a05a Make that uppercase 2020-09-30 23:19:05 +02:00
41f7bc27a8 Spoof out further this package yml 2020-09-30 23:18:08 +02:00
c9ebc5508a Add initial package schema for _abra 2020-09-29 00:33:06 +02:00
19e306ce68 Fix secret version name 2020-09-29 00:32:52 +02:00
3wc
87324459b0 Add MAIL_FROM to example .envrc
[ci skip]
2020-09-28 00:55:04 +02:00
3wc
e6dc753365 Improve email set-up 2020-09-27 21:27:26 +02:00
3wc
5f2697c0c9 Optional SMTP relay 2020-09-27 21:27:26 +02:00
349feac543 Add secret generation 2020-09-25 21:04:25 +02:00
b9e081b84e Try purging 2020-09-25 20:15:49 +02:00
3wc
ca4a0b97fb Add build status to README
[ci skip]
2020-09-25 15:07:06 +02:00
3wc
e8ce5ac444 Rename deploy_key again.. 2020-09-25 15:04:46 +02:00
3wc
0e851024fc Use latest stack-ssh-deploy, change SSH key name 2020-09-25 14:25:29 +02:00
ea532c19ee Use latest tags 2020-09-25 13:24:09 +02:00
3wc
0a3a72789b Use stack-ssh-deploy instead 2020-09-25 02:43:23 +02:00
3wc
95e6ba0080 Run Drone on master branch 2020-09-25 02:32:02 +02:00
3wc
18420b4b7b Add .drone.yml 2020-09-25 02:32:02 +02:00
dd526ec4cf Add notes 2020-09-24 10:21:49 +02:00
59b62ce14c Fix borgmatic path 2020-09-24 10:13:22 +02:00
2a4a1ad320 Fix path to borgmatic 2020-09-24 10:10:01 +02:00
5c35be0aa7 Move multiple backup configs to backup.d 2020-09-24 09:55:41 +02:00
13 changed files with 239 additions and 15 deletions

22
.drone.yml Normal file
View File

@ -0,0 +1,22 @@
---
kind: pipeline
name: deploy to swarm-test.autonomic.zone
steps:
- name: deployment
image: decentral1se/stack-ssh-deploy:latest
settings:
host: swarm-test.autonomic.zone
stack: wordpress
generate_secrets: true
purge: true
deploy_key:
from_secret: drone_ssh_swarm_test
environment:
DOMAIN: wordpress.swarm-test.autonomic.zone
STACK_NAME: wordpress
LETS_ENCRYPT_ENV: production
DB_PASSWORD_VERSION: v1
DB_ROOT_PASSWORD_VERSION: v1
trigger:
branch:
- master

View File

@ -1,4 +1,6 @@
export DOMAIN=wordpress.example.com
## Domain aliases
#export EXTRA_DOMAINS=', `www.wordpress.example.com`'
export STACK_NAME=wordpress
export LETS_ENCRYPT_ENV=production
@ -26,3 +28,11 @@ export DB_PASSWORD_VERSION=v1
# 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,5 +1,7 @@
# wordpress
[![Build Status](https://drone.autonomic.zone/api/badges/compose-stacks/wordpress/status.svg)](https://drone.autonomic.zone/compose-stacks/wordpress)
Coöp Cloud + [Wordpress](https://wordpress.org) = 🥳
1. Set up Docker Swarm and [`abra`][abra]
@ -13,7 +15,6 @@ Coöp Cloud + [Wordpress](https://wordpress.org) = 🥳
abra secret_generate db_password v1
abra secret_generate db_root_password v1
```
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
@ -39,11 +40,20 @@ _(Only tested using subdomains)_
`abra cp ~/path/to/local/theme wordpress:/var/www/html/wp-content/themes/`
[abra]: https://git.autonomic.zone/autonomic-cooperative/abra
[compose-traefik]: https://git.autonomic.zone/compose-stacks/traefik
## Backups
1. Edit `.envrc` and uncomment the `export COMPOSE_FILE="compose.yml:compose.backup.yml"` line
2. `direnv allow`
3. `abra deploy`
## 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`
[abra]: https://git.autonomic.zone/autonomic-cooperative/abra
[compose-traefik]: https://git.autonomic.zone/compose-stacks/traefik

3
backup.d/NOTES.md Normal file
View File

@ -0,0 +1,3 @@
# 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

@ -3,7 +3,7 @@ version: "3.8"
services:
backupbot:
image: "decentral1se/backup-bot:0.0.1"
image: "decentral1se/backup-bot:latest"
networks:
- backend
volumes:
@ -17,7 +17,7 @@ services:
- source: borgmatic_config_yml
target: /etc/borgmatic/config.yaml
environment:
- BORGBASE_REPO="g067e243@g067e243.repo.borgbase.com:repo"
- BORGBASE_REPO="bp5oj726@bp5oj726.repo.borgbase.com:repo"
- DB_HOST=mariadb
- DB_TABLE=wordpress
- DB_USER=wordpress
@ -34,8 +34,8 @@ services:
configs:
borgmatic_config_yml:
name: borgmatic_config_yml_v7
file: borgmatic.yml
name: borgmatic_config_yml_v1
file: backup.d/borgmatic.yml
template_driver: golang
secrets:
@ -43,5 +43,5 @@ secrets:
name: backup_bot_ssh_key_v1
external: true
backup_bot_password:
name: backup_bot_password_v1
name: backup_bot_multisite_passwd_v1
external: true

View File

@ -0,0 +1,47 @@
---
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

65
compose.abra.yml Normal file
View File

@ -0,0 +1,65 @@
# #############################################################################
# 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}

31
compose.mailrelay.yml Normal file
View File

@ -0,0 +1,31 @@
---
version: "3.8"
services:
app:
entrypoint: /docker-entrypoint.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
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:
name: ${STACK_NAME}_entrypoint_mailrelay_${ENTRYPOINT_MAILRELAY_CONF_VERSION}
file: entrypoint.mailrelay.sh.tmpl
template_driver: golang

View File

@ -2,7 +2,7 @@
version: "3.8"
services:
wordpress:
app:
image: "wordpress:5.5.1"
volumes:
- "wordpress_content:/var/www/html/wp-content/"
@ -10,13 +10,21 @@ services:
- 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}
secrets:
- db_password
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,14 +34,14 @@ 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
#- "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"
mariadb:
db:
image: "mariadb:10.5"
volumes:
- "mariadb:/var/lib/mysql"
@ -58,11 +66,10 @@ volumes:
mariadb:
wordpress_content:
secrets:
db_root_password:
external: true
name: ${STACK_NAME}_db_root_password_${DB_ROOT_PASSWORD_VERSION}
db_password:
external: true
name: ${STACK_NAME}_db_password_${DB_ROOT_PASSWORD_VERSION}
name: ${STACK_NAME}_db_password_${DB_PASSWORD_VERSION}

View File

@ -0,0 +1,9 @@
#!/bin/bash
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 "$@"

3
msmtp.conf.tmpl Normal file
View File

@ -0,0 +1,3 @@
account default
host {{ env "SMTP_HOST" }}
from {{ env "MAIL_FROM" }}

17
package.yml Normal file
View File

@ -0,0 +1,17 @@
---
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