Este repositório contém projetos de exemplo desenvolvidos durante as aulas da disciplina de Desenvolvimento Backend II do 4º Semestre do Curso Superior de Tecnologia em Sistemas para Internet do IFSUL.
Autor: Prof. Gonzales
Email: gillgonzales@ifsul.edu.br
No Tópico 01 desenvolvemos um projeto web em PHP puro, moderno, de acordo com o paradigma da Orientação a Objetos e com uma arquitetura baseada em MVC (Model-View-Controller). Utiliza Docker e Docker Compose para conteinerização e gerenciamento de serviços, facilitando o desenvolvimento e a padronização do ambiente.
Crie um arquivo .env na raiz do projeto e altere os valores da variáveis de ambiente:
APP_PORT=8000
FORWARD_DB_PORT=3308
FORWARD_MYADMIN_PORT=8091
DB_DRIVER=mariadb
DB_USER=root
DB_PASS=r00t
DB_NAME=php_appDocker é uma plataforma de containerização que encapsula a aplicação e suas dependências em um container isolado, garantindo que o código funcione consistentemente em diferentes ambientes.
O arquivo compose.yaml define três serviços principais:
- Imagem Base: PHP 8.5.9 em Alpine Linux
- Porta: Acessível em
http://localhost:8000(configurável viaAPP_PORT) - Volume: Monta o diretório local em
/var/www/htmlpara sincronização de arquivos - Comando Inicial:
- Acessa o diretório de trabalho
- Executa
composer installpara instalar dependências - Inicia o servidor built-in do PHP no port 80
- Imagem: MariaDB (última versão)
- Porta: 3306 (configurável via
FORWARD_DB_PORT) - Variáveis de Ambiente:
DB_PASS: Senha do root e usuárioDB_NAME: Nome do banco de dadosDB_USER: Usuário do banco
- Volume Persistente:
vol_dbarmazena dados do MySQL - Health Check: Verifica a saúde do banco a cada 5 segundos
- Imagem: PhpMyAdmin (última versão)
- Porta: 8091 (configurável via
FORWARD_MYADMIN_PORT) - Funcionalidade: Interface web para gerenciar o banco de dados
- Acesso:
http://localhost:8091
- Rede:
app_net(tipo bridge) conecta todos os serviços - Volume:
vol_dbpersiste dados do banco de dados entre reinicializações
O Dockerfile define como a imagem Docker é construída:
FROM php:8.5.9-alpine- Base: PHP 8.5.9 em Alpine Linux (leve e seguro)
RUN apk update && apk add --no-cache \
libpq-dev \
bash \
curl \
vim \
unzip- Instala ferramentas essenciais e suporte a PostgreSQL
RUN docker-php-ext-install pdo_mysql pdo_pgsql- PDO MySQL: Suporte a banco de dados MariaDB/MySQL
- PDO PostgreSQL: Suporte a banco de dados PostgreSQL
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer- Copia Composer da imagem oficial para usar no container
WORKDIR /var/www/html
COPY . .
EXPOSE $APP_PORT- Define diretório de trabalho
- Copia arquivos da aplicação
- Expõe a porta configurada
- Docker instalado
- Docker Compose instalado
- Arquivo
.envna raiz do projeto com as variáveis:APP_PORT=8000 DB_NAME=seu_banco DB_USER=seu_usuario DB_PASS=sua_senha FORWARD_DB_PORT=3306 FORWARD_MYADMIN_PORT=8091
# Iniciar em modo foreground (vê os logs)
docker compose up
# Iniciar em background (modo daemon)
docker compose up -ddocker compose downdocker compose down -v# Todos os serviços
docker compose logs -f
# Serviço específico
docker compose logs -f app_php
docker compose logs -f app_db# Acessar shell do PHP
docker compose exec app_php bash
# Executar comando específico
docker compose exec app_php php -v- Docker Compose inicia os containers
- Container PHP:
- Instala dependências via
composer install - Executa
composer run dev(inicia servidor)
- Instala dependências via
- Container MariaDB:
- Inicializa banco de dados
- Executa health checks
- Container PhpMyAdmin:
- Conecta ao MariaDB
- Disponibiliza interface web
- Aplicação:
src/index.phpcarregaApp::init()AppCarrega variáveis.enve executa a resolução de rotasRouter::resolve()- Router processa rotas de acordo com requisições
- As rotas seguem o padrão
controller/method/param - As rotas são configuradas em
src/config/routes.php - Cada rota mapeia uma classe do tipo Controller
['produtos'=>ProdutoController::class] Controllersacessam dados viaModelse redirecionam paraViews
Após iniciar com docker compose up:
- Aplicação PHP: http://localhost:8000
- PhpMyAdmin: http://localhost:8091
- Banco de Dados: localhost:3306
- Usuário: definido em
.env - Senha: definida em
.env
- Usuário: definido em
O projeto segue o padrão Model-View-Controller, onde:
- Responsável por processar requisições e orquestrar Model e View
- Localização:
src/controllers/ - Exemplo:
ProdutoController.php- Controla operações de Produtos - Classe base:
Controller.php
Requisição HTTP → App → Route → Controller → Model (BD) → View → Resposta
Composer é o gerenciador de dependências do PHP, similar ao npm (Node.js) ou pip (Python).
Define metadados e dependências do projeto:
{
"name": "cstsi/dbe2_202602_php_mvc",
"type": "project",
"require": {
"vlucas/phpdotenv": "5.6.x-dev" // Carrega variáveis .env
},
"require-dev": {
"psy/psysh": "0.12.x-dev" // Shell interativo PHP
},
"license": "GPL-3.0-only",
"autoload": {
"psr-4": {
"CSTSI\\Dbe2\\": "src/" // Autoload PSR-4
}
},
"scripts": {
"start": "php -S 0.0.0.0:80 -t src/public" // Inicia servidor built-in
},
"config": { //Configuração de timeout, corrigi erro no container da app
"process-timeout": 0
}
}- Carrega variáveis de ambiente do arquivo
.env - Permite configuração segura de credenciais
- Inicializado em
src/core/App.php
- Shell interativo para PHP (REPL)
- Facilita debugging e testes rápidos
composer install- Instala todas as dependências definidas em
composer.json - Cria/atualiza o arquivo
composer.lock - Executado automaticamente pelo Docker ao iniciar
composer require vendor/packagecomposer require --dev vendor/packagecomposer update- Atualiza pacotes para versões mais recentes
require_once __DIR__.'/vendor/autoload.php';- Fornecido automaticamente pelo Composer
- Permite que classes sejam carregadas automaticamente pelo namespace
# Inicia servidor development
composer run start
# Acessa shell interativo
composer exec psysh- Docker e Docker Compose instalados
- Arquivo
.envcriado com variáveis -
docker compose upexecutado - Aplicação acessível em localhost:8000
- PhpMyAdmin acessível em localhost:8091
- Banco de dados funcionando (health check)
- Dependências instaladas (vendor/)