Files
afilmory/apps/docs/contents/deployment/github-pages.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

160 lines
3.5 KiB
Plaintext

---
title: GitHub Pages
description: Deploy your gallery to GitHub Pages for free static hosting.
createdAt: 2025-07-20T22:35:03+08:00
lastModified: 2025-11-23T19:40:52+08:00
order: 52
---
# GitHub Pages Deployment
GitHub Pages provides free static hosting for your gallery. It's the simplest deployment option with zero server maintenance.
## Prerequisites
- GitHub repository
- Photos processed with builder
- Static build ready
## Deployment Steps
### Step 1: Build Your Gallery
Generate thumbnails, manifest, and static build:
```bash
# Install dependencies
pnpm install
# Generate thumbnails and manifest
pnpm run build:manifest
# Build static site
pnpm --filter web build
```
### Step 2: Prepare Files for Deployment
You need to deploy:
- `apps/web/dist/` - Built application
- `apps/web/public/thumbnails/` - Thumbnails
- `apps/web/src/data/photos-manifest.json` - Manifest
### Step 3: Deploy to GitHub Pages
#### Option A: gh-pages Branch (Simplest)
Push the `dist` folder to a `gh-pages` branch:
```bash
# From project root
git subtree push --prefix apps/web/dist origin gh-pages
```
Or manually:
```bash
cd apps/web/dist
git init
git add .
git commit -m "Deploy to GitHub Pages"
git branch -M gh-pages
git remote add origin https://github.com/username/repo.git
git push -u origin gh-pages
```
#### Option B: GitHub Actions (Automated)
Create `.github/workflows/deploy.yml`:
```yaml
name: Deploy to GitHub Pages
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v2
with:
version: 8
- uses: actions/setup-node@v3
with:
node-version: 20
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm run build:manifest
- run: pnpm --filter web build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./apps/web/dist
```
### Step 4: Configure GitHub Pages
1. Go to repository Settings → Pages
2. Select source: Branch `gh-pages` / Root `/`
3. Save settings
4. Your site will be available at `https://username.github.io/repo/`
## Custom Domain
To use a custom domain:
1. Add a `CNAME` file in `apps/web/dist/` with your domain:
```
gallery.yourdomain.com
```
2. Configure DNS:
- Add a CNAME record pointing to `username.github.io`
- Or add A records for GitHub Pages IPs
3. In repository Settings → Pages, enter your custom domain
4. GitHub will automatically provision SSL
## Updating Your Gallery
After adding new photos:
1. Run builder: `pnpm run build:manifest`
2. Rebuild: `pnpm --filter web build`
3. Redeploy: Push `dist` folder to `gh-pages` branch again
Or let GitHub Actions handle it automatically on push to main.
## Limitations
- **Static only**: No server-side rendering or dynamic features
- **Repository size**: Keep repository under 1GB for best performance
- **Build time**: GitHub Actions has time limits for free accounts
## Troubleshooting
**Site not updating:**
- Clear browser cache
- Check GitHub Pages build status
- Verify files are in `gh-pages` branch
**404 errors:**
- Ensure `dist` folder structure is correct
- Check base path configuration
- Verify GitHub Pages source branch
**Build failures:**
- Check GitHub Actions logs
- Verify all dependencies are in `package.json`
- Ensure storage credentials are set (if using remote storage)