Por los tiempos de Ubuntu 14.04, cuando yo instalaba un wordpress empezaba por instalar en el servidor un mysql , php un apache2 y todos los wordpress y aplicaciones que corrieran dentro de ese servidor tenian que ir con esa version de mysql esa version de php … es el entorno y lo que habia en esa maquina. Los contenedores existian pero no tenias un docker hub lleno de imagenes para cualquiera cosa que desearas. Hoy en dia se usan contenedores y por muy buenas razones tanto que no hacerlo es una como declararte un sadomasoquista que anhela sufrir.
Para este ejemplo vamos a suponer que tenemos un servidor centos 7 online con 1 ip publica y 2 dominios registrados:
ip publica: 80.211.12.119
dominio A: piensoluegoinstalo.com
dominio B: bigdatadevops.com
Apuntar los dns del dominio A y el dominio B a la ip publica del servidor.
Instalar Docker
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl status docker sudo systemctl enable docker
Instalar Docker-Compose
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 -y sudo yum install epel-release sudo yum install -y python-pip sudo yum upgrade python* pip install --upgrade pip sudo pip install docker-compose docker-compose version
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
Crear el Servidor
Por organizacion y portabilidad digo servidor, pero en realidad es una carpeta donde vamos a guardar el docker-compose y la persistencia de los contenedores.
mkdir server-docker vi ./server-docker/docker-compose.yml
version: "3.8"
services:
piensowordpress:
container_name: piensowordpress
image: wordpress:php7.4-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: user1
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: word1base
volumes:
- ./html/pienso:/var/www/html
bigwordpress:
container_name: bigwordpress
image: wordpress:php7.4-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: user2
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: word2base
volumes:
- ./html/big:/var/www/html
nginx:
container_name: nginx
image: nginx:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./html:/var/www/html
piensocertbot:
container_name: piensocertbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email adriandepalma@hotmail.com --agree-tos --no-eff-email -d piensoluegoinstalo.com -d www.piensoluegoinstalo.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./html/big:/var/www/html
bigcertbot:
container_name: bigcertbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email adriandepalma@hotmail.com --agree-tos --no-eff-email -d bigdatadevops.com -d www.bigdatadevops.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./html:/var/www/html
db:
image: mysql:8.0
container_name: mysql8
restart: always
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: pass_root_mysql
volumes:
- ./db_data:/var/lib/mysql
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: always
ports:
- '8181:80'
environment:
PMA_HOST: db
De forma automatica se van a crear los directorios que vamos a usar y se van a rellenar con lo que el contenedor deje ahi.
La persistencia del mysql se va a guardar en el directorio db_data, todo el codigo html de los wordpress se guardara en el directorio html, los certificados ssl en el directorio certbot y en el directorio nginx la configuracion de nuestro nginx.
Los datos de todo se generan automaticamente salvo la configuracion del nginx que tenemos que darsela nosotros.
vi ./docker-server/nginx/conf/default.conf
server {
listen [::]:80;
listen 80;
server_name piensoluegoinstalo.com www.piensoluegoinstalo.com;
return 301 https://piensoluegoinstalo.com$request_uri;
}
server {
listen [::]:80;
listen 80;
server_name bigdatadevops.com www.bigdatadevops.com;
return 301 https://bigdatadevops.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name piensoluegoinstalo.com www.piensoluegoinstalo.com;
ssl_certificate /etc/nginx/ssl/live/piensoluegoinstalo.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/piensoluegoinstalo.com/privkey.pem;
root /var/www/html/pienso;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html/pienso;
}
location / {
try_files $uri @apache;
}
location ~ ^/\.user\.ini {
deny all;
}
location ~* \.(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://piensowordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://piensowordpress:80;
}
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://piensowordpress:80;
}
location ~/\. {
deny all;
access_log off;
log_not_found off;
}
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name bigdatadevops.com www.bigdatadevops.com;
ssl_certificate /etc/nginx/ssl/live/bigdatadevops.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/bigdatadevops.com/privkey.pem;
root /var/www/html/big;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html/big;
}
location / {
try_files $uri @apache;
}
location ~ ^/\.user\.ini {
deny all;
}
location ~* \.(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://bigwordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://bigwordpress:80;
}
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://bigwordpress:80;
}
location ~/\. {
deny all;
access_log off;
log_not_found off;
}
}
cd docker-server docker-compose up -d
Para que wordpress funcione hay que crear las bases de datos que vamos a usar.
0 comentarios