{"id":32664021,"url":"https://github.com/samsepioll01/deploy-pps-grupo3","last_synced_at":"2025-10-31T23:02:36.875Z","repository":{"id":321275314,"uuid":"1085199885","full_name":"samSepioll01/deploy-pps-grupo3","owner":"samSepioll01","description":"Security-Hardened Web API Frameworks with Docker — Group 3","archived":false,"fork":false,"pushed_at":"2025-10-28T18:36:03.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-28T20:31:18.611Z","etag":null,"topics":["api","cibersecurity","docker","dotnet","laravel"],"latest_commit_sha":null,"homepage":"","language":"Blade","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/samSepioll01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-28T18:03:44.000Z","updated_at":"2025-10-28T20:18:23.000Z","dependencies_parsed_at":"2025-10-28T20:31:20.581Z","dependency_job_id":"399dafb3-97a8-400b-a35f-24a8948977af","html_url":"https://github.com/samSepioll01/deploy-pps-grupo3","commit_stats":null,"previous_names":["samsepioll01/deploy-pps-grupo3"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/samSepioll01/deploy-pps-grupo3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samSepioll01%2Fdeploy-pps-grupo3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samSepioll01%2Fdeploy-pps-grupo3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samSepioll01%2Fdeploy-pps-grupo3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samSepioll01%2Fdeploy-pps-grupo3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samSepioll01","download_url":"https://codeload.github.com/samSepioll01/deploy-pps-grupo3/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samSepioll01%2Fdeploy-pps-grupo3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282070789,"owners_count":26608933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-31T02:00:07.401Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","cibersecurity","docker","dotnet","laravel"],"created_at":"2025-10-31T23:01:13.394Z","updated_at":"2025-10-31T23:02:36.870Z","avatar_url":"https://github.com/samSepioll01.png","language":"Blade","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐳 Puesta en Producción Segura — Grupo 3  \n### Despliegue de arquitecturas web con Docker y APIs Laravel / .NET\n\n---\n\n## 📘 Introducción\n\nEste proyecto forma parte de la asignatura **“Puesta en Producción Segura”**, perteneciente al *Curso de Especialización en Ciberseguridad en las Tecnologías de la Información (IES Rafael Alberti, Cádiz)*.\n\nEl trabajo consiste en el **despliegue seguro de arquitecturas web con Docker**, mediante la implementación de distintas **APIs REST básicas** usando varios frameworks.  \nEn este repositorio se incluyen las APIs desarrolladas por el **Grupo 3** correspondientes a los frameworks:\n\n- **Laravel (PHP 8.3)**  \n- **.NET 8 (Minimal API)**  \n\nCada API expone operaciones CRUD (`GET`, `POST`, `PUT`, `DELETE`) sobre un recurso de ejemplo:  \nun conjunto de **20 productos almacenados en un archivo JSON** (`data.json`).\n\n---\n\n## ⚙️ Requisitos previos\n\nPara ejecutar este proyecto se necesita:\n\n- **Docker Desktop** (última versión)\n- **Docker Compose v2 o superior**\n- (Opcional) **curl** o **Postman** para probar las peticiones\n\n\u003e 💡 Compatible con **Windows 11 + WSL2 (Ubuntu 24.04)**\n\n---\n\n## 🧱 Estructura del proyecto\n\n```plaintext\ndeploy-pps-grupo3/\n├── docker-compose.yml          # Orquesta ambos contenedores\n├── .gitignore\n├── README.md\n│\n├── laravel-api/\n│   ├── Dockerfile              # Configuración de Laravel en contenedor\n│   ├── composer.json           # Dependencias PHP\n│   ├── artisan\n│   ├── data.json               # Datos de ejemplo (20 productos)\n│   ├── routes/\n│   │   └── api.php             # Definición de rutas /api/items\n│   ├── app/\n│   │   └── Http/\n│   │       └── Controllers/\n│   │           └── ItemController.php\n│   └── ...\n│\n└── dotnet-api/\n    ├── Dockerfile              # Imagen multi-stage de .NET 8\n    ├── dotnet-api.csproj\n    ├── Program.cs              # Lógica CRUD minimalista\n    ├── data.json               # Datos de productos compartidos\n    └── Properties/\n        └── launchSettings.json\n\n\n\n```\n---\n\n## 🚀 Cómo ejecutar el proyecto\n\n### 1️⃣ Clonar el repositorio\n\n```bash\ngit clone git@github.com:samSepioll01/deploy-pps-grupo3.git\ncd deploy-pps-grupo3\n````\n\n### 2️⃣ Construir y levantar los contenedores\n```bash\ndocker-compose up --build\n```\n### 3️⃣ Acceder a las APIs\n| Framework | URL base                          | Descripción                |\n| --------- | --------------------------------- | -------------------------- |\n| Laravel   | `http://localhost:8000/api/items` | API CRUD en PHP/Laravel    |\n| .NET 8    | `http://localhost:8001/api/items` | API CRUD minimalista en C# |\n\n### 4️⃣ Detener los servicios\n```bash\ndocker-compose down\n```\n\n### 🧪 Endpoints de la API\n\n####   Endpoints comunes para ambas APIs\n\n| Método   | Ruta              | Descripción                     |\n| -------- | ----------------- | ------------------------------- |\n| `GET`    | `/api/items`      | Devuelve todos los productos    |\n| `GET`    | `/api/items/{id}` | Devuelve un producto concreto   |\n| `POST`   | `/api/items`      | Crea un nuevo producto          |\n| `PUT`    | `/api/items/{id}` | Actualiza un producto existente |\n| `DELETE` | `/api/items/{id}` | Elimina un producto             |\n\n\n### 🔧 Ejemplos de peticiones con curl\n\n#### Crear un producto (POST)\n\n```bash\ncurl -X POST http://localhost:8001/api/items \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"nombre\":\"Tarta de queso casera\",\"precio\":3.80}'\n```\n\n#### Actualizar un producto (PUT)\n```bash\ncurl -X PUT http://localhost:8001/api/items/5 \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"nombre\":\"Croissant de mantequilla\",\"precio\":1.90}'\n```\n\n#### Eliminar un producto (DELETE)\n\n```bash\ncurl -X DELETE http://localhost:8001/api/items/5\n```\n\n### 💡 Estos ejemplos usan la API .NET (puerto 8001), pero las mismas rutas funcionan en la API de Laravel (puerto 8000).\n\n#### 🐘 Notas sobre la API de Laravel\n\n* Basada en Laravel 11 sobre PHP 8.3.\n\n* Usa el archivo data.json para almacenar y recuperar los datos.\n\n* Incluye el controlador ItemController y rutas definidas en routes/api.php.\n\n* Servidor levantado con php artisan serve --host=0.0.0.0 --port=8000.\n\n* Imagen ligera sin vendor/ en el repositorio (se genera dentro del contenedor).\n\n### ⚙️ Notas sobre la API de .NET 8\n\n* Construida como Minimal API.\n\n* Imagen multi-stage optimizada (compilación → ejecución).\n\n* Lectura y escritura de datos desde data.json.\n\n* Expuesta en el puerto 8001.\n\n* CRUD completo (sin persistencia en base de datos).\n\n### 🧩 Docker Compose\n\n* Orquesta ambos contenedores en una red api-net.\n\n* Puedes levantar servicios por separado:\n```bash\n      docker-compose up laravel-api\n      docker-compose up dotnet-api\n```\n\n### 👨‍💻 Autores\n\nGrupo 3 — Asignatura: Puesta en Producción Segura\nIES Rafael Alberti (Cádiz) — Curso 2025\n\nAPI Laravel — desarrollada en PHP (Laravel 11)\n\nAPI .NET — desarrollada en C# (.NET 8)\n\n### 🛡️ Licencia\n\nProyecto de carácter educativo.\nDistribuido bajo la licencia MIT.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamsepioll01%2Fdeploy-pps-grupo3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamsepioll01%2Fdeploy-pps-grupo3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamsepioll01%2Fdeploy-pps-grupo3/lists"}