搭建博客(Hexo)到云服务器
本文最后更新于:2023年7月31日 中午
搭建Hexo博客
debug……
部署博客到云服务器
部署环境
本地环境:Windows 10 LTSC 1809
服务器环境:CentOS Linux release 7.9.2009 (Core)
Git环境安装
本地生成 Git 密钥
Git使用Https协议,每次pull,push都要输入密码,使用相当不便利,使用git协议,然后使用ssh密钥,就可以省去每次都输入密码
ssh-keygen -C "your@mail.com"一路回车之后,在本地的 C:\Users\hhu\.ssh下会有 两个文件 公钥:id_rsa.pub 和 私钥:id_rsa,一会要把公钥里的内容复制到服务器上配置
服务器上的的配置git环境
1、安装Git
切换到 root 用户
安装包的依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc perl-ExtUtils-MakeMaker进入
/usr/local/src目录,下载Git(这里用2.34.1),并解压cd /usr/local/src wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz tar -zxvf git-2.34.1.tar.gz进入解压目录,编译,安装(prefix是前缀,安装在指定目录)
cd git-2.34.1 make prefix=/usr/local/git all make prefix=/usr/local/git install配置环境变量
vim /etc/profile # 编辑环境配置文件# 配置GIT export GIT_HOME=/usr/local/git/bin export PATH=$GIT_HOME/bin:$PATHsource /etc/profile # 双薪环境配置文件,使配置的信息生效git –version 测试
git --version显示下列信息就标识成功了:
git version 2.34.1
2、配置git用户
创建git用户并设置密码
useradd git # 添加git用户 passwd git # 给git用户设置密码将 git 用户添加到 sudoers 文件中
centos系统中的用户可以分为两类:
- 超级用户– root
- 普通用户–其他
su和sudo的区别如下:
- su命令主要作用:让你可以切换用户身份,来执行某种操作的命令,在已经登录的会话中(不登出当前用户的情况下)切换到另外一个用户。
- sudo命令作用:容许当前用户以特定用户去执行特定命令
chmod 740 /etc/sudoers # 临时更改文件的权限,进行编辑 vim /etc/sudoers # 编辑sudoers## Allow root to run any commands anywhere root ALL=(ALL) ALL # 添加下面这行 git ALL=(ALL) ALLchmod 400 /etc/sudoers # 把权限改回去配置公钥
vim /home/git/.ssh/authorrized_keys # 在git用户下的.ssh目录下创建 authorrized_keys 文件 # 复制本机环境(C:\Users\hhu\.ssh) 的 id_rsa.pub 中的内容到 authorrized_keys 中测试
在本机环境下的git_bash中(不要用CMD),输入下列命令进行验证:
ssh -v git@服务器ip如果最后一行显示的是:
Host key verification faild,把Windows中.ssh/known_hosts这个文件的第二行删掉即可。注意:如果服务器ssh端口不是默认的
22的,需要在本机环境下,用 git_bash 在 C:\Users\hhu.ssh 下创建 config 文件(没有后缀),内容如下:# 如果是域名 访问 Host xxx HostName xxx.com Port 3333 # 如果是 IP 访问 Host "211.111.xx.xxx" Port 3333
3、创建博客网站的目录
使用
root用户在/home/www/目录下创建TheBlogOfHH(名称随意)权限给 git 用户,不然后续自动推送可能会出现权限问题
chown -R git:git /home/www/TheBlogOfHH
4、自动推送
在git用户家目录创建一个git仓库,把前面本地搭建好的博客文件传到这儿来进行管理
cd /home/git # 进入家目录 git init --bare TheBlogOfHH.git # 初始化仓库创建钩子文件,用以自动推送
vim TheBlogOfHH.git/hooks/post-receive # 创建钩子文件添加以下内容:
#!/bin/sh git --work-tree=/home/www/TheBlogOfHH --git-dir=/home/git/TheBlofOfHH.git checkout -f注意:上述第一个
work-tree是存放博客文件的目录,后面git-dir是 刚刚初始化好的仓库的目录最后,赋予这个文件可执行权限
chmod +x /home/git/TheBlofOfHH.git/hooks/post-receive
本地博客 _config.yml 配置
**编辑本地博客的 _config.yml **文件,最后的位置更改如下:
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo: git@IP地址:/home/git/TheBlogOfHH.git
branch: master Nginx环境安装
接下来的操作都是在服务器端
1、安装组件
安装gcc
gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言
yum -y install gcc # 安装gcc gcc -v # 查看版本pcre、pcre-devel安装
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
yum install -y pcre pcre-develzlib安装
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
yum install -y zlib zlib-devel安装openssl
openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。
yum install -y openssl openssl-devel
2、安装Nginx
切换
root用户,进入/usr/local/src目录下载nginx安装包,解压
wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar -xvf nginx-1.9.9.tar.gz编译、安装
cd nginx-1.9.9 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module # 设置安装目录为 /usr/local/nginx make && make install # 编译并且安装启动
cd /usr/local/nginx/sbin # 进入安装目录的 sbin 目录 ./nginx # 启动Nginx验证
浏览器输入服务器IP进行访问

设置Nginx开机自启动
vim /lib/systemd/system/nginx.service # 创建 nginx.service 文件nginx.service文件内容如下:
[Unit] #描述服务 Description=nginx #描述服务类别 After=network.target #服务运行参数的设置,注意【Service】的启动、重启、停止命令都要用绝对路径 [Service] #后台运行的形式 Type=forking #服务具体运行的命令 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #重启命令 ExecReload=/usr/local/nginx/sbin/nginx -s reload #停止命令 ExecStop=/usr/local/nginx/sbin/nginx -s quit #表示给服务分配独立的临时空间 PrivateTmp=true #运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3 [Install] WantedBy=multi-user.target加入开机启动:
systemctl enable nginx.service取消加入开机启动:
systemctl disable nginx.service
配置nginx
- 进入 /usr/local/nginx/conf
- 编辑 nginx.conf
# 注意配置这个 user,默认的是 nobody,可能会造成权限问题
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name codeofhh.cn;
# 重定向到 https链接
rewrite ^(.*)$ https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name codeofhh.cn;
# 安全证书位置,没有的需要取下载nginx配置的证书
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
# 博客网站目录
root /home/www/TheBlogOfHH;
index index.html index.htm;
}
error_page 404 /404.html;
location /404.html {
root /home/www/TheBlogOfHH/404.html;
}
error_page 500 502 503 504 /50x.html;
location /50x.html {
root /usr/local/nginx/html;
}
}
}重启nginx
systemctl restart nginx.service
注意:上述文件中配置了ssl证书,如果没有证书记得删除那段配置,如果有,需要下载下来放到/usr/local/nginx/cert目录,并改名字
Nginx常见报错:
INFO Validating config ERROR Deployer not found: git解决方法:
原因:少了hexo针对git的deploy组件
解决方法:npm install –save hexo-deployer-git
上传证书没权限
使用root权限将上传文件夹权限修改为可读可写
chmod -R 777 xxxnginx: [emerg] unknown directive "ssl_certificate1" in /usr/local/nginx/conf/nginx.conf:107原因:这是因为没有安装
SSL模块方法:
在Nginx安装文件解压目录执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make # 注意,不是 make install,否则会覆盖安装的Nginx网页报错:NGINX - ERR_SSL_PROTOCOL_ERROR在Nginx配置中设置 https server中 的监听,除了有
443之外,还要加一个ssl
在本机推送博客文件到服务器
hexo g生成静态html文件- 执行
hexo d推送到服务器