Ambientum
Manter um ambiente de desenvolvimento uniforme entre desenvolvimento, staging and produção geralmente não é uma tarefa fácil. Nos últimos anos, nosso amigo Docker tem se tornado uma solução madura para resolver esse tipo de problema.
Todos nós amamos Laravel e Vue.JS, mas porquê desenvolver um código Rock Star sem um ambiente do mesmo nível?
Nunca mais ouça: "na minha máquina funcionou"!
O que o Ambientum Faz?
Ambientum pode lhe ajudar com algumas coisas incríveis, os 3 cenários mais comuns estão listados a seguir:
- Rodar Laravel e/ou Vue.JS em Desenvolvimento.
- Rodar Laravel e/ou Vue.JS em Produção (Includindo Integração Contínua).
- Substituir dependências locais com comandos que rodam no Docker.
O que eu Preciso Saber Antes de Começar?
Antes de começar com Ambientum, alguns conhecimentos são necessários:
- O básico sobre Docker e Containers.
- Estar confortável usando a linha de comando.
- Saber operar o
docker-compose
.
Aviso
O Docker Compose que vem por padrão com o docker geralmente é antigo. Por favor instale a versão estável mais recente disponível em https://github.com/docker/compose/releases.
Imagens
Se você já se sente confortável com as habilidades listadas acima, você pode usar as seguintes imagens pra montar seu próprio ambiente:
Repository | Images/Tags | Description |
---|---|---|
ambientum/php | 7.1 , latest |
PHP v7.1 para linha de comando e queues |
7.1-nginx , latest-nginx |
PHP v7.1 com Nginx webserver | |
7.1-apache , latest-apache |
PHP v7.1 com Apache webserver | |
7.0 , |
PHP v7.0 para linha de comando e queues | |
7.0-nginx , |
PHP v7.0 com Nginx webserver | |
7.0-apache , |
PHP v7.0 com Apache webserver | |
ambientum/node | 8 , latest |
Node.js v8.x |
7 |
Node.js v7.x | |
6 |
Node.js v6.x | |
ambientum/mysql | 5.7 , latest |
MySQL Server v5.7 (com sql-mode='') |
5.6 |
MySQL Server v5.6 | |
5.5 |
MySQL Server v5.5 | |
ambientum/mariadb | 10.1 , latest |
MariaDB Server v10.1 |
10.0 |
MariaDB Server v10.0 | |
5.5 |
MariaDB Server v5.5 | |
ambientum/postgres | 9.6 , latest |
PostgreSQL Server v9.6 |
9.5 |
PostgreSQL Server v9.5 | |
9.4 |
PostgreSQL Server v9.4 | |
9.3 |
PostgreSQL Server v9.3 | |
ambientum/redis | 4.0 , latest |
Redis Server v4.0 |
3.2 |
Redis Server v3.2 | |
3.0 |
Redis Server v3.0 | |
ambientum/beanstalkd | 1.10 , latest |
Beanstalkd Server v1.10 |
1.9 |
Beanstalkd Server v1.9 | |
ambientum/mailcatcher | latest |
MailCatcher alternativa open source ao MailTrap.io |
Guia rápido de uso:
Substituindo comandos locais:
Umas das funcionaliades do Ambientum é permitir a utilização de comandos relacionados a PHP e NODE.JS dentro de containers.
Existem alguns aliases que precisam ser setados, os comandos abaixo lhe mostram como os ativar:
Para usuários do Bash e ZSH:
(Utilize essa opção caso você não saiba qual o seu terminal)
curl -L https://github.com/codecasts/ambientum/raw/master/commands.bash -o ~/.ambientum_rc
source ~/.ambientum_rc
Para usuários do Fish:
curl -L https://github.com/codecasts/ambientum/raw/master/commands.fish -o ~/.ambientum_rc
source ~/.ambientum_rc
Para usuários do Windows (via Git Bash):
Para Outros consoles do Windows (como PowerShell ou Cmder), acesse esse link.
curl https://github.com/codecasts/ambientum/raw/master/commands.git-bash -o ~/.ambientum_rc
source ~/.ambientum_rc
Uma vez que os comandos foram declarados, podemos começar a usá-los imediatamente.
Importante: A primeira execução pode demorar algum tempo, desde que as imagens serão baixadas.
Tudo relacionado ao Node.JS pode ser executado utilizando-se o prefixo n
.
Por exemplo, digamos que você precisa utilizar o gulp, que é uma dependência global:
n npm install -g gulp
n gulp --version
Você também pode usar o Yarn:
n yarn global add gulp
n gulp
Precisa do NPM apenas?
n npm install
Tudo relacionado ao PHP pode ser executao utilizando-se o prefixo p
command.
Por exemplo, se você precisar do composer
:
p composer global require minha/dependencia-global
Você pode inclusive somente usar o binario do php contra algum arquivo:
p php teste.php
Outro exemplo, vamos criar um Projeto Laravel:
p composer create laravel/laravel nome-do-meu-projeto
Eu Tenho um Projeto, E gostaria de usar Docker!
Bom, esse é o objetivo princial desse projeto.
Ajuste os arquivos docker-compose.yml
a seguir ao seu agrado, adicionando ou removendo serviços que você precisar:
Laravel docker-compose.yml
####
# ATENCAO:
# Troque todas as ocorrencias de "sandbox" com o nome do seu projeto
####
# sintaxe v2 do docker-compose
version: '2'
# Volumes (para que os dados nao se percam)
volumes:
# Dados do Postgres
# remova se voce nao for usar postgres
sandbox-postgres-data:
driver: local
# Dados do MySQL
# remova se voce nao for usar mysql
sandbox-mysql-data:
driver: local
# Dados do Redis
# remova se nao for usar redis
sandbox-redis-data:
driver: local
services:
# Postgres (9.5)
postgres:
image: ambientum/postgres:9.6
container_name: sandbox-postgres
volumes:
- sandbox-postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=sandbox
- POSTGRES_DB=sandbox
- POSTGRES_USER=sandbox
# MySQL (5.7)
mysql:
image: ambientum/mysql:5.7
container_name: sandbox-mysql
volumes:
- sandbox-mysql-data:/var/lib/mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=sandbox
- MYSQL_DATABASE=sandbox
- MYSQL_USER=sandbox
- MYSQL_PASSWORD=sandbox
# Redis
cache:
image: ambientum/redis:3.2
container_name: sandbox-redis
command: --appendonly yes
volumes:
- sandbox-redis-data:/data
ports:
- "6379:6379"
# PHP (com Nginx)
# voce pode mudar de nginx para apache, basta trocar a sessao 'image'
app:
image: ambientum/php:7.0-nginx
container_name: sandbox-app
volumes:
- .:/var/www/app
ports:
- "80:8080"
links:
- postgres
- mysql
- cache
# Laravel Queues
queue:
image: ambientum/php:7.0
container_name: sandbox-queue
command: php artisan queue:listen
volumes:
- .:/var/www/app
links:
- mysql
- cache
Vue.js docker-compose.yml
Desenvolvendo um SPA com Vue.JS? Aqui está seu docker-compose.yml
:
# ATENCAO
# Nomeie os containers de acordo com seu projeto, na sessao "container_name"
version: '2'
services:
# Web server - Para livereload e desenvolvimento.
# Esse container pode ser usado para rodar comandos do npm
# ao invez de usar n npm
# utilize: docker-compose run dev [comando]
dev:
image: ambientum/node:6
container_name: sandbox-vue-dev
command: npm run dev
volumes:
- .:/var/www/app
ports:
- 8080:8080
# Container que faz uma previa do build usando o nginx
# somente útil para fazer preview do build que irǻ pra produção
production-server:
image: nginx:stable-alpine
container_name: sandbox-preview-server
volumes:
- ./dist:/usr/share/nginx/html
ports:
- 9090:80