Compare commits
5 Commits
18080f24df
...
32e4186240
| Author | SHA1 | Date | |
|---|---|---|---|
| 32e4186240 | |||
| 72471ca747 | |||
| 4bcc2435b2 | |||
| 82002351c4 | |||
| 9edfb82ad9 |
@@ -3,7 +3,7 @@ version: '3.8'
|
|||||||
services:
|
services:
|
||||||
# Backend service using pre-built image
|
# Backend service using pre-built image
|
||||||
backend:
|
backend:
|
||||||
image: serpentrace-backend:latest
|
image: serpentrace_docker-backend:latest
|
||||||
container_name: serpentrace-backend
|
container_name: serpentrace-backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
@@ -53,12 +53,14 @@ services:
|
|||||||
|
|
||||||
# Frontend service using pre-built image
|
# Frontend service using pre-built image
|
||||||
frontend:
|
frontend:
|
||||||
image: serpentrace-frontend:latest
|
image: serpentrace_docker-frontend:latest
|
||||||
container_name: serpentrace-frontend
|
container_name: serpentrace-frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
- "443:443"
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
- backend
|
||||||
networks:
|
networks:
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
|
||||||
|
# Enable gzip compression
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_min_length 1024;
|
||||||
|
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
|
||||||
|
|
||||||
|
# Security headers
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
|
add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
|
||||||
|
# Handle client routing
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# API proxy to backend
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://backend:3000/;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
# WebSocket support
|
||||||
|
location /socket.io/ {
|
||||||
|
proxy_pass http://backend:3000;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Static assets caching
|
||||||
|
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Health check endpoint
|
||||||
|
location /health {
|
||||||
|
access_log off;
|
||||||
|
return 200 "healthy\n";
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -0,0 +1,288 @@
|
|||||||
|
@echo off
|
||||||
|
REM SerpentRace Deployment Package Creator for Windows
|
||||||
|
REM This script creates a complete deployment package with Docker images
|
||||||
|
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
|
echo ========================================
|
||||||
|
echo SerpentRace Deployment Package Creator
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM Check if Docker is installed
|
||||||
|
where docker >nul 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Docker is not installed. Please install Docker first.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Check if git is installed
|
||||||
|
where git >nul 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Git is not installed. Please install Git first.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Get current branch
|
||||||
|
for /f "tokens=*" %%i in ('git branch --show-current') do set CURRENT_BRANCH=%%i
|
||||||
|
echo [INFO] Current branch: %CURRENT_BRANCH%
|
||||||
|
|
||||||
|
REM Check for uncommitted changes
|
||||||
|
git diff-index --quiet HEAD --
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [WARN] You have uncommitted changes in %CURRENT_BRANCH%
|
||||||
|
echo [WARN] Please commit or stash your changes before creating deployment
|
||||||
|
choice /C YN /M "Continue anyway?"
|
||||||
|
if errorlevel 2 exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 1/7: Switching to deployment branch...
|
||||||
|
git checkout deployment 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [INFO] Deployment branch doesn't exist, creating it...
|
||||||
|
git checkout -b deployment
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Failed to create deployment branch
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 2/7: Copying necessary files from main branch...
|
||||||
|
|
||||||
|
REM Create deployment directory if it doesn't exist
|
||||||
|
if not exist "SerpentRace_Docker\deployment" mkdir SerpentRace_Docker\deployment
|
||||||
|
|
||||||
|
REM Copy deployment configuration files from main
|
||||||
|
echo [INFO] Copying docker-compose.deploy.yml...
|
||||||
|
git show main:SerpentRace_Docker/deployment/docker-compose.deploy.yml > SerpentRace_Docker\deployment\docker-compose.deploy.yml 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [WARN] docker-compose.deploy.yml not found in main, using current version
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [INFO] Copying .env.server template...
|
||||||
|
git show main:SerpentRace_Docker/deployment/.env.server > SerpentRace_Docker\deployment\.env.server 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [WARN] .env.server not found in main, creating template...
|
||||||
|
(
|
||||||
|
echo # SerpentRace Production Environment Configuration
|
||||||
|
echo # IMPORTANT: Change all placeholder values before deployment!
|
||||||
|
echo.
|
||||||
|
echo # Database Configuration
|
||||||
|
echo POSTGRES_USER=postgres
|
||||||
|
echo POSTGRES_PASSWORD=CHANGE_THIS_PASSWORD
|
||||||
|
echo POSTGRES_DB=serpentrace
|
||||||
|
echo.
|
||||||
|
echo # JWT Configuration
|
||||||
|
echo JWT_SECRET=CHANGE_THIS_TO_A_RANDOM_32_CHAR_STRING
|
||||||
|
echo JWT_EXPIRATION=30m
|
||||||
|
echo JWT_REFRESH_EXPIRATION=7d
|
||||||
|
echo.
|
||||||
|
echo # Redis Configuration
|
||||||
|
echo REDIS_PASSWORD=CHANGE_THIS_REDIS_PASSWORD
|
||||||
|
echo.
|
||||||
|
echo # MinIO Configuration
|
||||||
|
echo MINIO_ROOT_USER=admin
|
||||||
|
echo MINIO_ROOT_PASSWORD=CHANGE_THIS_MINIO_PASSWORD
|
||||||
|
echo MINIO_ACCESS_KEY=serpentrace-access
|
||||||
|
echo MINIO_SECRET_KEY=CHANGE_THIS_MINIO_SECRET
|
||||||
|
echo.
|
||||||
|
echo # Email Configuration
|
||||||
|
echo EMAIL_HOST=smtp.gmail.com
|
||||||
|
echo EMAIL_PORT=587
|
||||||
|
echo EMAIL_SECURE=false
|
||||||
|
echo EMAIL_USER=your_email@gmail.com
|
||||||
|
echo EMAIL_PASS=your_email_password
|
||||||
|
echo EMAIL_FROM=SerpentRace ^<noreply@serpentrace.com^>
|
||||||
|
echo.
|
||||||
|
echo # Application Configuration
|
||||||
|
echo NODE_ENV=production
|
||||||
|
echo APP_BASE_URL=http://localhost
|
||||||
|
echo PORT=3000
|
||||||
|
) > SerpentRace_Docker\deployment\.env.server
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [INFO] Copying README.md...
|
||||||
|
git show main:SerpentRace_Docker/deployment/README.md > SerpentRace_Docker\deployment\README.md 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [WARN] README.md not found in main, using current version
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [INFO] Copying load-images scripts...
|
||||||
|
git show main:SerpentRace_Docker/deployment/load-images.bat > SerpentRace_Docker\deployment\load-images.bat 2>nul
|
||||||
|
git show main:SerpentRace_Docker/deployment/load-images.sh > SerpentRace_Docker\deployment\load-images.sh 2>nul
|
||||||
|
|
||||||
|
echo [INFO] Copying SQL schema...
|
||||||
|
git show main:SerpentRace_Docker/deployment/sql_schema_only.sql > SerpentRace_Docker\deployment\sql_schema_only.sql 2>nul
|
||||||
|
|
||||||
|
echo [INFO] Copying pgAdmin configuration...
|
||||||
|
git show main:SerpentRace_Docker/deployment/pgadmin_servers_deployment.json > SerpentRace_Docker\deployment\pgadmin_servers_deployment.json 2>nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [WARN] pgadmin_servers_deployment.json not found in main, creating default...
|
||||||
|
(
|
||||||
|
echo {
|
||||||
|
echo "Servers": {
|
||||||
|
echo "1": {
|
||||||
|
echo "Name": "SerpentRace Production",
|
||||||
|
echo "Group": "Servers",
|
||||||
|
echo "Host": "postgres",
|
||||||
|
echo "Port": 5432,
|
||||||
|
echo "MaintenanceDB": "serpentrace",
|
||||||
|
echo "Username": "postgres",
|
||||||
|
echo "SSLMode": "prefer",
|
||||||
|
echo "Comment": "SerpentRace Production Database"
|
||||||
|
echo }
|
||||||
|
echo }
|
||||||
|
echo }
|
||||||
|
) > SerpentRace_Docker\deployment\pgadmin_servers_deployment.json
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 3/7: Building Docker images from %CURRENT_BRANCH% branch...
|
||||||
|
|
||||||
|
REM Switch back to current branch to build with latest code
|
||||||
|
echo [INFO] Switching back to %CURRENT_BRANCH% to build images...
|
||||||
|
git checkout %CURRENT_BRANCH%
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Failed to switch back to %CURRENT_BRANCH%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Copy docker-compose file for building
|
||||||
|
echo [INFO] Checking out docker-compose files...
|
||||||
|
git show %CURRENT_BRANCH%:SerpentRace_Docker/docker-compose.prod.yml > SerpentRace_Docker\docker-compose.prod.yml.temp
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] docker-compose.prod.yml not found in %CURRENT_BRANCH% branch
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Build images using production compose file
|
||||||
|
cd SerpentRace_Docker
|
||||||
|
echo [INFO] Building production Docker images (this may take several minutes)...
|
||||||
|
docker-compose -f docker-compose.prod.yml.temp build --no-cache
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Failed to build Docker images
|
||||||
|
cd ..
|
||||||
|
del SerpentRace_Docker\docker-compose.prod.yml.temp
|
||||||
|
git checkout deployment
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
REM Clean up temp file
|
||||||
|
del SerpentRace_Docker\docker-compose.prod.yml.temp
|
||||||
|
|
||||||
|
REM Switch to deployment branch for packaging
|
||||||
|
echo [INFO] Switching to deployment branch for packaging...
|
||||||
|
git checkout deployment
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Failed to switch to deployment branch
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 4/7: Identifying built images...
|
||||||
|
|
||||||
|
REM Get list of images built for SerpentRace
|
||||||
|
set IMAGE_LIST=
|
||||||
|
for /f "tokens=*" %%i in ('docker images --filter "reference=serpentrace*" --format "{{.Repository}}:{{.Tag}}"') do (
|
||||||
|
set IMAGE_LIST=!IMAGE_LIST! %%i
|
||||||
|
)
|
||||||
|
|
||||||
|
if "!IMAGE_LIST!"==" " (
|
||||||
|
echo [ERROR] No SerpentRace images found. Build may have failed.
|
||||||
|
git checkout %CURRENT_BRANCH%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [INFO] Found images: !IMAGE_LIST!
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 5/7: Saving Docker images to tar file...
|
||||||
|
echo [INFO] This may take several minutes depending on image sizes...
|
||||||
|
|
||||||
|
docker save -o SerpentRace_Docker\deployment\serpentRaceDocker.tar !IMAGE_LIST!
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Failed to save Docker images to tar file
|
||||||
|
git checkout %CURRENT_BRANCH%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Get file size
|
||||||
|
for %%A in ("SerpentRace_Docker\deployment\serpentRaceDocker.tar") do set TAR_SIZE=%%~zA
|
||||||
|
set /a TAR_SIZE_MB=!TAR_SIZE! / 1024 / 1024
|
||||||
|
echo [INFO] Created serpentRaceDocker.tar (Size: !TAR_SIZE_MB! MB)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 6/7: Adding files to deployment branch...
|
||||||
|
|
||||||
|
REM Add only deployment files to git
|
||||||
|
git add SerpentRace_Docker\deployment\*
|
||||||
|
|
||||||
|
REM Check if there are changes to commit
|
||||||
|
git diff --cached --quiet
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [INFO] Committing deployment package...
|
||||||
|
git commit -m "Add deployment package with Docker images - %date% %time%"
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Failed to commit deployment files
|
||||||
|
git checkout %CURRENT_BRANCH%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
echo [INFO] No changes to commit (deployment files are up to date)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Step 7/7: Finalizing...
|
||||||
|
|
||||||
|
REM Create deployment info file
|
||||||
|
(
|
||||||
|
echo SerpentRace Deployment Package
|
||||||
|
echo ==============================
|
||||||
|
echo.
|
||||||
|
echo Created: %date% %time%
|
||||||
|
echo Source Branch: %CURRENT_BRANCH%
|
||||||
|
echo Docker Images: !IMAGE_LIST!
|
||||||
|
echo Package Size: !TAR_SIZE_MB! MB
|
||||||
|
echo.
|
||||||
|
echo Files included:
|
||||||
|
echo - serpentRaceDocker.tar
|
||||||
|
echo - docker-compose.deploy.yml
|
||||||
|
echo - .env.server
|
||||||
|
echo - load-images.bat
|
||||||
|
echo - load-images.sh
|
||||||
|
echo - README.md
|
||||||
|
echo - sql_schema_only.sql
|
||||||
|
echo - pgadmin_servers_deployment.json
|
||||||
|
echo.
|
||||||
|
echo To deploy:
|
||||||
|
echo 1. Copy the entire SerpentRace_Docker/deployment folder to your server
|
||||||
|
echo 2. Edit .env.server with your configuration
|
||||||
|
echo 3. Run load-images.bat (Windows^) or load-images.sh (Linux^)
|
||||||
|
) > SerpentRace_Docker\deployment\DEPLOYMENT_INFO.txt
|
||||||
|
|
||||||
|
git add SerpentRace_Docker\deployment\DEPLOYMENT_INFO.txt
|
||||||
|
git commit -m "Add deployment info file" 2>nul
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo [SUCCESS] Deployment package created!
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
echo Deployment branch: deployment
|
||||||
|
echo Package location: SerpentRace_Docker\deployment\
|
||||||
|
echo Package size: !TAR_SIZE_MB! MB
|
||||||
|
echo.
|
||||||
|
echo Next steps:
|
||||||
|
echo 1. Review the files in SerpentRace_Docker\deployment\
|
||||||
|
echo 2. Optionally push to remote: git push origin deployment
|
||||||
|
echo 3. Copy deployment folder to your production server
|
||||||
|
echo.
|
||||||
|
echo Switching back to %CURRENT_BRANCH% branch...
|
||||||
|
git checkout %CURRENT_BRANCH%
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [INFO] Deployment package creation complete!
|
||||||
|
pause
|
||||||
Reference in New Issue
Block a user