First Commit!

This commit is contained in:
Jonathan Rosenbaum 2025-06-02 00:50:27 +00:00
parent dcd4cc23fd
commit 34bf3bb762
8 changed files with 341 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

10
Dockerfile.wordpress_fpm Normal file
View File

@ -0,0 +1,10 @@
# Wordpress - make a copy of wp-includes to compare with existing volumes
# 'docker-compose exec wordpress bash -c 'cd /var/www/html/wp-includes && grep wp_version version.php'
FROM wordpress:6-fpm
# ancient debian
#RUN apt update && apt -y install vim less
# Using cp rather than mv so the image can easily be rebuilt
RUN cp -a /usr/src/wordpress/wp-content /var/www/html/wp-content-new

44
default.conf Normal file
View File

@ -0,0 +1,44 @@
# https://www.nginx.com/resources/wiki/start/topics/recipes/mediawiki/
# https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
server {
listen 80;
listen [::]:80;
server_name wordpress;
root /var/www/html;
index index.php;
#access_log /var/log/nginx/host.access.log main;
location / {
try_files $uri $uri/ /index.php?$args;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on wordpress2:9000
#
location ~ \.php$ {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# fastcgi_param PHP_VALUE "upload_max_filesize=8M";
fastcgi_param PHP_VALUE "upload_max_filesize=8M; post_max_size=128M; memory_limit=256M";
}
# location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ {
# expires max;
# log_not_found off;
# }
}

36
docker-compose.first.yml Normal file
View File

@ -0,0 +1,36 @@
# The purpose of this docker compose is just to setup a new /var/www/html volume
# from a new version of wordpress, after 'down -v'
services:
wordpress:
build:
context: .
dockerfile: Dockerfile.wordpress_fpm
image: ${IMAGE_WEB:-web}
volumes:
- html:/var/www/html
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST:-database:3306}
- WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD:-fake}
- VIRTUAL_HOST=${VIRTUAL_HOST:-wordpress}
- LETSENCRYPT_HOST=${LETSENCRYPT_HOST:-wordpress}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL:-me}
- LETSENCRYPT_TEST=${LETSENCRYPT_TEST:-true}
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
restart: always
networks:
- letsencrypt
- default
volumes:
html:
name: ${HTML_VOLUME:-html}
networks:
letsencrypt:
external: true

103
docker-compose.yml Normal file
View File

@ -0,0 +1,103 @@
# Buildkit to simplify the whole process of upgrading Wordpress with official images
#
# This version is designed for fpm, using a default.conf which references the wordpress service
#
# STEPS:
# Set COMPOSE_PROJECT_NAME in .env
# docker compose down -v
# Change wordpress version as required in Dockerfile.wordpress_fpm and .env (IMAGE_FIRST)
# docker compose -f docker-compose.first.yml build
# docker compose -f docker-compose.first.yml up -d
# docker compose -f docker-compose.first.yml down
# docker compose up -d
# at this point manually copy everything from wp-content-new to wp-content: cp -a wp-content-new/* wp-content/
#
# MAKE SURE PERMISSIONS ARE CORRECT in wp-content
# (if you need to) ./update-db
services:
database:
image: ${IMAGE_DATABASE:-database}
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE:-wordpress}
- MYSQL_USER=${MYSQL_USER:-wordpress}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-fake}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-fake}
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
restart: always
networks:
- letsencrypt
wordpress:
# build:
# context: .
# dockerfile: Dockerfile.wordpress_fpm
image: ${IMAGE_WEB:-wordpress}
volumes:
- html:/var/www/html
- content:/var/www/html/wp-content
- ./wp-config.php:/var/www/html/wp-config.php
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST:-database:3306}
- WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD:-fake}
- VIRTUAL_HOST=${VIRTUAL_HOST:-wordpress}
- LETSENCRYPT_HOST=${LETSENCRYPT_HOST:-wordpress}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL:-me}
- LETSENCRYPT_TEST=${LETSENCRYPT_TEST:-true}
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
restart: always
command: >
bash -c "chown -R www-data:www-data /var/www/html/wp-content && php-fpm"
networks:
- letsencrypt
- default
# nginx:latest and/or can be customized
web:
# build:
# context: .
# dockerfile: Dockerfile.nginx
image: nginx:latest
restart: always
volumes:
- html:/var/www/html/
- content:/var/www/html/wp-content
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./nginx.conf:/etc/nginx/nginx.conf
environment:
- VIRTUAL_HOST=${VIRTUAL_HOST:-wordpress}
- LETSENCRYPT_HOST=${LETSENCRYPT_HOST:-wordpress}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL:-me}
- LETSENCRYPT_TEST=${LETSENCRYPT_TEST:-true}
networks:
- letsencrypt
- default
# No variable substition for volumes in this version
volumes:
db:
external: true
name: ${DB_VOLUME:-db}
html:
name: ${HTML_VOLUME:-html}
content:
external: true
name: ${CONTENT_VOLUME:-content}
networks:
letsencrypt:
external: true
# default:
# name: ${COMPOSE_PROJECT_NAME}_default

