first commit

This commit is contained in:
Christoph Haas 2019-01-02 11:10:32 +01:00
commit 02c5694550
8 changed files with 375 additions and 0 deletions

73
.env.sample Normal file
View File

@ -0,0 +1,73 @@
# .env file to set up your wordpress site
#
# Network name
#
# Your container app must use a network conencted to your webproxy
# https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion
#
NETWORK=webproxy
#
# Database Container configuration
# We recommend MySQL or MariaDB - please update docker-compose file if needed.
#
CONTAINER_DB_NAME=db
# Path to store your database
#DB_PATH=/path/to/your/local/database/folder
DB_PATH=./../data/db
# Root password for your database
MYSQL_ROOT_PASSWORD=root_password
# Database name, user and password for your wordpress
MYSQL_DATABASE=database_name
MYSQL_USER=user_name
MYSQL_PASSWORD=user_password
#
# Wordpress Container configuration
#
CONTAINER_WP_NAME=wordpress
# Max Log File Size
LOGGING_OPTIONS_MAX_SIZE=200k
# Path to store your wordpress files
#WP_CORE=/path/to/your/wordpress/core/files
#WP_CONTENT=/path/to/your/wordpress/wp-content
WP_CORE=./../data/site/wordpress-core
WP_CONTENT=./../data/site/wp-content
# Table prefix
WORDPRESS_TABLE_PREFIX=wp_
# Your domain (or domains)
DOMAINS=domain.com,www.domain.com
# Your email for Let's Encrypt register
LETSENCRYPT_EMAIL=your_email@domain.com
#
# Backup location
#
# This option should be used when backing up using the script in the repo:
# https://github.com/evertramos/docker-wordpress-backup
#BACKUP_PATH_NAME=/backup
#
# Crontab Rules
#
# Please only enable that if you know what you are doing, please refer to these samples:
#
# https://crontab.guru/examples.html
#
# And test if your setting is working
#
# Here is a basic rule for backup everyday at 04 am from monday to friday as of:
#
# https://crontab.guru/#00_04_*_*_1-5
#
#BACKUP_CRONTAB_RULE="00 04 * * 1-5"

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Evert Ramos
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

213
README.md Normal file
View File

