Git Product home page Git Product logo

dockbox's Introduction

DockBox

DockBox es un entorno de desarrollo PHP con Docker. El objetivo es facilitar el desarrolo de aplicación PHP con la tecnología de Docker.

Contiene las herramientas basicas para que hagas de tus desarrollos lo más comodo sin la necesidad de instalarte software u otras tecnologías en tu maquina.

¿Qué hay en el entorno ecológico de desarrollo?

Requerimientos

Instalar Docker en Ubuntu

Ver documentación oficial Docker CE

Pasos que realice Docker

Instalación del Dockbox

Elije la configuración que más se ajuste a tus necesidades.

Configuración de Proyectos Múltiples::

1 - clonar este repositorio en cualquier lado de tu máquina:

git clone https://github.com/alejandrososa/dockbox.git

Nota: En este caso la estructura de carpetas será así:

- /var/www/html/
    - dockbox
    - aplicacion1
    - aplicacion2

2 - Copia el fichero de configuración de ejemplo .env-example a .env para tener toda la configuración de los contenedores.

cp .env-example .env
Puede editar el archivo .env para elegir el software que desea instalar en su entorno. Puedes configurar las versiones de librerías, cuentas de usuario en bases de datos, instalar librerías, cambiar ip del contenedor, verión de php, etc. Siempre puede consultar el archivo docker-compose.yml para ver cómo se han utilizado esas variables.

3 - Copia el fichero de docker-compose docker-compose.yml.SIMPLE a docker-compose.yml para tener configurado los contenedores esenciales preconfigurados.

  cp docker-compose.yml.SIMPLE docker-compose.yml
El docker-compose.yml.SIMPLE tiene el mínimo de contenedores para trababar. Si deseas tener todos los contenedores preconfiguraos entonces copia el docker-compose.yml.FULL

4 - Ejecutar el comando docker-compose para que los cambios tengan efecto.

docker-compose up -d mysql apache2
Nota: Los contenedores servidor y php-fpm se ejecutarán automáticamente en la mayoría de los casos, por lo que no es necesario especificarlos en el comando up. Si no pudiste encontrarlos corriendo entonces necesitas especificarlos como sigue: docker-compose up -d nginx php-fpm mysql servidor.

5 - Se puede acceder a todos los sitios por visitar http://localhost/aplicacion1/public y http://localhost/aplicacion2/public, pero por supuesto que no es muy útil por lo que vamos a php configurar rápidamente.

Haga lo mismo para cada proyecto aplicacion2.conf, aplicacion3.conf, ...

6 - Añadir los dominios a tu hosts.

127.0.0.1  aplicacion1.dev

7 - Crear las bases de datos del proyecto. En este momento hay que hacerlo de forma manual mediante la introducción de su contenedor DB.

Si modificas el fichero docker-compose.yml, .env o cualquier Dockerfile, debes hacer un re-build del conentenedor modificado, para ver cambios efectuados.

Levantar nuestro entorno

El primer paso antes de levantar nuestro entorno es crear una key de seguridad con ssh-keygen, no te preocupes, lo explico todo en SSH. Ahora que ya tienes tu key-ssh, continúa las indicaciones.

Ir al raíz de nuestro dockbox una vex descargado y ejecutar

$ docker-compose up -d mysql apache2

Puedes combinar según tu necesidad los siguientes contenedores: apache2, nginx, mysql, mssql, postgres, postgres-postgis, mariadb, mongo, phpmyadmin, pgadmin, redis, elasticsearch, rabbitmq, jenkins, jira, php-worker, beanstalkd, beanstalkd-console, kibana

$ docker-compose up -d apache2 postgres redis elasticsearch

Ingresa el contenedor servidor, para ejecutar comandos como (Symfony, Node, Composer, PHPUnit, Gulp, ...)

docker-compose exec servidor bash

o

ssh [email protected] -p 2222
Nota: Puedes agregar --user=desarrollador para que los archivos se creen como el usuario del host.

