diff --git a/.env.docker b/.env.docker
new file mode 100644
index 0000000..e0e7fa3
--- /dev/null
+++ b/.env.docker
@@ -0,0 +1,4 @@
+# Variables pour l'interpolation docker compose (${POSTGRES_*})
+POSTGRES_DB=jooldb
+POSTGRES_USER=jooluser
+POSTGRES_PASSWORD=localdev_password
diff --git a/Dockerfile b/Dockerfile
index ef8a264..f223490 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,11 +7,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
WORKDIR /app
-# Dépendances système minimales
-RUN apt-get update && apt-get install -y --no-install-recommends \
- libpq-dev \
- gcc \
- && rm -rf /var/lib/apt/lists/*
+# psycopg2-binary : pas besoin de gcc/libpq-dev (économise RAM/disque au build)
# Dépendances Python
COPY requirements.txt .
diff --git a/config/settings/prod.py b/config/settings/prod.py
index d9ae18b..6246b07 100644
--- a/config/settings/prod.py
+++ b/config/settings/prod.py
@@ -22,7 +22,7 @@ EMAIL_HOST_USER = env('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD', default='')
# ── HTTPS / cookies ───────────────────────────────────────
-SECURE_SSL_REDIRECT = True
+SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', default=True)
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # derrière nginx
SESSION_COOKIE_SECURE = True
diff --git a/docker-compose.local.yml b/docker-compose.local.yml
new file mode 100644
index 0000000..c1be007
--- /dev/null
+++ b/docker-compose.local.yml
@@ -0,0 +1,20 @@
+# Usage local :
+# docker compose --env-file .env.prod -f docker-compose.yml -f docker-compose.local.yml up --build
+
+services:
+ web:
+ environment:
+ ALLOWED_HOSTS: localhost,127.0.0.1,web
+ SECURE_SSL_REDIRECT: "false"
+
+ nginx:
+ ports:
+ - "8888:80"
+ volumes:
+ - ./nginx/nginx.local.conf:/etc/nginx/conf.d/default.conf:ro
+ - static_volume:/app/staticfiles:ro
+ - media_volume:/app/media:ro
+
+ certbot:
+ profiles:
+ - production
diff --git a/docker-compose.yml b/docker-compose.yml
index 01c9c84..510832c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -30,12 +30,8 @@ services:
condition: service_healthy
command: >
sh -c "python manage.py migrate --noinput &&
- gunicorn config.wsgi:application
- --bind 0.0.0.0:8000
- --workers 3
- --timeout 60
- --access-logfile -
- --error-logfile -"
+ gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 3
+ --timeout 60 --access-logfile - --error-logfile -"
# ── Nginx (reverse proxy + static files) ───────────────
nginx:
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
index dfc68a1..38ae87f 100644
--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -11,7 +11,7 @@ limit_req_zone $binary_remote_addr zone=forms:10m rate=2r/m;
# ── HTTP → HTTPS redirect ──────────────────────────────────
server {
listen 80;
- server_name jool-int.com www.jool-int.com;
+ server_name jool-international.com www.jool-international.com;
# Let's Encrypt challenge
location /.well-known/acme-challenge/ {
@@ -27,11 +27,11 @@ server {
server {
listen 443 ssl;
http2 on;
- server_name jool-int.com www.jool-int.com;
+ server_name jool-international.com www.jool-international.com;
# ── SSL ────────────────────────────────────────────────
- ssl_certificate /etc/letsencrypt/live/jool-int.com/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/jool-int.com/privkey.pem;
+ ssl_certificate /etc/letsencrypt/live/jool-international.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/jool-international.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
diff --git a/nginx/nginx.local.conf b/nginx/nginx.local.conf
new file mode 100644
index 0000000..2a24e88
--- /dev/null
+++ b/nginx/nginx.local.conf
@@ -0,0 +1,37 @@
+upstream django {
+ server web:8000;
+}
+
+server {
+ listen 80;
+ server_name localhost 127.0.0.1;
+
+ client_max_body_size 10M;
+
+ location /static/ {
+ alias /app/staticfiles/;
+ expires 30d;
+ access_log off;
+ }
+
+ location /media/careers/cvs/ {
+ deny all;
+ return 404;
+ }
+
+ location /media/ {
+ alias /app/media/;
+ expires 7d;
+ access_log off;
+ }
+
+ location / {
+ proxy_pass http://django;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_redirect off;
+ proxy_read_timeout 60s;
+ }
+}
diff --git a/templates/base.html b/templates/base.html
index 90273bc..de6527a 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -11,14 +11,14 @@
-
+
-
+
@@ -35,8 +35,8 @@
"@context": "https://schema.org",
"@type": "Organization",
"name": "Jool International",
- "url": "https://jool-int.com",
- "logo": "https://jool-int.com{% static 'img/logo.png' %}",
+ "url": "https://jool-international.com",
+ "logo": "https://jool-international.com{% static 'img/logo.png' %}",
"description": "Solutions AgriTech pour l'agriculture africaine : analyse satellitaire IA, cartographie drone et digitalisation des producteurs.",
"address": {
"@type": "PostalAddress",
diff --git a/templates/core/about.html b/templates/core/about.html
index a3658b1..1b482dd 100644
--- a/templates/core/about.html
+++ b/templates/core/about.html
@@ -17,12 +17,12 @@
"@context": "https://schema.org",
"@type": "AboutPage",
"name": "À propos de Jool International",
- "url": "https://jool-int.com/a-propos/",
+ "url": "https://jool-international.com/a-propos/",
"description": "Jool International est une entreprise AgriTech basée à Abidjan qui développe des solutions d'intelligence artificielle, de télédétection et de digitalisation pour l'agriculture africaine.",
"publisher": {
"@type": "Organization",
"name": "Jool International",
- "url": "https://jool-int.com",
+ "url": "https://jool-international.com",
"address": {
"@type": "PostalAddress",
"addressLocality": "Abidjan",
diff --git a/templates/core/home.html b/templates/core/home.html
index c56f859..dbe5555 100644
--- a/templates/core/home.html
+++ b/templates/core/home.html
@@ -16,8 +16,8 @@
"@context": "https://schema.org",
"@type": "Organization",
"name": "Jool International",
- "url": "https://jool-int.com",
- "logo": "https://jool-int.com/static/img/logo.png",
+ "url": "https://jool-international.com",
+ "logo": "https://jool-international.com/static/img/logo.png",
"description": "Solutions AgriTech pour l'agriculture africaine : analyse satellitaire IA, cartographie drone et digitalisation des producteurs.",
"address": {
"@type": "PostalAddress",
diff --git a/templates/core/products/joolid.html b/templates/core/products/joolid.html
index 41faae5..19910d6 100644
--- a/templates/core/products/joolid.html
+++ b/templates/core/products/joolid.html
@@ -19,13 +19,13 @@
"name": "Jool ID",
"applicationCategory": "AgricultureApplication",
"operatingSystem": "Web",
- "url": "https://jool-int.com/joolid/",
+ "url": "https://jool-international.com/joolid/",
"description": "Plateforme de digitalisation des producteurs agricoles : profils vérifiés, parcelles géolocalisées, traçabilité des intrants et pilotage de programme à grande échelle.",
"offers": { "@type": "Offer", "priceCurrency": "XOF" },
"provider": {
"@type": "Organization",
"name": "Jool International",
- "url": "https://jool-int.com"
+ "url": "https://jool-international.com"
}
}
diff --git a/templates/core/products/kiriq.html b/templates/core/products/kiriq.html
index cff1f10..8668d71 100644
--- a/templates/core/products/kiriq.html
+++ b/templates/core/products/kiriq.html
@@ -19,13 +19,13 @@
"name": "KIRIQ AI",
"applicationCategory": "AgricultureApplication",
"operatingSystem": "Web",
- "url": "https://jool-int.com/kiriq/",
+ "url": "https://jool-international.com/kiriq/",
"description": "Solution d'analyse satellitaire et d'intelligence artificielle pour le diagnostic agricole : détection de maladies, suivi NDVI, stress hydrique et aide à la décision.",
"offers": { "@type": "Offer", "priceCurrency": "XOF" },
"provider": {
"@type": "Organization",
"name": "Jool International",
- "url": "https://jool-int.com"
+ "url": "https://jool-international.com"
}
}
diff --git a/templates/core/products/monitor.html b/templates/core/products/monitor.html
index 38a438a..365bf90 100644
--- a/templates/core/products/monitor.html
+++ b/templates/core/products/monitor.html
@@ -19,13 +19,13 @@
"name": "Jool Monitor",
"applicationCategory": "AgricultureApplication",
"operatingSystem": "Web",
- "url": "https://jool-int.com/monitor/",
+ "url": "https://jool-international.com/monitor/",
"description": "Solution de cartographie drone pour l'agriculture : orthomosaïques, comptage intelligent, modèles 3D et suivi visuel continu des exploitations agricoles.",
"offers": { "@type": "Offer", "priceCurrency": "XOF" },
"provider": {
"@type": "Organization",
"name": "Jool International",
- "url": "https://jool-int.com"
+ "url": "https://jool-international.com"
}
}
diff --git a/templates/robots.txt b/templates/robots.txt
index 2677f92..c39076d 100644
--- a/templates/robots.txt
+++ b/templates/robots.txt
@@ -4,4 +4,4 @@ Allow: /
Disallow: /admin/
Disallow: /media/careers/cvs/
-Sitemap: https://jool-int.com/sitemap.xml
+Sitemap: https://jool-international.com/sitemap.xml
diff --git a/templates/sitemap.xml b/templates/sitemap.xml
index 28b5a51..ee38273 100644
--- a/templates/sitemap.xml
+++ b/templates/sitemap.xml
@@ -2,31 +2,31 @@
- https://jool-int.com/
+ https://jool-international.com/
weekly
1.0
- https://jool-int.com/a-propos/
+ https://jool-international.com/a-propos/
monthly
0.8
- https://jool-int.com/kiriq/
+ https://jool-international.com/kiriq/
monthly
0.9
- https://jool-int.com/monitor/
+ https://jool-international.com/monitor/
monthly
0.9
- https://jool-int.com/joolid/
+ https://jool-international.com/joolid/
monthly
0.9