# 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**