杨曦哲的个人站点源码仓库:基于 Next.js 16 + TypeScript + Tailwind CSS。
所有展示文案集中在 src/content/site-profile.ts,改完保存即可在本地 npm run dev 预览。
建议按下面清单写(可中英文任选,保持一致即可):
| 区块 | 写什么 |
|---|---|
| eyebrow | 顶部小字:域名、一句 tagline |
| headlineLead / headlineAccent | 名字 + 一句话定位(例如「全栈 / 设计 + 前端」) |
| intro | 1~3 句:你是谁、在做什么、访客能在这里看到什么 |
| tags | 3~8 个技能或关键词 |
| primaryLinks | GitHub、邮箱(mailto:)、作品集、简历 PDF 等 |
| experience | 按时间倒序:每段写 period、role、org、若干 bullets(动词开头 + 技术 + 结果) |
站点标题与描述(浏览器标签、SEO)在 src/app/layout.tsx 的 metadata 里,可与主页文案保持一致。
npm install
npm run dev浏览器打开 http://localhost:3000。
npm run build
npm run start项目启用了 output: "standalone",适合部署到 VPS。
首页底部的互动墙需要配置 OpenAI 兼容 API(见 .env.example):
| 变量 | 说明 |
|---|---|
AI_API_KEY |
必填(智谱开放平台 API Key) |
AI_BASE_URL |
默认 https://open.bigmodel.cn/api/paas/v4 |
AI_MODEL |
默认 GLM-4-Flash-250414(免费) |
AI_WALL_DATA_PATH |
可选;卡片 JSON 路径,默认 data/ai-wall.json |
生产环境请保证该路径可写(PM2 用户对 data/ 有写权限)。
上墙流程:访客提交 → AI 审原话 → 通过后写入原话;AI 回复仅作附注(失败不影响上墙)。违规返回 422,不上墙。
在 GitHub 新建空仓库(不要勾选添加 README),然后在你电脑上的项目目录执行(把 URL 换成你的):
git remote add origin https://github.com/<你的用户名>/<仓库名>.git
git branch -M main
git add .
git commit -m "Initial personal site"
git push -u origin main以下在 VPS 的 SSH 终端里执行。会安装 Node、Nginx、PM2、Certbot;请把 GIT_REPO_URL 换成你的仓库 HTTPS 或 SSH 地址。
安全说明:curl | sudo bash 会执行 NodeSource 的安装脚本;若你介意,可改用 nvm 自行装 Node,再跳过前两行中的 NodeSource 部分。
export GIT_REPO_URL="https://github.com/yxz6811/my-website.git"
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg nginx git
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g pm2
sudo mkdir -p /var/www
sudo rm -rf /var/www/yangxizhe.com
sudo git clone "$GIT_REPO_URL" /var/www/yangxizhe.com
cd /var/www/yangxizhe.com
sudo chown -R "$USER:$USER" /var/www/yangxizhe.com
npm install
npm run build
pm2 delete yangxizhe-site 2>/dev/null || true
pm2 start npm --name yangxizhe-site -- start
pm2 save
pm2 startup systemd -u "$USER" --hp "$HOME"
sudo tee /etc/nginx/sites-available/yangxizhe.com >/dev/null <<'NGINX'
server {
listen 80;
server_name yangxizhe.com www.yangxizhe.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
NGINX
sudo ln -sf /etc/nginx/sites-available/yangxizhe.com /etc/nginx/sites-enabled/yangxizhe.com
sudo nginx -t && sudo systemctl reload nginx
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yangxizhe.com -d www.yangxizhe.com按提示同意条款并填写邮箱(用于证书到期提醒)。若域名尚未解析到本机,请先完成 Dynadot DNS 再执行 Certbot。
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status在 VPS 上:
cd /var/www/yangxizhe.com
git pull
npm install
npm run build
pm2 restart yangxizhe-site如果你希望每次推送 main 自动发布到 yangxizhe.com,可以使用仓库内置工作流:
- 工作流文件:
.github/workflows/deploy-vps.yml - 触发条件:push 到
main(也支持手动触发)
你需要在 GitHub 仓库 Settings -> Secrets and variables -> Actions 添加以下 Secrets:
VPS_HOST:服务器 IP(例如193.134.211.194)VPS_USER:服务器登录用户(例如ubuntu)VPS_PORT:SSH 端口(通常22)VPS_SSH_KEY:用于登录服务器的私钥全文
工作流执行命令:
cd /var/www/yangxizhe.com
git pull --ff-only origin main
npm ci
npm run build
pm2 restart yangxizhe-site在 Dynadot 的 DNS 管理里添加:
A记录:@->193.134.211.194CNAME记录:www->yangxizhe.com
如果你用了 Cloudflare 管理 DNS,则在 Cloudflare 里添加同样记录即可。
pm2 status
pm2 logs yangxizhe-site
pm2 restart yangxizhe-site