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.
8.3 KiB
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 Data de criação: 05/09/2026 Licença: MIT
Índice
- Visão Geral
- Requisitos
- Build
- Executar
- Serviços e Portas
- Extensões PHP
- Acesso
- Volume de Dados
- Primeiro Boot
- 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
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 .
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
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
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)
docker exec -it syspanelampp mysql -u root -p
Redis (CLI)
docker exec -it syspanelampp redis-cli
Ver versão do PHP
docker exec -it syspanelampp php -v
Ver extensões PHP instaladas
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órioconfigs/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,wordpresselaravel - Cria os usuários correspondentes com permissões
- Executa o script de inicialização (
init.sql) - Inicia o Redis
- Cria os diretórios
/appe/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:
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:
sudo chown -R 999:999 ${PWD}/mysql-mysql8
sudo chown -R 999:999 ${PWD}/mysql-mariadb
Permissão negada no Apache
docker exec -it syspanelampp chown -R www-data:www-data /app /var/www/html/public
Reconstruir a imagem do zero
# 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