# mdBook Deployment Guide Complete guide for deploying VAPORA documentation to production. ## 📋 Pre-Deployment Checklist Before deploying documentation: - [ ] Local build succeeds: `mdbook build` - [ ] No broken links in `src/SUMMARY.md` - [ ] All markdown follows formatting standards - [ ] `book.toml` is valid TOML - [ ] Each subdirectory has `README.md` - [ ] All relative paths are correct - [ ] Git workflows are configured --- ## 🚀 Deployment Options ### Option 1: GitHub Pages (GitHub.com) **Best for**: Public documentation, free hosting **Setup**: 1. Go to repository **Settings** → **Pages** 2. Under **Build and deployment**: - Source: **GitHub Actions** - (Leave branch selection empty) 3. Save settings **Deployment Process**: ```bash # Make documentation changes git add docs/ git commit -m "docs: update content" git push origin main # Automatic workflow triggers: # 1. mdBook Build & Deploy starts # 2. Builds documentation # 3. Uploads to GitHub Pages # 4. Available at: https://username.github.io/repo-name/ ``` **Verify Deployment**: 1. Go to **Settings** → **Pages** 2. Look for **Your site is live at: https://...** 3. Click link to verify 4. Hard refresh if needed (Ctrl+Shift+R) **Custom Domain** (optional): 1. Settings → Pages → **Custom domain** 2. Enter domain: `docs.vapora.io` 3. Add DNS record (CNAME): ``` docs.vapora.io CNAME username.github.io ``` 4. Wait 5-10 minutes for DNS propagation --- ### Option 2: Custom Server / Self-Hosted **Best for**: Private documentation, custom deployment **Setup**: 1. Create deployment script (e.g., `deploy.sh`): ```bash #!/bin/bash # .scripts/deploy-docs.sh cd docs mdbook build # Copy to web server scp -r book/ user@server:/var/www/docs/ echo "Documentation deployed!" ``` 2. Add to workflow `.github/workflows/mdbook-publish.yml`: ```yaml - name: Deploy to custom server run: bash .scripts/deploy-docs.sh env: DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} ``` 3. Add secrets in **Settings** → **Secrets and variables** → **Actions** --- ### Option 3: Docker & Container Registry **Best for**: Containerized deployment **Dockerfile**: ```dockerfile FROM nginx:alpine # Install mdBook RUN apk add --no-cache curl && \ curl -L https://github.com/rust-lang/mdBook/releases/download/v0.4.36/mdbook-v0.4.36-x86_64-unknown-linux-gnu.tar.gz | tar xz -C /usr/local/bin # Copy docs COPY docs /docs # Build WORKDIR /docs RUN mdbook build # Serve with nginx FROM nginx:alpine COPY --from=0 /docs/book /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` **Build & Push**: ```bash docker build -t myrepo/vapora-docs:latest . docker push myrepo/vapora-docs:latest ``` --- ### Option 4: CDN & Cloud Storage **Best for**: High availability, global distribution #### AWS S3 + CloudFront ```yaml - name: Deploy to S3 run: | aws s3 sync docs/book s3://my-docs-bucket/docs \ --delete --region us-east-1 env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} ``` #### Google Cloud Storage ```yaml - name: Deploy to GCS run: | gsutil -m rsync -d -r docs/book gs://my-docs-bucket/docs env: GCLOUD_SERVICE_KEY: ${{ secrets.GCLOUD_SERVICE_KEY }} ``` --- ## 🔄 Automated Deployment Workflow ### Push to Main ``` Your Changes ↓ git push origin main ↓ GitHub Triggers Workflows ↓ mdBook Build & Deploy Starts ├─ Checkout code ├─ Install mdBook ├─ Build documentation ├─ Validate quality ├─ Upload artifact └─ Deploy to Pages (or custom) ↓ Documentation Live ``` ### Manual Artifact Deployment For non-automated deployments: 1. Trigger workflow manually (if configured): ``` Actions → mdBook Build & Deploy → Run workflow ``` 2. Wait for completion 3. Download artifact: ``` Click run → Artifacts → mdbook-site-{sha} ``` 4. Extract and deploy: ```bash unzip mdbook-site-abc123.zip scp -r book/* user@server:/var/www/docs/ ``` --- ## 🔐 Security Considerations ### Secrets Management Never commit API keys or credentials. Use GitHub Secrets: ```bash # Add secret Settings → Secrets and variables → Actions → New repository secret Name: DEPLOY_TOKEN Value: your-token-here ``` Reference in workflow: ```yaml env: DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }} ``` ### Branch Protection Prevent direct pushes to main: ``` Settings → Branches → Add rule ├─ Branch name pattern: main ├─ Require pull request reviews: 1 ├─ Dismiss stale PR approvals: ✓ ├─ Require status checks to pass: ✓ └─ Include administrators: ✓ ``` ### Access Control Limit who can deploy: 1. Settings → Environments → Create new 2. Name: `docs` or `production` 3. Under "Required reviewers": Add team/users 4. Deployments require approval --- ## 📊 Monitoring Deployment ### GitHub Actions Dashboard **View all deployments**: ``` Actions → All workflows → mdBook Build & Deploy ``` **Check individual run**: - Status (✅ Success, ❌ Failed) - Execution time - Log details - Artifact details ### Health Checks Monitor deployed documentation: ```bash # Check if site is live curl -I https://docs.vapora.io # Expected: 200 OK # Check content curl https://docs.vapora.io | grep "VAPORA" ``` ### Performance Monitoring 1. **Lighthouse** (local): ```bash lighthouse https://docs.vapora.io ``` 2. **GitHub Pages Analytics** (if enabled) 3. **Custom monitoring**: - Check response time - Monitor 404 errors - Track page views --- ## 🔍 Troubleshooting Deployment ### Issue: GitHub Pages shows 404 **Cause**: Pages not configured or build failed **Fix**: ``` 1. Settings → Pages → Verify source is "GitHub Actions" 2. Check Actions tab for build failures 3. Hard refresh browser (Ctrl+Shift+R) 4. Wait 1-2 minutes if just deployed ``` ### Issue: Custom domain not resolving **Cause**: DNS not propagated or CNAME incorrect **Fix**: ```bash # Check DNS resolution nslookup docs.vapora.io # Should show correct IP # Wait 5-10 minutes if just created # Check CNAME record: dig docs.vapora.io CNAME ``` ### Issue: Old documentation still showing **Cause**: Browser cache or CDN cache **Fix**: ```bash # Hard refresh in browser Ctrl+Shift+R (Windows/Linux) Cmd+Shift+R (Mac) # Or clear entire browser cache # Settings → Privacy → Clear browsing data # For CDN: Purge cache AWS CloudFront: Go to Distribution → Invalidate ``` ### Issue: Deployment workflow fails **Check logs**: 1. Go to Actions → Failed run 2. Click job name 3. Expand failed step 4. Look for error message **Common errors**: | Error | Fix | |-------|-----| | `mdbook: command not found` | First run takes time to install | | `Cannot find file` | Check SUMMARY.md relative paths | | `Permission denied` | Check deployment secrets/keys | | `Network error` | Check firewall/connectivity | --- ## 📝 Post-Deployment Tasks After successful deployment: ### Verification - [ ] Site loads at correct URL - [ ] Search functionality works - [ ] Dark mode toggles - [ ] Print works (Ctrl+P) - [ ] Mobile layout responsive - [ ] Links work - [ ] Code blocks highlight properly ### Notification - [ ] Announce new docs in release notes - [ ] Update README with docs link - [ ] Share link in team/community channels - [ ] Update analytics tracking (if applicable) ### Monitoring - [ ] Set up 404 alerts - [ ] Monitor page load times - [ ] Track deployment frequency - [ ] Review error logs regularly --- ## 🔄 Update Process ### For Regular Updates **Documentation updates**: ```bash # 1. Update content vi docs/setup/setup-guide.md # 2. Test locally cd docs && mdbook serve # 3. Commit and push git add docs/ git commit -m "docs: update setup guide" git push origin main # 4. Automatic deployment (3-5 minutes) ``` ### For Major Releases ```bash # 1. Update version numbers vi docs/book.toml # Update title/description # 2. Add changelog entry vi docs/README.md # 3. Build and verify cd docs && mdbook clean && mdbook build # 4. Create release commit git add docs/ git commit -m "chore: release docs v1.2.0" git tag -a v1.2.0 -m "Documentation v1.2.0" # 5. Push git push origin main --tags # 6. Automatic deployment ``` --- ## 🎯 Best Practices ### Documentation Maintenance - ✅ Update docs with every code change - ✅ Keep SUMMARY.md in sync with content - ✅ Use relative links consistently - ✅ Test links before deploying - ✅ Review markdown formatting ### Deployment Best Practices - ✅ Always test locally first - ✅ Review workflow logs after deployment - ✅ Monitor for 404 errors - ✅ Keep 30-day artifact backups - ✅ Document deployment procedures - ✅ Set up redundant deployments - ✅ Have rollback plan ready ### Security Best Practices - ✅ Use GitHub Secrets for credentials - ✅ Enable branch protection on main - ✅ Require status checks before merge - ✅ Limit deployment access - ✅ Audit deployment logs - ✅ Rotate credentials regularly --- ## 📞 Support & Resources ### Documentation - `.github/WORKFLOWS.md` — Workflow quick reference - `docs/mdbook-setup.md` — mdBook setup guide - `docs/github-actions-setup.md` — Full workflow documentation - `docs/README.md` — Documentation standards ### External Resources - [mdBook Documentation](https://rust-lang.github.io/mdBook/) - [GitHub Actions Docs](https://docs.github.com/en/actions) - [GitHub Pages](https://pages.github.com/) ### Troubleshooting - Check workflow logs: Repository → Actions → Failed run - Enable verbose logging: Add `--verbose` flags - Test locally: `cd docs && mdbook serve` --- **Last Updated**: 2026-01-12 **Status**: ✅ Ready for Production For workflow configuration details, see: `.github/workflows/mdbook-*.yml`