@ -0,0 +1,213 @@
# Using Wordpress with SSL enabled integrated with NGINX proxy and autorenew LetsEncrypt certificates
![wordpress-docker-letsencrypt](https://github.com/evertramos/images/raw/master/wordpress.jpg)
This docker-compose should be used with WebProxy (the NGINX Proxy):
[https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion](https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion)
## Usage
After everything is settle, and you have your three containers running (_proxy, generator and letsencrypt_) you do the following:
1. Clone this repository:
```bash
git clone https://github.com/evertramos/docker-wordpress-letsencrypt.git
```
Or just copy the content of `docker-compose.yml` and the `Dockerfile`, as of below:
```bash
version: '3'
services:
db:
container_name: ${CONTAINER_DB_NAME}
image: mariadb:latest
restart: unless-stopped
volumes:
- ${DB_PATH}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
wordpress:
depends_on:
- db
container_name: ${CONTAINER_WP_NAME}
image: wordpress:latest
restart: unless-stopped
volumes:
- ${WP_CORE}:/var/www/html
- ${WP_CONTENT}:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
VIRTUAL_HOST: ${DOMAINS}
LETSENCRYPT_HOST: ${DOMAINS}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
# wpcli:
# image: tatemz/wp-cli
# volumes:
# - ${WP_CORE}:/var/www/html
# - ${WP_CONTENT}:/var/www/html/wp-content
# depends_on:
# - db
# entrypoint: wp
networks:
default:
external:
name: ${NETWORK}
```
> **[IMPORTANT]** Make sure to update your **services** name for each application so it does not conflicts with another service, such as, in the _docker_compose.yml_ where we have **db** you could use **site1-db**, and **wordpress** you could use **site1-wordpress**. Update this to site2 when you put up a new site.
2. Make a copy of our .env.sample and rename it to .env:
Update this file with your preferences.
```bash
# .env file to set up your wordpress site
#
# Network name
#
# Your container app must use a network conencted to your webproxy
# https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion
#
NETWORK=webproxy
#
# Database Container configuration
# We recommend MySQL or MariaDB - please update docker-compose file if needed.
#
CONTAINER_DB_NAME=db
# Path to store your database
DB_PATH=/path/to/your/local/database/folder
# Root password for your database
MYSQL_ROOT_PASSWORD=root_password
# Database name, user and password for your wordpress
MYSQL_DATABASE=database_name
MYSQL_USER=user_name
MYSQL_PASSWORD=user_password
#
# Wordpress Container configuration
#
CONTAINER_WP_NAME=wordpress
# Path to store your wordpress files
WP_CORE=/path/to/your/wordpress/core/files
WP_CONTENT=/path/to/your/wordpress/wp-content
# Table prefix
WORDPRESS_TABLE_PREFIX=wp_
# Your domain (or domains)
DOMAINS=domain.com,www.domain.com
# Your email for Let's Encrypt register
LETSENCRYPT_EMAIL=your_email@domain.com
```
>This container must use a network connected to your webproxy or the same network of your webproxy.
3. Start your project
```bash
docker-compose up -d
```
**Be patient** - when you first run a container to get new certificates, it may take a few minutes.
----
### Make sure the wordpress data files has user and group set to **www-data**, so you could update, install, delete files from your admin panel.
----
## WebProxy
[WebProxy - docker-compose-letsencrypt-nginx-proxy-companion](https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion)
----
# Further Options
## wp-cli (https://wp-cli.org/)
For whoever uses *wp-cli* here is how to implement it on this repo.
i. Take down your services
```bash
docker-compose down
```
ii. Uncomment the following lines on _docker-compose.yml_:
```bash
# wpcli:
# image: tatemz/wp-cli
# volumes:
# - ${WP_CORE}:/var/www/html
# - ${WP_CONTENT}:/var/www/html/wp-content
# depends_on:
# - db
# entrypoint: wp
```
iii. Start your services again
```bash
docker-compose up -d
```
iv. Test to see if it´s working
```bash
./wp-cli-test.sh
```
If you would, add the alias "wp" to your `.bash_aliases`:
```bash
alias wp="docker-compose run --rm wpcli"
```
Next time you need to run a wp-cli command just go to where you have your docker-compose file and run a `wp` command.
----
## Backup Option
We developed a backup option for this set up which you can find more details here:
[Docker Wordpress Backup](https://github.com/evertramos/docker-wordpress-backup)
## Issues
Please be advised that if are running docker on azure servers you must mount your database in your disks partitions (example: `/mnt/data/`) so your db container can work. This is a some kind of issue regarding Hyper-V sharing drivers... not really sure why.
## Full Source
1. [@jwilder](https://github.com/jwilder/nginx-proxy)
2. [@jwilder](https://github.com/jwilder/docker-gen)
3. [@JrCs](https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion).

5
conf.d/php.ini Normal file
View File

@ -0,0 +1,5 @@
file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

51
docker-compose.yml Normal file
View File

@ -0,0 +1,51 @@
version: '3'
services:
db:
container_name: ${CONTAINER_DB_NAME}
image: mariadb:latest
restart: unless-stopped
volumes:
- ${DB_PATH}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
wordpress:
depends_on:
- db
container_name: ${CONTAINER_WP_NAME}
image: wordpress:latest
restart: unless-stopped
volumes:
- ${WP_CORE}:/var/www/html
- ${WP_CONTENT}:/var/www/html/wp-content
- ./conf.d/php.ini:/usr/local/etc/php/conf.d/php.ini
environment:
WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
VIRTUAL_HOST: ${DOMAINS}
LETSENCRYPT_HOST: ${DOMAINS}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
logging:
options:
max-size: ${LOGGING_OPTIONS_MAX_SIZE:-200k}
# wpcli:
# image: tatemz/wp-cli
# volumes:
# - ${WP_CORE}:/var/www/html
# - ${WP_CONTENT}:/var/www/html/wp-content
# depends_on:
# - db
# entrypoint: wp
networks:
default:
external:
name: ${NETWORK}

7
wp-cli-test.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
alias wp="docker-compose run --rm wpcli"
wp --info
exit 0

4
wp.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
docker-compose run --rm wpcli