Cuando llego el momento de preparar mi entorno para ensuciarme las manos con el código Mauro empezó a usar Homestead pero yo prefería virtualizar mi entorno de trabajo con Docker y supongo que muchos de ustedes también lo querrán hacer por eso decidí realizar este tutorial, espero que este tutorial los ayude
Requisitos
El único requisito es que sepas lo básico de Docker y que lo tengas instalado, si aún no sabes de Docker y los infinitos beneficios que puedes obtener al usarlo te recomiendo que tomes el curso de fundamentos de Docker
Archivos y directorios
Lo único que necesitas es replicar este sistema de archivos en la carpeta en la cual ejecutes tu servidor
docker-compose.yml
En este archivo colocaremos la configuración necesaria para construir nuestros “Servicios”, empecemos con el servidor en este caso yo voy a usar nginx
version: '3'
services:
nginx:
build:
context: .
dockerfile: Dockerfile-nginx
volumes:
- ./symfony/:/var/www/symfony/
ports:
- 8001:80
networks:
- symfony
networks:
symfony:
Adicionalmente colocaré una red llamada symfony para poder conectar los diferentes contenedores entre si, a continuación debemos añadir el servicio php
version: '3'
services:
nginx:
build:
context: .
dockerfile: Dockerfile-nginx
volumes:
- ./symfony/:/var/www/symfony/
ports:
- 8001:80
networks:
- symfony
php:
build:
context: .
dockerfile: Dockerfile-php
environment:
APP_ENV: dev
volumes:
- ./symfony/:/var/www/symfony/
networks:
- symfony
depends_on:
- mysql
networks:
symfony:
Por último necesitaremos una base de datos yo usaré MySQL, el código que necesitamos es…
version: '3'
services:
nginx:
build:
context: .
dockerfile: Dockerfile-nginx
volumes:
- ./symfony/:/var/www/symfony/
ports:
- 8001:80
networks:
- symfony
php:
build:
context: .
dockerfile: Dockerfile-php
environment:
APP_ENV: dev
volumes:
- ./symfony/:/var/www/symfony/
networks:
- symfony
depends_on:
- mysql
mysql:
image: mysql
command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci','--default-authentication-plugin=mysql_native_password']
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql
networks:
- symfony
networks:
symfony:
✨Listo?
No aún no esta, si estuviste atento a lo que muy probablemente solo copiaste y pegaste añadimos un contexto para la construcción y configuración para las imágenes de php y nginx
Dockerfile-php
FROM php:fpm-stretch
RUN apt-get update && apt-get install -y
RUN apt-get update && apt-get install -y \
git \
zlib1g-dev \
libxml2-dev \
libzip-dev \
&& docker-php-ext-install \
zip \
intl \
mysqli \
pdo pdo_mysql
RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
COPY symfony/ /var/www/symfony
WORKDIR /var/www/symfony/
Lo que hacemos es usar una imagen de docker hub e instalamos un par de herramientas como composer que es un manejador de dependencias para php
Dockerfile-ngnix
FROM nginx:latest
COPY ./build/nginx/default.conf /etc/nginx/conf.d/
Adicional a esto necesitamos la configuración de server
default.conf
server {
listen 80;
root /var/www/symfony/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
# Connect to the Docker service using fpm
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /dev/stdout info;
access_log /var/log/nginx/project_access.log;
}
Levantar los servicios
Desde la terminal ejecuta el comando dentó de la ruta …/symfony-docker/
docker-compose up -d --build
Esto construirá y creará los contenedores que puedes ver usando docker-compose ps
Instalación de Sympony
Ahora llego lo bueno, debemos entrar al contenedor de php que creamos usando
docker-compose exec php bash
Luego debemos configurar git porque si no la creación del proyecto puede fallar, cosas raras de composer
Ejecutamos en la consola del contenedor php, remplazando lógicamente por nuestros datos
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
y luego si podemos usar
composer create-project symfony/website-skeleton .
y si vas a 127.0.0.1:8001 debes ver algo así
No olvides que puedes cambiar los puertos por si usas xampp o algo asi para trabajar en local, todo está en el archivo docker-compose.yml
Curso de Symfony Framework