Brayan Monteiro
Posted on February 27, 2024
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"
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
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>
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());
}
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.
Posted on February 27, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.