一开始博客在github pages上,速度比较慢。后来在网上发现许多人说托管到Netify很快,还自带CDN加速。但我迁移过去,发现国内的网根本就登不上,又检测了一下在大陆访问博客的速度,惨不忍睹。最终老老实实买台腾讯云服务器,把博客迁移过去。顺手写篇文章记录一下。
必备环境
服务器(作者用的是腾讯云的),域名www.xiaoniuhululu.com(需要备案)
云主机 安全组需开放22、80、443端口,腾讯云默认开放所有端口
22 :ssh访问
80 :http访问
443 :https访问
本地:装好 git, 一个能正常在本地运行的hexo 博客
我们先将服务器的环境 配置一下:
- 安装git
sudo yum install git
- 安装docker
为什么使用docker,通过 docker 拉取 nginx 镜像,将该镜像运行的容器作为代理服务器和反向代理.
我们通过 daocloud 加速安装,这样方便快捷
curl -sSL https://get.daocloud.io/docker | sh
查看docker版本
docker -v
Docker version 20.10.5, build 55c4c88
设置docker自启动
sudo systemctl enable docker
启动docker
sudo systemctl start docker
- 拉取nginx镜像
搜索nginx镜像
docker search nginx
拉取最新 nginx 镜像到云主机
docker pull nginx:latest
查看镜像
docker images
查看nginx镜像版本
docker image inspect nginx:latest | grep -i version
- 运行nginx容器
运行一个名为 nginx-web 的容器
docker run -d \ --name nginx-web \ -p 80:80 \ -p 443:443 \ --restart always \ -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \ -v /home/nginx/conf.d:/etc/nginx/conf.d \ -v /home/nginx/html:/usr/share/nginx/html \ -v /home/nginx/log:/var/log/nginx \ -v /home/nginx/ssl:/etc/nginx/ssl \ nginx:latest
其中: -d :在分离模式下(后台)运行 --name :给运行的容器取一个名字,这里是 nginx-web -p :docker宿主机端口映射nginx-web容器端口,即80映射80,443映射443 --restart :将 nginx-web 容器设为自启动 -v :将docker宿主机的目录路径绑定装载到nginx-web容器的目录路径,即两者路径下的数据会自动同步且保持一致,目录不存在自动创建 /usr/share/zoneinfo/Asia/Shanghai :将宿主机时间同步到容器,因为容器与宿主机时间相差8小时 /home/nginx/conf.d :存放站点配置文件 /home/nginx/html :存放hexo部署目录 /home/nginx/log :存放nginx-web容器运行日志 /home/nginx/ssl :存放ssl证书,用于https访问 nginx:latest :使用标签为 latest 的 nginx 镜像,即上面拉取的nginx镜像
查看所以容器:
docker ps -a
出现下面代表容器创建并运行成功
- 拷贝default.conf文件 nginx-web 容器在 /etc/nginx/conf.d/ 目录下有一个 default.conf 文件,因为该目录与宿主机上的 /home/nginx/conf.d 目录挂载时被删除了。没有该文件,浏览器访问报错 502 Bad Gateway 。因此下面要运行一个新nginx容器,然后拷贝该容器上的 default.conf 文件到挂载目录就解决了
首先,运行一个名为ceshi的新容器
docker run -d --name=ceshi nginx:latest
将ceshi容器内的default.conf文件拷贝到宿主机
docker cp ceshi:/etc/nginx/conf.d/default.conf /home/nginx/conf.d/default.conf
还有ceshi容器的 50x.html 文件(其实新建一个也可以)
docker cp ceshi:/usr/share/nginx/html/50x.html /home/nginx/html/50x.html
这时可以删除ceshi容器
首先停止容器
docker stop ceshi
然后删除容器
docker rm ceshi
- 创建git用户
useradd git
会自动在宿主机上创建 /home/git 用户目录
更改文件权限
chmod 740 /etc/sudoers
配置git用户权限
vim /etc/sudoers
按 i 键进入输入模式,在 root ALL=(ALL) ALL 下一行添加
git ALL=(ALL) ALL
按 ESC 键退出输入模式,输入 :wq 保存
改回文件权限
chmod 400 /etc/sudoers
更改git密码
sudo passwd git
创建 /home/nginx/html/hexo 部署目录
与nginx-web容器的/usr/share/nginx/html/hexo目录挂载
mkdir /home/nginx/html/hexo
切换到git用户(下面都是用git用户)
su git
- 创建hexo.git仓库
hexo.git 仓库用来存放hexo博客部署文件
创建hexo.git仓库
$ cd ~ $ git init --bare hexo.git
配置 post-receive 钩子文件实现从 hexo.git 仓库克隆新的博客静态文件到 /home/nginx/html/hexo (需root用户手动创建hexo文件夹,上面已经创建过了)目录下。这样以后部署博客时只需要本地 git push 就好,无需在云主机操作
编辑hexo.git钩子文件
vim ~/hexo.git/hooks/post-receive
按 i 键进入输入模式,写入:
git --work-tree=/home/nginx/html/hexo --git-dir=/home/git/hexo.git checkout -f
按 ESC 键退出输入模式,按 :wq 保存
授予钩子文件可执行权限
$ chmod +x ~/hexo.git/hooks/post-receive $ cd ~ $ sudo chmod -R 777 /home/nginx/html/hexo
可能提示要输入git密码
如果再添加一个网站,只需 root用户下创建一个 ceshi 文件夹
mkdir /home/nginx/html/ceshi su git
除了只需要更改仓库名和目录路径,其它同上,nginx-web容器可以代理多个网站
本地
- 域名绑定服务器+ 申请ssl证书
笔者用的是 阿里云的域名,去阿里云控制台把域名与服务器绑在一起,这部分很简单,就省略了 申请ssl证书,用的腾讯的,下载下来后注意:
如果使用 www.xiaoniuhululu.com 访问博客,则证书绑定域名必须是 www.xiaoniuhululu.com ,两者保持一致
下载的ssl证书是一个压缩包,解压后其中有一个 Nginx 文件夹,重命名该文件夹为www.xiaoniuhululu.com
- 推送ssl证书和nginx 配置文件至 服务器中
笔者 使用的是winscp工具上传的,上传好后
ssl证书 上传至服务器 /home/nginx/ssl
如果觉得文章对你有帮助,欢迎关注微信公众号:小牛呼噜噜
nginx 配置文件,先在本地写好,然后上传至服务器 /home/nginx/conf.d
中
配置文件:xiaoniuhululu.com.conf
###https访问 server { listen 80 default_server; listen [::]:80; server_name xiaoniuhululu.com; location / { root /usr/share/nginx/html/hexo; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # location ~ \.php$ { proxy_pass http://172.17.0.2:80; } rewrite ^(.*) https://xiaoniuhululu.com$1 permanent; } server { listen 443 ssl; server_name xiaoniuhululu.com; ssl_certificate /etc/nginx/ssl/www.xiaoniuhululu.com/1_xiaoniuhululu.com_bundle.crt; ssl_certificate_key /etc/nginx/ssl/www.xiaoniuhululu.com/2_xiaoniuhululu.com.key; # ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/html/hexo; index index.html index.htm; } }
注意:路径一定要一一对应,可以自定义
- 推送本地hexo博客
修改hexo博客的配置文件hexo/_config.yml:
deploy: type: git repository: git@111.11.1.11:/home/git/hexo.git branch: master
注意前面和冒号 : 后的空格
推送到云主机 hexo.git 仓库 hexo目录下右键 Git bash Here
执行部署命令,文件会自动部署到服务器的hexo.git仓库中,静态文件会上传到nginx/html/hexo中
hexo clean hexo g hexo d
启动nginx容器
docker restart 容器的id
如果没启动成功,或者页面不正常,可以查看nginx的日志 在/home/nginx/log
中,
把问题一一解决后,浏览器访问 www.xiaoniuhululu.com
参考:https://www.gaoyuanqi.cn/hexo-tenxunyun-xin/
本篇文章到这里就结束啦,如果喜欢的话,多多支持,欢迎关注!