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)