Ejemplo:

docker-compose exec --user=desarrollador servidor bash

Puede cambiar las variables PUID (identificador de usuario) y PGID (identificador de grupo) desde el archivo .env)

Contenedores

Ya tenemos nuestro entorno de desarrollo ya está creado y levantado, pero la pregunta es ¿de qué disponemos en los contenedores para desarrollar?.

Servidor
A nivel global en el contenedor encontrarás:

  • Php 5.6, 7.0, 7.1
  • Php cli
  • Composer
  • PhpUnit 5.7
  • Codecept
  • Deployer
  • Git
  • Symfony
  • Laravel
  • Yii 2 (debe instalar yiisoft con el token)
  • NodeJs
  • Less
  • Sass
  • Webpack
  • TypeScript
  • V8JS
  • XDebug
  • Curl
  • Json
  • Mbstring
  • Sqlite3
  • Vim
  • Yarn
  • Nano
  • Ruby
  • Pear

PHP

  • Php 5.6, 7.0, 7.1
  • XDebug
  • OPCache
  • Soap
  • Redis
  • MongoDb
  • Zip
  • Bcmath
  • Mysqli
  • Tokenizer
  • GD
  • PDO
  • PDO Mysql
  • PDO Postgres
  • Pgsql
  • Pear
  • Ruby

PHP Compilers

  • PHP FPM
  • HHVM

PHP Servers

  • NGINX
  • Apache2

Apche2
NGinx
Mysql
Mongo DB
MARÍA DB
Postgres
Postgis
MSSql Server
Jenkins
Jira
ElasticSearch
Kibana
RabbitMQ
Redis
Memcached
Beanstalkd
Selenium

Configuración con PHPStorm

Ver la documentación e imagenes en el directorio docs

Alias para ejecutar dockbox

Para hacer la vida más sencilla y no tener que entrar al directorio /var/www/html/dockbox cada vez que necesites usar los contenedores, he preparado unos alias con los siguientes comandos:

  • dockerup = levanta el dockbox con los contenedores mysql apache2 postgres por defecto.
    Puedes especificar los contenedores ejecutando dockerup mysql redis apache2
  • dockerdown = detiene el dockbox y apaga los contenedores.
  • dockerrebuild = actualiza el dockbox con la ultima versíon. Elimina contenedores, bases de datos y configuración de proyectos.

Para agregarlos a tus alias ejecuta los siguientes comandos:

Linux

cd /var/www/html/dockbox
touch ~/.aliases_personales && cat server/aliases.sh >> ~/.aliases_personales  && source ~/.aliases_personales 
touch ~/.aliases_docker && cat docker.sh >> ~/.aliases_docker  && source ~/.aliases_docker  
echo "source ~/.aliases_personales" >> ~/.bash_aliases        
echo "source ~/.aliases_docker" >> ~/.bash_aliases        
source ~/.bash_aliases 

Mac

cd /var/www/html/dockbox
touch ~/.aliases_personales && cat server/aliases.sh >> ~/.aliases_personales  && source ~/.aliases_personales 
touch ~/.aliases_docker && cat docker-mac.sh >> ~/.aliases_docker  && source ~/.aliases_docker  
echo "source ~/.aliases_personales" >> ~/.bash_profile        
echo "source ~/.aliases_docker" >> ~/.bash_profile  
source ~/.bash_profile 

Comandos utiles de docker

dc es el alias docker-compose, si realizaste el paso de añadir los alias, entonces puedes ahorrar unos cuantos caracteres. :D

Docker Compose

Comando Descripción
dc ps Listar contenedores levantados
dc stop $(docker ps -q -a) Detener todos los contenedores activod
dc rmi -f $(docker images -q) Eliminar imagenes
dc rm -f $(docker ps -q -a) Eliminar contenedores

Docker

Comando Descripción
docker ps Listar contenedores levantados
docker ps -a Listar contenedores inactivos
docker stop $(docker ps -q -a) Detener todos los contenedores activod
docker rmi -f $(docker images -q) Eliminar imagenes
docker rm -f $(docker ps -q -a) Eliminar contenedores

