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

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *