Siendo que me ausente por mucho tiempo, ya no recuerdo ni en que me quede. De tal manera publico cual es mi configuración final para desarrollar php utilizando cakephp 3.x que utilizo día a día en mi trabajo.
Que necesito para trabajar:
- Apache con php
- Un servidor local de mysql
- Acceso a dicho servidor de mysql utilizando phpmyadmin
- Un worker para procesamiento en background
- Un redis para el cache
Con esto en mente comparto la estructura de directorios:
Donde lo importante es lo siguiente:
- apache que es un directorio donde se encuentra la configuración de apache y un script para el worker
- Dockerfile para construir nuestro servidor de apache
- docker-compose.yml para crear el resto de servicios.
Apache
000-default.conf:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/webroot
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
worker.sh
php /var/www/html/bin/cake.php Queue.queue runworker
Dockerfile
FROM php:7.0-apache
RUN apt-get update && apt-get install libxml2-dev git libicu-dev g++ zlib1g-dev libmcrypt-dev -y
RUN docker-php-source extract
RUN docker-php-ext-install soap zip mcrypt mbstring intl simplexml pdo pdo_mysql
RUN apt-get install libfreetype6-dev libjpeg62-turbo-dev -y
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install gd
RUN docker-php-ext-install calendar
RUN apt-get install libxslt-dev -y
RUN docker-php-ext-install xsl
RUN a2enmod rewrite
COPY ./apache/000-default.conf /etc/apache2/sites-available
RUN service apache2 restart
RUN usermod -u 1000 www-data
RUN chown -R www-data:www-data /var/www/
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --filename=composer --install-dir=/usr/local/bin
RUN php -r "unlink('composer-setup.php');"
docker-compose.yml
version: '2'
services:
redis:
image: redis
ports:
- "6379"
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- mysql
environment:
PMA_VERBOSES: local,Dev
PMA_HOSTS: mysql,asdff.rds.amazonaws.com
ports:
- "8081:80"
mysql:
image: mysql:5.7
volumes:
- db_data_mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db_p
MYSQL_USER: user_p
MYSQL_PASSWORD: pass_p
worker:
depends_on:
- mysql
- redis
build: .
restart: always
command:
- apache2-custom.sh
volumes:
- "./apache/worker.sh:/usr/local/bin/apache2-custom.sh"
- .:/var/www/html/
environment:
DEBUG: "false"
REDIS_HOST: redis
DATABASE_URL: mysql://user_p:pass_p@mysql/db_p?encoding=utf8&timezone=UTC&cacheMetadata=true
apache:
depends_on:
- mysql
- redis
build: .
ports:
- "8080:80"
environment:
DEBUG: "true"
REDIS_HOST: redis
DATABASE_URL: mysql://user_p:pass_p@mysql/db_p?encoding=utf8&timezone=UTC&cacheMetadata=true
volumes:
- .:/var/www/html/
volumes:
db_data_mysql:
Donde se puede destacar los siguiente:
PhpMyAdmin
- Esta utilizando dos variables PMA_VERBOSES y PMA_HOSTS
- La primera es para indicar el nombre del host a utlizar
- La segunda es para indicar la ip. dominio del servidor al que se desea conectar dando como resultado lo siguiente, donde nos habilita un select para indicar que host a utilizar
Worker
- Esta utilizando el mismo Dockerfile para su contrucción.
- Tiene un restart:always, esto se debe a que el script que esta ejecutando solo dura 30 segundos, si no encuentra una tarea a realizar termina. Con esta línea se vuelve a activar.
- Esta utilizando command que es para indicarle que ejecute un sh en lugar del punto de entrada que esta programado.
- Esta utlizando otro volumen, "./apache/worker.sh:/usr/local/bin/apache2-custom.sh" que indica que coloque el archivo del worker.sh en ese directorio y con ese nombre, que es el ejecutable que se llama con command
Finalmente construimos el servicio y ejecutamos:
> docker-compose build
> docker-compose up
Y listo este es básicamente el resultado final de mi entorno de desarrollo:
Añadir nuevo comentario