Log de cambios

Soluciones a errores comunes SOLUCIÓN DE ERRORES

  • 26/10/2017 - Se añade la extensión ZeroMQ a los contenedores Servidor, PHP-FPM.
  • 24/08/2017 - Se añade el contenedor Selenium, Beanstalkd, Mencached, Kibana. Actualización de documentación.
  • 23/04/2017 - Se añade el contenedor PHP-FPM, PHP-Worker, NGinx, Mssql.
  • 13/04/2017 - Se añade el contenedor Jira.
  • 15/03/2017 - Se añade el contenedor Rabbitmq.
  • 13/03/2017 - Se añade el contenedor Jenkins y documentación.
  • 19/02/2017 - Configuración y documentación para realizar backup de Mysql y Postgresql.
  • 19/02/2017 - Corrección de persistencia de datos en postgres.
  • 11/02/2017 - Corrección de permisos de usuario desarrollador en el contenedor servidor.
  • 05/02/2017 - Instalación de librerías Js al contenedor servidor.

Licencia

Copyright © 2017 Alejandro Sosa. Licencia bajo los terminos MIT license.

dockbox's People

Contributors

alejandromediaadgo avatar alejandrososa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dockbox's Issues

Issue installing Docker Engine on Aws instance

sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
returning this issue...
Configuring on an AWS instance with Ubuntu
E: Unable to locate package linux-image-extra-4.4.0-1013-aws
E: Couldn't find any package by glob 'linux-image-extra-4.4.0-1013-aws'
E: Couldn't find any package by regex 'linux-image-extra-4.4.0-1013-aws'

Container php faild on build

Service 'php' failed to build: The command '/bin/sh -c if [ ${INSTALL_PHPREDIS} = true ]; then pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis ;fi' returned a non-zero code: 1

Error al final de docker UP

ERROR: for postgres Cannot start service postgres: driver failed programming external connectivity on endpoint dockbox_postgres_1 (139515a6c4f3bcf7a3cb41c1b4f368264e74f16b0276e755befa4679b551ea01): Bind for 0.0.0.0:5432 failed: port is already allocated

ERROR: for apache2 Cannot start service apache2: driver failed programming external connectivity on endpoint dockbox_apache2_1 (b3b7e073195188a1c0ba6d9315e61cf1c777ada033ad14cbcc04bb87c3f9b7eb): Bind for 0.0.0.0:443 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

Tras instalar la última versión del dockbox

ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint dockbox_nginx_1 (a1a979c77560065a5d073c58f9af4a19d135c9c8fbbf3e1efbb6d4e391721af3): Bind for 0.0.0.0:443 failed: port is already allocated

ERROR: for postgres Cannot start service postgres: driver failed programming external connectivity on endpoint 69ed1111107f_dockbox_postgres_1 (2e09f2a8ec736cb15da8b9cb0cc5a5f22ea089a8d8e3e957194f90be3d0caff3): Bind for 0.0.0.0:5432 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.


Si cambio de puerto para postgres:

ERROR: for postgres Cannot create container for service postgres: invalid bind mount spec "8bb16e7c62dabc56c16fe95fc014ee1f92b3e28ce3fa624cfb96b69dd962770f:var/lib/postgresql/data:rw": invalid volume specification: '8bb16e7c62dabc56c16fe95fc014ee1f92b3e28ce3fa624cfb96b69dd962770f:var/lib/postgresql/data:rw': invalid mount config for type "volume": invalid mount path: 'var/lib/postgresql/data' mount path must be absolute
ERROR: Encountered errors while bringing up the project.

I can't dockbox up

ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

user@user-System-Product-Name:~$ dockerUp 
Host [127.0.0.1]:2222 not found in /home/david/.ssh/known_hosts
> Levantando MySql, Postgres, PHP, Servidor
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Docker inicializado..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.