commit 76906d9b8af665473710d55669260132e0c4a571 Author: Siroco Date: Fri Jul 7 16:45:58 2023 +0000 Create Wordpess Docker with Soundmap Plugin preinstalled diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..5b8d10c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "wordpress/plugins/soundmap"] + path = wordpress/plugins/soundmap + url = https://git.audio-lab.org/lrullo/soundmap diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7475de9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +FROM debian:stable-slim + +ENV TZ=Europe/Madrid + +ARG PHP_VERSION=8.1 + +RUN apt update && apt -y upgrade +RUN apt -y install lsb-release ca-certificates curl git +RUN curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg +RUN sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' +RUN apt-get update + +RUN apt-get update && \ + apt-get -qy install \ + php${PHP_VERSION}-fpm php${PHP_VERSION}-mysql php${PHP_VERSION}-curl php${PHP_VERSION}-gd php${PHP_VERSION}-mbstring php${PHP_VERSION}-xml php${PHP_VERSION}-xmlrpc php${PHP_VERSION}-soap php${PHP_VERSION}-intl php${PHP_VERSION}-zip php${PHP_VERSION}-redis \ + wget rsync sed curl tar ca-certificates less \ + mariadb-client && \ + apt-get clean + + +COPY config/php-fpm-wordpress.conf /tmp/www.conf + +RUN cp /tmp/www.conf /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ + ln -s /usr/sbin/php-fpm${PHP_VERSION} /usr/sbin/php-fpm && \ + sed -i '/^error_log/cerror_log = /dev/stderr' /etc/php/${PHP_VERSION}/fpm/php-fpm.conf && \ + sed -i '/^log_errors/clog_errors = Off' /etc/php/${PHP_VERSION}/fpm/php-fpm.conf && \ + sed -i '/^pid/cpid = /tmp/php${PHP_VERSION}-fpm.pid' /etc/php/${PHP_VERSION}/fpm/php-fpm.conf + +WORKDIR /app + +RUN curl -s -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \ + chmod +x wp-cli.phar && \ + mv wp-cli.phar /usr/local/bin/wp + +WORKDIR /app/wordpress + +RUN wp core download --allow-root + +ADD wordpress /tmp/wordpress + +ADD entrypoint.sh /entrypoint.sh + +EXPOSE 9000 + +VOLUME /app + +ENTRYPOINT ["/bin/sh","/entrypoint.sh"] + +CMD ["/usr/sbin/php-fpm","--nodaemonize","-O"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..c27032c --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Simple custom template for a clean Wordpress installation. + +## Pre + + $ mkdir data db + $ cp env.sample .env + $ vim .env + +Customize parameters + +## Build + + $ docker-compose build + +## Run + + $ docker-compose up -d + +Access: + + $ w3m http://localhost: + +## Config + +Database credentials may edit on _.env_ file. + +## Auto update Wordpress + +User crontab on your hoster server. + +Use this script as template: + +``` +#!/bin/bash + +echo "Update Wordrpress" +docker-compose exec wordpress wp theme update --all --path="/app/wordpress/" +docker-compose exec wordpress wp plugin update --all --path="/app/wordpress/" +docker-compose exec wordpress wp core update --path="/app/wordpress/" +``` + +## Backups + +docker-compose exec db mysqldump --database > /.sql + +## Restore + +Database restore, like this examples: + + $ cat .sql | docker-compose exec db mysql -u -p + +Data restore, bulk to volume directory, like: + + $ rsync -avz /var/lib/docker/volumes//_data/wordpress/ diff --git a/config/nginx-wordpress.conf b/config/nginx-wordpress.conf new file mode 100644 index 0000000..2690389 --- /dev/null +++ b/config/nginx-wordpress.conf @@ -0,0 +1,38 @@ +server { + listen 443 ssl default_server; + include snippets/snakeoil.conf; + + server_name _; + + root /app/wordpress; + index index.php index.html; + + client_max_body_size 25M; + + location ~ /\. { + deny all; + } + + location ~* /(?:uploads|files)/.*\.php$ { + deny all; + } + + location / { + try_files $uri $uri/ /index.php?$args ; + } + + location ~ \.php$ { + try_files $uri =404; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_index index.php; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + fastcgi_pass wordpress:9000; + } + + access_log /app/log/wordpress.access.log; + error_log /app/log/wordpress.error.log; +} + diff --git a/config/nginx.conf b/config/nginx.conf new file mode 100644 index 0000000..6159153 --- /dev/null +++ b/config/nginx.conf @@ -0,0 +1,61 @@ +worker_processes auto; +pid /run/nginx/nginx.pid; +error_log stderr info; +daemon off; +master_process off; + +include /etc/nginx/modules-enabled/*.conf; + + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + server_tokens off; + + server_names_hash_bucket_size 128; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /dev/stdout; + + ## + # Gzip Settings + ## + + gzip on; + gzip_disable "msie6"; + + ## + # Virtual Host Configs + ## + + include /etc/nginx/conf.d/*.conf; + #include /etc/nginx/sites-enabled/*; +} + + diff --git a/config/nginx.conf.alpine b/config/nginx.conf.alpine new file mode 100644 index 0000000..f6a78c0 --- /dev/null +++ b/config/nginx.conf.alpine @@ -0,0 +1,78 @@ +server { + listen 80; + + root /app/wordpress/; + + index index.php; + + server_name _; + + access_log /var/log/nginx/access.log; + + location / { + try_files $uri $uri/ /index.php?$args ; + } + + location ~ \.php$ { + try_files $uri /index.php =404; + fastcgi_pass wordpress:9000; + fastcgi_index index.php; + include fastcgi_params; + + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + set $path_info $fastcgi_path_info; + fastcgi_param PATH_INFO $path_info; + fastcgi_param REMOTE_ADDR $http_x_real_ip; + fastcgi_read_timeout 300; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { + expires max; + access_log off; + log_not_found off; + } + +} + +server { + + listen 443 ssl http2 default_server; + listen [::]:443 ssl http2 default_server; + ssl on; + ssl_certificate /etc/ssl/certs/nginx.crt; + ssl_certificate_key /etc/ssl/private/nginx.key; + + root /app/wordpress/; + + index index.php; + + server_name _; + + access_log /var/log/nginx/access.log; + + location / { + try_files $uri $uri/ /index.php?$args ; + } + + location ~ \.php$ { + try_files $uri /index.php =404; + fastcgi_pass wordpress:9000; + fastcgi_index index.php; + include fastcgi_params; + + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + set $path_info $fastcgi_path_info; + fastcgi_param PATH_INFO $path_info; + fastcgi_param REMOTE_ADDR $http_x_real_ip; + fastcgi_read_timeout 300; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { + expires max; + access_log off; + log_not_found off; + } + +} diff --git a/config/php-fpm-wordpress.conf b/config/php-fpm-wordpress.conf new file mode 100644 index 0000000..68cf369 --- /dev/null +++ b/config/php-fpm-wordpress.conf @@ -0,0 +1,25 @@ +[www] + +user = www-data +group = www-data +listen = 9000 + +listen.owner = www-data +listen.group = www-data + +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 + +access.log = /dev/stdout +catch_workers_output = yes +php_admin_value[error_log] = /dev/stderr +php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED +;php_admin_value[error_log] = /app/log/php-fpm.log +php_admin_flag[log_errors] = off +php_flag[display_errors] = off +php_admin_value[allow_url_fopen] = off +php_admin_value[upload_max_filesize] = 50M +php_admin_value[post_max_size] = 50M diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3279ee7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,50 @@ +version: '2.4' + +services: + db: + image: mariadb + user: 1000:1000 + restart: always + volumes: + - ./db:/var/lib/mysql + environment: + - MYSQL_DATABASE + - MYSQL_USER + - MYSQL_RANDOM_ROOT_PASSWORD + - MYSQL_PASSWORD + + wordpress: + image: registry.audio-lab.org/wordpress + build: . + user: 1000:1000 + depends_on: + - db + volumes: + - ./data:/app + restart: always + links: + - db + environment: + - MYSQL_DATABASE + - MYSQL_USER + - MYSQL_PASSWORD + - MYSQL_HOST + - WP_USER + - WP_PASS + - WP_EMAIL + - WP_TITLE + - WP_URL + + + nginx: + image: registry.sindominio.net/nginx + ports: + - ${NGINX_PORT}:443 + volumes: + #- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro + - ./config/nginx.conf:/etc/nginx/nginx.conf:ro + - ./config/nginx-wordpress.conf:/etc/nginx/conf.d/wordpress.conf:ro + - ./data:/app + restart: always + links: + - wordpress diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..9719da2 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set -e; + +export WORDPRESS_ROOT=/app/wordpress + +install() { + echo "Install Wordpress $WORDPRESS_ROOT" + mkdir -p $WORDPRESS_ROOT + cd $WORDPRESS_ROOT + wp core download + config +} + +install_themes() { + echo "Install Themes" + rsync -avz /tmp/wordpress/themes/ /app/wordpress/wp-content/themes/ +} + +install_plugins() { + echo "Install Plugins" + rsync -avz /tmp/wordpress/plugins/ /app/wordpress/wp-content/plugins/ +} + +config() { + echo "Config Wordpress $WORDPRESS_ROOT" + cd $WORDPRESS_ROOT + echo "Create Config" + wp config create --dbname=$MYSQL_DATABASE --dbuser=$MYSQL_USER --dbpass=$MYSQL_PASSWORD --dbhost=$MYSQL_HOST --locale=es_ES + echo "Install Worpdress" + if ! wp core is-installed; then + wp core install --url="$WP_URL" --title="$WP_TITLE" --admin_user="$WP_USER" --admin_password="$WP_PASS" --admin_email="$WP_EMAIL" --path="/app/wordpress/" + fi +} + +update() { + echo "Update Wordpress" + cd $WORDPRESS_ROOT + #https://make.wordpress.org/cli/handbook/ + wp core update --path="/app/wordpress/" + #wp plugin update --all --path="/app/wordpress/" + #wp theme update --all --path="/app/wordpress/" +} + +#mkdir -p /app/log/ + +[ -d /app/wordpress ] || install +[ -f /app/wordpress/wp-config.php ] || config + +# WP-CLI install +# https://www.cloudways.com/blog/install-wordpress-using-wp-cli/ + +update +#install_themes +install_plugins + +echo "Starting Wordpress" + +exec $@ diff --git a/env.sample b/env.sample new file mode 100644 index 0000000..bd0f6d3 --- /dev/null +++ b/env.sample @@ -0,0 +1,14 @@ +MYSQL_DATABASE=wordpress +MYSQL_USER=wordpress +MYSQL_RANDOM_ROOT_PASSWORD=1 +MYSQL_PASSWORD=wordpress +MYSQL_HOST=db + +NGINX_PORT=8443 +USER_GROUP=1000:1000 + +WP_USER=admin +WP_PASS=admin +WP_EMAIL=real@mail.org +WP_TITLE=Wordpress Title +WP_URL=http://docker:8180 diff --git a/wordpress/plugins/soundmap b/wordpress/plugins/soundmap new file mode 160000 index 0000000..e5581e2 --- /dev/null +++ b/wordpress/plugins/soundmap @@ -0,0 +1 @@ +Subproject commit e5581e28360bf44ff216f70e409ba52a1b3ef7ef