mirror of
https://github.com/Alvin-Zilverstand/narrow_casting_system.git
synced 2026-03-06 13:24:46 +01:00
🎿 Complete SnowWorld Narrowcasting System - MBO Challenge 18
✅ Full-stack narrowcasting platform implementation ✅ Real-time WebSocket communication for instant updates ✅ Zone-specific content distribution (reception, restaurant, skislope, lockers, shop) ✅ Professional admin dashboard with content management interface ✅ Beautiful client display with winter/snow theme matching SnowWorld branding ✅ Comprehensive technical documentation and test suite ✅ Docker deployment support with CI/CD pipeline ✅ All system tests passing successfully 🏗️ Technical Implementation: - Backend: Node.js/Express with SQLite database - Frontend: Vanilla HTML/CSS/JavaScript (no frameworks) - Real-time: Socket.io WebSocket communication - Database: Complete schema with content, schedule, zones, logs tables - Security: File validation, input sanitization, CORS protection - Performance: Optimized for fast loading and real-time updates 🚀 Features Delivered: - Content upload (images, videos) with drag-and-drop interface - Content scheduling and planning system - Weather widget with real-time snow information - Responsive design for all screen sizes - Comprehensive error handling and fallback mechanisms - Professional winter theme with snow animations - Keyboard shortcuts and accessibility features 📁 Project Structure: - /backend: Complete Node.js server with API and WebSocket - /admin: Professional admin dashboard interface - /client: Beautiful client display application - /deployment: Docker and deployment configurations - /docs: Comprehensive technical documentation - /test_system.js: Complete test suite (all tests passing) 🧪 Testing Results: - Server health: ✅ Online and responsive - API endpoints: ✅ All endpoints functional - Database operations: ✅ All operations successful - WebSocket communication: ✅ Real-time updates working - Zone distribution: ✅ 6 zones correctly loaded - Weather integration: ✅ Weather data available Ready for production deployment at SnowWorld! 🎿❄️
This commit is contained in:
34
deployment/docker/Dockerfile
Normal file
34
deployment/docker/Dockerfile
Normal file
@@ -0,0 +1,34 @@
|
||||
# SnowWorld Narrowcasting System - Docker Configuration
|
||||
|
||||
# Use official Node.js runtime as base image
|
||||
FROM node:18-alpine
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
COPY backend/package*.json ./backend/
|
||||
COPY admin/package*.json ./admin/
|
||||
|
||||
# Install dependencies
|
||||
RUN npm run setup:backend && npm run setup:admin
|
||||
|
||||
# Copy application code
|
||||
COPY . .
|
||||
|
||||
# Create necessary directories
|
||||
RUN mkdir -p database logs public/uploads/images public/uploads/videos
|
||||
|
||||
# Set permissions for upload directories
|
||||
RUN chmod -R 755 public/uploads
|
||||
|
||||
# Expose port
|
||||
EXPOSE 3000
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:3000/api/zones', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"
|
||||
|
||||
# Start command
|
||||
CMD ["npm", "start"]
|
||||
252
deployment/docker/README.md
Normal file
252
deployment/docker/README.md
Normal file
@@ -0,0 +1,252 @@
|
||||
# Docker Deployment for SnowWorld Narrowcasting System
|
||||
|
||||
This directory contains Docker configuration files for deploying the SnowWorld Narrowcasting System.
|
||||
|
||||
## 🐳 Quick Start with Docker
|
||||
|
||||
### Prerequisites
|
||||
- Docker Engine 20.10+
|
||||
- Docker Compose 1.29+
|
||||
|
||||
### Build and Run
|
||||
|
||||
```bash
|
||||
# Build the Docker image
|
||||
docker build -t snowworld-narrowcasting .
|
||||
|
||||
# Run with Docker Compose
|
||||
docker-compose up -d
|
||||
|
||||
# Or run manually
|
||||
docker run -d -p 3000:3000 --name snowworld snowworld-narrowcasting
|
||||
```
|
||||
|
||||
### Access the Application
|
||||
- Main application: http://localhost:3000
|
||||
- Admin dashboard: http://localhost:3000/admin
|
||||
- Client display: http://localhost:3000/client?zone=reception
|
||||
|
||||
## 📋 Docker Compose Services
|
||||
|
||||
### Services Overview
|
||||
- **snowworld-narrowcasting**: Main application container
|
||||
- **nginx**: Reverse proxy with SSL termination
|
||||
|
||||
### Volumes
|
||||
- `./database:/app/database` - Persistent database storage
|
||||
- `./logs:/app/logs` - Application logs
|
||||
- `./public/uploads:/app/public/uploads` - Uploaded media files
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Environment Variables
|
||||
Copy `.env.example` to `.env` and configure:
|
||||
```bash
|
||||
NODE_ENV=production
|
||||
PORT=3000
|
||||
DB_PATH=./database/snowworld.db
|
||||
```
|
||||
|
||||
### SSL Configuration
|
||||
For production deployment with SSL:
|
||||
1. Place SSL certificates in `./ssl/` directory
|
||||
2. Update `nginx.conf` with your domain name
|
||||
3. Ensure certificates are named `cert.pem` and `key.pem`
|
||||
|
||||
## 🚀 Production Deployment
|
||||
|
||||
### 1. Prepare Environment
|
||||
```bash
|
||||
# Copy environment file
|
||||
cp .env.example .env
|
||||
|
||||
# Create necessary directories
|
||||
mkdir -p database logs ssl public/uploads/{images,videos}
|
||||
|
||||
# Set permissions
|
||||
chmod -R 755 public/uploads
|
||||
```
|
||||
|
||||
### 2. SSL Certificates
|
||||
```bash
|
||||
# For Let's Encrypt (recommended)
|
||||
certbot certonly --webroot -w /var/www/html -d yourdomain.com
|
||||
|
||||
# Copy certificates
|
||||
cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem ./ssl/cert.pem
|
||||
cp /etc/letsencrypt/live/yourdomain.com/privkey.pem ./ssl/key.pem
|
||||
```
|
||||
|
||||
### 3. Deploy with Docker Compose
|
||||
```bash
|
||||
# Start services
|
||||
docker-compose up -d
|
||||
|
||||
# Check status
|
||||
docker-compose ps
|
||||
|
||||
# View logs
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
## 📊 Monitoring
|
||||
|
||||
### Container Health
|
||||
```bash
|
||||
# Check container health
|
||||
docker-compose ps
|
||||
|
||||
# View logs
|
||||
docker-compose logs snowworld-narrowcasting
|
||||
docker-compose logs nginx
|
||||
|
||||
# Monitor resources
|
||||
docker stats
|
||||
```
|
||||
|
||||
### Application Health
|
||||
The application includes health check endpoints:
|
||||
- API Health: http://localhost:3000/api/zones
|
||||
- WebSocket: ws://localhost:3000/socket.io
|
||||
|
||||
## 🔧 Maintenance
|
||||
|
||||
### Updates
|
||||
```bash
|
||||
# Pull latest changes
|
||||
git pull origin main
|
||||
|
||||
# Rebuild containers
|
||||
docker-compose down
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Backup
|
||||
```bash
|
||||
# Backup database
|
||||
docker exec snowworld-narrowcasting sqlite3 /app/database/snowworld.db ".backup /app/database/backup.db"
|
||||
|
||||
# Backup uploads
|
||||
tar -czf uploads-backup.tar.gz public/uploads/
|
||||
```
|
||||
|
||||
### Logs Management
|
||||
```bash
|
||||
# View application logs
|
||||
docker-compose logs -f snowworld-narrowcasting
|
||||
|
||||
# Rotate logs
|
||||
docker-compose exec snowworld-narrowcasting logrotate -f /etc/logrotate.conf
|
||||
```
|
||||
|
||||
## 🚨 Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Container won't start:**
|
||||
```bash
|
||||
# Check logs
|
||||
docker-compose logs snowworld-narrowcasting
|
||||
|
||||
# Rebuild if necessary
|
||||
docker-compose build --no-cache
|
||||
```
|
||||
|
||||
**Port already in use:**
|
||||
```bash
|
||||
# Find process using port 3000
|
||||
netstat -tulpn | grep 3000
|
||||
|
||||
# Or use different port
|
||||
# Edit docker-compose.yml ports section
|
||||
```
|
||||
|
||||
**Database permission errors:**
|
||||
```bash
|
||||
# Fix permissions
|
||||
sudo chown -R $USER:$USER database/
|
||||
chmod -R 755 database/
|
||||
```
|
||||
|
||||
**SSL certificate issues:**
|
||||
```bash
|
||||
# Check certificate validity
|
||||
openssl x509 -in ssl/cert.pem -text -noout
|
||||
|
||||
# Verify nginx configuration
|
||||
nginx -t
|
||||
```
|
||||
|
||||
### Performance Issues
|
||||
|
||||
**High memory usage:**
|
||||
```bash
|
||||
# Monitor memory
|
||||
docker stats snowworld-narrowcasting
|
||||
|
||||
# Check for memory leaks
|
||||
docker exec snowworld-narrowcasting node --inspect
|
||||
```
|
||||
|
||||
**Slow response times:**
|
||||
```bash
|
||||
# Check nginx access logs
|
||||
docker-compose logs nginx | grep "upstream_response_time"
|
||||
|
||||
# Monitor database performance
|
||||
docker exec snowworld-narrowcasting sqlite3 /app/database/snowworld.db "PRAGMA compile_options;"
|
||||
```
|
||||
|
||||
## 🔒 Security
|
||||
|
||||
### Container Security
|
||||
- Run as non-root user when possible
|
||||
- Keep base images updated
|
||||
- Scan images for vulnerabilities
|
||||
- Use secrets management for sensitive data
|
||||
|
||||
### Network Security
|
||||
- Use Docker networks for isolation
|
||||
- Implement proper firewall rules
|
||||
- Enable SSL/TLS for all communications
|
||||
- Regular security updates
|
||||
|
||||
## 📈 Scaling
|
||||
|
||||
### Horizontal Scaling
|
||||
```bash
|
||||
# Scale with Docker Swarm
|
||||
docker swarm init
|
||||
docker stack deploy -c docker-compose.yml snowworld-stack
|
||||
|
||||
# Or use Kubernetes (see k8s/ directory)
|
||||
kubectl apply -f k8s/
|
||||
```
|
||||
|
||||
### Load Balancing
|
||||
The nginx configuration includes upstream load balancing for multiple app instances.
|
||||
|
||||
## 🧪 Development with Docker
|
||||
|
||||
### Local Development
|
||||
```bash
|
||||
# Development docker-compose
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
|
||||
# With hot reload
|
||||
docker-compose -f docker-compose.dev.yml up --build
|
||||
```
|
||||
|
||||
### Testing in Container
|
||||
```bash
|
||||
# Run tests in container
|
||||
docker exec snowworld-narrowcasting npm test
|
||||
|
||||
# Interactive debugging
|
||||
docker exec -it snowworld-narrowcasting /bin/sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
For more information, see the main project documentation in `/docs/` directory.
|
||||
44
deployment/docker/docker-compose.yml
Normal file
44
deployment/docker/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
# SnowWorld Narrowcasting System - Docker Compose Configuration
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
snowworld-narrowcasting:
|
||||
build: .
|
||||
container_name: snowworld-narrowcasting
|
||||
ports:
|
||||
- "3000:3000"
|
||||
volumes:
|
||||
- ./database:/app/database
|
||||
- ./logs:/app/logs
|
||||
- ./public/uploads:/app/public/uploads
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3000
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- snowworld-network
|
||||
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
container_name: snowworld-nginx
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./ssl:/etc/nginx/ssl:ro
|
||||
depends_on:
|
||||
- snowworld-narrowcasting
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- snowworld-network
|
||||
|
||||
networks:
|
||||
snowworld-network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
database-data:
|
||||
uploads-data:
|
||||
logs-data:
|
||||
Reference in New Issue
Block a user