# INSTRUCCIONES DE INSTALACIÓN

## RosarioSIS Student Information System

RosarioSIS es una aplicación web que depende de un servidor web, el lenguaje de script PHP y un servidor de base de datos PostgreSQL o MySQL/MariaDB.

Para que funcione RosarioSIS se debe primero tener el servidor web, PostgreSQL (o MySQL/MariaDB), y PHP (incluyendo las extensiones `pgsql`, `mysqli`, `gettext`, `intl`, `mbstring`, `gd`, `curl`, `xml` y `zip`) operativos. La implementación de aquellos varia con el sistema operativo así que está fuera del alcance de este breve documento de instalación.

RosarioSIS ha sido probado en:

- Windows 10 x86 con Apache 2.4.16, Postgres 9.3.6, y PHP 7.1.18
- macOS Monterey con Apache 2.4.54, Postgres 14.4, y PHP 8.0.21
- Ubuntu 14.04 con Apache 2.4.18, Postgres 9.3.10, MySQL 5.6.33 y PHP 5.5.9
- Ubuntu 20.04 con Apache 2.4.48, Postgres 12.11, y PHP 7.4.22
- Debian Bullseye con Apache 2.4.54, Postgres 13.7, MariaDB 10.5.15 y PHP 8.1.4
- CentOS 8.2 con Apache 2.4.37, Postgres 9.6.10, y PHP 7.2.24
- Shared hosting con cPanel, nginx, Postgres 8.4, y PHP 5.6.27
- a traves de Mozilla Firefox y Google Chrome
- con BrowserStack para la compatibilidad de navegadores (no compatible con Internet Explorer)

Requerimientos mínimos: **PHP 5.5.9** y **PostgreSQL 8.4** o **MySQL 5.6**/MariaDB

Instrucciones de instalación:

- [**Windows**](https://gitlab.com/francoisjacquet/rosariosis/wikis/Instalar-RosarioSIS-en-Windows)
- [**Mac**](https://gitlab.com/francoisjacquet/rosariosis/-/wikis/How-to-install-RosarioSIS-on-Mac-(macOS,-OS-X)) (en inglés)
- [**cPanel**](https://gitlab.com/francoisjacquet/rosariosis/wikis/How-to-install-RosarioSIS-on-cPanel) (en inglés)
- [**Softaculous**](https://gitlab.com/francoisjacquet/rosariosis/-/wikis/How-to-install-RosarioSIS-with-Softaculous) (en inglés)
- [**Docker**](https://github.com/francoisjacquet/docker-rosariosis) (en inglés)
- **Ubuntu** (o cualquier distribución Linux basada en Debian), ver abajo


Instalar el paquete
-------------------

Descomprima el archivo de RosarioSIS, o clona el repositorio usando git en un directorio accesible con el navegador. Edita el archivo `config.inc.sample.php` para definir las variables de configuración apropiadas, y renombralo `config.inc.php`.

- `$DatabaseType` Tipo del servidor de base de datos: mysql o postgresql.
- `$DatabaseServer` Nombre o dirección IP del servidor de base de datos.
- `$DatabaseUsername` Nombre de usuario para conectarse a la base de datos.
- `$DatabasePassword` Contraseña para conectarse a la base de datos.
- `$DatabaseName` Nombre de la base de datos.

- `$DatabaseDumpPath` Camino completo hacia el utilitario de exportación de base de datos, pg_dump (PostgreSQL) o mysqldump (MySQL).
- `$wkhtmltopdfPath` Camino completo hacia el utilitario de generación de PDF, wkhtmltopdf.

- `$DefaultSyear` Año escolar por defecto. Solo cambiar después de haber corrido el programa _Transferir_.
- `$RosarioNotifyAddress` Dirección de email para las notificaciones (nuevo administrador, nuevo estudiante / usuario, nueva inscripción).
- `$RosarioLocales` Lista separada por comas de códigos de lenguajes. Ver la carpeta `locale/` para los códigos disponibles.

#### Variables opcionales

- `$DatabasePort` Número de puerto para acceder a la base de datos. Por defecto: 5432 para PostgreSQL y 3306 para MySQL.
- `$RosarioPath` Camino completo hacia la instalación de RosarioSIS.
- `$StudentPicturesPath` Camino hacia las fotos de los estudiantes.
- `$UserPicturesPath` Camino hacia las fotos de los usuarios.
- `$PortalNotesFilesPath` Camino hacia los archivos adjuntos a las notas del portal.
- `$AssignmentsFilesPath` Camino hacia los archivos de las tareas de los estudiantes.
- `$FS_IconsPath` Camino hacia los iconos del servicio de comida.
- `$FileUploadsPath` Camino hacia los archivos subidos.
- `$LocalePath` Camino hacia los lenguajes. Reinicie Apache después de cambiarlo.
- `$PNGQuantPath` Camino hacia [PNGQuant](https://pngquant.org/) (compresión de las imagenes PNG).
- `$RosarioErrorsAddress` Dirección de email para los errores (PHP fatal, base de datos, intentos de pirateo).
- `$Timezone` Zona horaria usada por la funciones de fecha y tiempo. [Listado de zonas horarias admitidas](http://php.net/manual/es/timezones.php).
- `$ETagCache` Pasar a `false` para desactivar el [caché ETag](https://es.wikipedia.org/wiki/HTTP_ETag) y desactivar el caché de sesión "privada". Ver [Sesiones y seguridad](https://secure.php.net/manual/es/session.security.php).
- `define( 'ROSARIO_POST_MAX_SIZE_LIMIT', 16 * 1024 * 1024 );` Limitar el tamaño de `$_POST` (16MB por defecto). Detalles [acá](https://gitlab.com/francoisjacquet/rosariosis/-/blob/mobile/Warehouse.php#L290).
- `define( 'ROSARIO_DEBUG', true );` Modo debug activado.
- `define( 'ROSARIO_DISABLE_ADDON_UPLOAD', true );` Desactivar el upload de complementos (módulos y plugins).
- `define( 'ROSARIO_DISABLE_ADDON_DELETE', true );` Desactivar la posibilidad de eliminar complementos (modules & plugins).


Crear la base de datos
----------------------

Ahora, está listo para configurar la base de datos de RosarioSIS. Si tiene acceso al símbolo del sistema de su servidor, abra una ventana del terminal, y sigua estas instrucciones.

Las instrucciones siguientes aplican para **PostgreSQL** (ver abajo para MySQL):

1. Entra a PostgreSQL con el usuario postgres:
```bash
server$ sudo -u postgres psql
```
2. Crea el usuario rosariosis:
```bash
postgres=# CREATE USER rosariosis_user WITH PASSWORD 'rosariosis_user_password';
```
3. Crea la base de datos rosariosis:
```bash
postgres=# CREATE DATABASE rosariosis_db WITH ENCODING 'UTF8' OWNER rosariosis_user;
```
4. Salga de PostgreSQL:
```bash
postgres=# \q
```

También, el archivo [`pg_hba.conf`](http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html) puede ser editado para activar la conexión de usuarios con contraseña (`md5`):
```
# "local" is for Unix domain socket connections only
local   all             all                                     md5
```

---------------------------------------------

Las instrucciones siguientes aplican para **MySQL** (RosarioSIS versión 10 o superior):

1. Entra a MySQL con el usuario root:
```bash
server$ sudo mysql
```
o
```bash
server$ mysql -u root -p
```
2. Permitir la creación de funciones:
```bash
mysql> SET GLOBAL log_bin_trust_function_creators=1;
```
3. Crea el usuario rosariosis:
```bash
mysql> CREATE USER 'rosariosis_user'@'localhost' IDENTIFIED BY 'rosariosis_user_password';
```
4. Crea la base de datos rosariosis:
```bash
mysql> CREATE DATABASE rosariosis_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
mysql> GRANT ALL PRIVILEGES ON rosariosis_db.* TO 'rosariosis_user'@'localhost';
```
5. Salga de MySQL:
```bash
mysql> \q
```


Instalar la base de datos
-------------------------

Para instalar la base de datos, apunte su navegador a: `http://sudominio.com/REPERTORIO_DE_INSTALACION/InstallDatabase.php`

Es todo!... ahora, apunte su navegador a: `http://sudominio.com/REPERTORIO_DE_INSTALACION/index.php`

y entra con el nombre de usuario 'admin' y la contraseña 'admin'. Con esta cuenta, podrá agregar nuevos usuarios, y modificar o suprimir los tres usuarios de ejemplo.


Problemas
---------

Para ayudarlo a detectar problemas de instalación, apunte su navegador a: `http://sudominio.com/REPERTORIO_DE_INSTALACION/diagnostic.php`


Extensiones PHP
---------------

Instrucciones de instalación para Ubuntu 20.04:
```bash
server$ sudo apt-get install php-pgsql php-mysql gettext php-intl php-mbstring php-gd php-curl php-xmlrpc php-xml php-zip
```


php.ini
-------

Configuración PHP recomendada. Editar el archivo [`php.ini`](https://www.php.net/manual/es/ini.list.php) como sigue:
```
; Maximum time in seconds a PHP script is allowed to run
max_execution_time = 240

; Maximum accepted input variables ($_GET, $_POST)
; 4000 allows submitting lists of up to 1000 elements, each with multiple inputs
max_input_vars = 4000

; Maximum memory (RAM) allocated to a PHP script
memory_limit = 512M

; Session timeout: 1 hour
session.gc_maxlifetime = 3600

; Maximum allowed size for uploaded files
upload_max_filesize = 50M

; Must be greater than or equal to upload_max_filesize
post_max_size = 51M
```
Reiniciar PHP y Apache.


Otros lenguajes
---------------

Instrucciones de instalación para Ubuntu 20.04. Instalar el lenguaje español:
```bash
server$ sudo apt-get install language-pack-es
```
Luego reinicie el servidor.


[wkhtmltopdf](http://wkhtmltopdf.org/)
--------------------------------------

Instrucciones de instalación para Ubuntu 20.04 (Focal):
```bash
server$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
server$ sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb
```

Definir el camino en el archivo `config.inc.php`:
    `$wkhtmltopdfPath = '/usr/local/bin/wkhtmltopdf';`


Envio de email
--------------

Instrucciones de instalación para Ubuntu 20.04. Activar la función PHP `mail()`:
```bash
server$ sudo apt-get install sendmail
```


Configuración adicional
-----------------------

[Guía de Configuración Rápida](https://www.rosariosis.org/es/quick-setup-guide/)

[Asegurar RosarioSIS](https://gitlab.com/francoisjacquet/rosariosis/-/wikis/Secure-RosarioSIS)