38
nginx.conf Normal file
View File

@ -0,0 +1,38 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 100M;
client_body_buffer_size 100M;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}

14
update-db Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
source ".env"
website="https://$VIRTUAL_HOST"
command="docker-compose exec database mysql"
echo $website
$command -u $MYSQL_USER $MYSQL_DATABASE -p"$WORDPRESS_DB_PASSWORD" -e "UPDATE cf_options SET option_value='$website' WHERE option_name='home';"
$command -u $MYSQL_USER $MYSQL_DATABASE -p"$WORDPRESS_DB_PASSWORD" -e "UPDATE cf_options SET option_value='$website' WHERE option_name='siteurl';"
## Add
# /usr/bin/find /var/www/html/wp-content/uploads/ -type d -exec chmod 755 {} \; -o -type f -exec chmod 644 {} \;

95
wp-config.php Normal file
View File

@ -0,0 +1,95 @@
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'root');
/** MySQL database password */
define('DB_PASSWORD', 'wordpress');
/** MySQL hostname */
define('DB_HOST', getenv('WORDPRESS_DB_HOST'));
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @since 2.6.0
*/
define('AUTH_KEY', 'dU_!>D;E$}Z%PQ*S^N@UZj}02GT.ce^%MLLB#4})%P(gVKYG(J5MKl[![Y;nN^%0');
define('SECURE_AUTH_KEY', '+-9zk5?X=JazoN|.SfnyDuq*eEha?baAO:,B!XIf+WlhEXbK%30wg/fZ>J;/%n|B');
define('LOGGED_IN_KEY', '{#lT+Rq-zLKA?H#_Xu+az9Ae,/rOL {jT%l.o.&CY%IRB+,Jidi?M.@d`f`8NpPE');
define('NONCE_KEY', 'uw!r}Koniy9yV}&.w#HT@(L/Wf<6mcFK[OM,Jsot.B`~%T~ShmEai#my/7_Yr}s&');
define('AUTH_SALT', '?0(Sm)EJr6J~) $$DJ$-:jo4S}U2s@-(Rg9jROY<EMD~SH]`@YF-=o| P|bU-}C<');
define('SECURE_AUTH_SALT', '*nn>S?/e8p1e?:t7vAH99uS)jffX~+3?v+?d+_&!J|9~8oH6wopu_5 1iW{l_XUt');
define('LOGGED_IN_SALT', '.Hca|;r-C8c[<]Y@28KX*6&gBT=s:I:1|6Y -DNQ*SD)R-`~8<drS}]*?;&d|[;T');
define('NONCE_SALT', '!M@7=}Gsx@4MVX|][e<N--f@BvkG_8,z5*8.G#lPr<Wrl0^0}hEVJef?_gQh-3$G');
/**#@-*/
/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = 'cf_';
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the Codex.
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define('WP_DEBUG', false);
// If we're behind a proxy server and using HTTPS, we need to alert Wordpress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
/* That's all, stop editing! Happy blogging. */
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');