refactor: rename to loko; implement base template and add static assets for Loko branding

This commit is contained in:
kdeterme 2026-08-16 15:09:01 +02:00
parent 63e22c3166
commit 6de48bee77
1931 changed files with 227 additions and 220 deletions

View file

@ -25,10 +25,10 @@ venv_old/
*.sqlite3
# Django media & static
streetup/media/
streetup/private_media/
streetup/static/
streetup/django.log
loko/media/
loko/private_media/
loko/static/
loko/django.log
*.log
# VS Code / Editor config

View file

@ -1,4 +1,4 @@
name: Build and Deploy StreetUp
name: Build and Deploy Loko
on:
workflow_dispatch:
@ -13,7 +13,7 @@ on:
- production
env:
REGISTRY: ghcr.io
REGISTRY: registry.valogeo.be
IMAGE_NAME: ${{ github.repository }}
jobs:
@ -80,11 +80,11 @@ jobs:
if [[ "$ENV_CHOICE" == "production" ]]; then
echo "env=production" >> $GITHUB_OUTPUT
echo "host=${{ secrets.SSH_HOST_PROD }}" >> $GITHUB_OUTPUT
echo "path=/home/kdeterme/streetup-prod" >> $GITHUB_OUTPUT
echo "path=/home/kdeterme/loko-prod" >> $GITHUB_OUTPUT
else
echo "env=test" >> $GITHUB_OUTPUT
echo "host=${{ secrets.SSH_HOST_TEST }}" >> $GITHUB_OUTPUT
echo "path=/home/kdeterme/streetup-test" >> $GITHUB_OUTPUT
echo "path=/home/kdeterme/loko-test" >> $GITHUB_OUTPUT
fi
- name: Deploy to Server via SSH

10
.gitignore vendored
View file

@ -8,8 +8,8 @@ node_modules/
*.log
*.md
!README.md
!streetup/common/help_docs/
!streetup/common/help_docs/**/*.md
!loko/common/help_docs/
!loko/common/help_docs/**/*.md
media/
private_media/
@ -25,18 +25,18 @@ __pycache__/
*$py.class
streetup/.env
loko/.env
scripts/
carl_export/
carl_export.*
streetup/static/
loko/static/
deploy.sh
generated_passwords.txt
streetup/generated_passwords.txt
loko/generated_passwords.txt
scratch/
Caddyfile
Caddyfile.prod

View file

