Full-Stack Development
Production Deployment
Deploy RaisFast to production — single server, Docker, TLS, CI/CD, and monitoring.
Deployment Options
| Method | Best For | Complexity |
|---|---|---|
| Single binary + systemd | Small apps, VPS | Low |
| Docker | Teams, CI/CD | Medium |
| Docker Compose | Full stack (backend + frontend) | Medium |
Option 1 — Single Binary
The simplest deployment. Just copy and run.
Build or Download
# Download latest release
curl -fsSL https://raisfast.com/install.sh | sh
# Or build from source
git clone https://github.com/RaisFast/raisfast.git
cd raisfast
cargo build --release --no-default-features --features db-sqliteProduction .env
APP_ENV=production
APP_HOST=0.0.0.0
APP_PORT=9898
DATABASE_URL=sqlite:./storage/db/raisfast.db?mode=rwc
JWT_SECRET=<your-strong-secret-at-least-32-chars>
JWT_ACCESS_EXPIRES=900
JWT_REFRESH_EXPIRES=604800
CORS_ORIGINS=https://yourdomain.com
BASE_URL=https://api.yourdomain.com
STORAGE_DRIVER=local
UPLOAD_DIR=./storage/uploads
MAX_UPLOAD_SIZE=104857600systemd Service
[Unit]
Description=RaisFast Server
After=network.target
[Service]
Type=simple
User=raisfast
WorkingDirectory=/opt/raisfast
ExecStart=/opt/raisfast/raisfast
Restart=always
RestartSec=5
EnvironmentFile=/opt/raisfast/.env
[Install]
WantedBy=multi-user.targetsudo systemctl enable raisfast
sudo systemctl start raisfastOption 2 — Docker
Dockerfile
FROM debian:bookworm-slim
COPY target/release/raisfast /usr/local/bin/raisfast
COPY .env /app/.env
WORKDIR /app
EXPOSE 9898
CMD ["raisfast"]Build and Run
docker build -t raisfast .
docker run -d \
--name raisfast \
-p 9898:9898 \
-v raisfast-data:/app/storage \
--env-file .env \
raisfastDocker Compose (Backend + Frontend)
services:
backend:
build: .
ports:
- "9898:9898"
volumes:
- ./storage:/app/storage
env_file: .env
frontend:
build: ./frontend
ports:
- "3000:3000"
environment:
- RAISFAST_URL=http://backend:9898
caddy:
image: caddy:2
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy-data:/data
- caddy-config:/config
volumes:
caddy-data:
caddy-config:TLS / HTTPS
Option A — Caddy (Automatic HTTPS)
yourdomain.com {
reverse_proxy localhost:3000
}
api.yourdomain.com {
reverse_proxy localhost:9898
}Caddy automatically provisions and renews Let's Encrypt certificates.
Option B — Nginx + Certbot
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9898;
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;
}
}Option C — Built-in TLS
TLS_CERT_PATH=/etc/ssl/certs/yourdomain.pem
TLS_KEY_PATH=/etc/ssl/private/yourdomain.keyHealth Monitoring
Health Endpoint
curl http://localhost:9898/healthServer Info
curl http://localhost:9898/api/v1/infoBackup
# Manual backup
raisfast db backup
# Cron job (daily at 2 AM)
0 2 * * * /usr/local/bin/raisfast db backup >> /var/log/raisfast-backup.log 2>&1CI/CD (GitHub Actions Example)
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build frontend
run: |
cd frontend
npm ci
npm run build
- name: Deploy
run: |
rsync -avz frontend/dist/ server:/var/www/frontend/
ssh server "cd /opt/raisfast && git pull && sudo systemctl restart raisfast"Production Checklist
APP_ENV=productionis setJWT_SECRETis a strong random string (32+ chars)CORS_ORIGINSlists your frontend domainsBASE_URLmatches your public URL- TLS is enabled (Caddy/Nginx/built-in)
- Database backups are scheduled
- Upload directory is writable
- Health endpoint is monitored
