DEV Community

Brayan Monteiro
Brayan Monteiro

Posted on • Edited on

10

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)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more