# Deployment Quick Start Guide

Get your mdBook documentation deployed in minutes.

## Choose Your Deployment Method

### 🔄 Option 1: SSH/SFTP (Recommended for Most)

**Best for**: Private servers, simple setup, full control

**Setup Time**: 10 minutes

```bash
# 1. Create SSH key pair (if needed)
ssh-keygen -t ed25519 -f ~/.ssh/vapora-docs -N ""

# 2. SSH into your server and set up docs user
ssh user@your-server.com
sudo useradd -m -d /var/www/docs -s /bin/bash docs
sudo mkdir -p /var/www/docs/.ssh
sudo chmod 700 /var/www/docs/.ssh
exit

# 3. Add public key to server
cat ~/.ssh/vapora-docs.pub | ssh user@your-server.com \
  "sudo -u docs tee -a /var/www/docs/.ssh/authorized_keys"

# 4. Test connection
ssh -i ~/.ssh/vapora-docs docs@your-server.com ls

# 5. Add GitHub secrets
# Settings → Secrets and variables → Actions → New repository secret
# DOCS_DEPLOY_METHOD = ssh
# DOCS_DEPLOY_HOST = your-server.com
# DOCS_DEPLOY_USER = docs
# DOCS_DEPLOY_PATH = /var/www/docs
# DOCS_DEPLOY_KEY = [base64 encode: cat ~/.ssh/vapora-docs | base64]
```

### ☁️ Option 2: AWS S3 (Best for Scale)

**Best for**: High availability, CDN, minimal ops

**Setup Time**: 5 minutes

```bash
# 1. Create IAM user
aws iam create-user --user-name vapora-docs-deployer
aws iam create-access-key --user-name vapora-docs-deployer

# 2. Create S3 bucket
aws s3 mb s3://vapora-docs --region us-east-1

# 3. Attach policy (copy from docs/custom-deployment-server.md)

# 4. Add GitHub secrets
# DOCS_DEPLOY_METHOD = s3
# AWS_ACCESS_KEY_ID = [from step 1]
# AWS_SECRET_ACCESS_KEY = [from step 1]
# AWS_DOCS_BUCKET = vapora-docs
# AWS_REGION = us-east-1
```

### 🌐 Option 3: GitHub Pages (Simplest)

**Best for**: Public documentation, zero server ops

**Setup Time**: 2 minutes

```bash
# 1. Go to Settings → Pages
# 2. Select Source: GitHub Actions
# 3. Save
# 4. Push any docs/ change
# Done! Automatic deployment in 1-2 minutes
```

---

## Minimal SSH Setup (Step-by-Step)

### On Your Server

```bash
# 1. Create docs directory
mkdir -p /var/www/docs
cd /var/www/docs

# 2. Set up for web serving
sudo apt-get install nginx -y  # or yum install nginx

# 3. Create nginx config
sudo tee /etc/nginx/sites-available/docs > /dev/null << 'EOF'
server {
    listen 80;
    server_name docs.your-domain.com;
    root /var/www/docs;

    location / {
        index index.html;
        try_files $uri $uri/ =404;
    }

    location ~* \.(js|css|fonts)$ {
        expires 1h;
    }
}
EOF

# 4. Enable site
sudo ln -s /etc/nginx/sites-available/docs /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```

### On Your Local Machine

```bash
# 1. Create SSH key (if needed)
ssh-keygen -t ed25519 -f ~/.ssh/vapora-docs -N ""

# 2. Copy key to server
ssh-copy-id -i ~/.ssh/vapora-docs user@your-server.com

# 3. Test
ssh -i ~/.ssh/vapora-docs user@your-server.com

# 4. Base64 encode key for GitHub
cat ~/.ssh/vapora-docs | base64 -w0 > /tmp/key.b64
cat /tmp/key.b64  # Copy this
```

### In GitHub

Go to **Settings** → **Secrets and variables** → **Actions**

Create these secrets:

| Name | Value |
|------|-------|
| `DOCS_DEPLOY_METHOD` | `ssh` |
| `DOCS_DEPLOY_HOST` | `your-server.com` |
| `DOCS_DEPLOY_USER` | `user` |
| `DOCS_DEPLOY_PATH` | `/var/www/docs` |
| `DOCS_DEPLOY_KEY` | Paste base64-encoded key |

---

## Test Your Setup

### Local Test

```bash
# Build locally
cd docs
mdbook build

# Test deployment script
bash ../.scripts/deploy-docs.sh production
```

### GitHub Actions Test

```bash
# Make a test commit
git add docs/README.md
git commit -m "test: trigger deployment"
git push origin main

# Watch Actions tab
# Actions → mdBook Publish & Sync → View run
```

---

## Verify Deployment

### Check SSH Deployment

```bash
# SSH into server
ssh -i ~/.ssh/vapora-docs user@your-server.com

# Verify files
ls -lah /var/www/docs/
cat /var/www/docs/index.html | head -20

# Check nginx logs
sudo tail -f /var/log/nginx/access.log
```

### Check S3 Deployment

```bash
aws s3 ls s3://vapora-docs/

# Or visit via CloudFront
https://docs-cdn.cloudfront.net/
```

### Check GitHub Pages

```bash
# Visit the URL shown in Settings → Pages
https://username.github.io/vapora/
```

---

## Common Issues & Fixes

### SSH Connection Fails

```bash
# Test SSH connection
ssh -vvv -i ~/.ssh/vapora-docs user@your-server.com

# Check key permissions
ls -la ~/.ssh/vapora-docs
chmod 600 ~/.ssh/vapora-docs
chmod 700 ~/.ssh

# Add server to known_hosts
ssh-keyscan your-server.com >> ~/.ssh/known_hosts
```

### Deployment Script Can't Find Files

```bash
# Verify mdBook built successfully
cd docs
mdbook build
ls -la book/index.html
```

### Files Not Appearing on Website

```bash
# Check nginx root directory
sudo nginx -T | grep root

# Verify permissions
sudo ls -la /var/www/docs/

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

### GitHub Actions Fails

1. Go to **Actions** → Failed workflow
2. Expand **Deploy to Custom Server** step
3. Look for error message
4. Common issues:
   - Secret not set correctly
   - SSH key not base64 encoded
   - Server not reachable

---

## Next Steps

1. Choose deployment method above
2. Follow setup instructions
3. Test locally: `bash .scripts/deploy-docs.sh production`
4. Push test commit to trigger GitHub Actions
5. Monitor Actions tab
6. Verify deployment succeeded
7. Check your documentation site

---

## Need Help?

- Full guide: See `docs/custom-deployment-server.md`
- Workflow reference: See `.github/WORKFLOWS.md`
- Deployment script: `.scripts/deploy-docs.sh`
- GitHub Secrets: Repository → Settings → Secrets and variables → Actions

---

**Last Updated**: 2026-01-12
**Estimated Setup Time**: 10-15 minutes
