Instalar paquetes (cakephp ) utilizando composer en docker (parte 2)

Enviado por Francisco Carrizales el Lun, 16/10/2017 - 18:27

En la entrada anterior instalamos cakephp  y algunas extensiones extras utilizando la terminal del contenedor.  Ahora ya  hay que organizar los archivos pues esta un poco sucio.

El objectivo de  hoy es organizar los archivos. ver como configurar apache en el contenedor y aprender otro comando de docker 

 

Comenzaremos con la estructura anterior que es la siguiente:

cakephp-docker-instaldo-usando-composer

La principal desventaja de esta estructura es que nuestro punto de entrada esta en app/index.php lo cual es incomodo.

Por ello moveremos todo el contenido de app  a public. Recuerda que existen archivos ocultos sobre todo el .htaccess

cakephp-docker-eliminar-app

 

De esta manera ya contamos con todo lo necesario en public para ejecutar cakephp. 

El siguiente paso a seguir es editar el Dockerfile. ahora si contamos con composer.json y composer.lock por lo que esta vez si hace mas sentido ejecutar el composer install.

FROM php:5.6-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 zip mcrypt mbstring intl simplexml
RUN a2enmod rewrite
RUN service apache2 restart 


COPY ./server/public/ /var/www/html/

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');"
RUN cd /var/www/html && composer install

Ejecutamos nuevamente los servicios tanto el build como el up.

docker-compose build

docker-compose up

 

Desde el navegador podremos ver nuestro mensaje de bienvenida de cakephp. 

Bien es hora de cambiar un poco la configuración de apache. ya que el punto de entrada  deberia ser webroot  (  este era el otro camino ) de tal forma que crearemos un nuevo directorio en la raiz del proyecto llamado apache. Utilizaremos un comando para copiar un archivo del contenedor al host. 

Lo primero que necesitamos es el container ID para ello ejecutamos (el servicio debe estar levantado )

docker ps

docker ps copiar archivos desde contenedor a host

una vez que tenemos el id ejecutamos el comando de copiar.

docker cp <containerId>:/file/path/within/container /host/path/target

donde en nuestro caso seria.

docker cp 4b341b8a2aee:/etc/apache2/sites-available/000-default.conf  ./apache/

Editaremos el archivo 000-default.conf para apuntar correctamente a webroot.

<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>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Ya que tenemos el nuevo archivo. hay que indicarle a nuestro contenedor que utilice este archivo. para ello nuevamente hay que editar el Dockerfile para incluir este archivo en el proceso.

COPY ./apache/000-default.conf /etc/apache2/sites-available/

El archivo completo queda de la siguiente manera:

FROM php:5.6-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 zip mcrypt mbstring intl simplexml
RUN a2enmod rewrite
COPY ./apache/000-default.conf /etc/apache2/sites-available/
RUN service apache2 restart 


COPY ./server/public/ /var/www/html/

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');"
RUN cd /var/www/html && composer install

Nuevamente volvemos a construir y a levantar

docker-compose build

docker-compose up

 

Etiquetas

Añadir nuevo comentario

HTML Restringido

  • Etiquetas HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.