- Descripción
- Estructura del Proyecto
- Requisitos Previos
- Instalación
- Configuración
- Uso
- Desarrollo
- Autenticación
- Variables de Entorno
- Resolución de Problemas Comunes
Gem Academy es una plataforma educativa que permite a los usuarios desempeñar roles tanto de profesor como de estudiante. El proyecto está construido con una arquitectura moderna utilizando Symfony en el backend y React en el frontend.
gemacademy/
├── backend/ # Backend Symfony
│ ├── config/ # Configuraciones de Symfony
│ ├── migrations/ # Migraciones de base de datos
│ ├── public/ # Punto de entrada público
│ ├── src/ # Código fuente
│ │ ├── Controller/ # Controladores de la API
│ │ ├── Entity/ # Entidades de la base de datos
│ │ ├── Repository/ # Repositorios de datos
│ │ ├── Service/ # Servicios de la aplicación
│ │ └── DataFixtures/ # Datos de prueba
│ └── tests/ # Pruebas unitarias
│
└── frontend/ # Frontend React
├── public/ # Archivos estáticos
│ ├── src/ # Código fuente
│ ├── components/ # Componentes React
│ ├── context/ # Contextos de React
│ ├── utils/ # Utilidades y helpers
│ └── styles/ # Estilos CSS
└── images/ # Imágenes y assets
- PHP 8.2 o superior
- Composer
- Node.js v22.12.0 o superior
- MySQL 10.4.32 o superior
- OpenSSL (para JWT)
- Extensión PHP para JWT
Recomiendo buscar info además en internet Enlace_al_docx
Recomiendo buscar info además en internet descargar_node
- Descarga el instalador de OpenSSL desde Win32/Win64 OpenSSL
- Ejecuta el instalador y sigue las instrucciones
- Añade la ruta de OpenSSL a las variables de entorno del sistema
sudo apt-get update
sudo apt-get install openssl
brew install openssl
- Instalar dependencias de Composer:
cd backend
composer install
- Configurar la base de datos:
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
- Cargar datos de prueba (opcional):
php bin/console doctrine:fixtures:load
- Instalar el módulo de JWT si por alguna razón no lo está:
composer require lexik/jwt-authentication-bundle
- Generar claves JWT:
php bin/console lexik:jwt:generate-keypair --skip-if-exists
Para la generación correcta de claves JWT, se requiere OpenSSL:
NOTA: Si al generar las claves JWT obtienes errores, probablemente necesites instalar o configurar OpenSSL.
- Descarga el instalador desde la página oficial de OpenSSL
- Importante: Instala la versión completa (no la Light):
Win64 OpenSSL v3.5.0 EXE | MSI (280MB)
- Sigue las instrucciones del instalador
- Para una guía visual detallada, puedes consultar este tutorial
Asegúrate de descomentar las siguientes extensiones en tu archivo php.ini
:
extension=sodium
extension=openssl
extension=zip
- Instalar dependencias:
cd frontend
npm install
Simplemente recorte el ".example" de cada .env y modifica los valores según tu entorno
NOTA: No he compartido mi clave de aplicación, por lo tanto a la hora de registrar un nuevo usuario tendréis que crear la vuestra siguiendo el formato que hay en el ejemplo, ya que sino no enviará el código de confirmación y tendrás que acceder a él manualmente desde PHPMyadmin o como podáis
-
Copiar los archivos de configuración de entorno según corresponda:
Para desarrollo:
cp .env.example .env.local
cp .env.dev.example .env.dev
Para producción:
cp .env.example .env # Modificar APP_ENV=prod en .env
-
Configurar las variables de entorno en el archivo correspondiente.
-
Para desarrollo local, ejecutar el servidor:
# Para acceder desde cualquier IP en la red local
php -S 0.0.0.0:8000 -t public
# O usando el servidor de Symfony
symfony server:start
-
Copiar el archivo de configuración correspondiente:
Para desarrollo:
cp .env.development.example .env.development
Para producción:
cp .env.production.example .env.production
-
Configurar las variables de entorno en el archivo correspondiente.
-
Para desarrollo local:
cd frontend
npm run dev
El sistema utiliza JWT (JSON Web Tokens) para la autenticación. Las rutas protegidas en el frontend están implementadas usando un contexto de autenticación personalizado.
- Backend: Utiliza el bundle
lexik/jwt-authentication-bundle
- Frontend: Implementa un sistema de rutas protegidas usando
ProtectedRoute.jsx
El proyecto utiliza diferentes archivos de configuración según el entorno:
.env
: Configuración base con valores predeterminados.env.local
: Configuración local que no se sube al repositorio.env.dev
: Configuración específica para entorno de desarrollo.env.prod
: Configuración específica para entorno de producción
.env.development
: Configuración para entorno de desarrollo.env.production
: Configuración para entorno de producción
Estos archivos contienen variables como URL de la API, URL del frontend, configuración de CORS y otras configuraciones específicas del entorno.
# Symfony
APP_ENV=dev
APP_SECRET=your_secret_here
# Database
DATABASE_URL="mysql://user:password@127.0.0.1:3306/gem_academy_app?serverVersion=10.4.32-MariaDB&charset=utf8mb4"
# JWT
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
JWT_PASSPHRASE=your_passphrase_here
# CORS
CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1|192\.168\.1\.)[0-9]+$'
# Mailer
MAILER_DSN=smtp://user:password@smtp.example.com:587
# Frontend URL
FRONTEND_URL=http://localhost:5173
# API URL
VITE_API_URL=http://localhost:8000
Si después de hacer un git pull
recibes errores 500, es posible que el nombre de la carpeta Service
haya cambiado a service
. Este es un problema común en sistemas que no distinguen mayúsculas y minúsculas (como Windows) versus sistemas que sí lo hacen (como Linux).
Solución:
- Verificar si la carpeta
src/service
existe en lugar desrc/Service
:
ls ./backend/src
- Si la carpeta está en minúscula, renombrarla:
# En Windows
mv ./backend/src/service ./backend/src/Service_temp
mv ./backend/src/Service_temp ./backend/src/Service
# En Linux/macOS
mv ./backend/src/service ./backend/src/Service
- Asegurarse de que Git registre el cambio:
git config core.ignorecase false
git add ./backend/src/Service
git commit -m "Fix: Corrección del nombre de la carpeta Service"
- Crear una nueva entidad:
php bin/console make:entity
- Crear una nueva migración:
php bin/console make:migration
- Actualizar el esquema de la base de datos:
php bin/console doctrine:schema:update --force
- Ejecutar el linter:
npm run lint
- Construir para producción:
npm run build
config/packages/nelmio_cors.yaml
: Configuración de CORSconfig/packages/lexik_jwt_authentication.yaml
: Configuración de JWTconfig/routes.yaml
: Definición de rutas de la API
vite.config.js
: Configuración de Vitesrc/utils/axios.js
: Configuración de Axios para peticiones HTTP
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature
) - Commit tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE
para más detalles.