ControlParking en devdocker
Repo: deMedallo/ControlParking
(rama v1-docker) — Yii2 + PHP 7.4 + MySQL 8.
Jenkins job control-parking
→ git clone en /home/usrdocker/compose/control-parking/
→ docker compose build control-parking
→ levanta control-parking-mysql + control-parking
→ proxy: https://parking.localhost/
MySQL aparte del stack devdocker. ControlParking trae su propio MySQL
(
control-parking-mysql). El entorno ya incluye Postgres (principal), MySQL y MariaDB;
esta app usa una instancia dedicada para su schema init.sql.
Requisitos
- Infra devdocker OK: Postgres + MySQL + MariaDB, proxy y Jenkins (
bash scripts/devdocker.sh verify). - Tarball reciente con servicios
control-parkingen compose y pipeline homónimo (guía paso a paso). - Jenkins imagen
jenkins-con-dockercon git (paso 3 si el job falla al clonar). - ~15 min la 1.ª vez (
composer installen el build +init.sqlen MySQL dedicado).
Paso a paso
-
Actualizar devdocker (si tu copia es antigua):
cd ~/devdocker bash scripts/devdocker.sh update bash scripts/devdocker.sh sync
-
Secret — edita
~/devdocker/secrets/dev-enviroment.local.yaml(plantilla:secrets/dev-enviroment.example.yaml). Añade el bloque ControlParking y activa la ruta proxy:# --- ControlParking (job control-parking) --- CONTROL_PARKING_REPO_URL: "https://github.com/deMedallo/ControlParking.git" CONTROL_PARKING_REPO_BRANCH: "v1-docker" CONTROL_PARKING_IMAGE: "control-parking:latest" CONTROL_PARKING_APP_PORT: "42010" CONTROL_PARKING_DB_NAME: "2024_parking" CONTROL_PARKING_DB_USER: "parking" CONTROL_PARKING_DB_PASSWORD: "parking" CONTROL_PARKING_MYSQL_ROOT_PASSWORD: "root" CONTROL_PARKING_MYSQL_IMAGE: "mysql:8.0" # En PROXY_ROUTES (cambia enabled a true): - subdomain: parking upstream: control_parking_app:80 enabled: trueNo hace falta editar
compose/docker-compose.ymlmanualmente: los servicios ya vienen en la plantilla trasupdate. -
Reconstruir Jenkins (solo si git no está en el contenedor):
cd ~/devdocker bash scripts/devdocker.sh jenkins-install
-
Sync, secret y registro de jobs:
bash scripts/devdocker.sh sync bash scripts/devdocker.sh secret bash scripts/devdocker.sh register
-
Deploy de la app y del proxy:
bash scripts/devdocker.sh deploy control-parking bash scripts/devdocker.sh deploy proxy # o proxy-caddy si PROXY_ENGINE=caddy
El job clona el repo en
/home/usrdocker/compose/control-parking/, hace build y levanta MySQL + app. Singit clonemanual. -
Comprobar:
curl -s -o /dev/null -w "%{http_code}" http://localhost:42010/ curl -sk https://parking.localhost/ docker ps | grep control_parking
Accesos
| Vía | URL |
|---|---|
| Proxy HTTPS | https://parking.localhost/ |
| Puerto directo | http://localhost:42010 |
| MySQL (desde host) | No expuesto por defecto — solo red Docker interna |
| MySQL (desde otro contenedor) | control-parking-mysql:3306 — DB 2024_parking, user parking |
Arquitectura
| Contenedor | Servicio compose | Rol |
|---|---|---|
control_parking_mysql | control-parking-mysql | MySQL 8 + sql/init.sql |
control_parking_app | control-parking | Apache + Yii2 (build desde Dockerfile del repo) |
Operación
Actualizar código
Cada deploy control-parking hace git fetch + reset --hard a la rama del secret y reconstruye.
bash scripts/devdocker.sh deploy control-parking
Recrear contenedores
# Desde Jenkins UI: job control-parking → Build with Parameters → COMPOSE_ACTION=recreate # O vía API/script deploy (recreate es el default de devdocker deploy)
Desmontar
# Jenkins: COMPOSE_ACTION=down
Reset de base de datos
init.sql solo corre al crear el volumen. Para empezar de cero:
docker stop control_parking_app control_parking_mysql docker rm control_parking_app control_parking_mysql docker volume rm control_parking_mysql_data bash scripts/devdocker.sh deploy control-parking
Si algo falla
| Síntoma | Solución |
|---|---|
git: not found en Jenkins | bash scripts/devdocker.sh jenkins-install (imagen con git) |
| Build lento / timeout | Normal la 1.ª vez; el job tiene 35 min de timeout |
init.sql no aplicado | Borrar volumen control_parking_mysql_data y redeploy |
| 502 en parking.localhost | enabled: true en PROXY_ROUTES → sync + secret + deploy proxy (o proxy-caddy) |
Job control-parking no existe | bash scripts/devdocker.sh register |
| Falta Dockerfile en compose | Ejecutar deploy control-parking (el clone lo hace el pipeline) |
MySQL app: usuario parking | Distinto del db_mysql del stack (user root); no mezclar credenciales |
← Volver al catálogo de apps · Extender servicios (patrón general)