8.1 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
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