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