Compare commits

...

41 Commits

Author SHA1 Message Date
cf54575187 restricts ownership changes to files still owned by root (e.g., from the image build). On subsequent restarts, files already owned by www-data are skipped entirely, avoiding a full recursive write cycle.
Some checks failed
continuous-integration/drone/pr Build is failing
2026-06-02 16:24:48 +01:00
b4db12f09c Added ignores for .env, *.log, .DS_Store, Thumbs.db, and common editor/IDE files
Some checks failed
continuous-integration/drone/pr Build is failing
2026-06-02 16:23:11 +01:00
e4b87c8ab9 chown entire wp-content to ensure correct permissions
Some checks failed
continuous-integration/drone/pr Build is failing
2026-06-02 16:11:39 +01:00
7e170adbb4 Merge pull request 'Added xtra chown to ensure correct perms on every container start' (#57) from kawaiipunk/wordpress:main into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #57
2026-05-26 17:10:01 +00:00
66e0687456 Removed redundant chown
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-26 17:05:24 +01:00
9209f007cb revert 69cf451b98
Some checks failed
continuous-integration/drone/push Build is failing
revert Merge pull request 'chore(deps): update wordpress docker tag to v7' (#55) from renovate/wordpress-7.x into main

Reviewed-on: #55

Sorry this was done by mistake!
2026-05-26 14:08:49 +00:00
69cf451b98 Merge pull request 'chore(deps): update wordpress docker tag to v7' (#55) from renovate/wordpress-7.x into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #55
2026-05-26 13:59:35 +00:00
73a2e98d2e Added xtra chown to ensure correct perms on every container start
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-26 14:10:22 +01:00
0e229168fc chore(deps): update wordpress docker tag to v7
Some checks failed
continuous-integration/drone/pr Build is failing
2026-05-22 00:34:30 +00:00
332ab0b97d chore: publish 2.19.2+6.9.4 release
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2026-04-28 02:25:26 +02:00
3b598e82dd harden htaccess 2026-04-28 01:57:52 +02:00
8e81f3f81c selfmanaged wordpress 2026-04-28 01:54:50 +02:00
a09bd166ad chore: publish 2.19.1+6.9.4 release
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2026-03-17 17:11:56 +01:00
b4c5d04382 chore: replace depricated traefik.docker.* with traefik.swarm.* 2026-03-17 17:11:07 +01:00
3c013d39fd chore: publish 2.19.0+6.9.4 release
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2026-03-17 16:11:37 +01:00
285bc01bef Merge pull request 'chore(config): migrate Renovate config' (#52) from renovate/migrate-config into main
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #52
2026-03-10 19:34:45 +00:00
2ca12bff9c chore(config): migrate config renovate.json
Some checks failed
continuous-integration/drone/pr Build is failing
2026-03-10 19:33:29 +00:00
da2e62b618 chore: publish 2.18.0+6.9.1 release
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2026-03-07 09:39:38 +01:00
364b5c8b8a chore: update image tags 2026-03-07 09:39:16 +01:00
306b348961 chore: publish 2.17.1+6.9.0 release
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2026-02-16 10:58:29 +01:00
3c1121b7ce remove default TIMEOUT (abra #596)
Some checks failed
continuous-integration/drone/push Build is failing
2025-12-30 14:02:39 +01:00
3wc
b0eb1756a3 chore: publish 2.17.0+6.9.0 release
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2025-12-07 17:27:49 -05:00
97b9b99e93 chore: publish 2.16.2+6.8.3 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2025-10-15 11:30:23 -04:00
cf2a5077c9 chore: publish 2.16.1+6.8.1 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2025-07-01 19:16:41 +02:00
74282d5658 chore: publish 2.16.0+6.8.1 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2025-05-27 17:17:23 +02:00
ab7716bf1e chore: publish 2.15.0+6.8.0 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2025-04-23 09:39:59 -07:00
3wc
b0cc5a49a1 chore: publish 2.14.0+6.7.2 release
Some checks reported errors
continuous-integration/drone/push Build is pending
continuous-integration/drone/tag Build is pending
continuous-integration/drone Build was killed
2025-02-19 12:38:06 -05:00
3cca5d2cf3 Update .drone.yml
All checks were successful
continuous-integration/drone/push Build is passing
2025-01-08 10:09:13 -08:00
f403648cf6 chore: publish 2.13.3+6.7.1 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-12-17 16:42:36 +01:00
83f724a316 add all possible ftp port compose files to .env
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-17 16:40:40 +01:00
e6b9f8117f chore: publish 2.13.2+6.7.1 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-12-17 15:29:21 +01:00
e7aef38d3b remove 2222 default port binding to avoid port conflicts 2024-12-17 15:28:47 +01:00
e08838561d chore: publish 2.13.1+6.7.1 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-12-17 15:21:10 +01:00
04d26a59a9 add possiblitliy to use other sftp ports per compose overwrite 2024-12-17 15:16:42 +01:00
591019112e chore: publish 2.13.0+6.7.1 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-12-10 19:23:34 +01:00
76e9b80fbd fix uploads.ini templating 2024-12-10 19:23:34 +01:00
f49fa05ded add some more wordpress options for file uploads (#44)
All checks were successful
continuous-integration/drone/push Build is passing
Co-authored-by: Steven Sting
Reviewed-on: #44
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2024-12-09 14:59:57 +00:00
716e6df3cd move USERS_CONF_VERSION env to abra.sh
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-11 22:51:58 +01:00
457c2defaf update backupbot label
All checks were successful
continuous-integration/drone/push Build is passing
2024-10-24 15:26:10 +02:00
37ff3e9b1b chore: publish 2.12.2+6.6.2 release
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-10-09 16:58:22 +02:00
c5443cc14b chore: publish 2.12.1+6.6.1 release
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-26 18:21:25 +01:00
22 changed files with 184 additions and 31 deletions

View File

@ -37,7 +37,7 @@ steps:
from_secret: drone_abra-bot_token
fork: true
repositories:
- coop-cloud/auto-recipes-catalogue-json
- toolshed/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -1,7 +1,8 @@
TYPE=wordpress
TIMEOUT=300
#TIMEOUT=300
ENABLE_AUTO_UPDATE=true
COMPOSE_FILE="compose.yml"
ENABLE_BACKUPS=true
DOMAIN=wordpress.example.com
## Domain aliases
@ -27,6 +28,9 @@ LETS_ENCRYPT_ENV=production
# PHP composer for plugin installation
#COMPOSE_FILE="$COMPOSE_FILE:compose.composer.yml"
# Self managed Wordpress for automatic updates
#COMPOSE_FILE="$COMPOSE_FILE:compose.selfmanaged.yml"
#WORDPRESS_DEBUG=true
## Additional extensions
@ -41,6 +45,10 @@ SECRET_DB_PASSWORD_VERSION=v1
# Multisite (see README)
#MULTISITE=enable # either 'enable', 'subdomain' or 'subfolder'
# File upload settings
#UPLOAD_MAX_SIZE=256M
#UPLOAD_MAX_TIME=30
# Local SMTP relay
#COMPOSE_FILE="$COMPOSE_FILE:compose.mailrelay.yml"
#SMTP_HOST="postfix_relay_app"
@ -64,6 +72,10 @@ SECRET_DB_PASSWORD_VERSION=v1
#SECRET_AUTHENTIK_ID_VERSION=v1
#LOGIN_TYPE='auto'
# Matrix .well-known redirect
#COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml"
#MATRIX_DOMAIN=matrix.example.com
# Allow remote connections to db
# 🚩🚩 dangerous, use only for development sites!
#COMPOSE_FILE="$COMPOSE_FILE:compose.public-db.yml
@ -72,8 +84,13 @@ SECRET_DB_PASSWORD_VERSION=v1
# 🚩🚩 dangerous, use only for development sites!
#CORS_ALLOW_ALL=1
# FTP
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp.yml"
#SECRET_FTP_PASS_VERSION=v1
#USERS_CONF_VERSION=v1
# You can use a Port between 2220-2225
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2220.yml"
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2221.yml"
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2222.yml"
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2223.yml"
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2224.yml"
#COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2225.yml"

21
.gitignore vendored
View File

@ -1 +1,22 @@
# direnv
/.envrc
# Environment files (may contain secrets)
.env
# Logs
*.log
# OS metadata
.DS_Store
Thumbs.db
# Editor/IDE
*.swp
*.swo
*~
*.bak
.idea/
.vscode/
.project
.classpath

26
abra.sh
View File

@ -1,8 +1,9 @@
export PHP_UPLOADS_CONF_VERSION=v3
export ENTRYPOINT_CONF_VERSION=v7
export PHP_UPLOADS_CONF_VERSION=v4
export ENTRYPOINT_CONF_VERSION=v8
export ENTRYPOINT_MAILRELAY_CONF_VERSION=v2
export MSMTP_CONF_VERSION=v4
export HTACCESS_CONF_VERSION=v2
export HTACCESS_CONF_VERSION=v3
export USERS_CONF_VERSION=v1
wp() {
su -p www-data -s /bin/bash -c "/usr/local/bin/wp $@"
@ -30,8 +31,6 @@ core_install(){
wp "language core install $LOCALE"
wp "site switch-language $LOCALE"
wp "rewrite structure '/%year%/%monthnum%/%day%/%postname%/'"
wp "plugin install --activate disable-update-notifications"
wp "option update disable_notification_setting --format=json '{\"dpun_setting\":false,\"dwtu_setting\":false,\"dwcun_setting\":true}'"
if [ -n "$DEFAULT_USER_ROLE" ]
then
wp "option set default_role $DEFAULT_USER_ROLE"
@ -39,7 +38,20 @@ core_install(){
wp "option set default_role subscriber"
fi
wp "theme auto-updates enable --all"
wp 'plugin auto-updates enable --all' || exit 0
wp 'plugin auto-updates enable --all' || true
}
enable_auto_updates(){
wp "plugin deactivate disable-update-notifications --allow-root"
wp "plugin uninstall disable-update-notifications --allow-root"
wp "option delete disable_notification_setting --allow-root"
wp "plugin auto-updates enable --all --allow-root"
wp "theme auto-updates enable --all --allow-root"
}
disable_auto_updates(){
wp "plugin install --activate disable-update-notifications"
wp "option update disable_notification_setting --format=json '{\"dpun_setting\":false,\"dwtu_setting\":false,\"dwcun_setting\":true}'"
}
set_authentik(){
@ -62,6 +74,8 @@ set_authentik(){
\"endpoint_userinfo\":\"https://$AUTHENTIK_DOMAIN/application/o/userinfo/\",
\"endpoint_token\":\"https://$AUTHENTIK_DOMAIN/application/o/token/\",
\"endpoint_end_session\":\"https://$AUTHENTIK_DOMAIN/application/o/wordpress/end-session/\",
\"endpoint_jwks\":\"https://$AUTHENTIK_DOMAIN/application/o/wordpress/jwks/\",
\"issuer\":\"https://$AUTHENTIK_DOMAIN/application/o/wordpress/\",
\"acr_values\":\"\",
\"identity_key\":\"preferred_username\",
\"no_sslverify\":\"0\",

View File

@ -10,3 +10,7 @@ authentik:
shared_secrets:
wordpress_secret: authentik_secret
wordpress_id: authentik_id
matrix:
uncomment:
- compose.matrix.yml
- MATRIX_DOMAIN

7
compose.ftp-2220.yml Normal file
View File

@ -0,0 +1,7 @@
---
version: "3.8"
services:
ftp:
ports:
- 2220:22

7
compose.ftp-2221.yml Normal file
View File

@ -0,0 +1,7 @@
---
version: "3.8"
services:
ftp:
ports:
- 2221:22

7
compose.ftp-2222.yml Normal file
View File

@ -0,0 +1,7 @@
---
version: "3.8"
services:
ftp:
ports:
- 2222:22

7
compose.ftp-2223.yml Normal file
View File

@ -0,0 +1,7 @@
---
version: "3.8"
services:
ftp:
ports:
- 2223:22

7
compose.ftp-2224.yml Normal file
View File

@ -0,0 +1,7 @@
---
version: "3.8"
services:
ftp:
ports:
- 2224:22

7
compose.ftp-2225.yml Normal file
View File

@ -0,0 +1,7 @@
---
version: "3.8"
services:
ftp:
ports:
- 2220:22

View File

@ -3,11 +3,9 @@ version: "3.8"
services:
ftp:
image: atmoz/sftp
image: atmoz/sftp:alpine
secrets:
- ftp_pass
ports:
- 2222:22
volumes:
- "wordpress_content:/home/ftp_user/wp-content"
configs:

10
compose.matrix.yml Normal file
View File

@ -0,0 +1,10 @@
---
version: "3.8"
services:
app:
deploy:
labels:
- "traefik.http.routers.${STACK_NAME}.middlewares=${STACK_NAME}-redirect-matrix-well-known"
- "traefik.http.middlewares.${STACK_NAME}-redirect-matrix-well-known.redirectregex.regex=^https://(.*)/.well-known/matrix/(.*)"
- "traefik.http.middlewares.${STACK_NAME}-redirect-matrix-well-known.redirectregex.replacement=https://${MATRIX_DOMAIN}/.well-known/matrix/$$2"

21
compose.selfmanaged.yml Normal file
View File

@ -0,0 +1,21 @@
---
version: "3.8"
services:
app:
image: "wordpress:latest"
volumes:
- "wordpress:/var/www/html/"
environment:
WORDPRESS_CONFIG_EXTRA: |
define( 'AUTOMATIC_UPDATER_DISABLED', false );
define( 'WP_AUTO_UPDATE_CORE', true );
define( 'FS_METHOD', 'direct' );
${WORDPRESS_CONFIG_EXTRA}
ftp:
volumes:
- "wordpress:/home/ftp_user/"
volumes:
wordpress:

View File

@ -3,7 +3,7 @@ version: "3.8"
services:
app:
image: "wordpress:6.6.1"
image: "wordpress:6.9.4"
volumes:
- "wordpress_content:/var/www/html/wp-content/"
networks:
@ -48,7 +48,7 @@ services:
order: start-first
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.swarm.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(`${DOMAIN}`${EXTRA_DOMAINS})"
@ -61,13 +61,11 @@ services:
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectregex.regex=^https://(${REDIRECTS})/(.*)"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectregex.replacement=https://${DOMAIN}/$${2}"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectregex.permanent=true"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "backupbot.backup=true"
- "backupbot.backup.path=/var/www/html"
- "coop-cloud.${STACK_NAME}.version=2.12.0+6.6.1"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
- "coop-cloud.${STACK_NAME}.version=2.19.2+6.9.4"
db:
image: "mariadb:11.4"
image: "mariadb:12.2"
volumes:
- "mariadb:/var/lib/mysql"
networks:
@ -82,12 +80,10 @@ services:
- db_root_password
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.pre-hook: "sh -c 'mariadb-dump --single-transaction -u root -p\"$$(cat /run/secrets/db_root_password)\" wordpress | gzip > /var/lib/mysql/dump.sql.gz'"
backupbot.backup.path: "/var/lib/mysql/dump.sql.gz"
backupbot.backup.post-hook: "rm -f /var/lib/mysql/dump.sql.gz"
backupbot.restore: "true"
backupbot.restore.post-hook: "sh -c 'gzip -d /var/lib/mysql/dump.sql.gz && mariadb -u root -p\"$$(cat /run/secrets/db_root_password)\" wordpress < /var/lib/mysql/dump.sql && rm -f /var/lib/mysql/dump.sql'"
backupbot.backup: "${ENABLE_BACKUPS:-true}"
backupbot.backup.pre-hook: "mariadb-dump --single-transaction -u root -p\"$$(cat /run/secrets/db_root_password)\" wordpress | gzip > /var/lib/mysql/dump.sql.gz"
backupbot.backup.volumes.mariadb.path: "dump.sql.gz"
backupbot.restore.post-hook: "gzip -d /var/lib/mysql/dump.sql.gz && mariadb -u root -p\"$$(cat /run/secrets/db_root_password)\" wordpress < /var/lib/mysql/dump.sql && rm -f /var/lib/mysql/dump.sql"
networks:
backend:
@ -113,7 +109,8 @@ configs:
template_driver: golang
php_uploads_conf:
name: ${STACK_NAME}_php_uploads_conf_${PHP_UPLOADS_CONF_VERSION}
file: uploads.ini
file: uploads.ini.tmpl
template_driver: golang
htaccess_conf:
name: ${STACK_NAME}_htaccess_conf_${HTACCESS_CONF_VERSION}
file: htaccess.tmpl

View File

@ -42,6 +42,20 @@ define('FORCE_SSL_ADMIN', true );
define('COOKIE_DOMAIN', \$_SERVER['HTTP_HOST']);"
{{ end }}
UPLOADS_HTACCESS=/var/www/html/wp-content/uploads/.htaccess
if [ ! -f "$UPLOADS_HTACCESS" ]; then
mkdir -p /var/www/html/wp-content/uploads
cat > "$UPLOADS_HTACCESS" <<'EOF'
# Prevent PHP execution in uploads directory
<FilesMatch "\.(?i:php|phtml|phar)$">
Require all denied
</FilesMatch>
EOF
fi
chown -R --from=root:root www-data:www-data /var/www/html/wp-content/
if [ -n "$@" ]; then
"$@"
fi

View File

@ -1,3 +1,8 @@
# Protect sensitive files from direct access
<FilesMatch "^(wp-config\.php|\.htaccess|\.htpasswd|readme\.html|license\.txt)$">
Require all denied
</FilesMatch>
{{ if eq (env "MULTISITE") "" -}}
# BEGIN WordPress

1
release/2.13.2+6.7.1 Normal file
View File

@ -0,0 +1 @@
Breaking change for ftp container: you need to uncomment COMPOSE_FILE="$COMPOSE_FILE:compose.ftp-2222.yml" to open port 2222 again. You can also select between port 2220-2225.

1
release/2.17.1+6.9.0 Normal file
View File

@ -0,0 +1 @@
Breaking change for openid plugin: The issuer must be provided, thus the set_authentik function now includes issuer and endpoint_jwks.

View File

@ -1,6 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
"config:recommended"
]
}

View File

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

11
uploads.ini.tmpl Normal file
View File

@ -0,0 +1,11 @@
{{ $upload_max_size := "256M" }}
{{ if ne (env "UPLOAD_MAX_SIZE") "" }} {{ $upload_max_size = env "UPLOAD_MAX_SIZE" }} {{ end }}
{{ $upload_max_time := "30" }}
{{ if ne (env "UPLOAD_MAX_TIME") "" }} {{ $upload_max_time = env "UPLOAD_MAX_TIME" }} {{ end }}
file_uploads = On
upload_max_filesize = {{ $upload_max_size }}
post_max_size = {{ $upload_max_size }}
memory_limit = {{ $upload_max_size }}
max_execution_time = {{ $upload_max_time }}
max_input_time = {{ $upload_max_time }}