Files
Trackeep/QUICK_START_PRODUCTION.md
T
2026-04-10 12:06:01 +02:00

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