devdocker — ControlParking

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

Paso a paso

  1. Actualizar devdocker (si tu copia es antigua):
    cd ~/devdocker
    bash scripts/devdocker.sh update
    bash scripts/devdocker.sh sync
  2. 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: true

    No hace falta editar compose/docker-compose.yml manualmente: los servicios ya vienen en la plantilla tras update.

  3. Reconstruir Jenkins (solo si git no está en el contenedor):
    cd ~/devdocker
    bash scripts/devdocker.sh jenkins-install
  4. Sync, secret y registro de jobs:
    bash scripts/devdocker.sh sync
    bash scripts/devdocker.sh secret
    bash scripts/devdocker.sh register
  5. 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. Sin git clone manual.

  6. Comprobar:
    curl -s -o /dev/null -w "%{http_code}" http://localhost:42010/
    curl -sk https://parking.localhost/
    docker ps | grep control_parking

Accesos

VíaURL
Proxy HTTPShttps://parking.localhost/
Puerto directohttp://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

ContenedorServicio composeRol
control_parking_mysqlcontrol-parking-mysqlMySQL 8 + sql/init.sql
control_parking_appcontrol-parkingApache + 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íntomaSolución
git: not found en Jenkinsbash scripts/devdocker.sh jenkins-install (imagen con git)
Build lento / timeoutNormal la 1.ª vez; el job tiene 35 min de timeout
init.sql no aplicadoBorrar volumen control_parking_mysql_data y redeploy
502 en parking.localhostenabled: true en PROXY_ROUTES → sync + secret + deploy proxy (o proxy-caddy)
Job control-parking no existebash scripts/devdocker.sh register
Falta Dockerfile en composeEjecutar deploy control-parking (el clone lo hace el pipeline)
MySQL app: usuario parkingDistinto del db_mysql del stack (user root); no mezclar credenciales

← Volver al catálogo de apps · Extender servicios (patrón general)