Esta es una aplicación web de Laravel para proyectos y cuestionarios de crowdsourcing.
.env.envOfrecer el código bajo licencias de código abierto incluye muchos beneficios. De ellos, los relacionados con nuestro proyecto, son:
Instalación oficial de ECAS
Instalación oficial de Scify
Las instrucciones de configuración se han dividido en dos secciones para mayor claridad:
Independientemente del método de instalación, deberá ejecutar los siguientes comandos para configurar la aplicación.
Estos comandos deben ejecutarse fuera de cualquier contenedor Docker:
sudo chown -R ` whoami ` :www-data storage
chmod 775 storage
cd storage/
find . -type f -exec chmod 664 {} ;
find . -type d -exec chmod 775 {} ;Dependiendo del método de instalación, debe ejecutar el resto de los pasos en el contenedor Docker o en su máquina local.
Nota: Si está utilizando Docker Compose, primero necesitará ingresar al contenedor PHP:
docker exec -it crowdsourcing_platform_server bashy luego ejecute el resto de los comandos.
Si está ejecutando los comandos en su máquina local, puede ejecutar los siguientes comandos directamente.
Si ha comenzado DDEV, debe ejecutar todos los comandos con prefijo con ddev exec .
.envDespués de clonar el proyecto, cree un archivo .env (debe ser una copia de .env.example):
cp .env.example .envEn el caso de una instalación que no sea Docker, deberá crear una base de datos para la aplicación.
En el caso de un entorno Docker, ingrese el contenedor crowdsourcing_platform_db y cree una base de datos llamada crowdsourcing_db_docker :
docker exec -it crowdsourcing_platform_db bashIngrese el shell mysql:
mysql -u root -pLuego, ejecute el siguiente comando mysql:
CREATE DATABASE IF NOT EXISTS crowdsourcing_db_docker;Primero deberá ingresar el contenedor DB:
docker exec -it crowdsourcing_platform_db bashSi tiene un archivo de volcado MySQL existente, asegúrese de que esté en el directorio actual e importárelo a la base de datos:
mysql -u root -p crowdsourcing_db_docker < dump.sql Luego, agregue lo siguiente al archivo .env :
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=crowdsourcing_db_docker
DB_USERNAME=root
DB_PASSWORD=rootNota: Si está utilizando Docker Compose, primero necesitará ingresar al contenedor del servidor :
docker exec -it crowdsourcing_platform_server bashphp artisan migratephp artisan db:seedIngrese el contenedor PHP (si usa Docker Compose):
docker exec -it crowdsourcing_platform_server bashLuego, ejecute los siguientes comandos:
composer install
composer dump-autoloadphp artisan key:generatenpm install
npm run dev # (if in development mode, use for live changes)
npm run build # (if in development mode)
npm run prod # (if in production mode)Por defecto, las imágenes se almacenan en APP/Storage/Public. Correr
php artisan storage:link.env Y luego persistir la configuración .env para la caché de Laravel:
php artisan config:cachePara vincular esta carpeta con el directorio público
Esta aplicación utiliza el complemento Socialite Laravel para manejar el inicio de sesión social.
Para que funcione en su entorno de desarrollo, debe asegurarse de tener claves API y secretos para Facebook y Twitter (guías aquí y aquí), y que puede acceder a https: //dev.crowdsourcing/ (observe los https) en su máquina.
Aquí puede encontrar una guía para habilitar HTTPS en su máquina local.
Básicamente, necesitas correr
openssl req -new -sha256 -newkey rsa:2048 -nodes
-keyout dev.crowdsourcing.key -x509 -days 365
-out dev.crowdsourcing.crtReferencia a los 2 archivos generados en el archivo de configuración NGINX de la aplicación. Asegúrese de cambiar el puerto a 443 como se muestra a continuación:
server {
listen 443 ssl;
server_name dev.crowdsourcing;
ssl_certificate /path/to/dev.crowdsourcing.crt;
ssl_certificate_key /path/to/dev.crowdsourcing.key;
root /var/www/crowdsourcing/public;
add_header X-Frame-Options "SAMEORIGIN" ;
add_header X-XSS-Protection "1; mode=block" ;
add_header X-Content-Type-Options "nosniff" ;
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri / /index.php? $query_string ;
}
location = /favicon.ico { access_log off ; log_not_found off ; }
location = /robots.txt { access_log off ; log_not_found off ; }
error_page 404 /index.php;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
}
location ~ /.ht {
deny all ;
}
}Además, asegúrese de reiniciar Nginx, ejecutando
sudo systemctl restart nginx Esta aplicación utiliza el complemento Spatie - Laravel SitEmap, para crear el archivo public/sitemap.xml (que se excluye de GIT), que será arrastrado por los motores de búsqueda. Para ejecutar el generador para la instalación de la aplicación actual, ejecute el comando Laravel integrado:
php artisan sitemap:generateEsta aplicación utiliza Laravel Pint para realizar el estilo de código.
Para ejecutar el Styler, ejecute:
./vendor/bin/pint --test -v # the --test will not do any changes, it will just output the changes needed
./vendor/bin/pint -v # this command will actually perform the code style changes Esta aplicación utiliza Eslint y Prettier para realizar el estilo de código.
Para ejecutar el Styler & Formatter, ejecute:
npm run lint # this command will check the code style
npm run format # this command will format the code style Este proyecto utiliza la plantilla de administración gratuita.
También hace uso de Bootstrap 4
La aplicación se puede ajustar y personalizar para cada instalación. En el archivo .env puede establecer la variable INSTALLATION_RESOURCES_DIR en consecuencia. Esta variable debe tomar un valor que represente un nombre de directorio en el directorio resourcess/views/home/partials . Por ejemplo, consulte el directorio resourcess/views/home/partials/together . Este directorio debe contener los archivos de cuchilla parcial para la instalación.
Esta parte de la documentación describe la estructura del directorio de la aplicación Laravel.
Se encuentra principalmente a los directorios y archivos personalizados que se utilizan en la aplicación. Para la estructura del directorio general de Laravel, consulte la documentación oficial.
├── app # Laravel application directory
│ ├── BusinessLogicLayer # Business Logic Layer classes (services that contain the business logic and delegate from Controllers towards the Data Access Layer)
│ ├── Http/Controllers # Controllers directory (classes that handle the HTTP requests, perform the necessary validations/operations and return the responses)
│ ├── Http/Middleware # Middleware directory (classes that handle the HTTP requests before they reach the Controllers)
│ ├── Models # Models directory (ORM classes that represent the database tables and contain the relationships between them)
│ ├── Notifications # Notifications directory (classes that handle the notifications, like emails)
│ ├── ViewModels # View Models directory (classes that contain the data that will be passed to the views)
│ ├── Repository # Repository directory (classes that handle the database operations and contain the DB/ORM queries)
│ resources # Resources directory (contains the views, assets, front-end files, and other resources)
│ ├── views # Views directory (contains the blade files that are used to render the HTML)
│ ├── assets # Assets directory (contains the front-end assets like CSS, JS, images, etc.)
│ ├── js # JavaScript files (contains the Vue.js components and other JS files)
│ ├── sass # SASS files (contains the SASS files that are compiled to CSS)
│ ├── lang # Language files (contains the language files for the translations)
La aplicación utiliza el patrón de repositorio para separar la lógica comercial de la lógica de acceso a datos.
Todas las operaciones de la base de datos son manejadas por las clases de repositorio, que contienen las consultas DB/ORM.
Estas clases se encuentran en el directorio de app/Repository , y todas extienden la clase app/Repository/Repository .
Cada clase infantil representa una tabla/entidad de la base de datos y contiene las consultas para esa tabla. Esta entidad se define en el directorio de app/Models , y la clase de repositorio infantil hace referencia en el método getModelClassName .
Por lo tanto, podemos usar los métodos base que se definen en la clase Repository , como getAll , getById , create , update , sin tener que escribir las mismas consultas en cada clase de niños. También podemos definir consultas personalizadas en las clases de niños, o anular los métodos base si es necesario.
Las clases de repositorio son utilizadas por las clases de capa de lógica empresarial, que contienen la lógica de negocios y delegan de los controladores hacia la capa de acceso de datos.
Puede encontrar más información sobre el patrón de repositorio aquí.
Asegúrese de haber borrado cualquier archivo de caché y configuración:
php artisan cache:clear
php artisan config:clearCree el archivo de base de datos de prueba:
touch storage/database_testing.sqliteDé los permisos necesarios al archivo de base de datos de prueba:
chmod 777 storage/database_testing.sqliteLuego, asegúrese de haber configurado la base de datos de prueba:
Ejecute las migraciones y sembradoras para la base de datos de prueba:
php artisan migrate:fresh --seed --env=testing --database=sqlite_testingphp artisan test Puede ejecutar las pruebas utilizando el comando php artisan test Command, que es un comando Laravel incorporado.
Y finalmente, ejecute las pruebas:
# Note that you filter the tests by using the --filter flag (without the = sign)
php artisan test --env=testing --filter {METHOD OR CLASS NAME} --coveragerun-tests.sh script También puede ejecutar las pruebas usando el script de run-tests.sh , que es un envoltorio alrededor del comando phpunit.
chmod +x run-tests.sh
./run-tests.sh Esto también puede tomar cualquier argumento (como el indicador --filter o --coverage ) que pasaría al comando phpunit.
./run-tests.sh --filter {METHOD OR CLASS NAME}o
./run-tests.sh --coverageAl usar Docker Compose, puede depurar la aplicación siguiendo estos pasos:
docker compose up para iniciar los contenedores..vscode/launch.json con el siguiente contenido: {
"version" : " 0.2.0 " ,
"configurations" : [
{
"name" : " Listen for Xdebug " ,
"type" : " php " ,
"request" : " launch " ,
"port" : 9003 ,
"pathMappings" : {
"/var/www" : " ${workspaceFolder} "
},
"log" : true
}
]
}Ahora puede comenzar a depurar su aplicación.
Para depurar las pruebas:
docker exec -it crowdsourcing_platform_server bash para ingresar el contenedor PHP.php artisan app:test --filter {METHOD OR CLASS NAME} . Por ejemplo, php artisan app:test --filter authenticatedNonAdminUserCannotAccessCreatePage . Si encuentra algún problema, consulte los siguientes pasos:
docker compose logssystemctl status nginx y systemctl status php-fpmstorage/logs/laravel.log.env tenga las credenciales de base de datos correctassystemctl status mysqlnginx -t Para contribuir a la aplicación, siga estos pasos:
git checkout -b <branch_name> .git commit -m '<commit_message>'git push origin <project_name>/<location>Este proyecto es software de origen abierto con licencia bajo la licencia Apache, versión 2.0.
Este proyecto es desarrollado por Scify y ECAS y se basa en el marco de Laravel. Scify mantiene el proyecto.
Algunas de las imágenes utilizadas en la aplicación son de Freepik.
No dude en contactar a los mantenedores del proyecto: