文章内容可能不全面和详细,还需要各位看官多动手百度
一.前置条件
1. 购买服务器和服务器
我买的服务器是腾讯云的轻量级服务器,双十一的时候打折买的,3年144元,还有一个域名3年89元,如果是学生或者经济紧张可以考虑节日的时候买。
性能:1核2GB,每月500GB流量,固定50GB的硬盘空间,选择的镜像为Centos操作系统,如果博客访问量不是特别大,这种性能对于搭建博客还是比较合适。
2. 搭建hugo博客
参考我的这篇文章:Hugo博客搭建,或者是百度。
3. 域名备案
如果hugo博客部署到github,那么可以不需要备案,因为github属于国外的服务器,但是如果自己用大陆服务器搭建就需要备案,否则用域名打开网页后会提示网站需要备案,备案请点击这里:腾讯云域名备案。
域名备案要个把月时间,所以请先备案好域名,不然只能用ip地址访问博客了。
二.服务器下载nginx
进入腾讯云控制台登录服务器,先确保Centos有sudo权限
代码语言:javascript复制sudo -l
确保80端口(http)和443端口(https)没有被占用,如果没有显示任何结果则说明没有被占用
代码语言:javascript复制sudo netstat -tulpn | grep :80
sudo netstat -tulpn | grep :443
安装nginx
代码语言:javascript复制sudo yum install -y nginx
设置开机启动nginx
代码语言:javascript复制sudo systemctl enable nginx
启动nginx
代码语言:javascript复制sudo systemctl start nginx
查看是否启动nginx
代码语言:javascript复制sudo systemctl status nginx
在浏览器搜索框输入您的服务器公网ip地址,如果会出现nginx的页面,说明可以导航到您的服务器,即nginx安装成功
三.防火墙设置
为了使外部用户可以访问web服务器,需要开放防火墙,主要是80端口和443端口,可以在服务器的控制台手动设置
也可以在服务器终端输入命令
代码语言:javascript复制sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
四.将静态网页传送到服务器
hugo通过hugo
命令可以生成一个public文件夹,这里面就是网页上展示的东西
现在要做的事情就是把public文件夹里面的内容传送到服务器上,不过要先在服务器里面建一个public文件夹,我选择的位置是建在 home 文件夹里面
上传文件,我采用的方法是rsync的方式,命令如下
代码语言:javascript复制注意:执行这条命令时要在终端把位置调到博客目录下,但是不要进public文件里,因为public后面的/表示public文件夹里面的内容
rsync -avuz --progress --delete public/ root@ip地址:/home/public/
执行这条命令后终端会提示要输入服务器的登录密码,如果之前没有设置密码需要在服务器的控制台设置好
上述命令-avuz
表示的意思可以看这篇文章rsync的选项说明,--progress
表示显示执行过程,--delete
表示删除服务器上public里原先的文件,然后上传新的文件,这个命令可以根据自己的需要选择加上与否
输完命令后看看服务器的/home/public/里面有没有对于的文件就可以了
五.申请ssl证书
为了让网站更安全,首先申请一下https的ssl证书,腾讯云会送一个一年免费的,不过要先申请,然后下载这个证书。也可以通过Let’s encrypt网站申请免费的。不过我用的暂时是腾讯云的。
会得到如下文件
我们只需要Nginx文件夹里面的秘钥对文件,因为在nginx的配置文件里面配置https的时候需要用到,把这两个公秘钥文件上传到服务器。
我是传到了服务器的/etc/nginx目录里,因为我的nginx配置文件也在这个目录下,所以把公秘钥也放在这个目录下,方便调用。先在终端把目录定位到与Nginx文件夹同一层级的地方,命令如下
代码语言:javascript复制注意这里不能加上
--delete
,否则会把里面的文件都删掉,我就踩了这个坑,导致要重新安装nginx
rsync -avuz --progress Nginx/ root@ip地址:/etc/nginx/
于是在/etc/nginx下多了两个文件如下
六.配置nginx的nginx.conf文件
上面讲了我的nginx.conf在/etc/nginx目录下,所以把目录定位到这里,然后输入sudo vim nginx.conf/
下面是我的配置文件里面的内容,标出了要配置的几个地方,其他一般是文件之前默认生成的,若有不懂的地方请百度
代码语言:javascript复制# 要配置的第一个地方,这里的用户要改成root,不然可能会没有权限
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
# 配置http
server {
# 要配置的第二个地方,80访问端口
listen 80 default_server;
listen [::]:80 default_server;
# 要配置的第三个地方,域名
server_name www.sulvblog.cn;
rewrite ^(.*) https://$server_name$1 permanent; #自动从http跳转到https
# 要配置的第四个地方,这里指向public文件夹
root /home/public;
include /etc/nginx/default.d/*.conf;
# 要配置的第五个地方
location / {
root /home/public;
index index.html index.htm;
}
# 要配置的第六个地方
error_page 404 /404.html;
location = /40x.html {
root /home/public;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# 配置https
server {
listen 443 ssl;
# 要配置的第七个地方
server_name www.sulvblog.cn;
root /home/public;
# 要配置的第八个地方
ssl_certificate /etc/nginx/1_sulvblog.cn_bundle.crt;
ssl_certificate_key /etc/nginx/2_sulvblog.cn.key;
# 要配置的第九个地方,可以按照我的写法
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 要配置的第十个地方
error_page 404 /404.html;
location = /404.html {
root /home/public;
}
include /etc/nginx/default.d/*.conf;
}
}
其中端口 80 用于配置 http 服务,端口 443 用于配置 https 服务,这样就完成了nginx 的配置
修改完成后重加载配置文件
代码语言:javascript复制sudo nginx -s reload
检查 nginx 服务的运行情况
代码语言:javascript复制sudo systemctl status nginx
重启 nginx 服务
代码语言:javascript复制sudo systemctl restart nginx
通过域名访问网站,如果出现博客首页,说明配置成功了,如果域名还没有备案成功,用ip地址访问也可以跳转到博客首页
七.后续发布文章
文章在本地写好后,生成public文件,用rsync上传到服务器就可以了。
到这里就结束了,我也是收集了不少资料,踩了不少坑,毕竟也是第一次弄,有什么问题请留言,一起探讨