🚀 Deployment-Konfiguration hinzugefügt
- docker-compose.yml (DB + Backend + Frontend) - Nginx Reverse Proxy Config - Deployment Script Ports: - PostgreSQL: 5434 - Backend: 8004 - Frontend: 3006
This commit is contained in:
77
deploy/deploy.sh
Normal file
77
deploy/deploy.sh
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 SeCu Deployment Script"
|
||||
echo "========================="
|
||||
|
||||
# Variables
|
||||
DEPLOY_DIR="/srv/secu"
|
||||
REPO_BASE="https://git.kronos-soulution.de/Flux_bot"
|
||||
|
||||
# Create deployment directory
|
||||
echo "📁 Creating deployment directory..."
|
||||
mkdir -p $DEPLOY_DIR
|
||||
cd $DEPLOY_DIR
|
||||
|
||||
# Clone or pull repositories
|
||||
echo "📥 Cloning/updating repositories..."
|
||||
|
||||
for repo in secu secu-backend secu-frontend; do
|
||||
if [ -d "$repo" ]; then
|
||||
echo " Updating $repo..."
|
||||
cd $repo && git pull && cd ..
|
||||
else
|
||||
echo " Cloning $repo..."
|
||||
git clone $REPO_BASE/$repo.git
|
||||
fi
|
||||
done
|
||||
|
||||
# Generate SSL certificates if not exist
|
||||
echo "🔐 Checking SSL certificates..."
|
||||
for domain in secu.kronos-soulution.de api.secu.kronos-soulution.de; do
|
||||
if [ ! -d "/etc/letsencrypt/live/$domain" ]; then
|
||||
echo " Generating certificate for $domain..."
|
||||
certbot certonly --nginx -d $domain --non-interactive --agree-tos -m admin@kronos-soulution.de
|
||||
fi
|
||||
done
|
||||
|
||||
# Copy nginx config
|
||||
echo "🌐 Configuring Nginx..."
|
||||
cp secu/deploy/nginx/secu.conf /etc/nginx/sites-available/secu.conf
|
||||
ln -sf /etc/nginx/sites-available/secu.conf /etc/nginx/sites-enabled/
|
||||
nginx -t && systemctl reload nginx
|
||||
|
||||
# Set JWT secret if not set
|
||||
if [ -z "$JWT_SECRET" ]; then
|
||||
export JWT_SECRET=$(openssl rand -base64 32)
|
||||
echo "JWT_SECRET=$JWT_SECRET" >> /srv/secu/.env
|
||||
echo "⚠️ Generated new JWT_SECRET - saved to /srv/secu/.env"
|
||||
fi
|
||||
|
||||
# Start services
|
||||
echo "🐳 Starting Docker containers..."
|
||||
cd secu/deploy
|
||||
docker-compose down 2>/dev/null || true
|
||||
docker-compose up -d
|
||||
|
||||
# Wait for services
|
||||
echo "⏳ Waiting for services to start..."
|
||||
sleep 10
|
||||
|
||||
# Health check
|
||||
echo "🏥 Health check..."
|
||||
curl -sf http://localhost:8004/health && echo " Backend OK" || echo " Backend FAILED"
|
||||
curl -sf http://localhost:3006 > /dev/null && echo " Frontend OK" || echo " Frontend FAILED"
|
||||
|
||||
echo ""
|
||||
echo "✅ Deployment complete!"
|
||||
echo ""
|
||||
echo "URLs:"
|
||||
echo " Frontend: https://secu.kronos-soulution.de"
|
||||
echo " API: https://api.secu.kronos-soulution.de"
|
||||
echo ""
|
||||
echo "Default Login (first user becomes Chef):"
|
||||
echo " 1. Go to https://secu.kronos-soulution.de"
|
||||
echo " 2. Click 'Registrieren'"
|
||||
echo " 3. Organization: demo (or create new)"
|
||||
echo " 4. Enter your details"
|
||||
65
deploy/docker-compose.yml
Normal file
65
deploy/docker-compose.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
secu-db:
|
||||
image: postgres:16-alpine
|
||||
container_name: secu-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: secu
|
||||
POSTGRES_PASSWORD: SeCu2026!SecureDB
|
||||
POSTGRES_DB: secu
|
||||
volumes:
|
||||
- secu-db-data:/var/lib/postgresql/data
|
||||
- ../db/migrations:/docker-entrypoint-initdb.d:ro
|
||||
ports:
|
||||
- "5434:5432"
|
||||
networks:
|
||||
- secu-network
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U secu -d secu"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
secu-backend:
|
||||
image: denoland/deno:alpine
|
||||
container_name: secu-backend
|
||||
restart: unless-stopped
|
||||
working_dir: /app
|
||||
command: deno run --allow-net --allow-env --allow-read src/main.ts
|
||||
environment:
|
||||
DATABASE_URL: postgres://secu:SeCu2026!SecureDB@secu-db:5432/secu
|
||||
JWT_SECRET: ${JWT_SECRET:-SeCu-Production-Secret-Change-Me-2026}
|
||||
PORT: 8004
|
||||
volumes:
|
||||
- ../../secu-backend:/app:ro
|
||||
ports:
|
||||
- "8004:8004"
|
||||
networks:
|
||||
- secu-network
|
||||
depends_on:
|
||||
secu-db:
|
||||
condition: service_healthy
|
||||
|
||||
secu-frontend:
|
||||
image: node:20-alpine
|
||||
container_name: secu-frontend
|
||||
restart: unless-stopped
|
||||
working_dir: /app
|
||||
command: sh -c "npm install && npm run build && npx serve -s dist -l 3006"
|
||||
environment:
|
||||
VITE_API_URL: https://api.secu.kronos-soulution.de/api
|
||||
volumes:
|
||||
- ../../secu-frontend:/app
|
||||
ports:
|
||||
- "3006:3006"
|
||||
networks:
|
||||
- secu-network
|
||||
|
||||
volumes:
|
||||
secu-db-data:
|
||||
|
||||
networks:
|
||||
secu-network:
|
||||
driver: bridge
|
||||
55
deploy/nginx/secu.conf
Normal file
55
deploy/nginx/secu.conf
Normal file
@@ -0,0 +1,55 @@
|
||||
# SeCu Frontend
|
||||
server {
|
||||
listen 80;
|
||||
server_name secu.kronos-soulution.de;
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name secu.kronos-soulution.de;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/secu.kronos-soulution.de/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/secu.kronos-soulution.de/privkey.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3006;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
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_cache_bypass $http_upgrade;
|
||||
}
|
||||
}
|
||||
|
||||
# SeCu API
|
||||
server {
|
||||
listen 80;
|
||||
server_name api.secu.kronos-soulution.de;
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name api.secu.kronos-soulution.de;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/api.secu.kronos-soulution.de/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/api.secu.kronos-soulution.de/privkey.pem;
|
||||
|
||||
client_max_body_size 10M;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:8004;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
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_cache_bypass $http_upgrade;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user