Self-Hosted Deployment
Deploy Friday Dev on your own infrastructure for full control and privacy.
Why Self-Host?
- Data Privacy - Keep all data on your servers
- Customization - Full control over configuration
- No Limits - Unlimited usage, no rate limits
- Compliance - Meet regulatory requirements
- Air-gapped - Deploy in isolated networks
Requirements
Minimum
| Resource | Requirement |
|---|---|
| CPU | 2 cores |
| RAM | 4 GB |
| Disk | 10 GB SSD |
| OS | Linux (Ubuntu 20.04+), macOS, Windows |
Recommended
| Resource | Requirement |
|---|---|
| CPU | 4+ cores |
| RAM | 8+ GB |
| Disk | 50+ GB SSD |
| OS | Ubuntu 22.04 LTS |
Quick Deploy
One-Line Install
curl -fsSL https://friday-dev.com/install.sh | bash
This will:
- Install Friday Dev binary
- Set up systemd service
- Configure Nginx
- Set up SSL (Let's Encrypt)
Manual Install
# Download binary
wget https://github.com/friday-dev-team/friday-dev/releases/latest/download/friday-dev-linux-x64.tar.gz
# Extract
tar -xzf friday-dev-linux-x64.tar.gz
# Move to PATH
sudo mv friday-dev /usr/local/bin/
# Verify
friday-dev --version
Configuration
Environment Variables
# Required
export DATABASE_URL="sqlite:/var/lib/friday-dev/db.sqlite?mode=rwc"
export PORT=3000
# API Keys (at least one required for AI features)
export GEMINI_API_KEY="your-key"
export OPENAI_API_KEY="your-key"
export ANTHROPIC_API_KEY="your-key"
# Optional
export RUST_LOG=info
export HOST=0.0.0.0
Config File
Create /etc/friday-dev/config.json:
{
"server": {
"port": 3000,
"host": "0.0.0.0"
},
"database": {
"url": "sqlite:/var/lib/friday-dev/db.sqlite?mode=rwc"
},
"apiKeys": {
"gemini": "your-gemini-key",
"openai": "your-openai-key"
},
"security": {
"enableAuth": true,
"jwtSecret": "your-secret-key"
}
}
Systemd Service
Create /etc/systemd/system/friday-dev.service:
[Unit]
Description=Friday Dev - AI Development Platform
After=network.target
[Service]
Type=simple
User=friday-dev
Group=friday-dev
WorkingDirectory=/var/lib/friday-dev
ExecStart=/usr/local/bin/friday-dev
Restart=always
RestartSec=5
Environment="DATABASE_URL=sqlite:/var/lib/friday-dev/db.sqlite?mode=rwc"
Environment="RUST_LOG=info"
Environment="PORT=3000"
[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable friday-dev
sudo systemctl start friday-dev
Nginx Reverse Proxy
Create /etc/nginx/sites-available/friday-dev:
server {
listen 80;
server_name your-domain.com;
# Redirect to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
# SSL certificates (Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# Frontend static files
location / {
root /var/www/friday-dev;
try_files $uri $uri/ /index.html;
}
# API proxy
location /api {
proxy_pass http://127.0.0.1:3000;
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;
}
# WebSocket proxy
location /ws {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
# Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
Enable:
sudo ln -sf /etc/nginx/sites-available/friday-dev /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
SSL with Let's Encrypt
# Install Certbot
sudo apt install certbot python3-certbot-nginx
# Get certificate
sudo certbot --nginx -d your-domain.com
# Auto-renewal (usually automatic)
sudo certbot renew --dry-run
Database
SQLite (Default)
Good for single-server deployments:
# Location
/var/lib/friday-dev/db.sqlite
# Backup
sqlite3 /var/lib/friday-dev/db.sqlite ".backup '/backup/db-$(date +%Y%m%d).sqlite'"
PostgreSQL (Scaling)
For larger deployments:
# Install PostgreSQL
sudo apt install postgresql
# Create database
sudo -u postgres createdb friday_dev
sudo -u postgres createuser friday_dev
# Configure
export DATABASE_URL="postgresql://friday_dev:password@localhost/friday_dev"
Security
Firewall
# Allow HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Block direct access to backend port
sudo ufw deny 3000/tcp
# Enable firewall
sudo ufw enable
User Permissions
# Create dedicated user
sudo useradd -r -s /bin/false friday-dev
# Set ownership
sudo chown -R friday-dev:friday-dev /var/lib/friday-dev
# Restrict permissions
sudo chmod 700 /var/lib/friday-dev
API Key Security
# Never in config files, use environment
export GEMINI_API_KEY="your-key"
# Or use secrets manager
# AWS Secrets Manager, HashiCorp Vault, etc.
Monitoring
Logs
# View service logs
sudo journalctl -u friday-dev -f
# Log location
/var/log/friday-dev/
Health Check
# Check service status
curl http://localhost:3000/api/health
# Expected response
{"status": "ok", "version": "0.1.0"}
Metrics (Prometheus)
Friday Dev exposes metrics at /metrics:
curl http://localhost:3000/metrics
Example Prometheus config:
scrape_configs:
- job_name: 'friday-dev'
static_configs:
- targets: ['localhost:3000']
Updates
Automatic Updates
# Create update script
cat > /usr/local/bin/update-friday-dev.sh << 'EOF'
#!/bin/bash
curl -fsSL https://github.com/friday-dev-team/friday-dev/releases/latest/download/friday-dev-linux-x64.tar.gz -o /tmp/friday-dev.tar.gz
tar -xzf /tmp/friday-dev.tar.gz -C /tmp
sudo mv /tmp/friday-dev /usr/local/bin/
sudo systemctl restart friday-dev
EOF
chmod +x /usr/local/bin/update-friday-dev.sh
Manual Updates
# Stop service
sudo systemctl stop friday-dev
# Download new version
wget https://github.com/friday-dev-team/friday-dev/releases/download/v0.2.0/friday-dev-linux-x64.tar.gz
# Replace binary
sudo mv friday-dev /usr/local/bin/
# Start service
sudo systemctl start friday-dev
Backup & Recovery
Backup Script
#!/bin/bash
BACKUP_DIR="/backup/friday-dev"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Backup database
cp /var/lib/friday-dev/db.sqlite "$BACKUP_DIR/db_$DATE.sqlite"
# Backup config
cp /etc/friday-dev/config.json "$BACKUP_DIR/config_$DATE.json"
# Keep last 7 days
find $BACKUP_DIR -mtime +7 -delete
Recovery
# Stop service
sudo systemctl stop friday-dev
# Restore database
cp /backup/friday-dev/db_20240115.sqlite /var/lib/friday-dev/db.sqlite
# Start service
sudo systemctl start friday-dev
Troubleshooting
Service Won't Start
# Check logs
sudo journalctl -u friday-dev -n 50
# Common issues:
# - Port already in use
# - Database permission errors
# - Missing environment variables
Connection Refused
# Check if service is running
sudo systemctl status friday-dev
# Check if port is listening
sudo netstat -tlnp | grep 3000
# Check firewall
sudo ufw status
Database Errors
# Check permissions
ls -la /var/lib/friday-dev/
# Fix permissions
sudo chown friday-dev:friday-dev /var/lib/friday-dev/db.sqlite
# Reset database (caution: loses data)
sudo rm /var/lib/friday-dev/db.sqlite
sudo systemctl restart friday-dev
Next Steps
- Docker Deployment - Container deployment
- VPS Deployment - Cloud VPS guide
- Configuration - Detailed config