First Commit
This commit is contained in:
@@ -0,0 +1,307 @@
|
||||
# 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**
|
||||
Reference in New Issue
Block a user