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.
7.2 KiB
Executable File
RULES.md — Regras de Desenvolvimento para AI Coder
Este arquivo define as regras que todo agente de IA (Kilo, GPT, Claude, etc.) deve seguir ao desenvolver código neste projeto SyspanelLamp.
1. Autor e Licença
- Autor: Marco Costa & Syspanel — www.syspanel.com.br
- Data de criação: 05/09/2026
- Licença: MIT
Todo arquivo criado ou modificado deve conter o cabeçalho de licença MIT com a atribuição ao autor quando aplicável.
2. Estrutura de Diretórios
dockersyspanellamp/
├── src/
│ ├── 2404/
│ │ ├── Dockerfile.mysql8 ← Imagem Docker MySQL 8.0 (Ubuntu 24.04)
│ │ └── Dockerfile.mariadb ← Imagem Docker MariaDB (Ubuntu 24.04)
│ ├── configs/
│ │ ├── apache/
│ │ │ ├── apache_default ← VirtualHost Apache
│ │ │ └── apache_envvars.sh ← Variáveis de ambiente do Apache
│ │ ├── mysql/
│ │ │ ├── my.cnf ← Configurações do MySQL/MariaDB
│ │ │ └── init.sql ← Script de inicialização MySQL/MariaDB
│ │ ├── php/
│ │ │ └── php.ini ← Configurações do PHP 8.3
│ │ └── scripts/
│ │ ├── entrypoint-mysql.sh ← Entrypoint MySQL 8.0
│ │ ├── entrypoint-mariadb.sh ← Entrypoint MariaDB
│ │ └── entrypoint.sh ← Entrypoint genérico (auto-detecção)
│ ├── README.md
│ ├── LICENSE
│ └── RULES.md
│
├── app/ ← Volume bind-mount do código da aplicação
├── docs/ ← Documentos do projeto e dos containers
├── mysql/ ← Volume bind-mount dos dados do MySQL/MariaDB
├── mysql-mysql8/ ← Volume bind-mount dos dados MySQL 8.0
├── mysql-mariadb/ ← Volume bind-mount dos dados MariaDB
Nota: Cada variante de banco tem seu próprio Dockerfile e entrypoint. A variável
DATABASEé usada como build-arg e variável de ambiente para o entrypoint. Cada imagem já contém apenas o banco correspondente. Todos os arquivos de configuração (Apache, MySQL/MariaDB, PHP e scripts) estão centralizados emsrc/configs/.
3. Regras do Dockerfile (todas as variantes)
- Base image: Sempre usar
ubuntu:24.04. - PHP version: Deve ser controlada por
ARG PHP_VERSION. Nunca hardcodear. - PHP source: Ubuntu 24.04 (Noble) inclui PHP 8.3 nativamente. Não usar PPAs de terceiros.
- MySQL 8.0: Usar repositório oficial da Oracle (
repo.mysql.com), versão 8.0. - MariaDB: Usar repositório nativo do Ubuntu 24.04 (
mariadb-server,mariadb-client). - Root password DB: Controlada por
ARG DB_ROOT_PASS. - MySQL data dir: Deve ser limpo (
rm -rf /var/lib/mysql/*) no final do Dockerfile para garantir que o entrypoint sempre detecta primeiro boot. - PHPMyAdmin: Usar versão 5.2.1 oficial do phpmyadmin.net.
- Adminer: Usar versão 6.0.1 oficial do adminer.org (GitHub releases).
- Nunca incluir dados sensíveis hardcoded (senhas, chaves de API).
- O
CMDfinal sempre deve serapache2ctl -D FOREGROUND. - Os Dockerfiles devem ser mantidos idênticos exceto pela seção de instalação do banco de dados, entrypoint e arquivos de configuração copiados.
4. Regras do Apache
- DocumentRoot:
/var/www/html/public - AllowOverride All: Sempre habilitado para funcionar com
.htaccess(WordPress, Laravel, etc.) - Alias /phpmyadmin: Aponta para
/var/www/phpmyadmin - Alias /adminer: Aponta para
/var/www/adminer - Módulos obrigatórios habilitados:
rewrite,headers,php8.3
5. Regras do MySQL / MariaDB
- Porta: 3306
- Charset padrão:
utf8mb4com collationutf8mb4_general_ci - Socket:
/var/run/mysqld/mysqld.sock - Diretório de dados:
/var/lib/mysql - Detecção de primeiro boot: Verificar se
/var/lib/mysql/mysql/systemexiste antes de inicializar. - Init script:
/docker-entrypoint-initdb.d/init.sql— executado apenas na primeira inicialização - Bancos criados automaticamente:
app,wordpress,laravel - Usuários criados automaticamente:
app,wordpress,laravel
6. Regras do Entrypoint
Comportamento Geral
- O entrypoint deve iniciar o banco de dados antes do Apache.
- Deve aguardar o banco ficar disponível antes de prosseguir.
- Deve suportar a variável
DATABASEpara especificar o tipo de banco (mysql8oumariadb). - Se
DATABASEnão for fornecida, deve detectar automaticamente pelo diretório de dados. - Deve definir a senha do root no primeiro boot.
- Deve executar o script
init.sqlapenas no primeiro boot. - Deve iniciar o Redis (
redis-server --daemonize yes). - Deve criar
/appe/var/www/html/publicse não existirem. - Deve usar
exec "$@"no final para passar o sinal correto para o Apache.
MySQL 8.0 (entrypoint-mysql.sh)
- Usar
mysqld --initialize-insecurepara inicializar o diretório de dados. - Usar
mysqladmin pingpara verificar disponibilidade. - Usar
ALTER USER 'root'@'localhost' IDENTIFIED BYpara definir a senha.
MariaDB (entrypoint-mariadb.sh)
- Usar
mariadb-install-dbpara inicializar o diretório de dados. - Usar
mysqladmin pingpara verificar disponibilidade. - Usar
ALTER USER 'root'@'localhost' IDENTIFIED BYpara definir a senha.
Entrypoint genérico (entrypoint.sh)
- Suporta
mysql8emariadbcomo valores deDATABASE.
7. Regras dos Arquivos de Configuração
- Arquivos de configuração (
.cnf,.conf,.sh) não devem conter comentários desnecessários. - Usar tabulação ou 4 espaços para indentação — manter consistência com o estilo existente.
- Não remover funcionalidades existentes sem justificativa.
- Toda alteração deve ser compatível com versões anteriores sempre que possível.
8. Regras de Extensões PHP
As seguintes extensões são obrigatórias e nunca devem ser removidas:
curl, mbstring, mysql, pdo, pdo_mysql,
xml, zip, gd, imagick, intl, bcmath, soap, redis,
opcache, readline, memcached
Adições de novas extensões são permitidas, desde que justificadas.
9. Regras de Portas Padrão
| Porta Interna | Porta Externa Padrão | Serviço |
|---|---|---|
| 80 | 16900 | Apache / HTTP |
| 3306 | 16901 | MySQL / MariaDB |
| 6379 | 16902 | Redis |
| 5050 | 16905 | Adminer |
10. Convenção de Commits (se usar Git)
<tipo>(<escopo>): <descrição>
Tipos:
feat: nova funcionalidade
fix: correção de bug
docs: alteração em documentação
build: alteração no Dockerfile / build system
refactor: refatoração sem mudança de comportamento
chore: tarefas de manutenção geral
Exemplo: feat(docker): adiciona variante MariaDB
11. Regras Gerais
- Nunca usar
sudodentro do Dockerfile — rodar como root é o padrão no build. - Sempre usar
--no-install-recommendsnoapt-get install. - Sempre limpar
apt cacheapós instalação (rm -rf /var/lib/apt/lists/*). - Nunca expor senhas em logs ou mensagens de erro.
- O fuso horário padrão é
America/Sao_Paulo. - O idioma padrão é
en_US.UTF-8com suporte apt_BR.UTF-8.