diff --git a/.env.sample b/.env.sample index 463df1e..369e6d3 100644 --- a/.env.sample +++ b/.env.sample @@ -34,13 +34,8 @@ SECRET_DB_PASSWORD_VERSION=v1 # Mostly for compatibility with existing database dumps... #WORDPRESS_TABLE_PREFIX=wp_ -# Multisite -#WORDPRESS_CONFIG_EXTRA="\ -#define('WP_CACHE', false);\ -#define('WP_ALLOW_MULTISITE', true );" - -# Multisite phase 2 (see README) -#WORDPRESS_CONFIG_EXTRA="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']);" +# Multisite (see README) +#MULTISITE=enable # either 'enable', 'subdomain' or 'subfolder' # Local SMTP relay #COMPOSE_FILE="$COMPOSE_FILE:compose.mailrelay.yml" diff --git a/README.md b/README.md index fbd2ad4..33384ed 100644 --- a/README.md +++ b/README.md @@ -47,16 +47,12 @@ AUTHENTIK_ID_NAME=authentik_example_com_wordpress_id_v1 # the same as in authen ## Network (Multi-site) -_(Only tested using subdomains)_ - 1. Set up as above -2. `abra app config `, and uncomment the first `# Multisite` section +2. `abra app config `, and uncomment `#MULTISITE=enable` 3. `abra app 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 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..) +6. `abra app config ` again and set `MULTISITE` to either `subdomain` or `subfolder` depending on your setup. 7. `abra app deploy ` ## Installing a custom theme diff --git a/abra.sh b/abra.sh index 94e7f22..0cd80ef 100644 --- a/abra.sh +++ b/abra.sh @@ -2,6 +2,7 @@ export PHP_UPLOADS_CONF_VERSION=v3 export ENTRYPOINT_CONF_VERSION=v6 export ENTRYPOINT_MAILRELAY_CONF_VERSION=v2 export MSMTP_CONF_VERSION=v4 +export HTACCESS_CONF_VERSION=v1 wp() { su -p www-data -s /bin/bash -c "/usr/local/bin/wp $@" diff --git a/compose.yml b/compose.yml index 789b595..a569d59 100644 --- a/compose.yml +++ b/compose.yml @@ -31,6 +31,8 @@ services: - source: entrypoint_conf target: /docker-entrypoint.sh mode: 0555 + - source: htaccess_conf + target: /var/www/html/.htaccess entrypoint: /docker-entrypoint.sh depends_on: - db @@ -108,3 +110,7 @@ configs: php_uploads_conf: name: ${STACK_NAME}_php_uploads_conf_${PHP_UPLOADS_CONF_VERSION} file: uploads.ini + htaccess_conf: + name: ${STACK_NAME}_htaccess_conf_${HTACCESS_CONF_VERSION} + file: htaccess.tmpl + template_driver: golang diff --git a/entrypoint.sh.tmpl b/entrypoint.sh.tmpl index 72a8776..035fbf1 100644 --- a/entrypoint.sh.tmpl +++ b/entrypoint.sh.tmpl @@ -24,6 +24,24 @@ a2enmod headers sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf {{ end }} +{{ if eq (env "MULTISITE") "enable" }} +export WORDPRESS_CONFIG_EXTRA="$WORDPRESS_CONFIG_EXTRA +define('WP_CACHE', false); +define('WP_ALLOW_MULTISITE', true );" +{{ end }} + +{{ if or (eq (env "MULTISITE") "subdomain") (eq (env "MULTISITE") "subfolder") }} +export WORDPRESS_CONFIG_EXTRA="$WORDPRESS_CONFIG_EXTRA +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']);" +{{ end }} + if [ -n "$@" ]; then "$@" fi diff --git a/htaccess.tmpl b/htaccess.tmpl new file mode 100644 index 0000000..24739f8 --- /dev/null +++ b/htaccess.tmpl @@ -0,0 +1,57 @@ +{{ if eq (env "MULTISITE") "" -}} +# BEGIN WordPress + +RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteBase / +RewriteRule ^index\.php$ - [L] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] + +# END WordPress +{{- end -}} + +{{- if eq (env "MULTISITE") "subfolder" -}} +# BEGIN WordPress Multisite +# Using subfolder network type: https://wordpress.org/documentation/article/htaccess/#multisite + +RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteBase / +RewriteRule ^index\.php$ - [L] + +# add a trailing slash to /wp-admin +RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] + +RewriteCond %{REQUEST_FILENAME} -f [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^ - [L] +RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] +RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] +RewriteRule . index.php [L] + +# END WordPress Multisite +{{- end -}} + +{{- if eq (env "MULTISITE") "subdomain" -}} +# BEGIN WordPress Multisite +# Using subdomain network type: https://wordpress.org/documentation/article/htaccess/#multisite + +RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteBase / +RewriteRule ^index\.php$ - [L] + +# add a trailing slash to /wp-admin +RewriteRule ^wp-admin$ wp-admin/ [R=301,L] + +RewriteCond %{REQUEST_FILENAME} -f [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^ - [L] +RewriteRule ^(wp-(content|admin|includes).*) $1 [L] +RewriteRule ^(.*\.php)$ $1 [L] +RewriteRule . index.php [L] + +# END WordPress Multisite +{{- end }} diff --git a/release/2.4.0+6.3.0 b/release/2.4.0+6.3.0 new file mode 100644 index 0000000..0a6dc8b --- /dev/null +++ b/release/2.4.0+6.3.0 @@ -0,0 +1 @@ +The authentik secrets need to be inserted again, as wordpress is not sharing the secret with authentik any more. diff --git a/release/next b/release/next index 0a6dc8b..546630b 100644 --- a/release/next +++ b/release/next @@ -1 +1 @@ -The authentik secrets need to be inserted again, as wordpress is not sharing the secret with authentik any more. +Multisite now also works with subpaths instead of subdomains. Also Multisite support was simplified. If you are using a subdomain multisite setup you can remove the `WORDPRESS_CONFIG_EXTRA="define('MULTISITE', true);...` from your config and instead set MULTISITE=subdomain.