起止时间:10/2025 ~ 10/2025
技术栈:[hexo, async, npm, nodejs, racknerd, namecheap, docker, nginx, linux]
想要搭建一个自己的网站是从2021年有的这个想法,当时毕设获得优秀毕业论文,唯一缺点就是软件没有上线。后面三年JAVA全栈工作,每天忙的昏天黑地,技术确实得到极大提升,但内心深度的声音也愈发清晰,我的理想是什么?我是要做机器人的,现在的软件开发只是当时最靠近AI的一个选择,,,于是我2024年辞职,来UNSW攻读AI硕士。
硕士一方面提升我的学识,另一方面也给我充足时间让我探索自我,我需要一个展示自我的平台,于是这个网站成立了, 现在把整个搭建流程分享,希望对大家有帮助~
1. 网站搭建
参考这两篇
https://hexo.io/zh-cn/

https://hexo-theme-async.imalun.com/

2. 申请服务器
https://www.racknerd.com/

racknerd经常有活动,点这个10$/year就行
3. 申请域名
https://www.namecheap.com/domains/

namecheap申请可以多次选择,有很多域名4$/year左右,价格美丽~
申请号后记得在dashboard绑定服务器ID
4. 配置nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| 1) 基础环境 & Nginx
apt-get update && apt-get -y upgrade
apt-get -y install nginx git curl
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt-get -y install nodejs
timedatectl set-timezone Australia/Sydney
systemctl enable --now nginx
2) 拉取你的 Hexo 源码并构建静态文件
cd /opt
git clone (你的仓库地址) hexo-site cd /opt/hexo-site
npm install npx hexo generate 生成后,静态文件都在 /opt/hexo-site/public/。
3) 拷贝静态文件到 Web 根目录
mkdir -p /var/www/hexo
rsync -av --delete /opt/hexo-site/public/ /var/www/hexo/
chown -R www-data:www-data /var/www/hexo
4) 配置 Nginx 站点
cat >/etc/nginx/sites-available/hexo <<'EOF' server { listen 80; listen [::]:80; server_name _; root /var/www/hexo; index index.html; location / { try_files $uri $uri/ /index.html; } } EOF
ln -sf /etc/nginx/sites-available/hexo /etc/nginx/sites-enabled/hexo rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx 现在在浏览器访问: **http://(你的 VPS IP)**( 应该能看到 Hexo 首页 🎉
5) 一键更新脚本(可选,方便以后更新) 以后你改了仓库内容,想重新部署,只需执行一个脚本:
cat >/usr/local/bin/deploy-hexo.sh <<'EOF'
set -e cd /opt/hexo-site git pull npm install npx hexo generate rsync -av --delete public/ /var/www/hexo/ chown -R www-data:www-data /var/www/hexo systemctl reload nginx echo "Deploy done." EOF
chmod +x /usr/local/bin/deploy-hexo.sh 以后只要执行: /usr/local/bin/deploy-hexo.sh 就会自动拉取、构建并同步上线 ✅
6) 绑定域名(可选) • 在你的域名 DNS 里添加 A 记录 → 指向 (你的服务器ID) • 把 Nginx 配置里的 server_name _; 改为你的域名,例如: server_name blog.your-domain.com; • nginx -t && systemctl reload nginx
🚀 下一步:运行 Certbot 获取 HTTPS 证书 等大约 10–20 分钟后(或你能用浏览器访问 (你的域名) 时), 在你的 VPS 上执行以下命令:
sudo certbot --nginx 当出现:
Please enter the domain name(s) you would like on your certificate: 就输入:
(你的域名) 然后一路确认即可(Y / Yes)。 Let’s Encrypt 会自动帮你: • 验证域名所有权; • 配置 Nginx HTTPS; • 自动重启服务; • 设置定时自动续期任务。
✅ 完成后验证 访问: • (你的域名) • (你的域名) 如果显示绿色小锁 🔒 说明你的博客现在已经全球可访问、并启用了加密连接。
|
5. 开启评论区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| 方案① Docker + Docker Compose 一步部署 Twikoo + MongoDB 这是零成本、最省心、最快速的方式。
🔹 Step 1:安装 Docker 与 Docker Compose 在 Ubuntu 终端执行:
sudo apt update sudo apt install -y docker.io docker-compose sudo systemctl enable docker sudo systemctl start docker 验证是否安装成功:
docker -v docker-compose -v
🔹 Step 2:创建部署目录
sudo mkdir -p /srv/twikoo cd /srv/twikoo
🔹 Step 3:创建 docker-compose.yml
version: '3' services: mongodb: image: mongo:latest container_name: mongo restart: always ports: - "27017:27017" volumes: - ./mongo_data:/data/db twikoo: image: imaegoo/twikoo container_name: twikoo restart: always ports: - "8080:8080" environment: - TWIKOO_PORT=8080 - TWIKOO_MONGODB_URI=mongodb://mongodb:27017/twikoo depends_on: - mongodb
🔹 Step 4:启动服务
sudo docker-compose up -d 查看容器是否启动成功:
sudo docker ps
🔹 Step 5:测试后端是否运行 在浏览器访问:
http://<你的服务器IP>:8080 正常情况下会显示:
Twikoo service is running.
🔹 Step 6:配置 Nginx 反向代理 + HTTPS (1) 新建反向代理配置文件 路径:/etc/nginx/sites-available/twikoo.conf 内容如下:
server { listen 80; server_name (你的后端域名,不是之前的前端域名,这个域名可以在namecheap之前申请的域名下面添加,不需要额外付费) location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } (2) 启用配置
sudo ln -s /etc/nginx/sites-available/twikoo.conf /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx (3) 配置 HTTPS(如果你有证书) 如果你已经申请了证书(比如使用 certbot):
sudo certbot --nginx -d (你的后端域名) certbot 会自动修改配置为 HTTPS。
🔹 Step 7:在 Hexo 中配置评论后端 在 _config.async.yml 中加入:
comments: enable: true type: twikoo envId: (你的后端域名) 保存后:
hexo clean && hexo g && hexo s 打开文章页,底部应出现 Twikoo 评论框。
|
6. 解决CORS问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| 关键提示是: Access to XMLHttpRequest at '(你的后端域名)' from origin '你的前端域名)' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains the invalid value ''. 也就是说你的服务器返回的 Access-Control-Allow-Origin 是空字符串(''),浏览器直接拦截了。 这说明:你的 Nginx 配置里的 $cors_origin 变量判断没匹配成功,所以为空。
sudo nano /etc/nginx/sites-available/twikoo.conf (下面的内容) sudo nginx -t sudo nginx -s reload 用两条 curl 分别测带/不带 www:
curl -i -X OPTIONS -H "Origin: (你的前端域名)" \ -H "Access-Control-Request-Method: POST" (你的后端域名) curl -i -X OPTIONS -H "Origin: (你的前端域名)" \ -H "Access-Control-Request-Method: POST" (你的后端域名)
server { if ($host = (你的后端域名)) { return 301 https://$host$request_uri; } # managed by Certbot
listen 80; server_name (你的后端域名); return 301 https://$host$request_uri;
}
server { listen 443 ssl; server_name (你的后端域名); ssl_certificate /etc/letsencrypt/live/(你的后端域名)/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/(你的后端域名)/privkey.pem; # managed by Certbot
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 隐藏上游(Twikoo)自带的 CORS header,避免重复 proxy_hide_header Access-Control-Allow-Origin;
# ===== CORS for (你的后端域名) & local debug ===== set $cors_origin ""; if ($http_origin ~* ^https?://(localhost(:\d+)?|127\.0\.0\.1(:\d+)?|(你的后端域名))$) { set $cors_origin $http_origin; }
add_header Access-Control-Allow-Origin $cors_origin always; add_header Access-Control-Allow-Credentials true always; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always; add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; add_header Vary Origin always;
# 预检请求直接放行 if ($request_method = OPTIONS) { return 204; } # ===== end CORS =====
}
}
|
欢迎大家有问题评论区留言~