Levantar un servidor de Nginx en docker

Una de las mejores caracterizticas de Docker es la facilidad para crear un nuevo contenedor a partir de un solo archivo de configuracion (un concepto similar al de un archivo package.json de node). Siguiendo este tutorial: http://www.penta-code.com/creating-a-lemp-stack-with-docker-compose/ he podido levantar un contenedor de nginx mediante docker-compose. El contenedor que levanté con las instrucciones del tutorial ejecuta Nginx, PHP, MariaDB (fork de MySQL) y PHPMyAdmin. A continuación revisaré brevemente los pasos que seguí para poner el contenedor en marcha, si tienen alguna duda del tema pueden revisar el tutorial donde se dan mas detalles sobre cada paso.

Prepara los archivos

Primero revisemos la estructura de las carpetas que vamos a usar. En la ruta /var/www de tu servidor deberían ir estos archivos:

directorios

El archivo docker-compose.yml contiene la configuración para levantar el contenedor se instalaran. El contenido del archivo es el que se muestra a continuación, no olvides cambiar la clave de la MYSQL_ROOT_PASSWORD: admin

nginx:
    image: nginx
    ports:
        - "80:80"
    links:
        - phpfpm
    volumes:
        - ./config/nginx/default:/etc/nginx/conf.d/default.conf
        - ./config/nginx/logs/nginx-error.log:/var/log/nginx/error.log
        - ./config/nginx/logs/nginx-access.log:/var/log/nginx/access.log
        - ./html:/var/www/html
    container_name: nginx
    restart: always

phpfpm:
    image: php:fpm
    links:
        - mysql
    ports:
        - "9000:9000"
    volumes:
        - ./html:/var/www/html
        - ./config/php/php.ini:/usr/local/etc/php-fpm.d/php.ini
    container_name: phpfpm

mysql:
    image: mariadb
    volumes:
      - "./config/database:/var/lib/mysql"
    environment:
        MYSQL_ROOT_PASSWORD: admin
    container_name: mysql

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
        - mysql
    ports:
        - 8183:80
    environment:
        MYSQL_USERNAME: admin
        MYSQL_ROOT_PASSWORD: admin
        PMA_ARBITRARY: 1
    container_name: phpmyadmin
    restart: always

Dentro de la carpeta html/ se deben copiar los archivos de la página web. En la carpeta nginx/ están los archivos de configuración y la carpeta de logs:

directorio_nginx

El archivo default contiene la configuración del servidor nginx. El siguiente es un ejemplo de como luce un archivo con la configuración básica para ejecutar PHP. Ten en cuenta que “tudominio.com” se debe reemplazar con el nombre de tu dominio.

server {
 listen 80;
 listen [::]:80;


 # this path MUST be exactly as docker-compose.fpm.volumes,
 # even if it doesn't exists in this dock.
 root /usr/share/nginx/html/;
 index index.php index.html index.html;

 server_name tudominio.com www.tudominio.com;

 location / {
 try_files $uri $uri/ /index.php?q=$uri&$args;
 }
 
 error_page 404 /404.html;
 error_page 500 502 503 504 /50x.html;

 location ~ \.php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass phpfpm:9000; 
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
}

Levantar el contenedor

Una vez que todos los archivos y carpetas están listos, levantaremos el contenedor usando estos comandos:

  1. Nos ubicamos en la carpeta donde estan nuestros archivos:
    cd /var/www
  2. Ejecutamos docker-compose para levantar el contenedor, le añadimos el parametro -d para que se ejecute en segundo plano:
    docker-compose up -d
  3. Ingresamos a la imagen de PHP:
    docker exec -it www_phpfpm_1 bash
  4. Instalamos en la imagen de PHP el soporte para MySQL:
    docker-php-ext-install mysqli pdo pdo_mysql
  5. Reiniciamos el servidor para que se reflejen los cambios:
    docker-compose restart

 

Ultimos ajustes

Como mencione antes, el contenedor ejecuta Nginx en conjunto con PHP, MariaDB y phpMyAdmin. Lo utilizo principalmente para paginas webs hechas en wordpress. por lo que esa configuración funciona perfectamente. Siempre es posible editar el archivo docker-compose.yml para ajustar el contenedor a las necesidades de cada persona.

Si se desea acceder a MySQL desde la consola del servidor, se lo puede hacer usando el comando:

docker-compose exec mysql sh

y luego se ejecuta:

mysql -u root -p

La clave del root se setea en el archivo docker-compose.yml, en el ejemplo usado es “admin”. No olvides cambiar esta clave por algo más seguro

Espero esto te haya sido de ayuda para levantar rapidamente un servidor Nginx y contribuya a tu interes por aprender más acerca de esta tecnología. ¡Hasta la próxima!

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s