mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
431 lines
9.2 KiB
Markdown
431 lines
9.2 KiB
Markdown
# Quick Start: Production Deployment
|
|
|
|
This guide will get Trackeep running in production in under 10 minutes.
|
|
|
|
## Prerequisites
|
|
|
|
- Linux server (Ubuntu 20.04+ recommended)
|
|
- Docker 24.0+ and Docker Compose 2.20+
|
|
- 4GB RAM minimum
|
|
- 20GB disk space
|
|
- Domain name (optional, for SSL)
|
|
|
|
## Step 1: Install Docker (if not installed)
|
|
|
|
```bash
|
|
# Update system
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Install Docker
|
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
|
sudo sh get-docker.sh
|
|
|
|
# Add your user to docker group
|
|
sudo usermod -aG docker $USER
|
|
|
|
# Install Docker Compose
|
|
sudo apt install docker-compose-plugin -y
|
|
|
|
# Verify installation
|
|
docker --version
|
|
docker compose version
|
|
```
|
|
|
|
## Step 2: Clone and Configure
|
|
|
|
```bash
|
|
# Clone repository
|
|
git clone https://github.com/Dvorinka/Trackeep.git
|
|
cd Trackeep
|
|
|
|
# Copy environment template
|
|
cp .env.example .env
|
|
|
|
# Generate secure keys
|
|
echo "JWT_SECRET=$(openssl rand -base64 32)" >> .env
|
|
echo "ENCRYPTION_KEY=$(openssl rand -base64 32)" >> .env
|
|
echo "DB_PASSWORD=$(openssl rand -base64 24)" >> .env
|
|
echo "DRAGONFLY_PASSWORD=$(openssl rand -base64 24)" >> .env
|
|
|
|
# Edit .env if needed
|
|
nano .env
|
|
```
|
|
|
|
## Step 3: Run Production Test
|
|
|
|
```bash
|
|
# Make test script executable
|
|
chmod +x test-production.sh
|
|
|
|
# Run tests
|
|
./test-production.sh
|
|
```
|
|
|
|
## Step 4: Deploy
|
|
|
|
```bash
|
|
# Build and start services
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
|
|
# Check status
|
|
docker-compose -f docker-compose.prod.yml ps
|
|
|
|
# View logs
|
|
docker-compose -f docker-compose.prod.yml logs -f
|
|
```
|
|
|
|
## Step 5: Verify Deployment
|
|
|
|
```bash
|
|
# Check health
|
|
curl http://localhost:8080/health
|
|
|
|
# Expected response:
|
|
# {"status":"healthy","timestamp":"..."}
|
|
|
|
# Check frontend
|
|
curl http://localhost:80
|
|
|
|
# Should return HTML
|
|
```
|
|
|
|
## Step 6: Create Admin User
|
|
|
|
```bash
|
|
# Register first user (will be admin)
|
|
curl -X POST http://localhost:8080/api/v1/auth/register \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "admin@example.com",
|
|
"username": "admin",
|
|
"password": "YourSecurePassword123!",
|
|
"fullName": "Admin User"
|
|
}'
|
|
```
|
|
|
|
## Step 7: Access Application
|
|
|
|
Open your browser and navigate to:
|
|
- **Frontend**: http://your-server-ip
|
|
- **Backend API**: http://your-server-ip:8080
|
|
|
|
Login with the credentials you just created.
|
|
|
|
## Optional: Configure SSL/TLS
|
|
|
|
### Using Nginx Reverse Proxy
|
|
|
|
```bash
|
|
# Install Nginx
|
|
sudo apt install nginx -y
|
|
|
|
# Create configuration
|
|
sudo nano /etc/nginx/sites-available/trackeep
|
|
```
|
|
|
|
Paste this configuration:
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name your-domain.com;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:80;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
|
|
location /api/ {
|
|
proxy_pass http://localhost:8080;
|
|
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;
|
|
}
|
|
|
|
client_max_body_size 100M;
|
|
}
|
|
```
|
|
|
|
Enable and configure SSL:
|
|
|
|
```bash
|
|
# Enable site
|
|
sudo ln -s /etc/nginx/sites-available/trackeep /etc/nginx/sites-enabled/
|
|
|
|
# Test configuration
|
|
sudo nginx -t
|
|
|
|
# Install Certbot
|
|
sudo apt install certbot python3-certbot-nginx -y
|
|
|
|
# Get SSL certificate
|
|
sudo certbot --nginx -d your-domain.com
|
|
|
|
# Reload Nginx
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
## Optional: Configure Automated Backups
|
|
|
|
```bash
|
|
# Create backup script
|
|
sudo nano /usr/local/bin/backup-trackeep.sh
|
|
```
|
|
|
|
Paste this script:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
BACKUP_DIR="/var/backups/trackeep"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
# Backup database
|
|
docker-compose -f /path/to/Trackeep/docker-compose.prod.yml exec -T postgres \
|
|
pg_dump -U trackeep trackeep | gzip > $BACKUP_DIR/db_$DATE.sql.gz
|
|
|
|
# Backup uploads
|
|
tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz /path/to/Trackeep/uploads
|
|
|
|
# Keep only last 30 days
|
|
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete
|
|
|
|
echo "Backup completed: $DATE"
|
|
```
|
|
|
|
Make it executable and schedule:
|
|
|
|
```bash
|
|
# Make executable
|
|
sudo chmod +x /usr/local/bin/backup-trackeep.sh
|
|
|
|
# Add to crontab (daily at 2 AM)
|
|
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/backup-trackeep.sh") | crontab -
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Services won't start
|
|
|
|
```bash
|
|
# Check logs
|
|
docker-compose -f docker-compose.prod.yml logs
|
|
|
|
# Check specific service
|
|
docker-compose -f docker-compose.prod.yml logs trackeep-backend
|
|
|
|
# Restart services
|
|
docker-compose -f docker-compose.prod.yml restart
|
|
```
|
|
|
|
### Database connection failed
|
|
|
|
```bash
|
|
# Check database is running
|
|
docker-compose -f docker-compose.prod.yml ps postgres
|
|
|
|
# Check database logs
|
|
docker-compose -f docker-compose.prod.yml logs postgres
|
|
|
|
# Verify credentials in .env
|
|
cat .env | grep DB_
|
|
```
|
|
|
|
### Port already in use
|
|
|
|
```bash
|
|
# Check what's using the port
|
|
sudo lsof -i :8080
|
|
sudo lsof -i :80
|
|
|
|
# Change ports in .env
|
|
nano .env
|
|
# Update BACKEND_PORT and FRONTEND_PORT
|
|
|
|
# Restart services
|
|
docker-compose -f docker-compose.prod.yml down
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
```
|
|
|
|
### High memory usage
|
|
|
|
```bash
|
|
# Check container stats
|
|
docker stats
|
|
|
|
# Adjust memory limits in docker-compose.prod.yml
|
|
nano docker-compose.prod.yml
|
|
|
|
# Restart with new limits
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
```
|
|
|
|
## Maintenance Commands
|
|
|
|
```bash
|
|
# View logs
|
|
docker-compose -f docker-compose.prod.yml logs -f
|
|
|
|
# Restart services
|
|
docker-compose -f docker-compose.prod.yml restart
|
|
|
|
# Stop services
|
|
docker-compose -f docker-compose.prod.yml down
|
|
|
|
# Update application
|
|
git pull origin main
|
|
docker-compose -f docker-compose.prod.yml build
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
|
|
# Backup database manually
|
|
docker-compose -f docker-compose.prod.yml exec postgres \
|
|
pg_dump -U trackeep trackeep > backup_$(date +%Y%m%d).sql
|
|
|
|
# Restore database
|
|
docker-compose -f docker-compose.prod.yml exec -T postgres \
|
|
psql -U trackeep trackeep < backup_20260406.sql
|
|
|
|
# Clean up old images
|
|
docker system prune -a
|
|
```
|
|
|
|
## Security Checklist
|
|
|
|
- [ ] Changed all default passwords
|
|
- [ ] Generated strong JWT_SECRET and ENCRYPTION_KEY
|
|
- [ ] Configured firewall (allow only 80, 443, 22)
|
|
- [ ] Enabled HTTPS with valid SSL certificate
|
|
- [ ] Set up automated backups
|
|
- [ ] Configured monitoring
|
|
- [ ] Reviewed CORS settings
|
|
- [ ] Enabled 2FA for admin account
|
|
- [ ] Set up log rotation
|
|
- [ ] Configured rate limiting
|
|
|
|
## Performance Tuning
|
|
|
|
### Database Optimization
|
|
|
|
```bash
|
|
# Connect to database
|
|
docker-compose -f docker-compose.prod.yml exec postgres psql -U trackeep trackeep
|
|
|
|
# Run VACUUM
|
|
VACUUM ANALYZE;
|
|
|
|
# Check database size
|
|
SELECT pg_size_pretty(pg_database_size('trackeep'));
|
|
|
|
# Check table sizes
|
|
SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
|
|
FROM pg_tables
|
|
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
|
|
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
|
|
```
|
|
|
|
### Cache Optimization
|
|
|
|
```bash
|
|
# Check DragonflyDB stats
|
|
docker-compose -f docker-compose.prod.yml exec dragonfly redis-cli -a $DRAGONFLY_PASSWORD INFO
|
|
|
|
# Clear cache if needed
|
|
docker-compose -f docker-compose.prod.yml exec dragonfly redis-cli -a $DRAGONFLY_PASSWORD FLUSHALL
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
### Check Service Health
|
|
|
|
```bash
|
|
# Backend health
|
|
curl http://localhost:8080/health
|
|
|
|
# Check all services
|
|
docker-compose -f docker-compose.prod.yml ps
|
|
|
|
# Check resource usage
|
|
docker stats
|
|
```
|
|
|
|
### View Metrics
|
|
|
|
```bash
|
|
# Backend metrics (if enabled)
|
|
curl http://localhost:8080/metrics
|
|
|
|
# Database connections
|
|
docker-compose -f docker-compose.prod.yml exec postgres \
|
|
psql -U trackeep trackeep -c "SELECT count(*) FROM pg_stat_activity;"
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. **Configure AI Services** (optional)
|
|
- Navigate to Settings → AI Services in the app
|
|
- Add your API keys for desired AI providers
|
|
|
|
2. **Set Up Email** (optional)
|
|
- Configure SMTP settings in .env
|
|
- Test email functionality
|
|
|
|
3. **Customize Branding** (optional)
|
|
- Update logo and colors
|
|
- Modify frontend/src/assets/
|
|
|
|
4. **Enable Features** (optional)
|
|
- GitHub integration
|
|
- Browser extension
|
|
- Mobile app
|
|
|
|
## Support
|
|
|
|
- **Documentation**: See PRODUCTION_DEPLOYMENT.md for detailed guide
|
|
- **Issues**: https://github.com/Dvorinka/Trackeep/issues
|
|
- **Email**: info@tdvorak.dev
|
|
|
|
## Quick Reference
|
|
|
|
```bash
|
|
# Start services
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
|
|
# Stop services
|
|
docker-compose -f docker-compose.prod.yml down
|
|
|
|
# View logs
|
|
docker-compose -f docker-compose.prod.yml logs -f
|
|
|
|
# Restart service
|
|
docker-compose -f docker-compose.prod.yml restart trackeep-backend
|
|
|
|
# Check health
|
|
curl http://localhost:8080/health
|
|
|
|
# Backup database
|
|
docker-compose -f docker-compose.prod.yml exec postgres \
|
|
pg_dump -U trackeep trackeep > backup.sql
|
|
|
|
# Update application
|
|
git pull && docker-compose -f docker-compose.prod.yml build && \
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
```
|
|
|
|
---
|
|
|
|
**Congratulations!** 🎉 Trackeep is now running in production.
|
|
|
|
For detailed documentation, see:
|
|
- PRODUCTION_DEPLOYMENT.md - Complete deployment guide
|
|
- PRODUCTION_READY_SUMMARY.md - Production readiness summary
|
|
- CHANGELOG.md - Version history and changes
|