Spaces:
Running
# HTS Investigation Suite - Docker Compose Production
Browse files# HIGH TECH SECURITY - Déploiement containerisé complet
version: '3.8'
services:
# API Backend Python
hts-api:
build:
context: .
dockerfile: Dockerfile.api
container_name: hts-investigation-api
restart: unless-stopped
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://hts_user:HTS_Investigation_2025!@postgres:5432/hts_investigation
- REDIS_URL=redis://:HTS_Redis_2025!@redis:6379/0
- SECRET_KEY=HTS_INVESTIGATION_SECRET_2025_ULTRA_SECURE
- ENVIRONMENT=production
- COMPANY_NAME=HIGH TECH SECURITY
- COMPANY_ADDRESS=203-205 The Vale, London W3 7QS, United Kingdom
- COMPANY_NUMBER=7849187
- POLICY_NUMBER=550.232.804
- CONTACT_UK=+44 7591 665201
- CONTACT_ES=+34 673 075445
- CONTACT_US=+1 302 579 0159
- CONTACT_EMAIL=contact@hts-investigation.com
depends_on:
- postgres
- redis
volumes:
- ./data/uploads:/app/uploads
- ./data/models:/app/models
- ./logs:/app/logs
networks:
- hts-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# Frontend React
hts-frontend:
build:
context: .
dockerfile: Dockerfile.frontend
container_name: hts-investigation-frontend
restart: unless-stopped
ports:
- "3000:80"
environment:
- REACT_APP_API_URL=http://localhost:8000
- REACT_APP_COMPANY_NAME=HIGH TECH SECURITY
- REACT_APP_VERSION=2.1.0
depends_on:
- hts-api
networks:
- hts-network
# Base de données PostgreSQL
postgres:
image: postgres:15-alpine
container_name: hts-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=hts_investigation
- POSTGRES_USER=hts_user
- POSTGRES_PASSWORD=HTS_Investigation_2025!
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
networks:
- hts-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U hts_user -d hts_investigation"]
interval: 10s
timeout: 5s
retries: 5
# Redis Cache
redis:
image: redis:7-alpine
container_name: hts-redis
restart: unless-stopped
command: redis-server --requirepass HTS_Redis_2025! --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
networks:
- hts-network
healthcheck:
test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "HTS_Redis_2025!", "ping"]
interval: 10s
timeout: 5s
retries: 3
# Nginx Reverse Proxy
nginx:
image: nginx:alpine
container_name: hts-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./data/ssl:/etc/nginx/ssl
- ./data/web:/var/www/html
depends_on:
- hts-api
- hts-frontend
networks:
- hts-network
# Monitoring Prometheus
prometheus:
image: prom/prometheus:latest
container_name: hts-prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
- '--storage.tsdb.retention.time=15d'
- '--web.enable-lifecycle'
networks:
- hts-network
# Grafana Dashboard
grafana:
image: grafana/grafana:latest
container_name: hts-grafana
restart: unless-stopped
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=HTS_Grafana_2025!
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_DOMAIN=localhost
- GF_SMTP_ENABLED=false
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana/datasources:/etc/grafana/provisioning/datasources
depends_on:
- prometheus
networks:
- hts-network
# Worker Background Tasks
hts-worker:
build:
context: .
dockerfile: Dockerfile.api
container_name: hts-investigation-worker
restart: unless-stopped
command: python worker.py
environment:
- DATABASE_URL=postgresql://hts_user:HTS_Investigation_2025!@postgres:5432/hts_investigation
- REDIS_URL=redis://:HTS_Redis_2025!@redis:6379/0
- SECRET_KEY=HTS_INVESTIGATION_SECRET_2025_ULTRA_SECURE
- ENVIRONMENT=production
depends_on:
- postgres
- redis
volumes:
- ./data/uploads:/app/uploads
- ./data/models:/app/models
- ./logs:/app/logs
networks:
- hts-network
# Elasticsearch pour logs (optionnel)
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: hts-elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
networks:
- hts-network
# Kibana pour visualisation logs
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: hts-kibana
restart: unless-stopped
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- hts-network
# Backup automatique
backup:
image: postgres:15-alpine
container_name: hts-backup
restart: unless-stopped
environment:
- PGPASSWORD=HTS_Investigation_2025!
volumes:
- ./backups:/backups
- ./backup-script.sh:/backup-script.sh
command: sh -c "chmod +x /backup-script.sh && crond -f"
depends_on:
- postgres
networks:
- hts-network
volumes:
postgres_data:
driver: local
redis_data:
driver: local
prometheus_data:
driver: local
grafana_data:
driver: local
elasticsearch_data:
driver: local
networks:
hts-network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/16
- index.html +17 -20
|
@@ -61,21 +61,21 @@
|
|
| 61 |
<i data-feather="shield" class="text-white w-6 h-6"></i>
|
| 62 |
</div>
|
| 63 |
<div>
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
</div>
|
| 68 |
|
| 69 |
<div class="hidden md:flex items-center space-x-6">
|
| 70 |
<div class="text-right">
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
</div>
|
| 80 |
</div>
|
| 81 |
</header>
|
|
@@ -85,12 +85,12 @@
|
|
| 85 |
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
| 86 |
<div class="flex space-x-1 overflow-x-auto py-2 hide-scrollbar">
|
| 87 |
<a href="#" class="flex items-center space-x-2 px-4 py-3 border-b-2 border-blue-400 text-blue-400 transition-colors">
|
| 88 |
-
<i data-feather="
|
| 89 |
<span>Dashboard</span>
|
| 90 |
</a>
|
| 91 |
<a href="#" class="flex items-center space-x-2 px-4 py-3 border-b-2 border-transparent hover:border-gray-600 transition-colors">
|
| 92 |
-
<i data-feather="
|
| 93 |
-
<span>
|
| 94 |
</a>
|
| 95 |
<a href="#" class="flex items-center space-x-2 px-4 py-3 border-b-2 border-transparent hover:border-gray-600 transition-colors">
|
| 96 |
<i data-feather="search" class="w-4 h-4"></i>
|
|
@@ -100,11 +100,7 @@
|
|
| 100 |
<i data-feather="eye" class="w-4 h-4"></i>
|
| 101 |
<span>Monitoring</span>
|
| 102 |
</a>
|
| 103 |
-
|
| 104 |
-
<i data-feather="settings" class="w-4 h-4"></i>
|
| 105 |
-
<span>Configuration</span>
|
| 106 |
-
</a>
|
| 107 |
-
</div>
|
| 108 |
</div>
|
| 109 |
</nav>
|
| 110 |
|
|
@@ -270,8 +266,9 @@
|
|
| 270 |
</div>
|
| 271 |
</main>
|
| 272 |
|
|
|
|
| 273 |
<script>
|
| 274 |
-
|
| 275 |
VANTA.GLOBE({
|
| 276 |
el: "#vanta-bg",
|
| 277 |
mouseControls: true,
|
|
|
|
| 61 |
<i data-feather="shield" class="text-white w-6 h-6"></i>
|
| 62 |
</div>
|
| 63 |
<div>
|
| 64 |
+
<h1 class="text-2xl font-bold text-gray-900">HIGH TECH SECURITY</h1>
|
| 65 |
+
<p class="text-sm text-gray-600">HTS Investigation Suite v2.1</p>
|
| 66 |
+
</div>
|
| 67 |
</div>
|
| 68 |
|
| 69 |
<div class="hidden md:flex items-center space-x-6">
|
| 70 |
<div class="text-right">
|
| 71 |
+
<div class="text-gray-600">203-205 The Vale, London W3 7QS</div>
|
| 72 |
+
<div class="text-gray-600">UK: +44 7591 665201 | Company: 7849187</div>
|
| 73 |
+
</div>
|
| 74 |
+
<div class="flex items-center space-x-2">
|
| 75 |
+
<i data-feather="lock" class="w-5 h-5 text-green-500"></i>
|
| 76 |
+
<span class="text-sm text-green-600 font-medium">Sécurisé</span>
|
| 77 |
+
</div>
|
| 78 |
+
</div>
|
| 79 |
</div>
|
| 80 |
</div>
|
| 81 |
</header>
|
|
|
|
| 85 |
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
| 86 |
<div class="flex space-x-1 overflow-x-auto py-2 hide-scrollbar">
|
| 87 |
<a href="#" class="flex items-center space-x-2 px-4 py-3 border-b-2 border-blue-400 text-blue-400 transition-colors">
|
| 88 |
+
<i data-feather="trending-up" class="w-4 h-4"></i>
|
| 89 |
<span>Dashboard</span>
|
| 90 |
</a>
|
| 91 |
<a href="#" class="flex items-center space-x-2 px-4 py-3 border-b-2 border-transparent hover:border-gray-600 transition-colors">
|
| 92 |
+
<i data-feather="brain" class="w-4 h-4"></i>
|
| 93 |
+
<span>Analyse DB IA</span>
|
| 94 |
</a>
|
| 95 |
<a href="#" class="flex items-center space-x-2 px-4 py-3 border-b-2 border-transparent hover:border-gray-600 transition-colors">
|
| 96 |
<i data-feather="search" class="w-4 h-4"></i>
|
|
|
|
| 100 |
<i data-feather="eye" class="w-4 h-4"></i>
|
| 101 |
<span>Monitoring</span>
|
| 102 |
</a>
|
| 103 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
</div>
|
| 105 |
</nav>
|
| 106 |
|
|
|
|
| 266 |
</div>
|
| 267 |
</main>
|
| 268 |
|
| 269 |
+
<script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js"></script>
|
| 270 |
<script>
|
| 271 |
+
feather.replace();
|
| 272 |
VANTA.GLOBE({
|
| 273 |
el: "#vanta-bg",
|
| 274 |
mouseControls: true,
|