🎿 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:
Alvin-Zilverstand
2026-01-19 10:02:11 +01:00
commit 8e446a1339
35 changed files with 15110 additions and 0 deletions

View 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
View 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.

View 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: