DEV Community

Brayan Monteiro
Brayan Monteiro

Posted on • Edited on

Como criar um ambiente Docker com PHP, Apache, PostgreSQL e pgAdmin

Neste post, vamos criar um ambiente Docker completo com PHP, Apache, PostgreSQL e pgAdmin. Esses componentes são fundamentais para o desenvolvimento web e administração de bancos de dados.

Vamos começar definindo os arquivos necessários: docker-compose.yml, Dockerfile, um arquivo de configuração do Apache e um arquivo index.php para testar a conexão com o banco de dados PostgreSQL.

docker-compose.yml

version: '3' services: php: build: . ports: - "80:80" volumes: - ./src:/var/www/html postgres: image: postgres:latest restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: teste21 POSTGRES_DB: postgres ports: - "5432:5432" pgadmin: image: dpage/pgadmin4 environment: PGADMIN_DEFAULT_EMAIL: admin@example.com PGADMIN_DEFAULT_PASSWORD: teste21 ports: - "8080:80" 
Enter fullscreen mode Exit fullscreen mode

Dockerfile

# Usando a imagem base do PHP com Apache FROM php:8.3-apache # Instalando extensões PHP necessárias para o PostgreSQL RUN apt-get update \  && apt-get install -y libpq-dev \  && docker-php-ext-install pdo pdo_pgsql # Copiando o arquivo de configuração do Apache COPY apache-config.conf /etc/apache2/sites-available/000-default.conf # Ativando mod_rewrite do Apache RUN a2enmod rewrite # Reiniciando o Apache RUN service apache2 restart 
Enter fullscreen mode Exit fullscreen mode

apache-config.conf (arquivo de configuração do Apache)

<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html <Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 
Enter fullscreen mode Exit fullscreen mode

Crie o arquivo index para testar a conexão

Crie um diretório src na raiz e dentro dele crie o arquivo 'index.php'

index.php (para testar a conexão com o banco)

<?php // Dados de conexão do banco de dados $dsn = 'pgsql:host=postgres;dbname=postgres;user=postgres;password=teste21'; try { // Cria uma nova conexão PDO $pdo = new PDO($dsn); // Configura o modo de erro do PDO para lançar exceções $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Exibe uma mensagem de sucesso echo "Conexão bem-sucedida via postgre!"; } catch(PDOException $e) { // Em caso de erro, exibe a mensagem de erro die("Erro na conexão: " . $e->getMessage()); } 
Enter fullscreen mode Exit fullscreen mode

Agora que temos todos os arquivos necessários, vamos explicar o que cada um faz:

  • docker-compose.yml: Este arquivo define os serviços que serão executados no ambiente Docker. Ele especifica três serviços: PHP com Apache, PostgreSQL e pgAdmin. Cada serviço possui configurações específicas, incluindo portas mapeadas para acesso externo e variáveis de ambiente para configuração.

  • Dockerfile: Este arquivo é usado para construir a imagem do contêiner PHP com Apache. Ele instala as extensões necessárias do PHP para trabalhar com o PostgreSQL, copia o arquivo de configuração do Apache e ativa o mod_rewrite.

  • apache-config.conf: Este é o arquivo de configuração do Apache que define as configurações do servidor. Ele permite a sobreposição de configurações em diretórios específicos e habilita a reescrita de URL.

  • index.php: Este script PHP tenta se conectar ao PostgreSQL usando as credenciais fornecidas no arquivo docker-compose.yml. Se a conexão for bem-sucedida, ele exibirá a mensagem "Conexão bem-sucedida via PostgreSQL!". Se ocorrer algum erro durante a conexão, ele exibirá a mensagem de erro correspondente.

Para iniciar o ambiente Docker, basta navegar até o diretório onde esses arquivos estão localizados e executar o comando docker compose up -d. Isso irá construir as imagens, criar os contêineres e iniciar os serviços.

Após iniciar os contêineres, você poderá acessar seu aplicativo PHP em http://localhost e o pgAdmin em http://localhost:8080. Certifique-se de que nenhum outro serviço esteja utilizando as portas especificadas para evitar conflitos.

Com este ambiente Docker, você tem uma solução completa para desenvolvimento web e administração de banco de dados PostgreSQL. Você pode personalizar ainda mais conforme necessário para atender aos requisitos do seu projeto.

Top comments (0)