El framework PHP detrás de SitioYa

Documentación de Koshkil

Primeros pasos

Instalación

Requisitos

Componente Versión / detalle
PHP 8.1 o superior, con pdo_mysql (o mysqli), mbstring, gd y curl
Servidor web Apache con mod_rewrite (el proyecto trae sus .htaccess)
Base de datos MySQL / MariaDB. También hay drivers PDO para PostgreSQL, SQLite, SQL Server y Oracle
Composer Para instalar Smarty 4 y las demás dependencias de composer.json
Redis (opcional) Solo si vas a usar el motor de caché Redis

Instalación paso a paso

1. Código y dependencias

git clone <repositorio> /var/www/local.devel-misitio.com
cd /var/www/local.devel-misitio.com
composer install

webroot/index.php carga vendor/autoload.php, así que composer install es obligatorio.

2. Virtual host

La raíz del sitio (DocumentRoot) es la carpeta del proyecto, no webroot/. El .htaccess de la raíz envía todo lo que no sea un archivo existente a webroot/, y el de webroot/ lo envía a index.php.

<VirtualHost *:80>
    ServerName local.devel-misitio.com
    DocumentRoot /var/www/local.devel-misitio.com
    <Directory /var/www/local.devel-misitio.com>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

El nombre del servidor importa

Koshkil elige la configuración según $_SERVER['SERVER_NAME']. El ServerName del virtual host tiene que coincidir con el nombre de la carpeta config/domains/<dominio>/.

3. Script de instalación

app/bin/setup.sh automatiza la preparación de un dominio. Toma el nombre del dominio de la carpeta del proyecto, pide el dominio de producción y los datos de la base, y después:

  • crea tmp/cache/{models,view,plugins}, tmp/logs, tmp/sessions y app/tmp con permisos para el grupo www-data;
  • crea la base de datos y el usuario de MySQL;
  • genera config/domains/<dominio>/datasources.php.
./app/bin/setup.sh

Si preferís hacerlo a mano, creá las carpetas de tmp/ con permisos de escritura para el servidor web y el archivo de datos de conexión:

<?php
// config/domains/local.devel-misitio.com/datasources.php
$CONFIG = [
    'Database' => [
        'AutoUpdateSchema' => true,
        'master' => [
            'Driver'   => 'MySQLi',
            'Host'     => 'localhost',
            'User'     => 'usuario',
            'Password' => 'contraseña',
            'Name'     => 'misitio_db',
        ],
    ],
];

4. Configuración del dominio

Creá config/domains/<dominio>/config.php con, al menos, el theme del sitio:

<?php
$CONFIG = [
    'System'    => ['DefaultController' => 'index'],
    'Templates' => ['Theme' => 'mitheme'],
    'Web'       => ['SiteName' => 'Mi sitio'],
    'Debug'     => ['Level' => 2],
];

5. Primer arranque

Al abrir el sitio por primera vez, con AutoUpdateSchema activo, se crean las tablas del núcleo (usuarios, roles, reglas, sesiones, galería…) y se cargan sus registros iniciales, como los roles Superusuario, Administrador, Cliente y Subusuarios.

El panel de administración queda en /admin.

Después de cada despliegue

Precargá las cachés para que la primera visita no pague el costo de leer esquemas y traducciones:

./app/bin/warm-cache.sh            # todo
./app/bin/warm-cache.sh --domain=models --verbose
php app/bin/warm-cache.php --force # borra y vuelve a generar

Ver Caché, logs y depuración.

Uso desde la línea de comandos

Sin servidor web, SERVER_NAME está vacío y Koshkil lee la configuración de config/domains/cli/. Para ejecutar código del framework desde un script, definí antes las variables de servidor:

<?php
$_SERVER['SERVER_NAME']   = 'local.devel-misitio.com';
$_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__);
define('IS_CLI', true);           // no registra el manejador de errores 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();