Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork10
If You want to build a reverse proxy website with WordPress at short time; install full stack proxy nginx WordPress with Docker Compose. Plus, manage docker containers with Portainer, and even secure your site with SSL.
damalis/full-stack-proxy-nginx-wordpress-for-everyone-with-docker-compose
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
If You want to build a reverse proxy website with WordPress at short time;
Plus, manage docker containers with Portainer.
arm64/aarch64, x86-64
apk, dnf, yum, apt/apt-get, zypper, pacman
Note: Fedora 37, 39 and alpine linux x86-64 compatible, could not try sles IBM Z s390x, rhel IBM Z s390x and raspberrypi.
- WordPress (php-fpm)
- webserver (apache2/httpd)
- proxy (nginx)
- certbot (letsencrypt)
- phpMyAdmin
- MariadbMysql
- redis
- varnish
- backup
Create rules to open ports to the internet, or to a specific IPv4 address or range.
- http: 80
- https: 443
- portainer: 9001
- phpmyadmin: 9090
To optimize upload images, look atthe damalis repository
require up to 2 GB of RAM forDocker andDocker Compose.
download with
git clone https://github.com/damalis/full-stack-proxy-nginx-wordpress-for-everyone-with-docker-compose.gitOpen a terminal andcd to the folder in whichdocker-compose.yml is saved and run:
cd full-stack-proxy-nginx-wordpress-for-everyone-with-docker-composechmod +x install.sh./install.shMake sure you have the latest versions ofDocker andDocker Compose installed on your machine and require up to 2 GB of RAM.
Clone this repository or copy the files from this repository into a new folder.
Make sure toadd your user to thedocker group.
download with
git clone https://github.com/damalis/full-stack-proxy-nginx-wordpress-for-everyone-with-docker-compose.gitOpen a terminal andcd to the folder in whichdocker-compose.yml is saved and run:
cd full-stack-proxy-nginx-wordpress-for-everyone-with-docker-composeCopy the example environment into.env
cp env.example .envEdit the.env file to change values of
|LOCAL_TIMEZONE|DOMAIN_NAME|DIRECTORY_PATH|LETSENCRYPT_EMAIL||WORDPRESS_DB_USER|WORDPRESS_DB_PASSWORD|WORDPRESS_DB_NAME|WORDPRESS_TABLE_PREFIX|MYSQL_ROOT_PASSWORD|DATABASE_IMAGE_NAME||DATABASE_CONT_NAME|DATABASE_PACKAGE_MANAGER|DATABASE_ADMIN_COMMANDLINE|PMA_CONTROLUSER|PMA_CONTROLPASS||PMA_HTPASSWD_USERNAME|PMA_HTPASSWD_PASSWORD|VARNISH_VERSION|VARNISH_VERSION|SSL_SNIPPET|
| Variable | Value | |
|---|---|---|
LOCAL_TIMEZONE | to see local timezones | |
DIRECTORY_PATH | pwd at command line | |
WORDPRESS_TABLE_PREFIX | wp_ orcustom value | |
DATABASE_IMAGE_NAME | mariadb ormysql | |
DATABASE_CONT_NAME | mariadb,mysql orcustom name | |
DATABASE_PACKAGE_MANAGER | mariadb | apt-get update && apt-get install -y gettext-base |
| mysql | microdnf install -y gettext | |
DATABASE_ADMIN_COMMANDLINE | mariadb | mariadb-admin |
| mysql | mysqladmin | |
VARNISH_VERSION | centos version 9+ and fedora | latest |
| the others | stable | |
SSL_SNIPPET | localhost | echo 'Generated Self-signed SSL Certificate at localhost' |
| remotehost | certbot certonly --webroot --webroot-path /tmp/acme-challenge --rsa-key-size 4096 --non-interactive --agree-tos --no-eff-email --force-renewal --email ${LETSENCRYPT_EMAIL} -d ${DOMAIN_NAME} -d www.${DOMAIN_NAME} -d mail.${DOMAIN_NAME} | |
and
cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.confchange example.com to your domain name in./phpmyadmin/apache2/sites-available/default-ssl.conf file.
cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.templatechange pma_controluser and db_authentication_password in./database/phpmyadmin/sql/create_tables.sql.template file.
Firstly: will create external volume
docker volume create --driver local --opt type=none --opt device=${PWD}/certbot --opt o=bind certbot-etcLocalhost ssl: Generate Self-signed SSL Certificate with guidemkcert repository.
docker compose up -dthen reloading for proxy ssl configuration
docker container restart proxyThe containers are now built and running. You should be able to access the WordPress installation with the configured IP in the browser address.https://example.com.
For convenience you may add a new entry into your hosts file.
docker compose -f portainer-docker-compose.yml -p portainer up -dmanage docker withPortainer is the definitive container management tool for Docker, Docker Swarm with it's highly intuitive GUI and API.
You can also visithttps://example.com:9001 to access portainer after starting the containers.
docker ps -a# Lists all containers managed by the compose filedocker compose start# Starts previously stopped containersdocker compose stop# Stops all running containersdocker compose down# Stops and removes containers, networks, etc.docker compose down -v # Add --volumes to remove volumes explicitlydocker rm -f $(docker ps -a -q)# Removes portainer and the other containersdocker volume rm $(docker volume ls -q)# Removes all volumesdocker network prune# Remove all unused networksdocker system prune# Removes unused data (containers, networks, images, and optionally volumes)docker system prune -a# Removes all unused images, not just dangling onesdocker rmi $(docker image ls -q)# Removes portainer and the other imagesdocker container logs container_name_or_id# Shows logs from all servicesCopy all files into a new directory:
docker compose up -d# Starts services in detached mode (in the background)https://docs.docker.com/reference/cli/docker/compose/
You should see the "WordPress installation" page in your browser. If not, please check if your PHP installation satisfies WordPress's requirements.
https://example.comadd or remove code in the ./php-fpm/php/conf.d/security.ini file for custom php.ini configurations
https://www.php.net/manual/en/configuration.file.php
You should make changes custom host configurations./php-fpm/php-fpm.d/z-www.conf then must restart service, FPM uses php.ini syntax for its configuration file - php-fpm.conf, and pool configuration files.
https://www.php.net/manual/en/install.fpm.configuration.php
docker container restart wordpressadd and/or remove wordpress site folders and files with any ftp client program in./wordpress folder.
You can also visithttps://example.com to access website after starting the containers.
Proxying is typically used to distribute the load among several servers, seamlessly show content from different websites, or pass requests for processing to application servers over protocols other than HTTP.
add or remove code in the./proxy/templates/proxy.conf.template file for custom proxy configurations
https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
add or remove code in the./webserver/extra/httpd-vhosts.conf file for custom apache2/httpd configurations
https://httpd.apache.org/docs/2.4/
add and activeRedis Cache plugin and
must add below code in wp-config.php file.
define('WP_REDIS_HOST', 'redis');define('WP_CACHE_KEY_SALT', 'wp-docker-7f1a7682-9aec-4d4b-9a10-46bbadec41ba');define('WP_REDIS_PREFIX', $_SERVER['HTTP_HOST']);define('WP_REDIS_CONFIG', ['prefix' => getenv('WP_REDIS_PREFIX') ?: null, 'timeout' => 0.5, 'read_timeout' => 0.5, 'async_flush' => true, 'compression' => 'zstd', 'serializer' => 'igbinary', 'split_alloptions' => true, 'debug' => false, 'save_commands' => false,]);add and activeProxy Cache Purge plugin.
Go to the WordPress dashboard
Click on Plugins
Click on Add New
Search for the Redis Cache / the Proxy Cache Purge plugin
Click on Install Now and confirm
Finally, activate the plugin
add this code to connect always with ssl in wp-config.php file.
define('FORCE_SSL_LOGIN', true);define('FORCE_SSL_ADMIN', true);after every change in the wordpress and the varnish configuration or if You get error "502 Bad Gateway":
docker container restart varnishYou can add your own custom config.inc.php settings (such as Configuration Storage setup) by creating a file named config.user.inc.php with the various user defined settings in it, and then linking it into the container using:
./phpmyadmin/config.user.inc.phpYou can also visithttps://example.com:9090 to access phpMyAdmin after starting the containers.
The first authorize screen(htpasswd;username or password) and phpmyadmin login screen the username and the password is the same as supplied in the.env file.
This will back up the all files and folders in database/dump sql and html volumes, once per day, and write it to./backups with a filename like backup-2023-01-01T10-18-00.tar.gz
BACKUP_CRON_EXPRESSION: '20 01 * * *' the UTC timezone.
About
If You want to build a reverse proxy website with WordPress at short time; install full stack proxy nginx WordPress with Docker Compose. Plus, manage docker containers with Portainer, and even secure your site with SSL.
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.



