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/sessionsyapp/tmpcon permisos para el grupowww-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
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();