Skip to main content

VPS Deployment

Deploy Friday Dev on a cloud VPS (DigitalOcean, Linode, Vultr, AWS, etc.).

ProviderPlanSpecsMonthly Cost
DigitalOceanBasic Droplet2 vCPU, 4 GB RAM$24
LinodeLinode 4GB2 vCPU, 4 GB RAM$24
VultrCloud Compute2 vCPU, 4 GB RAM$24
AWSt3.medium2 vCPU, 4 GB RAM~$30
HetznerCX212 vCPU, 4 GB RAM€5

Quick Deploy Script

SSH into your VPS and run:

curl -fsSL https://friday-dev.com/deploy.sh | bash -s -- \
--domain your-domain.com \
--email your@email.com

This script will:

  1. Update system packages
  2. Install dependencies (Nginx, Certbot)
  3. Install Friday Dev
  4. Configure Nginx with SSL
  5. Set up systemd service

Manual Deployment

Step 1: Initial Setup

# Update system
sudo apt update && sudo apt upgrade -y

# Install dependencies
sudo apt install -y curl git build-essential pkg-config libssl-dev nginx certbot python3-certbot-nginx

Step 2: Install Rust (Optional, for building from source)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env

Step 3: Install Node.js (For frontend build)

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pnpm

Step 4: Download Friday Dev

Option A: Download Binary

wget https://github.com/friday-dev-team/friday-dev/releases/latest/download/friday-dev-linux-x64.tar.gz
tar -xzf friday-dev-linux-x64.tar.gz
sudo mv friday-dev /usr/local/bin/

Option B: Build from Source

git clone https://github.com/friday-dev-team/friday-dev.git
cd friday-dev

# Build backend
cargo build --release --package server

# Build frontend
cd frontend && pnpm install && pnpm run build && cd ..

# Install
sudo cp target/release/server /usr/local/bin/friday-dev
sudo mkdir -p /var/www/friday-dev
sudo cp -r frontend/dist/* /var/www/friday-dev/

Step 5: Set Up Directories

# Create data directory
sudo mkdir -p /var/lib/friday-dev
sudo chown $USER:$USER /var/lib/friday-dev

# Create config directory
sudo mkdir -p /etc/friday-dev

Step 6: Configure Environment

Create /etc/friday-dev/.env:

DATABASE_URL=sqlite:/var/lib/friday-dev/db.sqlite?mode=rwc
PORT=3000
RUST_LOG=info
GEMINI_API_KEY=your-gemini-api-key

Step 7: Create Systemd Service

Create /etc/systemd/system/friday-dev.service:

[Unit]
Description=Friday Dev - AI Development Platform
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/var/lib/friday-dev
EnvironmentFile=/etc/friday-dev/.env
ExecStart=/usr/local/bin/friday-dev
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Enable and start:

sudo systemctl daemon-reload
sudo systemctl enable friday-dev
sudo systemctl start friday-dev

Step 8: Configure Nginx

Create /etc/nginx/sites-available/friday-dev:

server {
listen 80;
server_name your-domain.com www.your-domain.com;

# Frontend
root /var/www/friday-dev;
index index.html;

# Gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript;

# 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;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}

# WebSocket
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;
}

# SPA Fallback
location / {
try_files $uri $uri/ /index.html;
}
}

Enable and test:

sudo ln -sf /etc/nginx/sites-available/friday-dev /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Step 9: Set Up SSL

sudo certbot --nginx -d your-domain.com -d www.your-domain.com \
--non-interactive --agree-tos -m your@email.com

Step 10: Verify Deployment

# Check service status
sudo systemctl status friday-dev

# Check logs
sudo journalctl -u friday-dev -f

# Test endpoint
curl https://your-domain.com/api/health

DNS Configuration

Point your domain to your VPS IP:

TypeNameValueTTL
A@YOUR_VPS_IP300
AwwwYOUR_VPS_IP300

Firewall

# Allow SSH, HTTP, HTTPS
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Enable firewall
sudo ufw enable

Provider-Specific Guides

DigitalOcean

# Create droplet with doctl
doctl compute droplet create friday-dev \
--image ubuntu-22-04-x64 \
--size s-2vcpu-4gb \
--region nyc1

AWS EC2

  1. Launch t3.medium with Ubuntu 22.04
  2. Configure security group (ports 22, 80, 443)
  3. Assign Elastic IP
  4. Follow manual deployment steps

Linode

# Create linode with CLI
linode-cli linodes create \
--type g6-standard-2 \
--region us-east \
--image linode/ubuntu22.04 \
--root_pass "secure-password" \
--label friday-dev

Monitoring

Set Up Monitoring

# Install monitoring agent (e.g., Netdata)
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Health Check Script

Create /usr/local/bin/friday-dev-health.sh:

#!/bin/bash
STATUS=$(curl -s http://localhost:3000/api/health | jq -r '.status')
if [ "$STATUS" != "ok" ]; then
echo "Friday Dev is unhealthy, restarting..."
systemctl restart friday-dev
fi

Add to crontab:

*/5 * * * * /usr/local/bin/friday-dev-health.sh

Backup

Automated Backup Script

Create /usr/local/bin/backup-friday-dev.sh:

#!/bin/bash
BACKUP_DIR="/backups/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"

# Upload to S3 (optional)
# aws s3 cp "$BACKUP_DIR/db_$DATE.sqlite" s3://your-bucket/backups/

# Keep last 7 days
find $BACKUP_DIR -mtime +7 -delete

Add to crontab:

0 3 * * * /usr/local/bin/backup-friday-dev.sh

Updating

Update Script

#!/bin/bash
# Stop service
sudo systemctl stop friday-dev

# Backup current version
sudo cp /usr/local/bin/friday-dev /usr/local/bin/friday-dev.bak

# Download new version
wget 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/

# Restart service
sudo systemctl start friday-dev

# Verify
curl https://your-domain.com/api/health

Troubleshooting

Service Won't Start

# Check logs
sudo journalctl -u friday-dev -n 100

# Check permissions
ls -la /var/lib/friday-dev/

# Test binary directly
/usr/local/bin/friday-dev --version

502 Bad Gateway

# Check if backend is running
curl http://localhost:3000/api/health

# Check Nginx config
sudo nginx -t

# Check Nginx error logs
sudo tail -f /var/log/nginx/error.log

SSL Issues

# Renew certificate manually
sudo certbot renew

# Check certificate status
sudo certbot certificates

Next Steps