Pintree
Pintree 是基于 Next.js(App Router + React Server Components)、TypeScript、Prisma、Tailwind CSS 和 PostgreSQL 构建的开源项目,支持完全自托管到自己的服务器。目前官方 GitHub 仓库(https://github.com/Pintree-io/pintree)尚未提供官方的 Docker 镜像或一键部署脚本,也没有详细的自托管专用文档,但由于其为标准 Next.js + Prisma 项目,您可以按照以下标准流程手动部署到任何支持 Node.js 的 VPS 或服务器(如 Ubuntu、Debian、CentOS 等)。
部署前提条件
- 服务器系统:Linux(推荐 Ubuntu 22.04 或更高)
- Node.js:v18 或更高(推荐 v20+)
- 数据库:PostgreSQL 15+(可安装在同一服务器或使用云数据库,如 Supabase、Neon、Railway 等)
- 域名 + SSL(推荐使用 Nginx + Let’s Encrypt)
- Git、pnpm(或 npm/yarn)
详细部署步骤
- 完成
访问 https://yourdomain.com,即可注册账号并开始使用。 // 这表示部署完成,用户可以通过域名访问应用。
配置 Nginx 反向代理 + HTTPS
创建配置文件 /etc/nginx/sites-available/pintree:
server {
listen 80; # 监听 80 端口(HTTP)。
server_name yourdomain.com; # 指定服务器域名。
location / { # 对于根路径的请求。
proxy_pass http://localhost:3000; # 将请求代理到本地 3000 端口(应用运行端口)。
proxy_http_version 1.1; # 使用 HTTP/1.1 协议。
proxy_set_header Upgrade $http_upgrade; # 支持 WebSocket 升级。
proxy_set_header Connection 'upgrade'; # 处理连接升级。
proxy_set_header Host $host; # 传递主机头。
proxy_cache_bypass $http_upgrade; # 绕过缓存以支持升级。
}
}
启用并获取 SSL:
sudo ln -s /etc/nginx/sites-available/pintree /etc/nginx/sites-enabled/ # 创建符号链接,启用站点配置。
sudo nginx -t && sudo systemctl reload nginx # 测试 Nginx 配置并重载服务。
sudo certbot --nginx -d yourdomain.com # 使用 certbot 为域名自动获取和配置 SSL 证书,实现 HTTPS。
启动应用(推荐使用 PM2 守护进程)
npm install -g pm2 # 全局安装 PM2,用于进程管理和守护应用。
pm2 start npm --name "pintree" -- start # 使用 PM2 启动应用,指定名称为 pintree,并运行 npm start 命令。
pm2 save # 保存当前 PM2 配置,以便重启时恢复。
pm2 startup # 生成开机自启脚本并执行 # 设置 PM2 开机自启动,确保服务器重启后应用自动运行。
数据库迁移与构建
pnpm prisma:migrate # 或 npx prisma migrate deploy # 执行 Prisma 迁移,应用数据库 schema 变更,确保表结构正确。
pnpm build # 构建生产版本 # 编译项目为生产环境优化版本,生成静态文件和服务器代码。
配置环境变量
复制示例配置文件:
cp .env.example .env # 复制环境变量模板文件到 .env,用于自定义配置。
编辑 .env 文件(使用 nano 或 vim),关键配置如下:
DATABASE_URL="postgresql://pintree:your-strong-password@localhost:5432/pintree?schema=public" # 数据库连接字符串,指定用户、密码、主机、端口和数据库名。
NEXTAUTH_SECRET="生成一个长随机字符串" # 用 openssl rand -hex 32 生成 # NextAuth 的密钥,用于身份验证和会话加密。
NEXTAUTH_URL="https://yourdomain.com" # 你的部署域名 # 应用的基础 URL,用于回调和重定向。
# 可选:如果要启用 Google/GitHub 登录 # 这些是可选的 OAuth 配置,用于第三方登录。
GOOGLE_CLIENT_ID=xxx
GOOGLE_CLIENT_SECRET=xxx
GITHUB_ID=xxx
GITHUB_SECRET=xxx
克隆代码并安装依赖
git clone https://github.com/Pintree-io/pintree.git # 从 GitHub 克隆 Pintree 项目代码仓库到本地。
cd pintree # 进入项目目录。
pnpm install # 安装项目的所有依赖包,包括 Next.js、Prisma 等。
安装并配置 PostgreSQL
sudo apt install -y postgresql postgresql-contrib # 安装 PostgreSQL 数据库及其扩展包。
sudo systemctl start postgresql # 启动 PostgreSQL 服务。
sudo systemctl enable postgresql # 设置 PostgreSQL 开机自启动。
创建数据库和用户:
sudo -u postgres psql # 以 postgres 用户身份进入 PostgreSQL 命令行界面。
CREATE DATABASE pintree; # 创建名为 pintree 的数据库,用于存储应用数据。
CREATE USER pintree WITH ENCRYPTED PASSWORD 'your-strong-password'; # 创建数据库用户 pintree,并设置加密密码。
GRANT ALL PRIVILEGES ON DATABASE pintree TO pintree; # 授予用户 pintree 对数据库的所有权限。
\q # 退出 PostgreSQL 命令行界面。
安装 Node.js(使用 NodeSource 官方源)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - # 下载并执行 Node.js v20 的安装脚本,配置官方源。
sudo apt install -y nodejs # 安装 Node.js 核心包。
node -v # 确认 ≥ v20 # 检查 Node.js 版本是否正确安装。
npm install -g pnpm # 项目使用 pnpm # 全局安装 pnpm 作为依赖管理器,因为项目推荐使用它。
准备服务器环境
sudo apt update && sudo apt upgrade -y # 更新软件源并升级所有已安装的软件包,确保系统最新。
sudo apt install -y git curl nginx certbot python3-certbot-nginx # 安装必需工具:Git 用于版本控制,curl 用于网络请求,Nginx 作为 Web 服务器,certbot 用于获取 SSL 证书。
推荐简化方案(使用 Docker + Docker Compose)
虽然官方没有提供 docker-compose.yml,但社区和类似 Next.js 项目常用以下方式(您可以自行创建):
创建 docker-compose.yml:
version: '3.8' # 指定 Docker Compose 文件版本。
services: # 定义服务列表。
db: # 数据库服务。
image: postgres:16 # 使用 PostgreSQL 16 镜像。
restart: always # 设置总是重启。
environment: # 环境变量。
POSTGRES_USER: pintree # 数据库用户名。
POSTGRES_PASSWORD: your-strong-password # 数据库密码。
POSTGRES_DB: pintree # 数据库名。
volumes: # 卷挂载。
- postgres_data:/var/lib/postgresql/data # 持久化数据卷。
app: # 应用服务。
image: node:20-alpine # 使用 Node.js 20 Alpine 镜像,轻量版。
working_dir: /app # 设置工作目录。
volumes: # 卷挂载。
- .:/app # 将当前目录挂载到容器 /app。
ports: # 端口映射。
- "3000:3000" # 映射容器 3000 端口到主机。
depends_on: # 依赖。
- db # 依赖数据库服务。
environment: # 环境变量。
DATABASE_URL: postgresql://pintree:your-strong-password@db:5432/pintree # 数据库连接,使用容器间网络。
NEXTAUTH_SECRET: your-secret # NextAuth 密钥。
NEXTAUTH_URL: https://yourdomain.com # 应用 URL。
command: > # 启动命令。
sh -c "pnpm install && pnpm prisma:migrate && pnpm build && pnpm start" # 安装依赖、迁移数据库、构建并启动应用。
volumes: # 定义卷。
postgres_data: # 数据卷名称。
然后 docker compose up -d 即可启动(后续仍需 Nginx 反向代理)。 // 这是一个容器化部署方案,简化环境管理,使用 docker compose up -d 在后台启动服务。
- Node.js:v18 或更高(推荐 v20+) // Node.js 是运行 JavaScript 后端的必需运行时环境。
- 数据库:PostgreSQL 15+(可安装在同一服务器或使用云数据库,如 Supabase、Neon、Railway 等) // PostgreSQL 是项目使用的关系型数据库,用于存储数据。
- 域名 + SSL(推荐使用 Nginx + Let’s Encrypt) // 域名用于访问应用,SSL 提供 HTTPS 安全加密。
- Git、pnpm(或 npm/yarn) // Git 用于克隆代码仓库,pnpm 是包管理器,用于安装依赖。