Olá @moisesjr4
Eu vi que você tem algumas perguntas aqui no forum sobre desenvolvimento com PHP.
Este semestre estou vendo PHP, então vou postar o que funcionou pra mim.
Nas aulas é comum ver os professores utilizando XAMPP, LAMP e afins.
Contudo eu não queira instalar esses serviços todos (servidores) na minha máquina e eu não queria perder muito tempo configurando, liberando portas, definindo quais hosts terão acesso e tudo mais.
Então para fazer o desenvolvimento com PHP + MySQL acabei utilizando contêineres (Docker).
Como você está no Deepin acredito que os passos são os mesmos do Debian. Achei na internet este tutorial, porém não testei.
Com o Docker testado e funcionado eu precisei gerar uma imagem que possua o plugin PDO do PHP. Para isso crie um arquivo chamado Dockerfile
(somente esse nome e sem extensão), o mesmo ficou com o seguinte código:
# Dockerfile.
# Imagem que será utilizada como base.
FROM php:7.3.3-apache-stretch
# Instalando o plugin do MySQL.
RUN docker-php-ext-install pdo_mysql
Para criar a imagem contendo o plugin pode-se utilizar o seguinte comando:
docker build -t php-pdo-mysql:v1 .
OBS: Repare que estou executando o comando sem sudo, isso porque adicionei o meu usuário ao grupo docker. Ex: sudo usermod -aG docker $USER
. Depois do comando pode ser necessário sair da sessão e entrar novamente (ou reiniciar).
Com a imagem criada eu dei preferencia por utilizar o docker-compose para criar os serviços.
Para ver como instalar o docker-compose clique aqui.
O meu docker-compose ficou assim:
# docker-compose.yml
version: "3"
# Criando os serviços
services:
db:
# Imagem oficial do MySQL
image: mysql:5.7.24
container_name: MySQL
# Container será reiniciado somente se falhar.
restart: on-failure
# Porta onde o serviço estará disponível, onde
# porta da sua máquina : porta do container.
ports:
- "3306:3306"
# Não está sendo utilizanda percistencia dos dados.
# Quando o container é desligado os dados somem!
volumes:
# Mapeado a pasta de data e hora do host (minha máquina)
# para o container, assim ambos ficam com a mesma data e hora.
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
# Utilizando um volume para salvar os dados do MySQL.
# - mysql-data:/var/lib/mysql
# Salvando os dados do MySQL localmente.
# - ./data/db:/var/lib/mysql
# Configurando usuário, senha e database.
environment:
MYSQL_USER: NomeDoUsuario
MYSQL_PASSWORD: 123456
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: NomeDoDB
# Rede onde os containers se comunicam entre si.
networks:
- NomeDaRede
web:
# Utilizando imagem criada pelo Dockerfile.
image: php-pdo-mysql:v1
container_name: Apache
restart: on-failure
ports:
- 8080:80
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
# Montando o diretório html (local) dentro do container.
# Isso permite que se edite os arquivos localmente
# e se veja o resultado em tempo real.
- ./html:/var/www/html
depends_on:
- db
networks:
- NomeDaRede
# Rede para comunicação entre os containers.
networks:
NomeDaRede:
A minha estrutura de projeto é a seguinte:
Meus arquivos PHP e todo o código ficaram dentro da pasta html que será a pasta mapeada para dentro do contêiner PHP + Apache.
Para executar o docker-compose pode-se utilizar:
docker-compose up
No comando a cima o terminal ficará preso com o log dos contêineres.
Para acessar digite no navegador http://localhost:8080/
:
- 8080 porque definimos essa porta no docker-compose.
- localhost ou ip da sua maquina.
Para parar os contêineres utilize Ctrl + c
e depois:
docker-compose down
O docker-compose down
irá remover a rede, volumes e contêineres que foram criado.
Caso não queira deixar o terminal preso com o log pode-se utilizar:
docker-compose up -d
E para parar os contêineres utilize novamente:
docker-compose down
Para acessar os contêineres que estão em execução você pode utilizar:
docker exec -it Apache bash
ou
docker exec -it MySQL bash
Com isso a minha string de conexão do PDO ficou:
PDO("mysql:host=MySQL;dbname=NomeDoDB;port=3306", "NomeDoUsuario", "123456");
Essa foi a solução que encontrei para o meu caso e claro eu já havia utilizado Docker antes.
OBS: Vale notar que estou executando o Docker localmente no caso de se utilizar Virtualbox ou outro virtualizador eu acredito que configurações adicionais tenham que ser feitas nos arquivos .htaccess, apache2.conf, etc.