mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-07-29 05:53:50 +00:00
small fix, don't worry about it
This commit is contained in:
@@ -0,0 +1,430 @@
|
||||
# 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": "[email protected]",
|
||||
"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
|
||||
Reference in New Issue
Block a user