O framework PHP por trás do SitioYa

Documentação do Koshkil

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/sessions e app/tmp com permissão de escrita para o grupo www-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();