No description
- TypeScript 94.7%
- CSS 3.4%
- Dockerfile 1.1%
- JavaScript 0.8%
| docs | ||
| drizzle | ||
| public | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
nyne.dev.next
个人动态站:时间线笔记,不是传统博客。游客只读公开内容;登录后写笔记、传图、维护侧栏链接,并可将公开笔记同步到 Telegram 频道。
本地开发
需要 Node.js 20+。
cp .env.example .env
node scripts/hash-password.mjs 'your-password'
把打印出的 argon2id 哈希写入 .env 的 AUTH_PASSWORD_HASH,并设置不少于 32 字符的 SESSION_SECRET。
图片上传需要 S3 兼容存储相关变量;Telegram 同步可留空,站点其余功能仍可用。
npm install
npm test
npm run dev
打开 http://localhost:3000。登录页:/login。
Docker
单实例部署。SQLite 不能水平扩展。
docker compose up -d --build
数据文件在 named volume 的 /data/nyne.db。探活:GET /healthz。
生产环境请用反向代理终止 TLS,并把 X-Forwarded-Proto 传给应用(Cookie 的 Secure 依赖它)。SITE_URL 必须是无尾斜杠的公网 HTTPS 地址,供 RSS 与 Telegram 链接使用。
若启用 Telegram webhook,启动后会调用一次 setWebhook(指向 {SITE_URL}/api/telegram/webhook)。
备份
SQLite 在 WAL 模式下不要直接拷正在写入的 db 文件。停写或使用:
sqlite3 /data/nyne.db "VACUUM INTO '/backup/nyne-$(date +%F).db'"
对象存储的备份按厂商能力配置(版本控制 / 生命周期),应用内不做。
路由
| 路径 | 说明 |
|---|---|
/ |
最新笔记 |
/t/:tag |
按 tag |
/d/:yyyy-mm-dd |
按上海时区日期 |
/search?q= |
搜索标题和正文 |
/n/:id |
笔记详情 |
/n/new、/n/:id/edit |
编辑器(需登录) |
/login |
登录 |
/rss.xml |
最近 20 条公开笔记全文 |