
00:00:00
外卖卷:非常划算 扫码领劵 省点小钱钱
服务器地址: 20.41.121.59
域名: blog.jieliu.me
部署目录: /var/www/blog
教程更新时间: 2025年10月3日
服务器地址: 20.41.121.59
域名: blog.jieliu.me
部署目录: /var/www/blog
在本地项目目录执行:
cd C:\Users\xinha\Desktop\your-vitepress-project
npm run build构建完成后会生成 .vitepress/dist 目录。
方法一:使用WinSCP(推荐)
.vitepress/dist 内的所有文件上传到 /var/www/blog方法二:使用SCP命令
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" -r .vitepress/dist/* z@20.41.121.59:/var/www/blog/HTTP访问:http://blog.jieliu.me
HTTPS访问:https://blog.jieliu.me (需先配置SSL证书)
SSH连接服务器:
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59申请SSL证书:
sudo certbot --nginx -d blog.jieliu.me --email your-email@example.com --agree-tos --redirect每次修改后:
npm run build创建 deploy.bat 文件:
@echo off
echo 构建项目...
call npm run build
echo 上传到服务器...
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" -r .vitepress\dist\* z@20.41.121.59:/var/www/blog/
echo 部署完成!
echo 访问: https://blog.jieliu.me
pause双击运行即可自动部署。
问题1:403 Forbidden
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59
sudo chmod -R 755 /var/www/blog问题2:404 Not Found
检查是否上传了 index.html:
ls -la /var/www/blog/问题3:样式加载失败
检查 VitePress 配置中的 base 路径是否为 '/'
| 操作 | 命令 |
|---|---|
| SSH连接 | ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59 |
| 上传文件 | scp -i "密钥" -r dist/* z@20.41.121.59:/var/www/blog/ |
| 重启Nginx | sudo systemctl restart nginx |
| 查看日志 | sudo tail -f /var/log/nginx/blog.jieliu.me.access.log |
配置已完成,现在可以开始上传您的博客了!
✅ 博客目录: /var/www/blog (已创建并设置权限)
✅ Nginx配置: 已配置虚拟主机 blog.jieliu.me
✅ DNS解析: blog.jieliu.me → 20.41.121.59 (已配置)
⏳ SSL证书: 需要完成申请(见第五章)
在您的Windows电脑上需要安装以下工具之一:
方案一:使用WinSCP(推荐,图形化界面)
方案二:使用Git Bash或PowerShell
在上传之前,您需要先在本地构建VitePress项目。
打开命令行(CMD、PowerShell或Git Bash),进入您的VitePress项目目录:
# 进入项目目录
cd C:\Users\xinha\Desktop\your-vitepress-project
# 安装依赖(如果还没安装)
npm install
# 构建生产版本
npm run build构建完成后,会在项目目录下生成 .vitepress/dist 文件夹,这就是需要上传到服务器的内容。
典型的dist目录结构:
.vitepress/dist/
├── assets/
│ ├── app.js
│ ├── app.css
│ └── ...
├── index.html
├── about.html
└── ...在登录界面填写以下信息:
| 配置项 | 值 |
|---|---|
| 文件协议 | SFTP |
| 主机名 | 20.41.121.59 |
| 端口号 | 22 |
| 用户名 | z |
| 密码 | (留空) |
C:\Users\xinha\Desktop\.ssh\z.pem.ppk 文件/var/www/blogC:\Users\xinha\Desktop\your-vitepress-project\.vitepress\dist重要提示:
dist 文件夹内部的所有内容dist 文件夹本身/var/www/blog 目录下应该直接看到 index.html 和 assets 文件夹打开 PowerShell 或 Git Bash,执行以下命令:
# 进入VitePress项目目录
cd C:\Users\xinha\Desktop\your-vitepress-project
# 上传dist目录下的所有文件到服务器
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" -r .vitepress/dist/* z@20.41.121.59:/var/www/blog/命令说明:
-i 指定密钥文件路径-r 递归上传目录dist/* 表示dist目录下的所有内容z@20.41.121.59:/var/www/blog/ 目标服务器路径上传完成后,通过SSH连接服务器验证:
# SSH连接服务器
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59
# 查看博客目录内容
ls -la /var/www/blog/
# 应该看到 index.html、assets 等文件如果您安装了 Git Bash 或 WSL,可以使用 rsync 进行增量同步:
# 增量同步,只上传修改过的文件
rsync -avz --delete -e "ssh -i C:/Users/xinha/Desktop/.ssh/z.pem" \
.vitepress/dist/ z@20.41.121.59:/var/www/blog/rsync 优势:
--delete 参数)在SSL证书配置完成前,可以通过HTTP访问:
http://blog.jieliu.me或直接使用IP访问:
http://20.41.121.59完成SSL证书配置后(见第五章),使用HTTPS访问:
https://blog.jieliu.meSSH连接到服务器,执行以下命令:
# SSH连接服务器
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59
# 使用Certbot自动申请SSL证书
sudo certbot --nginx -d blog.jieliu.me --non-interactive --agree-tos --email your-email@example.com --redirect命令说明:
--nginx 自动配置Nginx-d blog.jieliu.me 指定域名--email 填写您的邮箱(用于证书到期提醒)--redirect 自动将HTTP重定向到HTTPSLet's Encrypt 证书有效期为90天,Certbot已自动配置续期任务:
# 查看自动续期任务
sudo systemctl status certbot.timer
# 手动测试续期(不会真正续期)
sudo certbot renew --dry-run常见原因:
解决方法:
# 检查DNS解析
nslookup blog.jieliu.me
# 检查80端口是否监听
sudo ss -tulnp | grep :80
# 检查Nginx配置
sudo nginx -t
# 查看详细错误日志
sudo tail -50 /var/log/letsencrypt/letsencrypt.log每次修改博客后,按以下步骤更新:
cd C:\Users\xinha\Desktop\your-vitepress-project
npm run build使用 WinSCP:
使用 SCP:
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" -r .vitepress/dist/* z@20.41.121.59:/var/www/blog/使用 rsync(推荐):
rsync -avz --delete -e "ssh -i C:/Users/xinha/Desktop/.ssh/z.pem" \
.vitepress/dist/ z@20.41.121.59:/var/www/blog/更新后如果看不到变化,按 Ctrl + F5 强制刷新浏览器缓存。
原因: 文件权限不正确
解决方法:
# SSH连接服务器
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59
# 修复权限
sudo chown -R z:z /var/www/blog
sudo chmod -R 755 /var/www/blog原因: 文件未正确上传或Nginx配置错误
解决方法:
# 检查文件是否存在
ls -la /var/www/blog/
# 应该看到 index.html 文件
# 如果没有,重新上传
# 检查Nginx配置
sudo nginx -t
sudo systemctl reload nginx原因: 资源路径配置问题
解决方法:
检查 VitePress 配置文件 .vitepress/config.js 或 .vitepress/config.ts:
export default {
// 如果博客部署在根目录,base应该为 '/'
base: '/',
// 其他配置...
}如果修改了配置,需要重新构建并上传:
npm run build
# 然后重新上传原因: 密钥权限或网络问题
解决方法:
# 检查密钥文件权限(Git Bash)
chmod 600 C:/Users/xinha/Desktop/.ssh/z.pem
# 测试SSH连接
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" -v z@20.41.121.59
# -v 参数会显示详细的调试信息原因: 网络带宽限制或文件过多
建议:
# 本地压缩
cd .vitepress
tar -czf dist.tar.gz dist/
# 上传压缩包
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" dist.tar.gz z@20.41.121.59:/tmp/
# SSH连接服务器
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59
# 解压到目标目录
cd /var/www/blog
sudo tar -xzf /tmp/dist.tar.gz --strip-components=1
sudo chown -R z:z /var/www/blog
rm /tmp/dist.tar.gz为了简化部署流程,您可以创建自动化脚本。
创建文件 deploy.bat 在您的VitePress项目根目录:
@echo off
echo ========================================
echo VitePress 博客自动部署脚本
echo ========================================
echo [1/3] 构建项目...
call npm run build
echo [2/3] 上传到服务器...
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" -r .vitepress\dist\* z@20.41.121.59:/var/www/blog/
echo [3/3] 部署完成!
echo 访问地址: https://blog.jieliu.me
pause使用方法: 双击 deploy.bat 即可自动构建并部署。
创建文件 deploy.ps1:
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "VitePress 博客自动部署脚本" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "[1/3] 构建项目..." -ForegroundColor Yellow
npm run build
if ($LASTEXITCODE -eq 0) {
Write-Host "[2/3] 上传到服务器..." -ForegroundColor Yellow
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" -r .vitepress/dist/* z@20.41.121.59:/var/www/blog/
if ($LASTEXITCODE -eq 0) {
Write-Host "[3/3] 部署完成!" -ForegroundColor Green
Write-Host "访问地址: https://blog.jieliu.me" -ForegroundColor Green
} else {
Write-Host "上传失败!" -ForegroundColor Red
}
} else {
Write-Host "构建失败!" -ForegroundColor Red
}
Read-Host "按任意键退出"使用方法:
# 在PowerShell中执行
.\deploy.ps1创建文件 deploy.sh:
#!/bin/bash
echo "========================================"
echo "VitePress 博客自动部署脚本"
echo "========================================"
echo "[1/3] 构建项目..."
npm run build
if [ $? -eq 0 ]; then
echo "[2/3] 上传到服务器..."
rsync -avz --delete -e "ssh -i C:/Users/xinha/Desktop/.ssh/z.pem" \
.vitepress/dist/ z@20.41.121.59:/var/www/blog/
if [ $? -eq 0 ]; then
echo "[3/3] 部署完成!"
echo "访问地址: https://blog.jieliu.me"
else
echo "上传失败!"
fi
else
echo "构建失败!"
fi使用方法:
# 添加执行权限
chmod +x deploy.sh
# 执行脚本
./deploy.sh建议定期备份博客内容:
# SSH连接服务器
ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59
# 创建备份目录
mkdir -p ~/backups
# 备份博客内容
tar -czf ~/backups/blog-backup-$(date +%Y%m%d).tar.gz /var/www/blog
# 下载备份到本地
# 在本地执行:
scp -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59:~/backups/blog-backup-*.tar.gz ./使用已安装的 Uptime Kuma 监控博客可用性:
# 查看访问日志
sudo tail -f /var/log/nginx/blog.jieliu.me.access.log
# 查看错误日志
sudo tail -f /var/log/nginx/blog.jieliu.me.error.log
# 统计访问量
sudo cat /var/log/nginx/blog.jieliu.me.access.log | wc -l| 操作 | 命令 |
|---|---|
| SSH连接 | ssh -i "C:\Users\xinha\Desktop\.ssh\z.pem" z@20.41.121.59 |
| 上传文件 | scp -i "密钥路径" -r 本地路径/* z@20.41.121.59:/var/www/blog/ |
| 查看博客文件 | ls -la /var/www/blog/ |
| 重启Nginx | sudo systemctl restart nginx |
| 查看Nginx状态 | sudo systemctl status nginx |
| 测试Nginx配置 | sudo nginx -t |
| 申请SSL证书 | sudo certbot --nginx -d blog.jieliu.me |
| 查看证书状态 | sudo certbot certificates |
| 项目 | 路径 |
|---|---|
| 博客目录 | /var/www/blog |
| Nginx配置 | /etc/nginx/sites-available/blog.jieliu.me.conf |
| Nginx日志 | /var/log/nginx/blog.jieliu.me.*.log |
| SSL证书 | /etc/letsencrypt/live/blog.jieliu.me/ |
| 本地密钥 | C:\Users\xinha\Desktop\.ssh\z.pem |
| 项目 | 信息 |
|---|---|
| 服务器IP | 20.41.121.59 |
| 博客域名 | blog.jieliu.me |
| SSH用户 | z |
| SSH端口 | 22 |
当前的Nginx配置文件位于 /etc/nginx/sites-available/blog.jieliu.me.conf:
server {
listen 80;
listen [::]:80;
server_name blog.jieliu.me;
root /var/www/blog; # 博客文件根目录
index index.html; # 默认首页
# 日志配置
access_log /var/log/nginx/blog.jieliu.me.access.log;
error_log /var/log/nginx/blog.jieliu.me.error.log;
# VitePress 静态文件配置
location / {
try_files $uri $uri/ =404;
}
# 静态资源缓存(1年)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 安全头部
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Gzip 压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript
application/x-javascript application/xml+rss
application/javascript application/json;
}配置说明:
root 指向博客文件目录try_files 实现URL重写,支持干净的URL祝您使用愉快!如有问题,请参考本教程的"七、常见问题排查"章节。
评论