Files
marco 3a50f0550e docs: add docs folder documentation and update project structure rules
Add documentation explaining the docs/ directory purpose for storing
project and container-related documents like guides, configuration notes,
and useful commands. Update RULES.md to include the new directory in the
project structure listing.
2026-09-06 19:47:36 -03:00

314 lines
8.3 KiB
Markdown
Executable File

# SyspanelLamp
> Um container Docker completo com **Ubuntu 24.04**, **Apache**, **PHP 8.3**, **PHPMyAdmin**, **Adminer**, **Redis** e escolha de banco: **MySQL 8.0** ou **MariaDB**.
**Autor:** Marco Costa & Syspanel — [www.syspanel.com.br](https://www.syspanel.com.br)
**Data de criação:** 05/09/2026
**Licença:** MIT
---
## Índice
- [Visão Geral](#visão-geral)
- [Requisitos](#requisitos)
- [Build](#build)
- [Executar](#executar)
- [Serviços e Portas](#serviços-e-portas)
- [Extensões PHP](#extensões-php)
- [Acesso](#acesso)
- [Volume de Dados](#volume-de-dados)
- [Primeiro Boot](#primeiro-boot)
- [Troubleshooting](#troubleshooting)
---
## Visão Geral
Imagem Docker completa para desenvolvimento local de aplicações PHP (WordPress, Laravel, CodeIgniter, etc.), com todos os serviços necessários já pré-configurados. Escolha entre **MySQL 8.0** ou **MariaDB** no momento do build.
### O que já vem incluído
| Componente | Versão |
|---|---|
| Ubuntu | 24.04 (Noble) |
| Apache | 2.4 |
| PHP | 8.3 (nativo do Ubuntu 24.04) |
| PHPMyAdmin | 5.2.1 |
| Adminer | 6.0.1 |
| Redis | 7.0.15 |
### Variantes de Banco de Dados
| Variante | Build Arg | Imagem Tag |
|---|---|---|
| MySQL 8.0 | `DATABASE=mysql8` | `latest-2404-php83-mysql` |
| MariaDB | `DATABASE=mariadb` | `latest-2404-php83-mariadb` |
---
## Requisitos
- Docker Engine 20.10+
---
## Build
### MySQL 8.0
```bash
docker build --no-cache \
--build-arg PHP_VERSION=8.3 \
--build-arg DATABASE=mysql8 \
--build-arg DB_ROOT_PASS=admin123 \
-t syspanel/dockersyspanellamp:latest-2404-php83-mysql \
-f ./2404/Dockerfile.mysql8 .
```
### MariaDB
```bash
docker build --no-cache \
--build-arg PHP_VERSION=8.3 \
--build-arg DATABASE=mariadb \
--build-arg DB_ROOT_PASS=admin123 \
-t syspanel/dockersyspanellamp:latest-2404-php83-mariadb \
-f ./2404/Dockerfile.mariadb .
```
### Argumentos de Build
| Argumento | Padrão | Descrição |
|---|---|---|
| `PHP_VERSION` | `8.3` | Versão do PHP (Ubuntu 24.04 inclui 8.3 nativamente) |
| `DATABASE` | `mysql8` | Tipo de banco: `mysql8` ou `mariadb` |
| `DB_ROOT_PASS` | `admin123` | Senha do usuário root/administrador do banco |
---
## Executar
### MySQL 8.0
```bash
docker run --name "syspanelampp" \
-p "16900:80" -p "16901:3306" -p "16902:6379" -p "16905:5050" \
-v ${PWD}/app:/app \
-v ${PWD}/mysql-mysql8:/var/lib/mysql \
-e DATABASE=mysql8 \
-e DB_ROOT_PASS=admin123 \
syspanel/dockersyspanellamp:latest-2404-php83-mysql
```
### MariaDB
```bash
docker run --name "syspanelampp" \
-p "16900:80" -p "16901:3306" -p "16902:6379" -p "16905:5050" \
-v ${PWD}/app:/app \
-v ${PWD}/mysql-mariadb:/var/lib/mysql \
-e DATABASE=mariadb \
-e DB_ROOT_PASS=admin123 \
syspanel/dockersyspanellamp:latest-2404-php83-mariadb
```
### Parâmetros do `docker run`
| Parâmetro | Descrição |
|---|---|
| `-p 16900:80` | Porta HTTP do Apache (http://localhost:16900) |
| `-p 16901:3306` | Porta MySQL/MariaDB |
| `-p 16902:6379` | Porta do Redis |
| `-p 16905:5050` | Porta reservada |
| `-v ${PWD}/app:/app` | Volume com o código da aplicação |
| `-v ${PWD}/mysql-mysql8:/var/lib/mysql` | Volume MySQL 8.0 |
| `-v ${PWD}/mysql-mariadb:/var/lib/mysql` | Volume MariaDB |
| `-e DATABASE` | Tipo de banco de dados (`mysql8` ou `mariadb`) |
| `-e DB_ROOT_PASS` | Senha do root do banco |
---
## Serviços e Portas
### MySQL 8.0 / MariaDB
| Serviço | URL Local | Credenciais |
|---|---|---|
| **Apache / App** | http://localhost:16900 | — |
| **PHPMyAdmin** | http://localhost:16900/phpmyadmin | root / admin123 |
| **Adminer** | http://localhost:16900/adminer | root / admin123 |
| **MySQL/MariaDB** | localhost:16901 | root / admin123 |
| **Redis** | localhost:16902 | sem senha |
---
## Extensões PHP
A imagem inclui todas as extensões necessárias para **WordPress**, **Laravel** e demais frameworks PHP:
| Extensão | Uso |
|---|---|
| `curl` | Requisições HTTP |
| `mbstring` | Manipulação de strings multibyte |
| `mysqli` / `pdo_mysql` | Conexão com MySQL/MariaDB |
| `xml` | Manipulação de XML |
| `zip` | Compactação/descompactação |
| `gd` / `imagick` | Processamento de imagens |
| `intl` | Internacionalização |
| `bcmath` | Cálculos de precisão |
| `soap` | Web Services SOAP |
| `redis` | Cliente Redis |
| `opcache` | Cache de bytecode |
| `memcached` | Cache em memória |
---
## Configuração do PHP
O arquivo `configs/php/php.ini` centraliza as configurações do PHP 8.3 aplicadas tanto ao **Apache** quanto ao **CLI**:
| Diretiva | Valor |
|---|---|
| `date.timezone` | `America/Sao_Paulo` |
| `memory_limit` | `2048M` |
| `upload_max_filesize` | `2048M` |
| `post_max_size` | `2048M` |
| `max_input_vars` | `2000` |
| `max_execution_time` | `300` |
| `max_input_time` | `300` |
Para alterar qualquer configuração, basta editar `configs/php/php.ini` e reconstruir a imagem.
---
## Acesso
### MySQL 8.0 / MariaDB (linha de comando)
```bash
docker exec -it syspanelampp mysql -u root -p
```
### Redis (CLI)
```bash
docker exec -it syspanelampp redis-cli
```
### Ver versão do PHP
```bash
docker exec -it syspanelampp php -v
```
### Ver extensões PHP instaladas
```bash
docker exec -it syspanelampp php -m
```
---
## Documentação
A pasta `docs/` é reservada para armazenar documentos diversos relativos ao projeto e aos containers criados, como guias, anotações de configuração, comandos úteis, etc.
---
## Volume de Dados
### Código da Aplicação
O diretório `${PWD}/app` no host é montado em `/app` dentro do container e também em `/var/www/html/public` (DocumentRoot do Apache). Qualquer arquivo `.htaccess` será respeitado.
### Dados do Banco
| Banco de Dados | Volume no Host | Caminho no Container |
|---|---|---|
| MySQL 8.0 | `${PWD}/mysql-mysql8` | `/var/lib/mysql` |
| MariaDB | `${PWD}/mysql-mariadb` | `/var/lib/mysql` |
> **Importante:** Os arquivos de configuração (`my.cnf`, `init.sql`) estão no diretório `configs/mysql/` do projeto e são empacotados na imagem Docker. Eles **não** ficam no volume de dados — dessa forma, trocar de variante de banco não causa conflitos de arquivos residuais.
### Bancos criados automaticamente
Na primeira inicialização, os seguintes bancos são criados:
| Banco | Usuário | Senha |
|---|---|---|
| `app` | `app` | `app123` |
| `wordpress` | `wordpress` | `wp123` |
| `laravel` | `laravel` | `laravel123` |
O usuário `root` tem a senha definida por `DB_ROOT_PASS` (padrão: `admin123`).
---
## Primeiro Boot
O sistema detecta automaticamente se é o primeiro boot e realiza as configurações iniciais:
- Define a senha do usuário `root`
- Cria os bancos de dados `app`, `wordpress` e `laravel`
- Cria os usuários correspondentes com permissões
- Executa o script de inicialização (`init.sql`)
- Inicia o Redis
- Cria os diretórios `/app` e `/var/www/html/public`
---
## Troubleshooting
### Troca de variante de banco de dados
Os volumes `${PWD}/mysql-mysql8` e `${PWD}/mysql-mariadb` são **separados** — cada variante tem seu próprio volume. Isso evita conflitos de arquivos residuais ao trocar de banco.
Se você usava o diretório `${PWD}/mysql` com MariaDB e quer usar MySQL 8.0, use o diretório `${PWD}/mysql-mysql8` ou limpe o volume antes:
```bash
rm -rf ${PWD}/mysql/*
```
O sistema também detecta automaticamente dados incompletos (sem `auto.cnf` no MySQL) e reinicializa o volume com uma mensagem de aviso no log.
### MySQL / MariaDB não inicia — permissões incorretas
Se o diretório de dados foi criado com permissões incorretas:
```bash
sudo chown -R 999:999 ${PWD}/mysql-mysql8
sudo chown -R 999:999 ${PWD}/mysql-mariadb
```
### Permissão negada no Apache
```bash
docker exec -it syspanelampp chown -R www-data:www-data /app /var/www/html/public
```
### Reconstruir a imagem do zero
```bash
# MySQL 8.0
docker build --no-cache \
--build-arg PHP_VERSION=8.3 \
--build-arg DATABASE=mysql8 \
--build-arg DB_ROOT_PASS=admin123 \
-t syspanel/dockersyspanellamp:latest-2404-php83-mysql \
-f ./2404/Dockerfile.mysql8 .
# MariaDB
docker build --no-cache \
--build-arg PHP_VERSION=8.3 \
--build-arg DATABASE=mariadb \
--build-arg DB_ROOT_PASS=admin123 \
-t syspanel/dockersyspanellamp:latest-2404-php83-mariadb \
-f ./2404/Dockerfile.mariadb .
```
---
**Desenvolvido por Marco Costa & Syspanel — www.syspanel.com.br**
**Licença MIT**