FastAPI + SQLite 后端,React + Vite 前端。方案见 docs/PLAN.md。
- 访客:首页(简介、简历、邮箱、社交链接、最新文章)、博客
- 登录后
/me:待办事项(先建项目再建待办)、博客管理(草稿 / 发布 / 撤回)、个人资料编辑
# 后端(首次)
cd backend
cp .env.example .env
uv sync # 国内网络慢可加:UV_DEFAULT_INDEX=https://mirrors.aliyun.com/pypi/simple
uv run python -m app.cli create-admin admin # 创建管理员,按提示输入密码
uv run uvicorn app.main:app --reload --port 8000
# 前端
cd frontend
npm install
npm run dev # http://localhost:5173 ,/api 自动代理到 8000接口文档:http://localhost:8000/api/docs
测试:cd backend && uv run pytest
sudo apt update && sudo apt install -y nginx python3-venv rsync
sudo mkdir -p /opt/personal-site云控制台安全组放行 80、443 端口。
本地执行(会构建前端、同步代码、安装依赖):
SERVER=root@你的服务器IP ./deploy/deploy.sh服务器上:
cd /opt/personal-site/backend
cp .env.example .env
# 生成随机密钥写入 .env 的 SECRET_KEY;CORS_ORIGINS 留空(同域部署不需要)
python3 -c "import secrets;print(secrets.token_urlsafe(48))"
vim .env
# 创建管理员
.venv/bin/python -m app.cli create-admin admin
chown -R www-data: data
# 后端服务
cp /opt/personal-site/deploy/personal-site.service /etc/systemd/system/
systemctl daemon-reload && systemctl enable --now personal-site
# Nginx
cp /opt/personal-site/deploy/nginx.conf /etc/nginx/conf.d/personal-site.conf
# 编辑 server_name:备案通过前先写服务器 IP,通过后改成域名
nginx -t && systemctl reload nginxCentOS / Alibaba Cloud Linux 等系统 nginx 运行用户是
nginx而不是www-data,需要修改 service 文件中的 User/Group,部署时加RUN_USER=nginx。
- 域名 A 记录解析到服务器 IP
- 修改 nginx 中的
server_name为你的域名 - 申请 HTTPS 证书:
sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d example.com -d www.example.com
- 在
frontend/src/components/Layout.tsx页脚填写备案号(工信部要求网站底部展示备案号并链接到 beian.miit.gov.cn)
SERVER=root@你的服务器IP ./deploy/deploy.sh数据全部在 /opt/personal-site/backend/data/site.db。服务器上加定时备份:
crontab -e
# 每天 3 点备份,保留 30 份
0 3 * * * /opt/personal-site/deploy/backup.shpython -m app.cli create-admin <用户名>
python -m app.cli reset-password <用户名>