135 lines
3.7 KiB
Markdown
135 lines
3.7 KiB
Markdown
# LOGIS PERSONNEL — Application immobilière
|
|
|
|
Site vitrine bilingue (français / anglais) de gestion et présentation de biens immobiliers, construit avec Django 4.2.
|
|
|
|
**URL de production** : https://logis.miraceti.net
|
|
**Admin** : https://logis.miraceti.net/admin/
|
|
|
|
---
|
|
|
|
## Stack technique
|
|
|
|
| Composant | Technologie |
|
|
|---|---|
|
|
| Backend | Django 4.2, Python 3.13 |
|
|
| Serveur | Gunicorn 3 workers, port 8091 |
|
|
| Proxy | nginx (SSL certbot, rate-limit) |
|
|
| Process | Supervisor |
|
|
| Images | django-resized → WEBP automatique |
|
|
| Tri drag-and-drop | django-admin-sortable2 |
|
|
| Fichiers statiques | Whitenoise |
|
|
| Config | python-decouple (.env) |
|
|
| Base de données | SQLite |
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
unset REQUESTS_CA_BUNDLE SSL_CERT_FILE CURL_CA_BUNDLE # VPS spécifique
|
|
pip install -r requirements.txt
|
|
cp .env.example .env # puis éditer .env
|
|
./manage.py migrate
|
|
./manage.py createsuperuser
|
|
./manage.py collectstatic
|
|
```
|
|
|
|
### Développement
|
|
|
|
```bash
|
|
./manage.py runserver
|
|
```
|
|
|
|
Le fichier `manage.py` utilise `logis_project.settings.development` par défaut.
|
|
|
|
### Production
|
|
|
|
```bash
|
|
# Copier les configs
|
|
sudo cp conf/nginx.conf /etc/nginx/sites-available/logis
|
|
sudo ln -sf /etc/nginx/sites-available/logis /etc/nginx/sites-enabled/logis
|
|
sudo cp conf/supervisor.conf /etc/supervisor/conf.d/logis.conf
|
|
|
|
# Créer les répertoires de logs
|
|
sudo mkdir -p /var/log/logis
|
|
sudo chown miraceti:miraceti /var/log/logis
|
|
|
|
# Permissions home (nginx doit traverser le répertoire)
|
|
chmod 711 /home/miraceti
|
|
|
|
# SSL
|
|
sudo certbot certonly --webroot -w /var/www/html -d logis.miraceti.net
|
|
|
|
# Démarrer
|
|
sudo systemctl reload nginx
|
|
sudo supervisorctl reread && sudo supervisorctl update
|
|
sudo supervisorctl start logis
|
|
```
|
|
|
|
---
|
|
|
|
## Commandes courantes
|
|
|
|
```bash
|
|
# Redémarrer l'application après modification
|
|
sudo supervisorctl restart logis
|
|
|
|
# Voir les logs
|
|
tail -f /var/log/logis/gunicorn_error.log
|
|
tail -f /var/log/logis/django.log
|
|
|
|
# Appliquer une migration
|
|
DJANGO_SETTINGS_MODULE=logis_project.settings.production ./manage.py migrate
|
|
|
|
# Régénérer les statiques
|
|
DJANGO_SETTINGS_MODULE=logis_project.settings.production ./manage.py collectstatic --no-input
|
|
|
|
# Traductions
|
|
./manage.py makemessages -l en
|
|
./manage.py compilemessages
|
|
```
|
|
|
|
---
|
|
|
|
## Variables d'environnement (.env)
|
|
|
|
| Variable | Description |
|
|
|---|---|
|
|
| `SECRET_KEY` | Clé secrète Django |
|
|
| `DEBUG` | `False` en production |
|
|
| `ALLOWED_HOSTS` | Hosts autorisés, séparés par des virgules |
|
|
| `EMAIL_HOST` | Serveur SMTP |
|
|
| `EMAIL_PORT` | Port SMTP (587 pour STARTTLS) |
|
|
| `EMAIL_HOST_USER` | Identifiant SMTP |
|
|
| `EMAIL_HOST_PASSWORD` | Mot de passe SMTP |
|
|
| `EMAIL_USE_TLS` | `True` pour STARTTLS |
|
|
| `DEFAULT_FROM_EMAIL` | Adresse expéditeur |
|
|
| `ADMIN_EMAIL` | Destinataire des formulaires de contact |
|
|
|
|
---
|
|
|
|
## Structure des répertoires
|
|
|
|
```
|
|
LOGIS/
|
|
├── conf/ # nginx, gunicorn, supervisor
|
|
├── locale/ # Traductions fr/en (.po / .mo)
|
|
├── logis_project/ # Settings, urls, wsgi
|
|
│ └── settings/
|
|
│ ├── base.py
|
|
│ ├── development.py
|
|
│ └── production.py
|
|
├── properties/ # Application principale
|
|
│ ├── models.py # Property, Room, Photo, ContactRequest…
|
|
│ ├── admin.py # Interface d'administration
|
|
│ ├── views.py # Liste, détail, contact (AJAX)
|
|
│ ├── sitemaps.py # Sitemap XML
|
|
│ └── templatetags/ # property_tags (filtres, lang_switch_url…)
|
|
├── static/ # Sources CSS / JS / images
|
|
├── staticfiles/ # Sortie collectstatic (servi par nginx)
|
|
├── templates/ # Templates HTML + emails + robots.txt
|
|
└── media/ # Uploads (photos des biens)
|
|
```
|