Skip to content

dockerwest/compose-laravel

Repository files navigation

PHP basic developer environment

Basic developer environment for Laravel 5 apps.

Usage

For your convenience the developer environment has some helpers which take away some difficulties you could experience using docker containers.

If you want this easy helpers to be readily available for you you can use environment before you start. environment allows you to start your environment with an updated PATH and allows you to choose between tmux, screen or byobu. You can also define a default in the .env file.

explicit setting the window manager:

$ ./environment [tmux|screen|byobu]

using default window manager, defined in .env

$ ./environment

When you are running in this environment all helpers are available in your path.

You are not required to use the environent, but then you have to call the helpers with their full path.

To make use of the helpers you should use the run wrapper for docker-compose.

$ run up

Configuration

There is a sample configuration .env-sample which contains the defaults used in this environment.

If you want to change some of these values, copy .env-sample to .env and start editing.

default .env-sample

C_UID=1000
C_GID=1000
PHPVERSION=7.1
NGINXVERSION=stable
BASEHOST=application.dev
MYSQL_ROOT_PASSWORD=toor
APPLICATION=../application
DEVELOPMENT=1
WINDOW_MANAGER=tmux

C_UID / C_GID

Configure what UID and GID your PHP container must use. This usually should match your Hosts UID and GID. To find your local UID you can run id -u and to find your local GID you can run id -g.

PHPVERSION

Choose your PHP version. To see which versions are available here.

NGINXVERSION

Choose what version of Nginx you want. To see which versions are available see here

BASEHOST

This setting defines what the hostname will be you can browse your laravel app. The example configuration will be give you http://application.dev.

MYSQL_ROOT_PASSWORD

Choose whatever you want to use as default root password.

APPLICATION

A relative or absolute path to your application code. this can be a checkout of any laravel project

DEVELOPMENT

There is the DEVELOPMENT environment variable wich will enable xdebug, composer and enable timestamp checking in opcache.

When DEVELOPMENT is enabled xdebug should work out of the box. When you have issues - like while running docker for mac - you can set the extra environment variable XDEBUG_CONFIG with your hosts ip in it so xdebug can properly connect back.

WINDOW_MANAGER

Set the default window manager when running the environment. Available options are: tmux, screen and byobu

Helpers

The helpers are written in python, so you should have python2 or python3 installed on your system to be able to use them. Most Linux distributions and macOS have python already installed so there should be no issue there. There are no extra dependencies on python modules.

artisan

Run the Laravel artisan command inside the running php container, or inside a php-laravel container if none is running. The working directory will be the current directory you are executing this command from.

eg. $ artisan list

composer

Run the composer command inside the php docker container. The working directory will be the current directory you are executing this command from. Your $HOME/.ssh and $HOME/.composer folders wil be mounted inside this container to enable you to make use of your ssh keys and composer cache.

eg. $ composer require package_name

create_db

Create a new database inside the running mysql container with the name 'pimcore' and 'DEFAULT CHARSET utf8'.

eg. $ create_db

mysql

Execute a mysql command inside the running mysql container as the root user.

eg. $ mysql "SELECT * FROM table_name;"

mysqldump

Execute the mysqldump command inside the running mysql container as the root user.

eg. $ mysqldump db_name > export_file_name.sql

mysqlimport

Import a given mysql file into a given database, inside the running mysql container as the root user.

eg. $ mysqlimport db_name import_file_name.sql

node

Execute the node command inside a node container. The working directory will be the current directory you are executing this command from.

eg. $ node js_file.js

npm

Execute the npm command inside a node container. The working directory will be the current directory you are executing this command from. Your $HOME/.ssh and $HOME/.npm folders wil be mounted inside this container to enable you to make use of your ssh keys and npm cache.

eg. $ npm install package_name

yarn

Execute the yarn command inside a node container. The working directory will be the current directory you are executing this command from. Your $HOME/.ssh and $HOME/.npm folders wil be mounted inside this container to enable you to make use of your ssh keys and npm cache.

eg. $ yarn add package_name

php

Execute the php command inside the running php container, or inside a php-pimcore container if none is running. The working directory will be the current directory you are executing this command from.

eg. $ php -v

redis-cli

Execute the redis-cli command in the running redis container.

eg. $ redis-cli flushall

run

Run docker-compose for the current project, setting the project name to the BASEHOST variable from the .env file

eg. $ run up

Tricks

macOS

For this environment to work properly you should install gnu coreutils

using homebrew:

$ brew install coreutils

On macOS you could just install docker from the docker site and run like this. But our experience is that the native docker install is fairly slow to use. We would suggest you to install dinghy.

install dinghy and install the VM technology you want to use. If you want native xhyve support you can additionally install xhyve driver for docker machine.

If you have dinghy installed this environment will try to use it.

Currently there is an annoying limitation when we are using dinghy and that is that the hostnames used must end with docker.

oh-my-zsh users

oh-my-zsh users should check if there is no fixed setting for $PATH in their ~/.zshrc. If that is the case you can safely comment it out. If somewhere in your shell startup $PATH is forced you lose the features the ./environment script brings to you.

License

MIT License (MIT). See License File for more information.