Browse Source

creacion de docker

main
Alfredo 2 months ago
parent
commit
371f511bff
  1. 53
      .dockerignore
  2. 225
      DOCKER_README.md
  3. 78
      Dockerfile
  4. 53
      docker-compose.yml
  5. 37
      docker/apache-config.conf
  6. 24
      docker/init-db.sql
  7. 38
      docker/init.sh
  8. 65
      instalacion/alias.conf
  9. 225
      instalacion/config.php

53
.dockerignore

@ -0,0 +1,53 @@
# Git
.git
.gitignore
# Docker
Dockerfile
docker-compose.yml
.dockerignore
# Documentation
README.md
DOCKER_README.md
*.md
# Logs
*.log
logs/
# Cache and temporary files
cache/
temp/
tmp/
# IDE files
.vscode/
.idea/
*.swp
*.swo
# OS files
.DS_Store
Thumbs.db
# Node modules (if any)
node_modules/
# Backup files
*.bak
*.backup
# Environment files
.env
.env.local
.env.production
# Composer
composer.lock
# Phinx migrations (will be handled by init scripts)
db/migrations/
# Personalizaciones (si las hay)
src/pers/

225
DOCKER_README.md

@ -0,0 +1,225 @@
# SIU-Guaraní Preinscripción 3.22.0 - Docker
Este proyecto contiene la configuración Docker para ejecutar el sistema de Preinscripción SIU-Guaraní versión 3.22.0.
## Requisitos del Sistema
- Docker
- Docker Compose
- Al menos 2GB de RAM disponible
- Puerto 8080 y 5432 disponibles
## Componentes Incluidos
- **PHP 7.4** con Apache 2.4
- **PostgreSQL 11.6** (configurado con encoding LATIN1)
- **Extensiones PHP requeridas**: curl, mbstring, pdo_pgsql, openssl, apcu, gd2
- **Composer** para gestión de dependencias
- **yui-compressor 2.4.2** para compilación de recursos
## Instalación y Configuración
### 1. Configuración Inicial
Antes de ejecutar el sistema, es necesario configurar los archivos de configuración:
```bash
# Copiar archivos de configuración de ejemplo
cp docker/config.docker.php instalacion/config.php
cp docker/alias.docker.conf instalacion/alias.conf
```
### 2. Configuración de Base de Datos
El sistema utiliza PostgreSQL con las siguientes configuraciones por defecto:
- **Base de datos principal**: `preinscripcion`
- **Base de datos de gestión**: `gestion` (opcional)
- **Usuario**: `postgres`
- **Contraseña**: `postgres123`
- **Host**: `postgres` (dentro del contenedor)
- **Puerto**: `5432`
### 3. Ejecutar el Sistema
```bash
# Construir y ejecutar los contenedores
docker-compose up -d
# Ver los logs
docker-compose logs -f
# Detener el sistema
docker-compose down
```
### 4. Acceso al Sistema
Una vez iniciado, el sistema estará disponible en:
- **Punto de acceso para alumnos**: http://localhost:8080/preinscripcion/
- **Punto de acceso para administradores**: http://localhost:8080/preinscripcion_admin/
### 5. Crear Usuario Administrador
Para crear un usuario administrador, ejecutar:
```bash
# Acceder al contenedor
docker-compose exec web bash
# Ejecutar el comando de creación de usuario
cd /var/www/html
./bin/preinscripcion user_admin
```
Seguir las instrucciones para crear el usuario administrador.
## Configuración Personalizada
### Variables de Entorno
El archivo `docker-compose.yml` incluye las siguientes variables de entorno configurables:
```yaml
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_NAME=preinscripcion
- DB_USER=postgres
- DB_PASSWORD=postgres123
```
### Configuración de Correo
Para configurar el servidor de correo, editar el archivo `instalacion/config.php` en la sección `smtp`:
```php
'smtp' => [
'from' => 'tu-email@universidad.edu.ar',
'from_name' => 'SIU-Preinscripción',
'host' => 'smtp.universidad.edu.ar',
'seguridad' => mail::SSL,
'auth' => true,
'port' => 465,
'usuario' => 'tu-usuario',
'clave' => 'tu-contraseña',
// ... más configuraciones
],
```
### Múltiples Puntos de Acceso
Para configurar múltiples puntos de acceso, editar:
1. `instalacion/alias.conf` - Agregar nuevos alias y configuraciones de Location
2. `instalacion/config.php` - Agregar nuevas configuraciones en la sección `accesos`
## Comandos Útiles
```bash
# Ver logs del contenedor web
docker-compose logs web
# Ver logs de PostgreSQL
docker-compose logs postgres
# Acceder al contenedor web
docker-compose exec web bash
# Acceder a PostgreSQL
docker-compose exec postgres psql -U postgres -d preinscripcion
# Reiniciar solo el contenedor web
docker-compose restart web
# Reconstruir los contenedores
docker-compose build --no-cache
# Limpiar volúmenes (¡CUIDADO! Esto borra todos los datos)
docker-compose down -v
```
## Desarrollo
### Compilar Recursos para Producción
```bash
# Acceder al contenedor
docker-compose exec web bash
# Compilar recursos
cd /var/www/html
./bin/preinscripcion compilar_recursos
```
### Modo Producción
Para ejecutar en modo producción:
1. Cambiar `'produccion' => true` en `instalacion/config.php`
2. Compilar recursos con el comando anterior
3. Configurar servidor de correo apropiado
4. Configurar SSL si es necesario
## Solución de Problemas
### Error de Permisos
Si hay problemas de permisos:
```bash
# Recuperar permisos correctos
docker-compose exec web chown -R www-data:www-data /var/www/html
docker-compose exec web chmod -R 755 /var/www/html
```
### Base de Datos No Inicializada
Si la base de datos no se inicializa correctamente:
```bash
# Detener contenedores
docker-compose down
# Eliminar volúmenes
docker-compose down -v
# Volver a ejecutar
docker-compose up -d
```
### Puerto en Uso
Si el puerto 8080 está en uso, cambiar en `docker-compose.yml`:
```yaml
ports:
- "8081:80" # Cambiar 8080 por 8081
```
## Estructura de Archivos
```
├── Dockerfile # Imagen PHP con Apache
├── docker-compose.yml # Configuración de servicios
├── docker/
│ ├── apache-config.conf # Configuración de Apache
│ ├── init.sh # Script de inicialización
│ ├── init-db.sql # Script adicional de BD
│ ├── config.docker.php # Configuración de ejemplo
│ └── alias.docker.conf # Alias de Apache de ejemplo
├── instalacion/ # Configuraciones del sistema
├── src/ # Código fuente de la aplicación
└── BD/ # Scripts de base de datos
```
## Soporte
Para soporte técnico, consultar la documentación oficial del SIU:
- [Documentación SIU-Guaraní](https://documentacion.siu.edu.ar/wiki/SIU-Guaraní)
- [Foro de la Comunidad SIU](http://foro.comunidad.siu.edu.ar)
## Versión
Este Docker está configurado para SIU-Guaraní Preinscripción versión **3.22.0**.

78
Dockerfile

@ -0,0 +1,78 @@
FROM php:7.4-apache
# Instalar dependencias del sistema
RUN apt-get update && apt-get install -y \
libpq-dev \
libicu-dev \
libzip-dev \
libonig-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
git \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Instalar extensiones PHP requeridas
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
pdo_pgsql \
mbstring \
curl \
openssl \
apcu \
gd \
intl \
zip
# Configurar PHP
RUN echo "max_input_vars = 2000" >> /usr/local/etc/php/conf.d/custom.ini \
&& echo "allow_url_fopen = On" >> /usr/local/etc/php/conf.d/custom.ini \
&& echo "memory_limit = 512M" >> /usr/local/etc/php/conf.d/custom.ini \
&& echo "upload_max_filesize = 50M" >> /usr/local/etc/php/conf.d/custom.ini \
&& echo "post_max_size = 50M" >> /usr/local/etc/php/conf.d/custom.ini
# Instalar Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Instalar yui-compressor
RUN curl -L -o yuicompressor-2.4.8.jar https://github.com/yui/yuicompressor/releases/download/v2.4.8/yuicompressor-2.4.8.jar \
&& mv yuicompressor-2.4.8.jar /usr/local/bin/yuicompressor.jar
# Configurar Apache
RUN a2enmod rewrite \
&& a2enmod headers \
&& a2enmod ssl
# Crear directorio de trabajo
WORKDIR /var/www/html
# Copiar archivos del proyecto
COPY . /var/www/html/
# Instalar dependencias de Composer
RUN composer install --prefer-dist --no-dev --optimize-autoloader
# Configurar permisos
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html \
&& mkdir -p /var/www/html/instalacion/temp \
&& mkdir -p /var/www/html/instalacion/log \
&& mkdir -p /var/www/html/instalacion/cache \
&& chown -R www-data:www-data /var/www/html/instalacion/temp \
&& chown -R www-data:www-data /var/www/html/instalacion/log \
&& chown -R www-data:www-data /var/www/html/instalacion/cache \
&& chmod -R 777 /var/www/html/instalacion/temp \
&& chmod -R 777 /var/www/html/instalacion/log \
&& chmod -R 777 /var/www/html/instalacion/cache
# Configurar Apache para el proyecto
COPY docker/apache-config.conf /etc/apache2/sites-available/000-default.conf
# Script de inicialización
COPY docker/init.sh /usr/local/bin/init.sh
RUN chmod +x /usr/local/bin/init.sh
EXPOSE 80
CMD ["/usr/local/bin/init.sh"]

53
docker-compose.yml

@ -0,0 +1,53 @@
services:
postgres:
image: bitnami/postgresql:11
container_name: preinscripcion_postgres
environment:
POSTGRESQL_DATABASE: preinscripcion
POSTGRESQL_USERNAME: postgres
POSTGRESQL_PASSWORD: postgres123
POSTGRESQL_ENCODING: LATIN1
POSTGRESQL_LC_COLLATE: C
POSTGRESQL_LC_CTYPE: C
volumes:
- postgres_data:/var/lib/postgresql/data
- ./BD/creacion/creacion_preinscripcion3_postgresql.sql:/docker-entrypoint-initdb.d/01-creacion.sql
- ./docker/init-db.sql:/docker-entrypoint-initdb.d/02-init.sql
ports:
- "5432:5432"
networks:
- preinscripcion_network
restart: unless-stopped
web:
build: .
container_name: preinscripcion_web
depends_on:
- postgres
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./instalacion/config.php:/var/www/html/instalacion/config.php
- ./instalacion/alias.conf:/var/www/html/instalacion/alias.conf
- ./instalacion/login.php:/var/www/html/instalacion/login.php
- apache_logs:/var/log/apache2
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_NAME=preinscripcion
- DB_USER=postgres
- DB_PASSWORD=postgres123
networks:
- preinscripcion_network
restart: unless-stopped
volumes:
postgres_data:
driver: local
apache_logs:
driver: local
networks:
preinscripcion_network:
driver: bridge

37
docker/apache-config.conf

@ -0,0 +1,37 @@
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/src/siu/www
<Directory /var/www/html/src/siu/www>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
# Configuración para Preinscripción
<Location /preinscripcion/>
# Punto de acceso para alumnos
SetEnv ID_PTO_ACCESO default
SetEnv PERFIL alumno
SetEnvIf always_match ^ ACC_ALIAS=/preinscripcion/
</Location>
<Location /preinscripcion_admin/>
# Punto de acceso para administradores
SetEnv ID_PTO_ACCESO default
SetEnv PERFIL admin
SetEnvIf always_match ^ ACC_ALIAS=/preinscripcion_admin/
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Configuración de rewrite para Preinscripción
RewriteEngine On
# Redireccionar a la aplicación principal
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</VirtualHost>

24
docker/init-db.sql

@ -0,0 +1,24 @@
-- Script de inicialización adicional para la base de datos
-- Este script se ejecuta después de la creación de la estructura
-- Crear usuario para la aplicación si no existe
DO $$
BEGIN
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'preinscripcion_user') THEN
CREATE ROLE preinscripcion_user WITH LOGIN PASSWORD 'preinscripcion123';
END IF;
END
$$;
-- Dar permisos al usuario
GRANT ALL PRIVILEGES ON DATABASE preinscripcion TO preinscripcion_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO preinscripcion_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO preinscripcion_user;
-- Configurar la base de datos para LATIN1
-- (Ya está configurado en la creación de la base de datos)
-- Insertar datos básicos si es necesario
-- (Los datos específicos se insertan a través de los scripts en BD/sql/datos/)
COMMENT ON DATABASE preinscripcion IS 'Base de datos para el sistema de Preinscripción SIU-Guaraní v3.22.0';

38
docker/init.sh

@ -0,0 +1,38 @@
#!/bin/bash
set -e
echo "Iniciando Preinscripción..."
# Esperar a que PostgreSQL esté disponible
echo "Esperando a que PostgreSQL esté disponible..."
while ! nc -z postgres 5432; do
sleep 1
done
echo "PostgreSQL está disponible"
# Configurar permisos
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
# Asegurar que los directorios de cache, log y temp existan y tengan permisos correctos
mkdir -p /var/www/html/instalacion/temp
mkdir -p /var/www/html/instalacion/log
mkdir -p /var/www/html/instalacion/cache
chown -R www-data:www-data /var/www/html/instalacion/temp
chown -R www-data:www-data /var/www/html/instalacion/log
chown -R www-data:www-data /var/www/html/instalacion/cache
chmod -R 777 /var/www/html/instalacion/temp
chmod -R 777 /var/www/html/instalacion/log
chmod -R 777 /var/www/html/instalacion/cache
# Compilar recursos si estamos en producción
if [ "$ENVIRONMENT" = "production" ]; then
echo "Compilando recursos para producción..."
cd /var/www/html
if [ -f "bin/preinscripcion" ]; then
./bin/preinscripcion compilar_recursos
fi
fi
echo "Iniciando Apache..."
exec apache2-foreground

65
instalacion/alias.conf

@ -0,0 +1,65 @@
# Configuración de alias para Docker - SIU-Preinscripción
# Este archivo define los puntos de acceso del sistema
# Alias del punto de acceso de ALUMNOS
Alias /preinscripcion/ c:\xampp74\htdocs\preinsc_colegio\src\siu\www\
# Alias del punto de acceso ADMINISTRADOR
Alias /preinscripcion_admin/ c:\xampp74\htdocs\preinsc_colegio\src\siu\www\
# Configuración del directorio navegable
<Directory "c:\xampp74\htdocs\preinsc_colegio\src\siu\www\">
Options FollowSymLinks
DirectoryIndex index.php
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
include c:\xampp74\htdocs\preinsc_colegio\instalacion\rewrite.conf
</Directory>
#### CONFIGURACION DE ACCESO DEFAULT
<Location /preinscripcion/>
# --------------------------------------------------------------------------
# PUNTO DE ACCESO: alumnos de la instalación del punto de acceso default
# --------------------------------------------------------------------------
# Nombre o ID del Punto de Acceso. No utilizar espacios.
SetEnv ID_PTO_ACCESO colegio
# Setea el perfil funcional de quienes acceden por este punto de acceso.
# NO MODIFICAR ESTE VALOR
SetEnv PERFIL alumno
# se setea de esta manera para que esta variable sea accesible desde mod_rewrite
# ATENCIÓN: el alias debe empezar con '/'
SetEnvIf always_match ^ ACC_ALIAS=/preinscripcion/
</Location>
<Location /preinscripcion_admin/>
# --------------------------------------------------------------------------
# PUNTO DE ACCESO: admin del punto de acceso default
# --------------------------------------------------------------------------
# Nombre o ID del Punto de Acceso. No utilizar espacios.
SetEnv ID_PTO_ACCESO colegio
# Setea el perfil funcional de quienes acceden por este punto de acceso.
# NO MODIFICAR ESTE VALOR
SetEnv PERFIL admin
# se setea de esta manera para que esta variable sea accesible desde mod_rewrite
# ATENCIÓN: el alias debe empezar con '/'
SetEnvIf always_match ^ ACC_ALIAS=/preinscripcion_admin/
# Si se desea restringir las IP desde las cuales acceder al panel de
# administración, hacerlo aquí.
# Require ip 192.168.0.0/16
# Require ip 10.0.0.0/8
</Location>
#### FIN CONFIGURACION DE ACCESO DEFAULT

225
instalacion/config.php

@ -0,0 +1,225 @@
<?php
use Monolog\Logger;
use SIU\Chulupi\util\log\log;
use SIU\Chulupi\util\mail;
use PHPMailer\PHPMailer\SMTP;
return [
'global' => [
/**
* Indica si el sistema está o no en un entorno de producción
*/
'produccion' => false,
/**
* Indica si el sistema utiliza personalizaciones
*/
'usar_personalizaciones' => false,
/**
* Path al directorio donde se guardarán los attachments de los mensajes
*/
'dir_attachment' => '/var/www/html/instalacion/temp',
/**
* Máximo tiempo de inactividad (en minutos)
*/
'sesion_timeout' => 30,
/**
* Máxima duración de la sesión (en minutos)
*/
'sesion_maxtime' => 120,
/**
* Sufijo del archivo de idioma
*/
'locale' => 'es',
/**
* SALT para encriptación de claves de alumnos
*/
'salt' => '9bf057558b90263987bd8f99caf2e92f7efc1a13',
/**
* SALT para cifrar claves de administradores
*/
'salt_admin' => '9bf057558b90263987bd8f99caf2e92f7efc1a13',
/**
* Configuración Google Analytics (desactivado por defecto)
*/
'google_analytics' => [
'activo' => false,
'account' => 'UA-xxx-y'
],
/**
* Configuración de logging
*/
'log' => [
'activo' => true,
'nivel' => log::NIVEL_DEBUG,
'nivel_consola' => Logger::DEBUG,
'nivel_web' => Logger::DEBUG,
'barra_dev' => true,
],
/**
* URL de ayuda para identidad de género
*/
'url_identidad_genero' => 'https://drive.google.com/file/d/1WFW6s9CAZro2mtOs1JIkBX0la6fzJP_o/view',
/**
* E-mail de ayuda
*/
'email_ayuda' => 'ayuda@universidad.edu.ar',
/**
* Configuración de captcha (desactivado por defecto en Docker)
*/
'captcha' => [
'activo' => false,
'intentos_login' => 2,
'site_key' => '',
'secret_key' => '',
'opciones' => []
],
/**
* Configuración de Proxy (desactivado)
*/
'proxy' => [
'activo' => false,
'proxy_host' => '',
'proxy_port' => 8080,
'proxy_username' => '',
'proxy_password' => ''
],
/**
* Configuración de servidor de correo (configuración básica)
*/
'smtp' => [
'from' => 'noreply@universidad.edu.ar',
'from_name' => 'SIU-Preinscripción',
'host' => 'localhost',
'seguridad' => 'ssl',
'auth' => false,
'port' => 25,
'reply_to' => 'noreply@universidad.edu.ar',
'smtp_debug' => SMTP::DEBUG_OFF,
],
/**
* Configuración de Repositorio Digital Integrado (desactivado)
*/
'rdi' => [
'config' => [
'proyecto' => 'preinscripcion',
'repositorio' => '',
'usuario' => '',
'clave' => '',
'conector' => 'CMIS_ATOM',
],
],
/**
* Logo de página
*/
'logo_pagina' => 'logo-transparente.png',
/**
* Configuración SSL
*/
'ssl' => [
'alcance' => 'none',
'redirigir_ssl' => false,
],
/**
* Tiempo para confirmación de alta de preinscripción (en horas)
*/
'tiempo_confirmacion_alta_preinscripcion' => 24,
/**
* Tiempo de expiración del código validación para recuperar contraseña
*/
'ttl_codigo_validacion' => '1 day',
/**
* Configuración de puntos de acceso
*/
'accesos' => [
'default' => [
'personalizacion' => NULL,
/**
* Información de conexión de la base de datos
*/
'database' => [
'vendor' => 'pgsql',
'dbname' => 'preinscripcion',
'host' => 'postgres',
'port' => '5432',
'pdo_user' => 'postgres',
'pdo_passwd' => 'postgres123',
],
/**
* Forma de obtener información de Guaraní
*/
'modo_consultas_g3' => 'consultas_bd',
/**
* Información de conexión de la base de datos de Guaraní
*/
'database_guarani' => [
'vendor' => 'pgsql',
'dbname' => 'gestion',
'schema' => 'public',
'host' => 'postgres',
'port' => '5432',
'pdo_user' => 'postgres',
'pdo_passwd' => 'postgres123',
],
/**
* Parámetros del sistema
*/
'clave_long_minima' => 6,
'formateo_campos' => 'libre',
'carga_turno_presentacion' => false,
'modo_impresion_comprobante' => 'ra',
/**
* Parámetros del reporte
*/
'rep_nombre_institucion' => 'UNIVERSIDAD DE EJEMPLO',
'rep_imprime_periodo_insc' => '0',
'rep_imprime_CBC' => '0',
'rep_imprime_credencial_provisoria' => '0',
'rep_encabezado_logo' => 'logo2.png',
'rep_localidad' => 'Buenos Aires',
/**
* Avisos para el comprobante
*/
'rep_avisos' => [
'La presente tiene carácter de <b>DECLARACIÓN JURADA</b>, la cual deberá ser completada personalmente por el firmante.',
],
/**
* Datos de ayuda al alumno
*/
'datos_ayuda' => [
'datos_ayuda_email' => 'ayuda@universidad.edu.ar',
'datos_ayuda_telefono' => '011-1234-5678',
'datos_ayuda_url_3w' => 'https://www.universidad.edu.ar',
'datos_ayuda_url_ayuda' => 'https://ayuda.universidad.edu.ar',
]
],
],
],
];
Loading…
Cancel
Save