经过前两篇文章Hexo搭建个人博客、Hexo安装NexT主题,博客系统已经可以完美运行在自己的电脑上,但此时的博客系统只能自己访问,要想让互联网的用户都能访问到,可以通过以下两种方式:
把博客系统部署到云服务器上
需要有云服务器,适合有服务器的人,好处是可以通过web页面编辑、发布博客,本文选择此方式。把博客编译后的文件放到CDN或Git服务器上
节省了自己买/租云服务器的成本,但是编辑博客不方便,需要先在本地编辑、编译,最后手动上传(也可以用Github Hooks自动上传)到CDN或者云服务上。
下文详细介绍通过方式1完成博客的运行,整体流程如下:
本地搭建好博客
包括基础的hexo、主题、在线编辑博客插件等,参考:
博客代码托管到Git服务器
为了后续的一键部署和博客内文章的安全性,把博客代码托管到Git器,可以选择Github或者Gitee,本文选择托管到Github。
1 | git init && git remote add origin https://github.com/duan847/blog-manager.git && git add . && git commit -m 'init' && git push -u origin master |
在服务器部署运行博客
有两种方式,本文使用方式2。
- 简单版:直接运行hexo
直接用docker运行hexo,步骤比较简单,但是不能配置https,而且需要单独占用80端口才能配置域名。 - 升级版:运行hexo和nginx
docker-compose同时编排部署hexo和nginx,步骤比较复杂一点,但可以配置https,同时不单独占用80端口。
两种方式都需要先安装Docker,CentOS上安装Docker命令如下:
1 | ## CentOS 7执行以下命令 |
简单版
1 | docker rm -f hexo;docker run -d --name hexo -p 4000:4000 -e PUBLIC_HEXO_GITHUB_URL=https://[username]:[password]@github.com/duan847/blog-manager.git zeusro/hexo |
ps:把PUBLIC_HEXO_GITHUB_URL换成你的仓库地址。
如果仓库是私有仓库,[username]和[password]必须要写,否则删掉[username]:[password]@
。
部署成功就可以通过ip:4000
浏览博客。通过ip:4000/admin
博客编辑。
升级版
安装docker-compose
1 | # 使用daocloud下载安装,安装效率更快 |
生成nginx和hexo编排脚本
1 | mkdir docker-compose-blog && cd docker-compose-blog && rm -rf docker-compose.yaml |
ps:把PUBLIC_HEXO_GITHUB_URL换成你的仓库地址。
如果仓库是私有仓库,[username]和[password]必须要写,否则删掉[username]:[password]@
。
配置nginx的https
创建nginx需要的目录
1 | mkdir ~/docker/nginx/www && mkdir ~/docker/nginx/conf && mkdir ~/docker/nginx/cert |
上传https证书
- 在云服务器申请https证书(有免费的https);
- 下载对应Nginx的证书文件,如:
3838899_www.duanjw.com.pem
和3838899_www.duanjw.com.key
; - 把证书文件上传到
~/docker/nginx/cert
目录下。
设置nginx配置文件
使用443端口,并把80端口的请求重定向到443。
- 需要把
3838899_www.duanjw.com.pem
和3838899_www.duanjw.com.key
换成你的https证书文件名; - 把
server_name localhost;
换成你的域名。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
33echo 'server {
listen 443 ssl;
ssl_certificate /etc/nginx/cert/3838899_www.duanjw.com.pem; # pem
ssl_certificate_key /etc/nginx/cert/3838899_www.duanjw.com.key; # key
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
server_name localhost;
charset utf-8;
## gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
location / {
proxy_pass http://hexo:4000;
}
}
server {
listen 80;
server_name localhost;
return 301 https://$server_name$request_uri;
}
'> ~/docker/nginx/conf.d/default.conf
启动博客
1 | docker-compose up -d |
部署成功就可以通过ip
浏览博客。
通过web管理页面发布新博客
通过ip或者host:4000/admin
博客编辑。方式2通过ip或者host:80/admin
无法访问到编辑博客界面,不知道什么原因。
手动提交代码
可以每一次编辑博客提交一次代码,也可以一段时间后提交一次代码。执行以下命令提交代码:
1 | docker exec -it hexo /bin/sh -c 'cd blog-manager; git pull && git add -A && git commit -m "no commit" && git push' |
注意:如果是第一次提交代码,需要进入到容器,设置git的用户信息,提交代码还需要输入密码,以后便可以用上一行命令提交代码:
1 | # 进入容器 |