@ -26,7 +26,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
# Création de l'environnement conda avec les packages cartographiques et poppler
# gdal, geos, proj et poppler sont installés depuis conda-forge
RUN mamba create -n streetup-env -y -c conda-forge \
RUN mamba create -n loko-env -y -c conda-forge \
python=3.12 \
gdal \
geos \
@ -35,13 +35,13 @@ RUN mamba create -n streetup-env -y -c conda-forge \
&& mamba clean -afy
# Activation par défaut de l'environnement Conda dans le conteneur
ENV PATH=/opt/conda/envs/streetup-env/bin:$PATH
ENV CONDA_DEFAULT_ENV=streetup-env
ENV PATH=/opt/conda/envs/loko-env/bin:$PATH
ENV CONDA_DEFAULT_ENV=loko-env
# Configuration explicite des variables GIS pour GeoDjango
ENV GDAL_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgdal.so
ENV GEOS_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgeos_c.so
ENV PROJ_DATA=/opt/conda/envs/streetup-env/share/proj
ENV GDAL_LIBRARY_PATH=/opt/conda/envs/loko-env/lib/libgdal.so
ENV GEOS_LIBRARY_PATH=/opt/conda/envs/loko-env/lib/libgeos_c.so
ENV PROJ_DATA=/opt/conda/envs/loko-env/share/proj
# Argument de build pour activer l'installation des librairies IA (ultralytics, OpenCV...)
# Passer INSTALL_AI_LIBS=true dans le docker-compose pour les inclure
@ -55,50 +55,50 @@ RUN pip install --no-cache-dir -r requirements/base.txt && \
fi
# 1. Copie des répertoires volumineux et statiques (très bonne mise en cache)
COPY streetup/scripts/ /app/scripts/
COPY streetup/common/ /app/common/
COPY streetup/home/ /app/home/
COPY loko/scripts/ /app/scripts/
COPY loko/common/ /app/common/
COPY loko/home/ /app/home/
# 2. Copie des modules de l'application qui changent rarement
COPY streetup/locale/ /app/locale/
COPY streetup/templates/ /app/templates/
COPY streetup/analytics/ /app/analytics/
COPY streetup/api/ /app/api/
COPY streetup/authorizations/ /app/authorizations/
COPY streetup/contracts/ /app/contracts/
COPY streetup/documents/ /app/documents/
COPY streetup/maps/ /app/maps/
COPY streetup/notifications/ /app/notifications/
COPY streetup/projects/ /app/projects/
COPY streetup/reporting/ /app/reporting/
COPY streetup/bim/ /app/bim/
COPY streetup/sign/ /app/sign/
COPY streetup/stock/ /app/stock/
COPY loko/locale/ /app/locale/
COPY loko/templates/ /app/templates/
COPY loko/analytics/ /app/analytics/
COPY loko/api/ /app/api/
COPY loko/authorizations/ /app/authorizations/
COPY loko/contracts/ /app/contracts/
COPY loko/documents/ /app/documents/
COPY loko/maps/ /app/maps/
COPY loko/notifications/ /app/notifications/
COPY loko/projects/ /app/projects/
COPY loko/reporting/ /app/reporting/
COPY loko/bim/ /app/bim/
COPY loko/sign/ /app/sign/
COPY loko/stock/ /app/stock/
# 3. Copie des modules actifs ou modifiés fréquemment
COPY streetup/streetup/ /app/streetup/
COPY streetup/mobile/ /app/mobile/
COPY streetup/observations/ /app/observations/
COPY streetup/controls/ /app/controls/
COPY streetup/interventions/ /app/interventions/
COPY streetup/assets/ /app/assets/
COPY streetup/panoramax/ /app/panoramax/
COPY loko/loko/ /app/loko/
COPY loko/mobile/ /app/mobile/
COPY loko/observations/ /app/observations/
COPY loko/controls/ /app/controls/
COPY loko/interventions/ /app/interventions/
COPY loko/assets/ /app/assets/
COPY loko/panoramax/ /app/panoramax/
# 4. Copie des fichiers de code de road_detection (sans réimporter les modèles de détection)
COPY streetup/road_detection/__init__.py /app/road_detection/
COPY streetup/road_detection/admin.py /app/road_detection/
COPY streetup/road_detection/apps.py /app/road_detection/
COPY streetup/road_detection/detection.py /app/road_detection/
COPY streetup/road_detection/forms.py /app/road_detection/
COPY streetup/road_detection/models.py /app/road_detection/
COPY streetup/road_detection/urls.py /app/road_detection/
COPY streetup/road_detection/views.py /app/road_detection/
COPY streetup/road_detection/migrations/ /app/road_detection/migrations/
COPY streetup/road_detection/templates/ /app/road_detection/templates/
COPY loko/road_detection/__init__.py /app/road_detection/
COPY loko/road_detection/admin.py /app/road_detection/
COPY loko/road_detection/apps.py /app/road_detection/
COPY loko/road_detection/detection.py /app/road_detection/
COPY loko/road_detection/forms.py /app/road_detection/
COPY loko/road_detection/models.py /app/road_detection/
COPY loko/road_detection/urls.py /app/road_detection/
COPY loko/road_detection/views.py /app/road_detection/
COPY loko/road_detection/migrations/ /app/road_detection/migrations/
COPY loko/road_detection/templates/ /app/road_detection/templates/
# 5. Copie des fichiers Python et de configuration restants à la racine
COPY streetup/*.py /app/
COPY streetup/generated_passwords.txt* /app/
COPY loko/*.py /app/
COPY loko/generated_passwords.txt* /app/
# Exposer le port par défaut
EXPOSE 8000

View file

@ -1,6 +1,6 @@
# StreetUp — Asset Management pour l'espace public
# Loko — Asset Management pour l'espace public
**StreetUp** est une application web complète de gestion des actifs de l'espace public. Elle permet aux administrations publiques, gestionnaires d'infrastructures et prestataires de maintenance de cartographier, de suivre et de maintenir l'ensemble des équipements et infrastructures présents sur l'espace public.
**Loko** est une application web complète de gestion des actifs de l'espace public. Elle permet aux administrations publiques, gestionnaires d'infrastructures et prestataires de maintenance de cartographier, de suivre et de maintenir l'ensemble des équipements et infrastructures présents sur l'espace public.
Le projet est publié sous licence libre **EUPL (European Union Public Licence)**.
@ -17,7 +17,7 @@ Le projet est propulsé par **Django** et s'appuie sur une base de données **Po
## 🚦 Thématiques Gérées
StreetUp permet de modéliser et de localiser précisément les équipements liés à plusieurs domaines de la voirie :
Loko permet de modéliser et de localiser précisément les équipements liés à plusieurs domaines de la voirie :
* **Bâtiments** : Bâtiments publics, gestion des salles, etc.
* **Espaces extérieurs** : Plaines de jeux, terrains de sport extérieurs, etc.

View file

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documentation StreetUp</title>
<title>Documentation Loko</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
@ -112,13 +112,13 @@
</head>
<body>
<div class="container">
<h1>Documentation de l'application StreetUp</h1></p><p><h2>Table des matières</h2></p><p>1. <a href="#vue-densemble">Vue d'ensemble</a>
<h1>Documentation de l'application Loko</h1></p><p><h2>Table des matières</h2></p><p>1. <a href="#vue-densemble">Vue d'ensemble</a>
2. <a href="#architecture-de-lapplication">Architecture de l'application</a>
3. <a href="#modules-django">Modules Django</a>
4. <a href="#schéma-des-modèles-et-relations">Schéma des modèles et relations</a>
5. <a href="#détail-des-modèles-par-module">Détail des modèles par module</a>
6. <a href="#flux-de-données">Flux de données</a>
7. <a href="#diagrammes">Diagrammes</a></p><p>---</p><p><h2>Vue d'ensemble</h2></p><p><strong>StreetUp</strong> est un système complet de gestion des actifs de voirie (Street Asset Management System). L'application permet de gérer, suivre et maintenir différents types d'infrastructures de rue telles que :</p><p><ul>
7. <a href="#diagrammes">Diagrammes</a></p><p>---</p><p><h2>Vue d'ensemble</h2></p><p><strong>Loko</strong> est un système complet de gestion des actifs de voirie (Street Asset Management System). L'application permet de gérer, suivre et maintenir différents types d'infrastructures de rue telles que :</p><p><ul>
<li><strong>Feux de signalisation</strong> (Traffic Lights)</li>
<li><strong>Éclairage public</strong> (Public Lighting)</li>
<li><strong>Panneaux de signalisation</strong> (Road Signs)</li>
@ -128,8 +128,8 @@
<li><strong>Patrimoine artistique</strong> (Artworks - monuments, fontaines)</li>
<li><strong>ITS - Systèmes de transport intelligents</strong> (Intelligent Transport Systems)</li>
<li><strong>Chaussées, trottoirs et mobilier urbain</strong> (Roads)</li>
</ul></p><p>L'application est construite avec <strong>Django</strong> et utilise <strong>PostGIS</strong> pour la gestion des données géospatiales.</p><p>---</p><p><h2>Architecture de l'application</h2></p><p><pre><code class="">streetup/
├── streetup/ # Configuration principale Django
</ul></p><p>L'application est construite avec <strong>Django</strong> et utilise <strong>PostGIS</strong> pour la gestion des données géospatiales.</p><p>---</p><p><h2>Architecture de l'application</h2></p><p><pre><code class="">loko/
├── loko/ # Configuration principale Django
│ ├── settings.py # Paramètres de l'application
│ ├── urls.py # Routes principales
│ └── wsgi.py # Point d'entrée WSGI
@ -697,7 +697,7 @@
│ContractPost │◄──────┘
└─────────────┘
</code></pre></p><p>---</p><p><h2>Diagrammes</h2></p><p><h3>Architecture globale</h3></p><p><pre><code class="">┌─────────────────────────────────────────────────────────────────────────────────────┐
│ STREETUP │
│ LOKO │
│ Système de gestion des actifs de voirie │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
@ -847,7 +847,7 @@
</ul></p><p><h3>API</h3></p><p><ul>
<li>Module <code>api/</code> pour les endpoints REST</li>
<li>Support de l'interface mobile</li>
</ul></p><p>---</p><p><h2>Conclusion</h2></p><p>StreetUp est une application Django complète et modulaire qui permet de gérer l'ensemble du cycle de vie des actifs de voirie. La structure en modules permet une maintenance facile et une évolution progressive des fonctionnalités.</p><p>Les principaux points forts de l'architecture sont :</p><p>1. <strong>Modularité</strong> : Chaque domaine métier est isolé dans son propre module Django
</ul></p><p>---</p><p><h2>Conclusion</h2></p><p>Loko est une application Django complète et modulaire qui permet de gérer l'ensemble du cycle de vie des actifs de voirie. La structure en modules permet une maintenance facile et une évolution progressive des fonctionnalités.</p><p>Les principaux points forts de l'architecture sont :</p><p>1. <strong>Modularité</strong> : Chaque domaine métier est isolé dans son propre module Django
2. <strong>Extensibilité</strong> : Les classes abstraites permettent d'ajouter facilement de nouveaux types d'actifs
3. <strong>Traçabilité</strong> : Historique complet des interventions et des modifications
4. <strong>Géolocalisation</strong> : Support natif des données géospatiales avec PostGIS

View file

@ -1,21 +1,21 @@
services:
db:
image: postgis/postgis:18-3.6
container_name: streetup_core_db
container_name: loko_db
restart: unless-stopped
ports:
- "5436:5432" # Mappé sur le port 5436 de l'hôte
env_file:
- ./streetup/.env
- ./loko/.env
environment:
POSTGRES_DB: ${DB_NAME:-streetup}
POSTGRES_DB: ${DB_NAME:-loko}
POSTGRES_USER: ${DB_USER:-admin}
POSTGRES_PASSWORD: ${DB_PASSWORD:?La variable DB_PASSWORD est obligatoire dans le fichier .env}
volumes:
- streetup_core_db_data:/var/lib/postgresql
- ./streetup/scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
- loko_db_data:/var/lib/postgresql
- ./loko/scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U ${DB_USER:-admin} -d ${DB_NAME:-streetup}" ]
test: [ "CMD-SHELL", "pg_isready -U ${DB_USER:-admin} -d ${DB_NAME:-loko}" ]
interval: 10s
timeout: 5s
retries: 5
@ -27,25 +27,25 @@ services:
args:
# Mettre "true" pour installer ultralytics, OpenCV et PyTorch dans l'image
INSTALL_AI_LIBS: "false"
container_name: streetup_core_web
container_name: loko_web
restart: unless-stopped
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8003:8000" # Mappé sur le port 8003 de l'hôte
volumes:
- ./streetup:/app # Volume mount pour le hot-reload local
- streetup_core_media:/app/media
- streetup_core_private_media:/app/private_media
- ./loko:/app # Volume mount pour le hot-reload local
- loko_media:/app/media
- loko_private_media:/app/private_media
env_file:
- ./streetup/.env # Chargement du fichier d'environnement local
- ./loko/.env # Chargement du fichier d'environnement local
environment:
# Surcharges d'environnement internes au conteneur pour cibler la base du conteneur "db"
- DB_HOST=db
- DB_PORT=5432
# Surcharges des chemins GIS internes au conteneur pour écraser ceux de l'hôte issus du .env
- GDAL_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgdal.so
- GEOS_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgeos_c.so
- PROJ_DATA=/opt/conda/envs/streetup-env/share/proj
- GDAL_LIBRARY_PATH=/opt/conda/envs/loko-env/lib/libgdal.so
- GEOS_LIBRARY_PATH=/opt/conda/envs/loko-env/lib/libgeos_c.so
- PROJ_DATA=/opt/conda/envs/loko-env/share/proj
# Correction du chemin des logs pour rester dans le conteneur
- LOG_FILE_PATH=/app/django.log
depends_on:
@ -54,20 +54,20 @@ services:
caddy:
image: caddy:latest
container_name: streetup_core_caddy
container_name: loko_caddy
restart: unless-stopped
ports:
- "8083:80" # Mappé sur le port 8083 de l'hôte
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- streetup_core_caddy_data:/data
- streetup_core_caddy_config:/config
- loko_caddy_data:/data
- loko_caddy_config:/config
depends_on:
- web
volumes:
streetup_core_db_data:
streetup_core_media:
streetup_core_private_media:
streetup_core_caddy_data:
streetup_core_caddy_config:
loko_db_data:
loko_media:
loko_private_media:
loko_caddy_data:
loko_caddy_config:

View file

@ -4,7 +4,7 @@
# "command: python manage.py runserver ..." dans docker-compose.yml.
set -e
exec gunicorn streetup.wsgi:application \
exec gunicorn loko.wsgi:application \
--bind 0.0.0.0:8000 \
--workers "${GUNICORN_WORKERS:-4}" \
--threads "${GUNICORN_THREADS:-2}" \

View file

@ -11,7 +11,7 @@ ROOT_URL=
# - Pour un usage local (hors Docker) : DB_HOST=127.0.0.1, DB_PORT=5432
DB_HOST=
DB_PORT=
DB_NAME=
DB_NAME=loko
DB_USER=
DB_PASSWORD=
@ -23,9 +23,9 @@ DB_PASSWORD=
# GDAL_LIBRARY_PATH=/chemin/vers/miniconda3/envs/.../lib/libgdal.so
# GEOS_LIBRARY_PATH=/chemin/vers/miniconda3/envs/.../lib/libgeos_c.so
# - Docker (Miniforge/Conda interne - défini par défaut dans le Dockerfile) :
# GDAL_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgdal.so
# GEOS_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgeos_c.so
# PROJ_DATA=/opt/conda/envs/streetup-env/share/proj
# GDAL_LIBRARY_PATH=/opt/conda/envs/loko-env/lib/libgdal.so
# GEOS_LIBRARY_PATH=/opt/conda/envs/loko-env/lib/libgeos_c.so
# PROJ_DATA=/opt/conda/envs/loko-env/share/proj
EMAIL_HOST=
EMAIL_PORT=

Some files were not shown because too many files have changed in this diff Show more