PHP

De TheNets Wiki
Ir para: navegação, pesquisa

Como configurar um ambiente de desenvolvimento em PHP.

O projeto abaixo considerará o desenvolvimento de um plugin para o Wordpress utilizando um banco de dados MySQL.

Preparar imagem do Docker

A imagem pode ser gerada a partir de uma receita, chamada Dockerfile. O exemplo abaixo é de uma imagem Docker com PHP e alguns módulos já instalados.

./Dockerfile

 1 FROM  php:5.6.38-apache-stretch
 2 
 3 # Custom PHP modules
 4 RUN set -x \
 5     && apt-get update \
 6     # Install system dependencies
 7     && apt-get install -y \
 8         libpq-dev bzip2 libcurl4-gnutls-dev libxml2-dev \
 9         libpng-dev libodb-mysql-dev mysql-client \
10         libc-client-dev libkrb5-dev \
11     # Install PHP essentials modules
12     && docker-php-ext-install \
13         bcmath curl dom gd \
14         gettext hash xml pdo mysqli \
15         json mbstring \
16         opcache soap \
17     # imap extension
18     && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
19     && docker-php-ext-install imap
20 
21 # Install Composer
22 RUN set -x \
23     && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
24     && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
25     && php -r "unlink('composer-setup.php');"
26     
27 ENV USER=kratos
28 ENV USER_HOME=/home/$USER
29 
30 # Add user and bash setup
31 RUN set -x \
32     # Add user
33     && mkdir -p /home/$USER \
34     && useradd --uid 1000 --shell /bin/bash $USER \
35     && chown -R 1000.1000 /home/$USER \
36     # Colorful root bash
37     && echo 'export PS1="\e[1m\e[91mGodOfWar\e[39m:\e[96m\w\e[0m# "' > /root/.bashrc \
38     # Colorful limited user bash
39     && echo 'export PS1="\e[1m\e[32m\\u\e[39m@\e[34masgard\e[39m:\e[96m\w\e[0m$ "' > $USER_HOME/.bashrc \
40     # Add composer to path
41     && echo 'export PATH=$PATH:/app/html/vendor/bin' >> $USER_HOME/.bashrc 
42 
43 # Install tools
44 RUN set -x \
45     && apt-get update \
46     && apt-get install -y nano htop wget curl zip unzip git

Criar um Makefile para auxiliar no desenvolvimento

Escrever um longo comando várias vezes pode ser trabalhoso. Uma maneira de contornar este problema é criar um conjunto de scripts ou um arquivo Makefile que agregue todos esses comandos. O exemplo abaixo possui comandos para buildar e executar os servidores MySQL e PHP:

./Makefile

 1 IMAGE_TAG=b2ml/infra-magento
 2 APP_NAME=b2ml
 3 
 4 MYSQL_PORT=3306
 5 PHPMYADMIN_PORT=8080
 6 
 7 build:
 8 	docker build -t $(IMAGE_TAG) .
 9 
10 mysql: dependencies
11 	docker rm -f mysql || true
12 	docker run -d \
13 		--name mysql \
14 		--network $(APP_NAME) \
15 		-p $(MYSQL_PORT):3306 \
16 		-v /opt/mysql:/var/lib/mysql \
17 		-e MYSQL_ROOT_PASSWORD=root \
18 		mysql:5.7.23
19 	docker rm -f phpmyadmin || true
20 	docker run -d \
21 		--name phpmyadmin \
22 		--network $(APP_NAME) \
23 		-p $(PHPMYADMIN_PORT):80 \
24 		-e PMA_HOST=mysql \
25 		phpmyadmin/phpmyadmin:edge
26 
27 shell: dependencies
28 	docker run -it --rm \
29 		--network $(APP_NAME) \
30 		-v $(PWD)/cafe.com.br:/var/www/html \
31 		-p 8888:80 \
32 		$(IMAGE_TAG) /bin/bash
33 
34 server-dev: dependencies
35 	docker run -it --rm \
36 		--network $(APP_NAME) \
37 		-v $(PWD)/cafe.com.br:/var/www/html \
38 		-p 8888:80 \
39 		$(IMAGE_TAG) php -S 0.0.0.0:80
40 
41 server-prod	: dependencies
42 	docker run -it --rm \
43 		--network $(APP_NAME) \
44 		-v $(PWD)/cafe.com.br:/var/www/html \
45 		-p 8888:80 \
46 		$(IMAGE_TAG) 
47 
48 dependencies:
49 	docker network create $(APP_NAME) || true