之前小站一直托管在 Github Pages 中,然而国内访问实在太慢,百度也无法收录。正好趁着疫情,在阿里云撸了一台轻量应用服务器。记录下转移过程。
这里服务器选择的系统是 CentOS 7.3
配置过程大致如下:搭建 Git 私库 –> 搭建 Nginx 服务器 –> 启用 https 访问
…
搭建 Git 私有库 博客是由 Hexo 在本地生成然后通过 Git 部署到服务器端的,所以要在服务器端搭建一个 Git 私有库
安装 Git
创建用户并配置仓库 1 2 3 4 5 6 7 8 9 useradd git passwd git # 设置密码 su git # 这步很重要,不切换用户后面会很麻烦 cd /home/git/ mkdir -p projects/blog # 项目存在的真实目录 mkdir repos && cd repos git init --bare blog.git # 创建一个裸露的仓库 cd blog.git/hooks
vi post-receive
,创建 hook 钩子函数,输入内容如下
1 2 # !/bin/sh git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
添加完毕后修改权限
1 2 3 chmod +x post-receive exit # 退出到 root 登录 chown -R git:git /home/git/repos/blog.git # 添加权限
测试 Git 仓库是否可用 在本地电脑 clone 远程仓库
1 git clone git@server_ip:/home/git/repos/blog.git
如提示
1 2 git@server_ip: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). fatal: 无法读取远程仓库
则需要在服务器端打开 ssh 允许密码登录,修改 /etc/ssh/sshd_config
中 PasswordAuthentication
项为 yes
建立 ssh 信任关系 在本地电脑
1 2 ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip ssh git@server_ip # 测试能否登录
禁用 Git 用户的 shell 登录权限 为了安全起见禁用 git 用户的 shell 登录权限,从而只能用 git clone,git push 等登录
1 2 3 4 5 cat /etc/shells # 查看 git-shell 是否在登录方式里面 which git-shell # 查看是否安装 # 添加上步显示出来的路径,通常是 /usr/bin/git-shell vi /etc/shells
修改 /etc/passwd
中的权限,只需将原来的 /bin/shell
修改为 /usr/bin/git-shell
1 2 - git:x:1000:1000::/home/git:/bin/shell + git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell
Hexo 部署到私有库 修改博客根目录_config.yml
文件中 deploy
设置
_config.yml 1 2 3 4 deploy: - type: git repository: git@xxx.xxx.xxx.xxx:/home/git/repos/blog.git branch: master
在博客根目录运行 hexo g -d
部署到阿里云服务器私有库
搭建 Nginx 服务器 安装 Nginx
启动 Nginx,浏览器访问服务器 IP
配置 Nginx 本站全站使用 https 访问
1 nginx -s stop # 停止 Nginx
将 SSL 证书和私钥放在 /home/git/
目录下
修改 /etc/nginx/nginx.conf
server 部分为如下配置
/etc/nginx/nginx.conf 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 server { # 重定向 http 请求 listen 80; server_name morooi.com; rewrite ^ https://$http_host$request_uri? permanent; } # Settings for a TLS enabled server. server { listen 443 ssl http2; # listen [::]:443 ssl http2; server_name morooi.com; root /home/git/projects/blog; ssl_certificate "/home/git/morooi.com.crt"; ssl_certificate_key "/home/git/morooi.com.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #减少点击劫持 add_header X-Frame-Options DENY; #禁止服务器自动解析资源类型 add_header X-Content-Type-Options nosniff; #防XSS攻击 add_header X-Xss-Protection 1; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
检查配置是否正确 nginx -t
1 2 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
通过检测~
重载配置 nginx -s reload
访问成功!
主要参考:
带你跳过各种坑,一次性把 Hexo 博客部署到自己的服务器
Nginx 配置 HTTPS 服务器