308 lines
8.1 KiB
Markdown
Executable File
308 lines
8.1 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
|
|
```
|
|
|
|
---
|
|
|
|
## 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**
|