This commit is contained in:
@@ -0,0 +1,31 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main, master]
|
||||||
|
pull_request:
|
||||||
|
branches: [main, master]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint-and-build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
cache: npm
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Lint
|
||||||
|
run: npm run lint
|
||||||
|
|
||||||
|
- name: Test server
|
||||||
|
run: npm run test
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
JWT_SECRET=your-random-secret-key-min-32-chars
|
||||||
|
APP_ENCRYPTION_KEY=your-32-char-encryption-key
|
||||||
|
DEFAULT_ADMIN_USERNAME=admin
|
||||||
|
DEFAULT_ADMIN_PASSWORD=admin
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Stage 1: Build web
|
||||||
|
FROM node:20-alpine AS web-builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package*.json ./
|
||||||
|
COPY apps/web/package*.json ./apps/web/
|
||||||
|
COPY apps/server/package*.json ./apps/server/
|
||||||
|
RUN npm ci
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build -w apps/web
|
||||||
|
|
||||||
|
# Stage 2: Build server
|
||||||
|
FROM node:20-alpine AS server-builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=web-builder /app/node_modules ./node_modules
|
||||||
|
COPY --from=web-builder /app/package*.json ./
|
||||||
|
COPY --from=web-builder /app/apps/web ./apps/web
|
||||||
|
COPY --from=web-builder /app/apps/server ./apps/server
|
||||||
|
RUN npm run build -w apps/server
|
||||||
|
|
||||||
|
# Stage 3: Production
|
||||||
|
FROM node:20-alpine
|
||||||
|
WORKDIR /app
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
COPY --from=server-builder /app/node_modules ./node_modules
|
||||||
|
COPY --from=server-builder /app/package*.json ./
|
||||||
|
COPY --from=server-builder /app/apps/server/package*.json ./apps/server/
|
||||||
|
COPY --from=server-builder /app/apps/server/dist ./apps/server/dist
|
||||||
|
COPY --from=server-builder /app/apps/web/dist ./apps/web/dist
|
||||||
|
|
||||||
|
EXPOSE 3001
|
||||||
|
VOLUME ["/app/apps/server/data"]
|
||||||
|
|
||||||
|
CMD ["node", "apps/server/dist/index.js"]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
vod-manager:
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
|
container_name: aliyun-vod-manager
|
||||||
|
ports:
|
||||||
|
- "3001:3001"
|
||||||
|
environment:
|
||||||
|
- PORT=3001
|
||||||
|
- NODE_ENV=production
|
||||||
|
- JWT_SECRET=${JWT_SECRET:-change-me-in-production}
|
||||||
|
- JWT_EXPIRES_IN=7d
|
||||||
|
- APP_ENCRYPTION_KEY=${APP_ENCRYPTION_KEY:-}
|
||||||
|
- DEFAULT_ADMIN_USERNAME=${DEFAULT_ADMIN_USERNAME:-admin}
|
||||||
|
- DEFAULT_ADMIN_PASSWORD=${DEFAULT_ADMIN_PASSWORD:-admin}
|
||||||
|
- DB_PATH=/app/apps/server/data/vod-manager.db
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/apps/server/data
|
||||||
|
restart: unless-stopped
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# 部署文档
|
||||||
|
|
||||||
|
## Docker Compose 部署
|
||||||
|
|
||||||
|
### 1. 准备环境
|
||||||
|
|
||||||
|
确保已安装 Docker 与 Docker Compose。
|
||||||
|
|
||||||
|
### 2. 下载并配置
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/your-org/Aliyun-VOD-Media-Library-Manager.git
|
||||||
|
cd Aliyun-VOD-Media-Library-Manager/docker
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑 `.env`:
|
||||||
|
|
||||||
|
```env
|
||||||
|
JWT_SECRET=your-random-secret-key-min-32-chars
|
||||||
|
APP_ENCRYPTION_KEY=your-32-char-encryption-key
|
||||||
|
DEFAULT_ADMIN_USERNAME=admin
|
||||||
|
DEFAULT_ADMIN_PASSWORD=your-strong-password
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 启动
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 访问
|
||||||
|
|
||||||
|
打开浏览器访问 `http://<服务器IP>:3001`。
|
||||||
|
|
||||||
|
### 5. 更新
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose pull
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 源码部署
|
||||||
|
|
||||||
|
### 环境要求
|
||||||
|
|
||||||
|
- Node.js >= 20
|
||||||
|
- npm >= 10
|
||||||
|
|
||||||
|
### 步骤
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# 后端
|
||||||
|
npm run dev -w apps/server
|
||||||
|
|
||||||
|
# 前端(新终端)
|
||||||
|
npm run dev -w apps/web
|
||||||
|
```
|
||||||
|
|
||||||
|
生产构建:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run build
|
||||||
|
npm run start -w apps/server
|
||||||
|
```
|
||||||
|
|
||||||
|
## Nginx 反向代理(可选)
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name vod.example.com;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:3001;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
建议配合 Let's Encrypt 开启 HTTPS。
|
||||||
|
|
||||||
|
## 数据备份
|
||||||
|
|
||||||
|
SQLite 数据文件默认位于 `apps/server/data/vod-manager.db`,Docker 部署时通过 volume 映射到 `./data`。建议定期备份该文件。
|
||||||
Reference in New Issue
Block a user