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.
314 lines
8.3 KiB
Markdown
Executable File
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**
|