first commit

This commit is contained in:
2026-05-15 13:54:15 +08:00
commit 9977266716
7 changed files with 174 additions and 0 deletions

53
.env Normal file
View File

@@ -0,0 +1,53 @@
# Reactive Resume public URL behind Nginx Proxy Manager.
TZ=Asia/Shanghai
APP_URL=https://me.huijutec.cn
# Local debug access only: http://127.0.0.1:3003
LOCAL_APP_PORT=3003
# PostgreSQL.
POSTGRES_DB=reactive_resume
POSTGRES_USER=reactive_resume
POSTGRES_PASSWORD=S47LNqOvKzDTgGPo9C26LWf5
DATABASE_URL=postgresql://reactive_resume:S47LNqOvKzDTgGPo9C26LWf5@postgres:5432/reactive_resume
# Generated with: openssl rand -hex 32
AUTH_SECRET=9f27ca158d1c97d58bed21c8c8d8819e3c81111418682972e5f16281ea4ff0c8
# Optional email/auth/storage/AI settings can be enabled later.
BETTER_AUTH_API_KEY=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
OAUTH_PROVIDER_NAME=
OAUTH_CLIENT_ID=
OAUTH_CLIENT_SECRET=
OAUTH_DISCOVERY_URL=
OAUTH_AUTHORIZATION_URL=
OAUTH_TOKEN_URL=
OAUTH_USER_INFO_URL=
OAUTH_DYNAMIC_CLIENT_REDIRECT_HOSTS=
OAUTH_SCOPES=
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASS=
SMTP_FROM=Reactive Resume <noreply@me.huijutec.cn>
SMTP_SECURE=false
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
S3_REGION=us-east-1
S3_ENDPOINT=
S3_BUCKET=
S3_FORCE_PATH_STYLE=false
REDIS_URL=
ENCRYPTION_SECRET=
CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_API_TOKEN=
FLAG_DISABLE_SIGNUPS=false
FLAG_DISABLE_EMAIL_AUTH=false
FLAG_DISABLE_IMAGE_PROCESSING=false
FLAG_ALLOW_UNSAFE_AI_BASE_URL=false

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
data/
*.log
.DS_Store

36
README.md Normal file
View File

@@ -0,0 +1,36 @@
# Reactive Resume + frpc
该目录使用 Docker Compose 启动 Reactive Resume并通过 frpc 把容器内的 `reactive-resume:3000` 映射到远端 `82.157.255.195:10003`。Nginx Proxy Manager 已将 `https://me.huijutec.cn` 反代到该远端端口。
## 文件
- `compose.yml`: Docker Compose 编排,包含 Postgres、Reactive Resume、frpc。
- `.env`: Reactive Resume 环境变量和本地调试端口。
- `frpc.yaml`: frpc 客户端配置,远端端口为 `10003`
- `reactive_resume_data`: Reactive Resume 本地上传文件持久化 Docker 命名卷。
## 启动
```bash
docker compose -f compose.yml up -d
```
## 查看状态
```bash
docker compose -f compose.yml ps
docker compose -f compose.yml logs -f reactive-resume
docker compose -f compose.yml logs -f frpc
```
## 访问
- 公网访问: `https://me.huijutec.cn`
- 本机调试: `http://127.0.0.1:3003`
## 更新
```bash
docker compose -f compose.yml pull
docker compose -f compose.yml up -d
```

65
compose.yml Normal file
View File

@@ -0,0 +1,65 @@
name: reactive-resume
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- resume_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
reactive-resume:
image: amruthpillai/reactive-resume:latest
restart: unless-stopped
env_file:
- .env
ports:
- "127.0.0.1:${LOCAL_APP_PORT}:3000"
volumes:
- reactive_resume_data:/app/data
networks:
- resume_net
depends_on:
postgres:
condition: service_healthy
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:3000/api/health').then((r) => { if (!r.ok) process.exit(1); }).catch(() => process.exit(1));",
]
interval: 30s
timeout: 10s
retries: 5
frpc:
image: fatedier/frpc:v0.68.0
restart: unless-stopped
command: ["-c", "/etc/frp/frpc.yaml"]
volumes:
- ./frpc.yaml:/etc/frp/frpc.yaml:ro
networks:
- resume_net
depends_on:
reactive-resume:
condition: service_healthy
networks:
resume_net:
driver: bridge
volumes:
postgres_data:
reactive_resume_data:

17
frpc.yaml Normal file
View File

@@ -0,0 +1,17 @@
serverAddr: "82.157.255.195"
serverPort: 7000
auth:
method: "token"
token: "en.xjtu.edu.cn"
transport:
poolCount: 5
heartbeatTimeout: -1
proxies:
- name: "reactive-resume-me"
type: "tcp"
localIP: "reactive-resume"
localPort: 3000
remotePort: 10003

Binary file not shown.

Binary file not shown.