Skip to content

bbuugg/alive

Repository files navigation

Alive — 签到保持“活着”网站

首页

登录页

这是一个基于 Next.js 的应用,通过每天签到来维持“活着”状态。后端使用 Prisma(默认 SQLite),使用 NextAuth 做认证,并支持通过 Passport 同步外部用户。

仓库结构(要点)

  • app/:Next.js app 路由与页面(前端与 API 路由数个位置)。
  • prisma/schema.prisma:数据库模型(User、CheckIns)。
  • src/lib/prisma.ts:Prisma 客户端与 better-sqlite3 适配器配置。
  • src/auth.tssrc/auth.config.ts:认证相关配置与回调逻辑。
  • .env.example:所需环境变量示例。

快速开始(本地开发) 前提:Node 24+(仓库启用了 Volta 指定 Node 版本),以及 npmpnpm

  1. 安装依赖:
npm install
  1. 复制环境变量并编辑:
cp .env.example .env
# 然后编辑 .env,填入 EMAIL_*、AUTH_SECRET、SESSION_SECRET、PASSPORT_*、DATABASE_URL 等
  1. 生成 Prisma 客户端并运行迁移(开发):
npx prisma generate
npx prisma migrate dev --name init
  1. 启动开发服务器:
npm run dev

访问 http://localhost:3000 查看页面。

环境变量要点(见 .env.example

  • DATABASE_URL:默认指向 SQLite 文件 file:./database.db
  • NEXTAUTH_URL / NEXT_PUBLIC_APP_URL:应用地址(用于 OAuth/回调)。
  • AUTH_SECRETSESSION_SECRET:用于签名的机密,必须在生产中随机生成。
  • EMAIL_HOSTEMAIL_PORTEMAIL_USEREMAIL_PASS:用于发送邮件(通知/密码重置等)。
  • PASSPORT_URLPASSPORT_CLIENT_IDPASSPORT_CLIENT_SECRET:如果使用 Passport 提供者进行登录,同步外部用户需要这些配置。

邮件通知(Email 通知)

  • 项目内置通过 nodemailer 发送邮件的功能,发送逻辑在 src/lib/mailer.ts,包含每日签到提醒与超过阈值的紧急通知。
  • 必要环境变量:EMAIL_HOSTEMAIL_PORTEMAIL_USEREMAIL_PASS(见 .env.example)。
  • 常用 SMTP 配置示例:
EMAIL_HOST=smtp.qq.com
EMAIL_PORT=465
EMAIL_USER=your@qq.com
EMAIL_PASS=your_smtp_authorization_code
  • 端口与 secure 建议:端口 465 对应 SSL(secure=true),端口 58725 对应 STARTTLS(secure=false,但 nodemailer 会自动使用 TLS)。
  • 测试邮件:开发时可以使用 Ethereal(https://ethereal.email/)或你的测试 SMTP 帐号,将对应的凭据填入环境变量,启动应用并检查控制台日志(src/lib/mailer.ts 在成功/失败时会打印信息)。
  • 注意事项:
    • 某些提供商(如 QQ、Gmail)需要单独生成 SMTP 授权码或开启 “应用专用密码”。
    • 在生产环境中请妥善保护 EMAIL_PASSEMAIL_USER 等敏感信息(使用密钥管理服务或托管平台的环境变量)。

示例:你可以在本地填好 .env 后,通过应用的通知触发逻辑(或临时写个调用 sendCheckInReminder 的小脚本)来发送测试邮件,或者使用 Ethereal 查看邮件内容而不影响真实收件箱。

可以用下面命令生成一个随机的 SESSION_SECRET / AUTH_SECRET

# OpenSSL
openssl rand -base64 32

# Node
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

数据库注意事项

  • 默认使用 SQLite(文件:database.db),适合小规模或自托管演示。
  • 生产环境推荐使用 PostgreSQL 或 MySQL;切换时更新 DATABASE_URL,并在 prisma/schema.prismadatasource 中使用相应 provider,然后运行迁移并部署。

认证与用户同步

  • 使用 NextAuth(见 src/auth.ts)并包含自定义回调:当使用 Passport 登录时,会把外部用户同步(upsert)到本地 Prisma 数据库,且将本地 id 注入到 session/token 中。

Passport OAuth 授权申请地址

Passport OAuth 授权页面

运行迁移与部署时常用命令

  • 生成客户端:npx prisma generate
  • 本地开发迁移:npx prisma migrate dev --name <msg>
  • 在生产上应用迁移:npx prisma migrate deploy

常见问题与建议

  • 在无持久化文件系统(如 Vercel Serverless)上使用 SQLite 会遇到持久化与并发问题,建议生产使用 PostgreSQL。
  • 如果选择继续使用 SQLite,请确保运行环境能持久化 database.db(例如容器卷或 VM 磁盘)。

更多技术细节与部署示例见 DEPLOYMENT.md

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages