Sobre un servidor ya deployado y configurado, con docker, docker-compose, etc.
Configuración server
# ssh y dependencias básicas$ ssh ~/ruta/key [email protected]$ apt-get update
$ apt-get upgrade
$ apt-get install mc zip gzip tar ccze fail2ban ufw
$ apt-get remove apache2 nginx
$ adduser diego
$ usermod -aGsudo diego
$ rsync --archive--chown=diego:diego ~/.ssh /home/diego/
$ nano /etc/ssh/sshd_config
Port 1234
PermitRootLogin no
AllowUsers diego
PasswordAuthentication no
PermitEmptyPasswords no
$ service ssh restart
# Si no lo hice al momento de dar de alta el server, agrego mi llave ssh pública$ nano ~/.ssh/authorized_keys
ssh
# En el equipo de trabajo$ nano ~/.ssh/config
## server
Host server
HostName xx.xx.xx.xxx
Port 1234
User diego
IdentityFile ~/ruta/key
# Desde otra instancia de la terminal para verificar login (antes de cerrar la que está en ejecución)$ ssh server
Setup firewall
# Para no user el puerto estándar 22 entre otras cosas$ ufw status
Status: inactive
$ ufw allow http
$ ufw allow https
$ ufw allow 1234
$ ufw enable
$ mkdir wordpress &&cd wordpress
$ pwd
/home/diego/wordpress
$ mkdir nginx-conf
$ nano nginx-conf/nginx.conf
# Ver [ejemplo](nginx.conf), tener en cuenta que incluye 80 y 443
Paso 2: variables de entorno
# Your database and WordPress application containers will need access to certain environment variables at runtime in order for your application data to persist and be accessible to your application.$ pwd
~/wordpress
$ nano .env
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_USER=your_wordpress_database_user
MYSQL_PASSWORD=your_wordpress_database_password
$ git init
$ nano .gitignore
.env
.git
docker-compose.yml
.dockerignore
Paso 3: servicios con Docker Compose
# Ver / copiar [compose](docker-compose.yml)$ pwd
~/wordpress
$ nano docker-compose.yml
Paso 4: Run & SSL
$ docker-compose up -d$ docker-compose ps
Output
Name Command State Ports
-------------------------------------------------------------------------
certbot certbot certonly --webroot ... Exit 0
db docker-entrypoint.sh --def ... Up 3306/tcp, 33060/tcp
webserver nginx -g daemon off; Up 0.0.0.0:80->80/tcp
wordpress docker-entrypoint.sh php-fpm Up 9000/tcp
Checks
# verificar que los certificados (staging) se hayan montado en el contenedor webserver$ docker-compose exec webserver ls-la /etc/letsencrypt/live
# En el comando para certbot, modificar --staging por --force-renewal$ nano docker-compose.yml
# Crear certificado$ docker-compose up --force-recreate--no-deps certbot
Paso 5: Actualizar configuración nginx
$ docker-compose stop webserver
$ curl -sSLo nginx-conf/options-ssl-nginx.conf https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf
# Con este comando se guardará estos parámetros en un archivo llamado options-ssl-nginx.conf, ubicado en el directorio nginx-conf.$ cp nginx-conf/nginx.conf nginx-conf/nginx.conf.old
$ nano nginx-conf/nginx.conf
$ nano docker-compose.yml
$ docker-compose up -d--force-recreate--no-deps webserver
$ docker-compose ps
# Ver [ejemplo](scripts/ssl_renew.sh.example)$ nano ssl_renew.sh
$ chmod +x ssl_renew.sh
$ sudo crontab -e
...
*/5 **** /home/sammy/wordpress/ssl_renew.sh >> /var/log/cron.log 2>&1
# Básicamente es lograr que se ejecute el script, se puede editar la periodicidad$ tail-f /var/log/cron.log
# Si obtenemos algo como "Congratulations, all renewals succeeded, cambiamos el intervalo para que se ejecute diariamente$ sudo crontab -e
...
0 12 *** /home/sammy/wordpress/ssl_renew.sh >> /var/log/cron.log 2>&1
# Eliminamos entonces --dry-run$ nano ssl_renew.sh