Files
afilmory/apps/docs/contents/deployment/vercel.mdx
Innei d5a2ea4db2 feat: enhance documentation and add new features for Afilmory
- Introduced a comprehensive `DEVELOPMENT.md` guide for contributors and self-hosters, detailing workspace layout and common commands.
- Updated `README.md` to include links to the new development guide and improved deployment instructions.
- Added new documentation files covering architecture, builder pipeline, configuration, and deployment strategies.
- Implemented new storage provider documentation for Backblaze B2, Eagle, GitHub, and local storage options.
- Enhanced the UI components with new features, including a navigation context and improved theme handling.
- Removed outdated GitHub Action deployment documentation.

Signed-off-by: Innei <tukon479@gmail.com>
2025-11-23 19:40:51 +08:00

194 lines
4.8 KiB
Plaintext

---
title: Vercel
description: Deploy your gallery to Vercel with server-side rendering support.
createdAt: 2025-07-20T22:35:03+08:00
lastModified: 2025-11-23T19:40:52+08:00
order: 54
---
# Vercel Deployment
Vercel is the recommended platform for deploying Afilmory with server-side rendering. It provides excellent Next.js support, automatic deployments, and global CDN distribution.
## Prerequisites
- Vercel account (free tier available)
- GitHub, GitLab, or Bitbucket repository
- Photos processed with builder (or configure builder to run on Vercel)
## Quick Start
### Option 1: Deploy from Git (Recommended)
1. **Connect Repository**
- Go to [Vercel Dashboard](https://vercel.com/dashboard)
- Click "Add New Project"
- Import your GitHub/GitLab/Bitbucket repository
2. **Configure Project**
- **Framework Preset**: Next.js
- **Root Directory**: `apps/ssr`
- **Install Command**: `pnpm install --frozen-lockfile`
- **Build Command**: `pnpm run build:manifest && pnpm --filter @afilmory/ssr build`
- **Output Directory**: `.next` (auto-detected)
3. **Set Environment Variables**
Add your storage credentials:
```
S3_ACCESS_KEY_ID=your_key
S3_SECRET_ACCESS_KEY=your_secret
S3_BUCKET_NAME=your_bucket
S3_REGION=us-east-1
```
(Adjust based on your storage provider)
4. **Deploy**
- Click "Deploy"
- Vercel will build and deploy automatically
### Option 2: Deploy with Pre-built Assets
If you use the GitHub repo cache plugin to store thumbnails and manifest:
1. Configure the plugin in `builder.config.ts`
2. Set environment variables:
```
GIT_TOKEN=your_token
BUILDER_REPO_URL=https://github.com/username/cache-repo
BUILDER_REPO_BRANCH=main
```
3. Vercel will download assets instead of rebuilding
## Project Configuration
### vercel.json (Optional)
Create `apps/ssr/vercel.json` for custom configuration:
```json
{
"buildCommand": "pnpm run build:manifest && pnpm --filter @afilmory/ssr build",
"installCommand": "pnpm install --frozen-lockfile",
"framework": "nextjs",
"nodeVersion": "20.x"
}
```
### Environment Variables
Set these in Vercel Dashboard → Project Settings → Environment Variables:
**Storage (S3 example):**
```
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_BUCKET_NAME
S3_REGION
S3_ENDPOINT (optional)
S3_PREFIX (optional)
```
**GitHub Repo Cache (optional):**
```
GIT_TOKEN
BUILDER_REPO_URL
BUILDER_REPO_BRANCH
```
## Build Process
Vercel runs this build process:
1. **Install dependencies**: `pnpm install --frozen-lockfile`
2. **Run builder**: `pnpm run build:manifest`
- Downloads photos from storage
- Generates thumbnails
- Creates manifest
3. **Build Next.js**: `pnpm --filter @afilmory/ssr build`
- Builds the Next.js application
- Bundles SPA assets
- Prepares for server-side rendering
4. **Deploy**: Vercel deploys the build output
## Performance Optimization
### Use Repo Cache Plugin
For faster builds, use the GitHub repo cache plugin:
```typescript
import { githubRepoSyncPlugin } from '@afilmory/builder'
plugins: [
githubRepoSyncPlugin({
repo: {
enable: true,
url: process.env.BUILDER_REPO_URL!,
token: process.env.GIT_TOKEN!,
branch: process.env.BUILDER_REPO_BRANCH || 'main',
},
}),
]
```
This stores thumbnails and manifest in a separate repo, avoiding full rebuilds on Vercel.
### Build Caching
Vercel automatically caches:
- `node_modules` between builds
- Build outputs for faster redeployments
## Custom Domain
1. Go to Project Settings → Domains
2. Add your domain
3. Configure DNS as instructed:
- Add CNAME record pointing to Vercel
- Or add A records for Vercel IPs
4. Vercel automatically provisions SSL
## Continuous Deployment
Vercel automatically deploys:
- **Production**: On push to main/master branch
- **Preview**: On every pull request and push to other branches
Each deployment gets a unique URL for previewing changes.
## Monitoring and Analytics
Vercel provides:
- **Deployment logs**: View build and runtime logs
- **Analytics**: Performance metrics (Pro plan)
- **Speed Insights**: Real user monitoring (Pro plan)
## Troubleshooting
**Build timeouts:**
- Use repo cache plugin to reduce build time
- Optimize storage access (use CDN)
- Consider reducing photo count for initial build
**Missing photos:**
- Verify storage credentials are correct
- Check build logs for authentication errors
- Ensure storage is accessible from Vercel
**Memory issues:**
- Reduce builder concurrency in config
- Process photos in smaller batches
- Consider upgrading Vercel plan
**Deployment failures:**
- Check build logs in Vercel dashboard
- Verify all environment variables are set
- Ensure `builder.config.ts` is correct
## Next Steps
- Configure custom domain
- Set up monitoring
- Optimize build performance with repo cache
- Review [Vercel documentation](https://vercel.com/docs) for advanced features