Commit e85ac979 authored by Simonas's avatar Simonas

Merge branch 'workflow-cleanup'

parents 08d77b3a 8f209c00
# wordpress-nginx-docker
Docker compose installation of a single site Wordpress instance using Nginx as the web server and MariaDB as the database.
Let's Encrypt SSL enabled option using [https://hub.docker.com/r/certbot/certbot/](https://hub.docker.com/r/certbot/certbot/)
Work inspired by: [Dockerizing Wordpress with Nginx and PHP-FPM on Ubuntu 16.04](https://www.howtoforge.com/tutorial/dockerizing-wordpress-with-nginx-and-php-fpm/)
## Installation
Review the [Optional configuration](#opt_config) options and determine if you'd like to apply any.
### Create directories on host
Directories are created on the host to persist data for the containers to volume mount from the host.
- **mysql**: The database files for MariaDB
- **wordpress**: The WordPress media files
- **logs/nginx**: The Nginx log files (error.log, access.log)
- **certs**: SSL certificate files (LetsEncrypt)
- **certs-data**: SSL challenge/response area (LetsEncrypt)
From the top level of the cloned repository, create the directories that will be used for managing the data on the host.
```
$ cd wordpress-nginx-docker/
# mkdir -p certs/ certs-data/ logs/nginx/ mysql/ wordpress/
```
### HTTP
If you plan to run your WordPress site over http on port 80, then do the following.
1. Change the name of `nginx/wordpress.conf.example` to `nginx/wordpress.conf`
2. Update the `DOMAIN_NAME` in `nginx/wordpress.conf` to be that of your domain
3. Run `$ docker-compose up -d`
4. Navigate to [http://DOMAIN_NAME]() in a browser where `DOMAIN_NAME` is the name of your site
### HTTPS with SSL Certificates
If you plan to run your WordPress site over https on port 443, then do the following.
**Choose a method for SSL certificates**
- **Let's Encrypt**
If you plan on using SSL certificates from [Let's Encrypt](https://letsencrypt.org) it is important that your public domain is already registered and reachable.
Run: `./letsencrypt/letsencrypt-init.sh DOMAIN_NAME`, where `DOMAIN_NAME` is the publicly registered domain name of your host.
```
$ ./letsencrypt-init.sh example.com
mysql uses an image, skipping
wordpress uses an image, skipping
nginx uses an image, skipping
Creating mysql ...
Creating mysql ... done
Creating wordpress ...
Creating wordpress ... done
Creating nginx ...
Creating nginx ... done
Reloading nginx: nginx.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): mjstealey@gmail.com
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Using the webroot path /data/letsencrypt for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
ssl on;
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-02-06. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Stopping nginx ... done
Stopping wordpress ... done
Stopping mysql ... done
Going to remove nginx, wordpress, mysql
Removing nginx ... done
Removing wordpress ... done
Removing mysql ... done
INFO: update the nginx/wordpress_ssl.conf file
- 4: server_name example.com;
- 19: server_name example.com www.example.com;
- 46: ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
- 47: ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
- 48: ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
```
- **Self signed**
If you plan on using self signed SSL certificates, run: `./letsencrypt/self-signed-init.sh DOMAIN_NAME`, where `DOMAIN_NAME` is the `CN` you want to assign to the host (commonly `localhost`).
```
$ cd letsencrypt/
$ ./self-signed-init.sh localhost
INFO: making certs directory
Generating a 4096 bit RSA private key
................................................................................................................................................................................................................................................++
....................................................++
writing new private key to 'key.pem'
-----
INFO: update the nginx/wordpress_ssl.conf file
- 4: server_name localhost;
- 19: server_name localhost www.localhost;
- 46: ssl_certificate /etc/letsencrypt/live/localhost/cert.pem;
- 47: ssl_certificate_key /etc/letsencrypt/live/localhost/privkey.pem;
- 48: #ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN_NAME/chain.pem; <-- COMMENT OUT OR REMOVE
```
- **Bring your own**
If you plan to use pre-existing certificates you will need to update the `nginx/wordpress_ssl.conf` file with the appropriate settings to the kind of certificates you have.
**Finally**
1. Change the name of `nginx/wordpress_ssl.conf.example` to `nginx/wordpress_ssl.conf`
2. Update the `DOMAIN_NAME` in `nginx/wordpress_ssl.conf` to be that of your domain
3. Run `$ docker-compose up -d`
4. Navigate to [https://DOMAIN_NAME]() in a browser where `DOMAIN_NAME` is the name of your site
## <a name="opt_config"></a>Optional Configuration
### Environment Varialbles
WordPress environment variables. See the [official image](https://hub.docker.com/_/wordpress/) for additional information.
- `WORDPRESS_DB_NAME`: Name of database used for WordPress in MariaDB
- `WORDPRESS_TABLE_PREFIX`: Prefix appended to all WordPress related tables in the `WORDPRESS_DB_NAME` database
- `WORDPRESS_DB_HOST `: Hostname of the database server / container
- `WORDPRESS_DB_PASSWORD `: Database password for the `WORDPRESS_DB_USER`. By default 'root' is the `WORDPRESS_DB_USER`.
```yaml
environment:
- WORDPRESS_DB_NAME=wordpress
- WORDPRESS_TABLE_PREFIX=wp_
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_PASSWORD=password
```
MySQL environment variables.
- If you've altered the `WORDPRESS_DB_PASSWORD` you should also set the `MYSQL_ROOT_PASSWORD ` to be the same as they will both be associated with the user 'root'.
```yaml
environment:
- MYSQL_ROOT_PASSWORD=password
```
### Port Mapping
Neither the **mysql** container nor the **wordpress** container have publicly exposed ports. They are running on the host using a docker defined network named `wp_network` which provides the containers with access to each others ports, but not from the host.
If you wish to expose the ports to the host, you'd need to alter the stanzas for each in the `docker-compose.yaml` file.
For the `mysql` stanza, add
```
ports:
- '3306:3306'
```
For the `wordpress` stanza, add
```
ports:
- '9000:9000'
```
## Clean up / Removal
Removing all related containers
```
$ cd wordpress-nginx-docker/
$ docker-compose stop
$ docker-compose rm -f
```
Removing all related directories
```
$ cd wordpress-nginx-docker/
$ rm -rf certs/ certs-data/ logs/ mysql/ wordpress/
```
This diff is collapsed.
.idea/
certs/
certs-data/
logs/
mysql/
wordpress/
\ No newline at end of file
var/
\ No newline at end of file
This diff is collapsed.
# Ignore everything in this directory
*
# Except this file
!.gitignore
# Ignore everything in this directory
*
# Except this file
!.gitignore
......@@ -27,6 +27,7 @@ services:
- MYSQL_ROOT_PASSWORD=IiIjnsLi2wR9i1kWVbVpUAzP
command:
'mysqld --innodb-flush-method=fsync'
restart: always
wordpress:
......
This diff is collapsed.
#!/usr/bin/env bash
LE_DIR=$(pwd)
REPO_DIR=$(dirname ${LE_DIR})
CERTS=${REPO_DIR}/certs
CERTS_DATA=${REPO_DIR}/certs-data
_default_conf () {
local OUTFILE=default.conf
echo "server {" > $OUTFILE
echo " listen 80;" >> $OUTFILE
echo " listen [::]:80;" >> $OUTFILE
echo " server_name ${DOMAIN_NAME};" >> $OUTFILE
echo "" >> $OUTFILE
echo " location / {" >> $OUTFILE
echo " rewrite ^ https://\$host\$request_uri? permanent;" >> $OUTFILE
echo " }" >> $OUTFILE
echo "" >> $OUTFILE
echo " location ^~ /.well-known {" >> $OUTFILE
echo " allow all;" >> $OUTFILE
echo " root /data/letsencrypt/;" >> $OUTFILE
echo " }" >> $OUTFILE
echo "}" >> $OUTFILE
}
# DOMAIN_NAME should not include prefix of www.
if [ "$#" -ne 1 ]; then
echo "Usage: $0 DOMAIN_NAME" >&2
exit 1;
else
DOMAIN_NAME=$1
fi
if [ ! -d "${CERTS}" ]; then
echo "INFO: making certs directory"
mkdir ${CERTS}
fi
if [ ! -d "${CERTS_DATA}" ]; then
echo "INFO: making certs-data directory"
mkdir ${CERTS_DATA}
fi
# Launch Nginx container with CERTS and CERTS_DATA mounts
_default_conf
cd ${REPO_DIR}
docker-compose build
docker-compose up -d
sleep 5s
docker cp ${LE_DIR}/default.conf nginx:/etc/nginx/conf.d/default.conf
docker exec nginx /etc/init.d/nginx reload
sleep 5s
cd ${LE_DIR}
docker run -it --rm \
-v ${CERTS}:/etc/letsencrypt \
-v ${CERTS_DATA}:/data/letsencrypt \
certbot/certbot \
certonly \
--webroot --webroot-path=/data/letsencrypt \
-d ${DOMAIN_NAME} -d www.${DOMAIN_NAME}
cd ${REPO_DIR}
docker-compose stop
docker-compose rm -f
cd ${LE_DIR}
rm -f ${REPO_DIR}/nginx/default.conf
echo "INFO: update the nginx/wordpress_ssl.conf file"
echo "- 4: server_name ${DOMAIN_NAME};"
echo "- 19: server_name ${DOMAIN_NAME} www.${DOMAIN_NAME};"
echo "- 46: ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem;"
echo "- 47: ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem;"
echo "- 48: ssl_trusted_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/chain.pem;"
exit 0;
\ No newline at end of file
# Ignore everything in this directory
*
# Except this file
!.gitignore
server {
listen 80;
listen [::]:80;
server_name dev.biuro.lt;
location / {
rewrite ^ https://$host$request_uri? permanent;
}
location ^~ /.well-known {
allow all;
root /data/letsencrypt/;
}
}
#!/usr/bin/env bash
LE_DIR=$(pwd)
REPO_DIR=$(dirname ${LE_DIR})
CERTS=${REPO_DIR}/certs
CERTS_DATA=${REPO_DIR}/certs-data
_default_conf () {
local OUTFILE=default.conf
echo "server {" > $OUTFILE
echo " listen 80;" >> $OUTFILE
echo " listen [::]:80;" >> $OUTFILE
echo " server_name ${DOMAIN_NAME};" >> $OUTFILE
echo "" >> $OUTFILE
echo " location / {" >> $OUTFILE
echo " rewrite ^ https://\$host\$request_uri? permanent;" >> $OUTFILE
echo " }" >> $OUTFILE
echo "" >> $OUTFILE
echo " location ^~ /.well-known {" >> $OUTFILE
echo " allow all;" >> $OUTFILE
echo " root /data/letsencrypt/;" >> $OUTFILE
echo " }" >> $OUTFILE
echo "}" >> $OUTFILE
}
read -p "Press enter to continue"
# DOMAIN_NAME should not include prefix of www.
if [ "$#" -ne 1 ]; then
echo "Usage: $0 DOMAIN_NAME" >&2
exit 1;
else
DOMAIN_NAME=$1
fi
read -p "Press enter to continue"
if [ ! -d "${CERTS}" ]; then
echo "INFO: making certs directory"
mkdir ${CERTS}
fi
read -p "Press enter to continue"
if [ ! -d "${CERTS_DATA}" ]; then
echo "INFO: making certs-data directory"
mkdir ${CERTS_DATA}
fi
read -p "Press enter to continue"
# Launch Nginx container with CERTS and CERTS_DATA mounts
_default_conf
read -p "Press enter to continue"
cd ${REPO_DIR}
read -p "Press enter to continue"
docker-compose build
read -p "Press enter to continue"
docker-compose up -d
read -p "Press enter to continue"
sleep 5s
docker cp ${LE_DIR}/default.conf nginx:/etc/nginx/conf.d/default.conf
read -p "Press enter to continue"
docker exec nginx /etc/init.d/nginx reload
read -p "Press enter to continue"
sleep 5s
cd ${LE_DIR}
read -p "Press enter to continue"
docker run -it --rm \
-v ${CERTS}:/etc/letsencrypt \
-v ${CERTS_DATA}:/data/letsencrypt \
certbot/certbot \
certonly \
--webroot --webroot-path=/data/letsencrypt \
-d ${DOMAIN_NAME} -d www.${DOMAIN_NAME}
read -p "Press enter to continue"
cd ${REPO_DIR}
read -p "Press enter to continue"
docker-compose stop
read -p "Press enter to continue"
docker-compose rm -f
read -p "Press enter to continue"
cd ${LE_DIR}
read -p "Press enter to continue"
rm -f ${REPO_DIR}/nginx/default.conf
read -p "Press enter to continue"
echo "INFO: update the nginx/wordpress_ssl.conf file"
echo "- 4: server_name ${DOMAIN_NAME};"
echo "- 19: server_name ${DOMAIN_NAME} www.${DOMAIN_NAME};"
echo "- 46: ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem;"
echo "- 47: ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem;"
echo "- 48: ssl_trusted_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/chain.pem;"
exit 0;
\ No newline at end of file
#!/usr/bin/env bash
LE_DIR=$(pwd)
REPO_DIR=$(dirname ${LE_DIR})
CERTS=${REPO_DIR}/certs
CERTS_DATA=${REPO_DIR}/certs-data
# certs and certs-data directory expected to already exist and
# contain prior certificate information
if [ ! -d "${CERTS}" ]; then
echo "WARNING: no certs directory!"
exit 1;
fi
if [ ! -d "${CERTS_DATA}" ]; then
echo "WARNING: no certs-data directory!"
exit 1;
fi
docker run -t --rm \
-v ${CERTS}:/etc/letsencrypt \
-v ${CERTS_DATA}:/data/letsencrypt \
certbot/certbot \
renew \
--webroot --webroot-path=/data/letsencrypt
cd ${REPO_DIR}
docker-compose kill -s HUP nginx
cd ${LE_DIR}
exit 0;
#!/usr/bin/env bash
LE_DIR=$(pwd)
REPO_DIR=$(dirname ${LE_DIR})
CERTS=${REPO_DIR}/certs
CERTS_DATA=${REPO_DIR}/certs-data
# DOMAIN_NAME should not include prefix of www.
if [ "$#" -ne 1 ]; then
echo "Usage: $0 DOMAIN_NAME" >&2
exit 1;
else
DOMAIN_NAME=$1
fi
if [ ! -d "${CERTS}/live/${DOMAIN_NAME}" ]; then
echo "INFO: making certs directory"
mkdir -p ${CERTS}/live/${DOMAIN_NAME}
fi
# generate and add keys
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \
-days 365 -nodes -subj '/CN='${DOMAIN_NAME}''
mv cert.pem ${CERTS}/live/${DOMAIN_NAME}/fullchain.pem
mv key.pem ${CERTS}/live/${DOMAIN_NAME}/privkey.pem
echo "INFO: update the nginx/wordpress_ssl.conf file"
echo "- 4: server_name ${DOMAIN_NAME};"
echo "- 19: server_name ${DOMAIN_NAME} www.${DOMAIN_NAME};"
echo "- 46: ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem;"
echo "- 47: ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem;"
echo "- 48: #ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN_NAME/chain.pem; <-- COMMENT OUT OR REMOVE"
exit 0;
\ No newline at end of file
# Ignore everything in this directory
*
# Except this file
!.gitignore
# Ignore everything in this directory
*
# Except this file
!.gitignore
-----BEGIN CERTIFICATE-----
MIIFJDCCBAygAwIBAgISA76O6ZPLNB+y6MoTnwKMLgoOMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA5MjQxMzAwNDRaFw0x
ODEyMjMxMzAwNDRaMBMxETAPBgNVBAMTCGJpdXJvLmx0MIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAj5hA/UJAx3ojXxKxeq550VLDvZlOqiU5bGyZDu0D
lN6ECu36zJ3diKLR3aXyACL6H6OPyIEUWAeM/xVWGF9QnAnGWzKTfQsjLC3XBT43
AWwXeCSX3kztjG9tNI7tUS9poKq5OaYpL7LHQx4bEhq2crRXSh+38fYNwYFzJwh4
GS17odM6b8aiujncyo5xWAIZWH99YCfIP6vm4QgU/N+XSj00MEwg8FQGe2ujGXsk
ciFwFgiton/LOp1bgOL4r58ScW7l2qyGBE56d2bEEpT4sK0KNqQM8/iFdVHjTLA0
h+45bH6aFU7rRMANxgbV7THnTMW2SbYzzhGROHGB3vMb7wIDAQABo4ICOTCCAjUw
DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTx9XKHPSgfL0YNX4jU2jZJGo41qTAfBgNV
HSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEwLgYI
KwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcwLwYI
KwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcvMC8G
A1UdEQQoMCaCCGJpdXJvLmx0ggxkZXYuYml1cm8ubHSCDHd3dy5iaXVyby5sdDCB
/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYB
BQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCB
ngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkg
UmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUg
Q2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQu
b3JnL3JlcG9zaXRvcnkvMBMGCisGAQQB1nkCBAMBAf8EAgUAMA0GCSqGSIb3DQEB
CwUAA4IBAQBZki20RN2bbpeaq2auZ8DgZmMlj07l3BUgAJdpsd+KEiOa8FxiiO+4
Te+PuGIbDRZHnC1H9ELbCyS2VPe2k4ZPoCrEs78+0g2bEGnifQRSHz4fc9u1wPCj
eVDPCX9KpQywxp+hdY+xrXrneRUZxvLq76Xypbb4MjNTKnP+imAl9DoqDQZx2LUz
3GS1BNjCYtkJu910Z+xPm88BJcK9ytHZDi6DqeN4erS/MfxFuF43dDBs4ObPAQDK
Jxsr6hl096H3UdQ8Pgc83UxR/tDsZttUHDvisYSmBZ8701CzMKgQjh4TwQ6qdlVV
+pcwt5S2HiF0miyZLpd4v9Iad46jvWWr
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCPmED9QkDHeiNf
ErF6rnnRUsO9mU6qJTlsbJkO7QOU3oQK7frMnd2IotHdpfIAIvofo4/IgRRYB4z/
FVYYX1CcCcZbMpN9CyMsLdcFPjcBbBd4JJfeTO2Mb200ju1RL2mgqrk5pikvssdD
HhsSGrZytFdKH7fx9g3BgXMnCHgZLXuh0zpvxqK6OdzKjnFYAhlYf31gJ8g/q+bh
CBT835dKPTQwTCDwVAZ7a6MZeyRyIXAWCK2if8s6nVuA4vivnxJxbuXarIYETnp3
ZsQSlPiwrQo2pAzz+IV1UeNMsDSH7jlsfpoVTutEwA3GBtXtMedMxbZJtjPOEZE4
cYHe8xvvAgMBAAECggEACqTknGFe3+qD2LZQBaINUaDq9ZD5rc8YlJrwNZUIIO7l
ptHBN420MD6xg9abO7tcAyBitiArW+MjZn00ZpYaKZbn5za2jBxZPRsgxzi3ZxmW
G8fKoiXdrf1MgQrfOJdlIw3EsStJ/kkoUCdZJlxojdQkbFAxmHP+zQtFd+0+yc7i
3OTUKJa0KtneV3Spt4XF0A1NkrZj30JBanYBeRW/0o8JWLaHi2cGjF3oUxiPJ4GB
29wa/moFxNDOmODQZB46aww9n+/HrJoS75ew9WIvW4oDmELw/Mbyl4KahthdJBiB
GxQDU9L6kKv5fkaXbhMeVqmuO3iZXL06X7EuqwrXkQKBgQDF2dYK7LG7u/w4gbsW
AYFo/4zM37VfQJdQVS5HCCaWI9HObBwsfWxyA/IymUjPfsdF5el3e3DQ22rg3G+V
Irn+oC9RuRoILOGrsU41oe6SZNc/lPCGQI4XuGtwBF/bv+fUSxEbcCg7pjhnEX9m
gS9wd39ZUH6UNjBhyRsUbcdcswKBgQC5zDiSZsp0dEd8YEZ9XsAQr6C2nR2kqt1T
lXjYpgjzONFsUF3kib6wo4Ezvc4W+doKSYYHwJATM1LCpHtU9P2bEzCTzjzT0nwd
NDLgKyK5d0pL7z4NaHwQBO0WkMcFLituHGpPwPVyZ3x4h6CIyVvr1L8ztD8P+i4r
Rq3ihaSZ1QKBgCKJVAO0LZJHzk9O1gmRWbWqZjmdE1v9OmybceiUU6gBuK3/0Ssy
+astZSnP+BXAW6in6Ykh0x+iLZXy5MdzuGPqMlhhp1ml+/6shKp4Cd0kHS7MIPBO
dH9PgfGb0d/aL+2u7N2NRnijG1ViiIqsIkvPkDtXAcF9dBSdtkxqnVJhAoGBALSA
f7FTZXqPgOeHTNP9mhBb34Gp0COqz4ylWRr46xcH6wUUarNdUsGehyXyTuapYze9
SBX98LqGkO+CBkN6I2tl0Dq4EQYkpellTcvUfE68YpS03479JBIYBxF2I7OXsB+w
QWQr7QhxG06pTL+3B7NsIzki8mUeQ35Nkx7PgSLlAoGBAIDifDmhZsVaH+Rz4x62
g776rA7gQZmIuwwEIdXe3pYY8xS5frKQgy1rsNYBzhwy+1+s6e77uJgL1LOXSUQh
06oyXCba7myXlDA425fKbmU8H1vaZh23ffNi+cwBtqnz/gwpbKobjndn/EwURtpQ
hZYjamyGxdtUYtFmkHLV/SrJ
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIGFzCCBP+gAwIBAgISA76O6ZPLNB+y6MoTnwKMLgoOMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA5MjQxMzAwNDRaFw0x
ODEyMjMxMzAwNDRaMBMxETAPBgNVBAMTCGJpdXJvLmx0MIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAj5hA/UJAx3ojXxKxeq550VLDvZlOqiU5bGyZDu0D
lN6ECu36zJ3diKLR3aXyACL6H6OPyIEUWAeM/xVWGF9QnAnGWzKTfQsjLC3XBT43
AWwXeCSX3kztjG9tNI7tUS9poKq5OaYpL7LHQx4bEhq2crRXSh+38fYNwYFzJwh4
GS17odM6b8aiujncyo5xWAIZWH99YCfIP6vm4QgU/N+XSj00MEwg8FQGe2ujGXsk
ciFwFgiton/LOp1bgOL4r58ScW7l2qyGBE56d2bEEpT4sK0KNqQM8/iFdVHjTLA0
h+45bH6aFU7rRMANxgbV7THnTMW2SbYzzhGROHGB3vMb7wIDAQABo4IDLDCCAygw
DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
BgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTx9XKHPSgfL0YNX4jU2jZJGo41qTAfBgNV
HSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRjMGEwLgYI
KwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5vcmcwLwYI
KwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5vcmcvMC8G
A1UdEQQoMCaCCGJpdXJvLmx0ggxkZXYuYml1cm8ubHSCDHd3dy5iaXVyby5sdDCB
/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYB
BQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCB
ngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkg
UmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUg
Q2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQu
b3JnL3JlcG9zaXRvcnkvMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYAwRZK4Kdy
0tQ5LcgKwQdw1PDEm96ZGkhAwfoHUWT2M2AAAAFmC+HikgAABAMARzBFAiEAk+CB
Gj+P+nSHAdgc+0rb2+h2FCc/z2tyJ4TrwPJutmsCIHpCOgEdXfRVBWlBrFShFpJA
9bYLI3VP7H/JvYPJSxISAHYApFASaQVaFVReYhGrN7wQP2KuVXakXksXFEU+GyIQ
aiUAAAFmC+HinAAABAMARzBFAiEAkMkt+l3Y1UST6eXpAQUB3oWSiDuapU4BHl2Q
zDkxbyoCIBjJsq9AmthTM3e/8/Tp18lmMhZxtU2vZbWwSLJt1LZ2MA0GCSqGSIb3
DQEBCwUAA4IBAQAmsiez6bB13lBRYQqmYHG0HX1mJQPulHTMrEIqJnWzqjQIgZxg
XpBa9SXY1GxZLgiNsVCEBegwlXfkvjZsrvznTY80IpfCYxtsMHbHPfNRFM4zGaw6
K2pJK4tywjd+/ECExExN+82mvn1/0upI1sXiOeL2gljAsCjevdQmCH98jh5KkpUs
WzqgOr5pFGz4jtel5PeLnFVptqsSS/eHalbK0hOook8/nLEohKYW8qYQUx8B5Kye
s/C+0KtrwSEVA83j8YRqMR2lZZK9wFJG/QHXgKc36faybvaTenzp6pOJDLFnRSqN
d9QUxsZZh9+8oBDJUR8kljWiodUKIe7tFM2E
-----END CERTIFICATE-----
12,4
12,3
12,2
12,1
11,5
11,4
11,3
11,2
11,1
10,4
10,3
10,2
10,1
9,5
9,4
9,3
9,2
9,1
8,5
8,4
8,3
8,2
8,1
7,5
7,4
7,3
7,2
7,1
6,5
6,4
6,3
6,2
6,1
5,6
5,5
5,4
5,3
5,2
5,1
4,3
4,2
4,1
3,6
3,5
3,4
3,3
3,2
3,1
2,8
2,7
2,6
2,5
2,4
2,3
2,2
2,1
1,3
1,2
1,1
0,439
0,408
0,376
0,322
0,243
0,9
0,310
0,305
5,0
6,0
8,0
7,0
9,0
10,0
21,0
20,0
22,0
19,0
16,0
15,0
14,0
13,0
12,0
11,0
17,0
18,0
34,0
33,0
35,0
36,0
42,0
41,0
40,0
39,0
38,0
37,0
24,0
23,0
25,0
26,0
32,0
31,0
30,0
29,0
28,0
27,0
3,0
1,0
2,0
4,0
0,308
0,304
0,303
0,302
0,307
0,12
0,438
0,10
0,8
0,0
0,433
0,300
0,432
0,299
0,431
0,298
0,430
0,297
0,429
0,296
0,428
0,295
0,427
0,294
0,426
0,293
0,425
0,292
0,424
0,291
0,423
0,290
0,422
0,289
0,421
0,288
0,420
0,287
0,419
0,286
0,418
0,285
0,417
0,284
0,416
0,283
0,415
0,282
0,414
0,281
0,413
0,280
0,412
0,279
0,411
0,278
0,410
0,277
0,409
0,276
0,407
0,275
0,406
0,274
12,5
12,6
12,8
13,1
13,3
13,4
14,2
14,4
14,5
14,7
14,8
14,10
14,12
14,13
14,15
14,16
14,18
14,19
14,21
14,23
14,24
14,26
14,27
14,29
14,31
14,32
15,2
15,3
15,5
16,1
16,3
16,5
16,6
17,1
17,2
17,4
18,1
18,2
18,4
19,1
19,3
19,4
20,2
20,4
21,1
21,3
21,4
21,6
21,8
22,1
22,3
22,4
22,6
23,1
23,2
23,4
23,5
24,2
24,3
24,5
25,2
25,3
25,5
26,1
26,3
27,1
27,2
27,4
27,5
28,2
28,3
28,5
28,7
28,8
29,2
29,3
30,1
30,3
30,4
31,1
31,2
31,4
31,5
32,2
32,4
32,5
32,7
33,1
33,3
33,5
34,1
34,3
34,4
35,1
35,3
35,4
36,1
36,2
36,4
37,1
37,3
37,5
38,1
38,3
38,4
38,6
38,8
39,1
39,3
39,4
40,2
40,3
40,5
41,2
41,3
41,5
42,1
42,3
42,5
42,6
42,7
42,4
42,2
41,4
41,1
40,4
40,1
39,2
38,7
38,5
38,2
37,4
37,2
36,3
35,5
35,2
34,5
34,2
33,4
33,2
32,6
32,3
32,1
31,3
30,5
30,2
29,4
29,1
28,6
28,4
28,1
27,3
26,4
26,2
25,4
25,1
24,4
24,1
23,3
22,7
22,5
22,2
21,7
21,5
21,2
20,3
20,1
19,2
18,3
17,5
17,3
16,7
16,4
16,2
15,4
15,1
14,30
14,28
14,25
14,22
14,20
14,17
14,14
14,11
14,9
14,6
14,3
14,1
13,2
12,7
0,405
0,273
0,404
0,272
0,403
0,271
0,402
0,270
0,401
0,269
0,400
0,268
0,399
0,267
0,398
0,266
0,397
0,265
0,396
0,264
0,395
0,263
0,394
0,262
0,393
0,261
0,392
0,260
0,391
0,259
0,390
0,258
0,389
0,257
0,388
0,256
0,387
0,255
0,386
0,254
0,385
0,253
0,384
0,252
0,383
0,251
0,382
0,250
0,381
0,249
0,380
0,248
0,379
0,247
0,378
0,246
0,377
0,245
0,244
0,375
0,242
0,374
0,241
0,373
0,240
0,372
0,239
0,371
0,238
0,370
0,237
0,369
0,236
0,368
0,235
0,367
0,234
0,366
0,233
0,365
0,232
0,364
0,231
0,363
0,230
0,362
0,229
0,361
0,228
0,360
0,227
0,359
0,226
0,358
0,225
0,357
0,224
0,356
0,223
0,355
0,222
0,354
0,221
0,353
0,220
0,352
0,219
0,351
0,218
0,437
0,217
0,436
0,216
0,435
0,215
0,350
0,214
0,349
0,213
0,348
0,212
0,434
0,211
0,347
0,210
0,346
0,209
0,345
0,208
0,344
0,207
0,343
0,206
0,342
0,205
0,341
0,204
0,340
0,203
0,339
0,202
0,338
0,201
0,337
0,200
0,336
0,199
0,335
0,198
0,334
0,197
0,333
0,196
0,332
0,195
0,331
0,194
0,330
0,193
0,329
0,192
0,328
0,63
0,327
0,62
0,326
0,61
0,325
0,60
0,324
0,59
0,323
0,58
0,321
0,57
0,320
0,56
0,319
0,55
0,318
0,54
0,317
0,53
0,316
0,52
0,315
0,51
0,314
0,50
0,313
0,49
0,312
0,48
0,311
0,47
0,309
0,46
0,306
0,45
0,301
0,6
0,5
0,1
0,11
0,4
0,2
0,3
0,7
default-character-set=utf8
default-collation=utf8_general_ci
# Ignore everything in this directory
*
# Except this file
!.gitignore
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment