Docker 部署

快速摘要
Fork https://github.com/Afilmory/docker 自定义配置并构建镜像。
说明
该教程会部署Afilmory/afilmory的代码,而并非本站,若要部署本站,推荐查看其他方式部署
🚀 快速开始
使用 Docker 部署 Afilmory 是一种便捷高效的方式来管理您的照片画廊应用。本指南将引导您完成使用 Docker 设置和运行 Afilmory 的步骤。
前提条件
- Docker
- Docker Compose(可选但推荐)
- PostgreSQL 数据库(用于 SSR 应用)
1. 配置文件
在构建 Docker 镜像之前,您需要配置以下文件:
config.json
{
"name": "您的照片画廊",
"title": "您的照片画廊",
"description": "捕捉生活中的美好瞬间",
"url": "https://your-domain.com",
"accentColor": "#fb7185",
"author": {
"name": "您的名字",
"url": "https://your-website.com",
"avatar": "https://your-avatar-url.com/avatar.png"
},
"social": {
"twitter": "@yourusername"
},
"extra": {
"accessRepo": true
}
}
builder.config.json
{
"repo": {
"enable": false,
"url": "https://github.com/username/gallery-public"
},
"storage": {
"provider": "s3",
"bucket": "your-photos-bucket",
"region": "us-east-1",
"prefix": "photos/",
"customDomain": "cdn.yourdomain.com"
},
"performance": {
"worker": {
"enabled": true,
"maxWorkers": 4
}
}
}
.env
# 数据库配置
PG_CONNECTION_STRING=postgresql://user:password@postgres:5432/afilmory
# S3 存储配置
S3_ACCESS_KEY_ID=your_access_key_id
S3_SECRET_ACCESS_KEY=your_secret_access_key
# Git 仓库(可选)
GIT_TOKEN=your_github_token
# 应用设置
NODE_ENV=production
PORT=3000
2. Dockerfile 设置
在项目根目录创建 Dockerfile 文件:
# 用于 pnpm 单体仓库中 Next.js 应用的 Dockerfile
# 此 Dockerfile 应从单体仓库的根目录构建:
# > docker build -t iris-ssr .
# > docker run -p 3000:3000 iris-ssr
# -----------------
# 基础阶段
# -----------------
FROM node:20-alpine AS base
WORKDIR /app
RUN corepack enable
# -----------------
# 构建阶段
# -----------------
FROM base AS builder
RUN apk update && apk add --no-cache git perl
RUN git clone https://github.com/Afilmory/Afilmory --depth 1 .
COPY config.json ./
COPY builder.config.json ./
COPY .env ./
ARG S3_ACCESS_KEY_ID
ARG S3_SECRET_ACCESS_KEY
ARG GIT_TOKEN
ARG PG_CONNECTION_STRING
RUN sh ./scripts/preinstall.sh
# 安装所有依赖
RUN pnpm install --frozen-lockfile
# 构建应用。
# ssr package.json 中的构建脚本首先处理构建 web 应用。
RUN pnpm --filter=@afilmory/ssr build
# -----------------
# 运行阶段
# -----------------
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
# ENV PORT 和其他配置现在位于配置文件中
# 并在运行时通过环境变量传递。
RUN apk add --no-cache curl wget
# 创建非 root 用户
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs
COPY --from=builder --chown=nextjs:nodejs /app/apps/ssr/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/apps/ssr/.next/static /app/apps/ssr/.next/static
COPY --from=builder --chown=nextjs:nodejs /app/apps/ssr/public /app/apps/ssr/public
# 独立输出包含 server.js 文件。
# PORT 环境变量会被 Next.js 自动使用。
EXPOSE 3000
CMD ["node", "apps/ssr/server.js"]
3. Docker Compose 设置
在项目根目录创建 docker-compose.yml 文件:
version: '3.8'
services:
afilmory:
build: .
ports:
- '3000:3000'
environment:
- NODE_ENV=production
volumes:
- ./config.json:/app/config.json:ro
- ./builder.config.json:/app/builder.config.json:ro
- ./.env:/app/.env:ro
depends_on:
- postgres
restart: unless-stopped
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: afilmory
POSTGRES_USER: afilmory
POSTGRES_PASSWORD: your_secure_password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
postgres_data:
4. 构建和运行
选项 1:使用 Docker Compose(推荐)
# 构建并启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -f afilmory
# 停止服务
docker-compose down
选项 2:手动 Docker 构建
# 构建镜像
docker build -t afilmory .
# 运行容器
docker run -d \
--name afilmory \
-p 3000:3000 \
--env-file .env \
-v $(pwd)/config.json:/app/config.json:ro \
-v $(pwd)/builder.config.json:/app/builder.config.json:ro \
afilmory
📋 配置详情
存储提供商
Afilmory 支持多种存储提供商。在 builder.config.json 中配置它们:
S3 兼容存储:
{
"storage": {
"provider": "s3",
"bucket": "your-bucket",
"region": "us-east-1",
"prefix": "photos/",
"customDomain": "cdn.example.com"
}
}
GitHub 存储:
{
"storage": {
"provider": "github",
"owner": "username",
"repo": "photo-storage",
"branch": "main",
"path": "photos/"
}
}| 创建时间 | |
| 修改时间 |