Primeiros passos
Instalação
Requisitos
| Componente | Versão / detalhe |
|---|---|
| PHP | 8.1 ou superior, com pdo_mysql (ou mysqli), mbstring, gd e curl |
| Servidor web | Apache com mod_rewrite (o projeto traz seus .htaccess) |
| Banco de dados | MySQL / MariaDB. Também há drivers PDO para PostgreSQL, SQLite, SQL Server e Oracle |
| Composer | Para instalar o Smarty 4 e as demais dependências de composer.json |
| Redis (opcional) | Somente se for usar o motor de cache Redis |
Instalação passo a passo
1. Código e dependências
git clone <repositorio> /var/www/local.devel-meusite.com
cd /var/www/local.devel-meusite.com
composer install
webroot/index.php carrega vendor/autoload.php, portanto composer install é obrigatório.
2. Virtual host
A raiz do site (DocumentRoot) é a pasta do projeto, não webroot/. O .htaccess da raiz envia tudo o que não for um arquivo existente para webroot/, e o de webroot/ envia para index.php.
<VirtualHost *:80>
ServerName local.devel-meusite.com
DocumentRoot /var/www/local.devel-meusite.com
<Directory /var/www/local.devel-meusite.com>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
O nome do servidor importa
O Koshkil escolhe a configuração de acordo com $_SERVER['SERVER_NAME']. O ServerName do virtual host precisa coincidir com o nome da pasta config/domains/<domínio>/.
3. Script de instalação
app/bin/setup.sh automatiza a preparação de um domínio. Ele pega o nome do domínio da pasta do projeto, pede o domínio de produção e os dados do banco e, em seguida:
- cria
tmp/cache/{models,view,plugins},tmp/logs,tmp/sessionseapp/tmpcom permissão de escrita para o grupowww-data; - cria o banco de dados e o usuário do MySQL;
- gera
config/domains/<domínio>/datasources.php.
./app/bin/setup.sh
Para fazer manualmente, crie as pastas de tmp/ com permissão de escrita para o servidor web e o arquivo de conexão:
<?php
// config/domains/local.devel-meusite.com/datasources.php
$CONFIG = [
'Database' => [
'AutoUpdateSchema' => true,
'master' => [
'Driver' => 'MySQLi',
'Host' => 'localhost',
'User' => 'usuario',
'Password' => 'senha',
'Name' => 'meusite_db',
],
],
];
4. Configuração do domínio
Crie config/domains/<domínio>/config.php com, pelo menos, o tema do site:
<?php
$CONFIG = [
'System' => ['DefaultController' => 'index'],
'Templates' => ['Theme' => 'meutema'],
'Web' => ['SiteName' => 'Meu site'],
'Debug' => ['Level' => 2],
];
5. Primeira execução
Na primeira vez que o site é aberto, com AutoUpdateSchema ativo, as tabelas do núcleo (usuários, papéis, regras, sessões, galeria…) são criadas e preenchidas com seus registros iniciais, como os papéis Superusuario, Administrador, Cliente e Subusuarios.
O painel de administração fica em /admin.
Depois de cada deploy
Pré-carregue os caches para que a primeira visita não pague o custo de ler esquemas e traduções:
./app/bin/warm-cache.sh # tudo
./app/bin/warm-cache.sh --domain=models --verbose
php app/bin/warm-cache.php --force # apaga e gera de novo
Veja Cache, logs e depuração.
Uso pela linha de comando
Sem servidor web, SERVER_NAME fica vazio e o Koshkil lê a configuração de config/domains/cli/. Para executar código do framework a partir de um script, defina antes as variáveis de servidor:
<?php
$_SERVER['SERVER_NAME'] = 'local.devel-meusite.com';
$_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__);
define('IS_CLI', true); // não registra o manipulador de erros HTML
require_once __DIR__ . '/core/Koshkil.php';
require_once __DIR__ . '/vendor/autoload.php';
Koshkil::getDatabase();
Koshkil::UsesModel('usuarios');
echo TMUsuarios::where('usr_estado', '1')->get()->count();