title: Windows+ECS+个人域名+HEXO搭建个人博客
declare: true
tags: 个人博客
abbrlink: f7136b46
date: 2021-10-16 16:38:48
banner_img: https://w.wallhaven.cc/full/72/wallhaven-72rd8e.jpg
index_img: https://w.wallhaven.cc/full/3z/wallhaven-3z32j3.jpg
sticky: 100
comment: valine
categories:
- 环境部署
- 前端开发
- 技术提升
搭建个人博客网站,用来学习it技术,小可爱们快来呀!
准备工作
版本控制之git
两个功能
1、需要通过ssh进行免密登录,将git用户信息发送给服务器
2、hexo博客框架需要
生成ssh秘钥
打开终端cmd,用户密码登录,输入
ssh-keygen -t rsa
会提示密钥存放路径,一般存放在默认路径,直接回车即可
后续会用到
包管理工具nodejs
官网下载路径
http://nodejs.cn/
安装
下一步下一步。。。
环境变量配置
测试是否安装成功
node -v
npm -v
淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
购买阿里云ECS
1、官网购买
2、安全组开放端口
3、博客内容存放在云服务器
购买个人域名
1、购买域名
https://wanwang.aliyun.com/domain/recommend?spm=5176.10695662.1158081.4.2f774234NtE3TG#/
2、域名备案
1、尽量采取手机端,各种信息采集手机端好操作。
2、备案时间一般是两周左右,关键是信息完整就行。
3、备案期间手机尽量保持畅通,阿里云服务人员会核实个人信息。
3、公安备案
4、阿里云DNS解析
我们在通过网站网址打开网站的过程中,其实就是浏览器获取到了隐藏在网址背后的网站服务器的i p 地址啊,通过访问这个i p 地址的网站服务器呢来打开网站。也就是说啊所有的域名,也就是我们常说的网址真正起作用的是它背后的服务器的i p 地址。按浏览器之所以知道每一个域名背后对应的网站服务器的i p 地址,靠的就是d n s.
- 首先,我们登录阿里云,然后点击右上角的【控制台】,进入控制台。
- 进入控制台之后,显示当前用户的产品服务页面,比如ECS,Redis,OSS对象存储技术,这些技术都会显示在当前页面;由于DNS解析之前没有操作过,故而不显示当前页面
- 鼠标触碰当前页面左上角,显示各种各样的功能模块,查找云解析
- 显示DNS解析页面,默认显示个人的域名信息
- 点击域名,进入解析设置,添加记录
5、重点来了,解析的内容之记录类型。一般就两种,云服务器或VPS的话,选择A,虚拟主机的话,选择CNAME就行。
记录类型
主机记录
解析线路,选择默认就行。
记录值。这个就是服务器或者虚拟主机的外网IP地址。在你购买的服务器查看。TTL,这个默认的10分钟就行。最后点击【确定】就解析好了。
这只是解析了一个前缀。若你的网站想www和不加www前缀都能访问。那你要至少要解析这两个。解析好后,我们等几分钟,就可以访问我们的网站了。
hexo
快速、简洁且高效的博客框架
官网
https://hexo.io/zh-cn/
安装前提
nodejs:http://nodejs.org/
git:http://git-scm.com/
安装hexo
$ npm install -g hexo-cli
建站
安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
$ hexo init <folder>
$ cd <folder>
$ npm install
本地运行
hexo server
http://localhost:4000
本地访问端口号4000,访问界面如下
hexo init 博客文件名字执行该指令之后,会生成如下目录文件,其中文件简要说明。
_config.yml
网站的 配置 信息,您可以在此配置大部分的参数。
package.json
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server"
},
"hexo": {
"version": ""
},
"dependencies": {
"hexo": "^5.0.0",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-category": "^1.0.0",
"hexo-generator-index": "^2.0.0",
"hexo-generator-tag": "^1.0.0",
"hexo-renderer-ejs": "^1.0.0",
"hexo-renderer-marked": "^4.0.0",
"hexo-renderer-stylus": "^2.0.0",
"hexo-server": "^2.0.0",
"hexo-theme-landscape": "^0.0.3"
}
}
scaffolds
模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。
Hexo的模板是指在新建的文章文件中默认填充的内容。例如,如果您修改scaffold/post.md中的Front-matter内容,那么每次新建一篇文章时都会包含这个修改。
source
资源文件夹是存放用户资源的地方。除 _posts
文件夹之外,开头命名为 _
(下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public
文件夹,而其他文件会被拷贝过去。
themes
主题 文件夹。Hexo 会根据主题来生成静态页面。
指令简写
hexo n "我的第一篇文章"` <=> `hexo new "我的第一篇文章"` <=> `hexo new post "我的第一篇文章"`
`hexo p` 等价于 `hexo publish`
`hexo g` 等价于 `hexo generate`
`hexo s`等价于 `hexo server`
`hexo d` 等价于 `hexo deploy`
`hexo deploy -g` 等价于 `hexo deploy --generate`
`hexo generate -d`等价于`hexo generate --deploy
注: hexo clean 没有 简写, git --version 没有简写
服务器端
安装nginx
安装ngin需要相关的依赖库,我们先进行库的安装。
1、安装gcc gcc-c++
yum install -y gcc gcc-c++
2、安装PCRE库
切换到usr/local目录,下载的pcre,安装此目录
cd /usr/local/
当前目录(usr/local)下载pcre
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
压缩包解压gz
tar -xvf pcre-8.37.tar.gz
编译执行pcre
cd pcre-8.37
./configure
make && make install
pcre-config --version
3、安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
4、安装nginx
安装nginx一定要在local文件夹下
-- 切换到local目录
cd /usr/local/
-- 下载nginx安装包
wget http://nginx.org/download/nginx-1.17.9.tar.gz
-- 解压nginx安装包
tar -xvf nginx-1.17.9.tar.gz
-- 切换目录nginx
cd nginx-1.17.9
-- 使用nginx默认配置
./configure
-- 编译安装
make && make install
nginx启动
-- 进入sbin目录,可以看到有一个可执行文件nginx,直接./nginx执行就OK了
cd /usr/local/nginx/sbin
./nginx
浏览器访问ECS(http://geekmice.cn/)即可显示nginx成功页面
重启nginx
/usr/local/nginx/sbin/nginx -s reload
停止nginx
/usr/local/nginx/sbin/nginx -s stop
问题1:nginx: [alert] kill(3475, 15) failed (3: No such process) 解决方案
答:
1、查看nginx安装目录下的pid文件存放路径
cat /usr/local/logs/nginx.pid
2、删除这个nginx.pid
文件
rm -rf nginx.pid
3、之后再次杀掉nginx进程
-- 查询进程nginx
ps -ef | grep nginx
-- kill -9 杀死进程
kill -9 进程号
安装git以及nodejs
1、安装nodejs
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs
node -v
npm -v
2、安装git及新建git用户
yum install git
adduser git
chmod 740 /etc/sudoers
vi /etc/sudoers
在如下位置添加 git ALL=(ALL) ALL vi指令执行之后按i进入输入模式
编辑完成之后按一下esc,然后输入:wq即可退出。
执行以下指令更改文件夹权限
chmod 400 /etc/sudoers
# 设置git用户密码 geekmice
sudo passwd git
切换git用户并且建立密钥
# 切换git用户
su git
# 切换家目录
cd ~
# 创建.ssh文件夹
mkdir .ssh
# 进入.ssh文件夹
cd .ssh
# 创建秘钥文件,将本地git生成的公钥复制到此文件(id_rsa.pub)
vi authorized_keys
# 授权秘钥文件
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
创建git仓库
cd ~
-- bare repository主要是用作分享版本库。开发者使用bare repository可以向其他人分享存储在本地的版本库,以便于实时分享代码更新和团队协作
git init --bare blog.git
-- Initialized empty Git repository in /home/git/blog.git/
vi ~/blog.git/hooks/post-receive
# 该文件添加如下内容
# 用户上传到git仓库的内容默认转移到/home/www/website,这个位置就是
# 最后博客保存的位置,需要新建文件夹/home/www/website 需要切换root
git --work-tree=/home/www/website --git-dir=/home/git/blog.git checkout -f
# 保存退出
:wq
# 授权
chmod +x ~/blog.git/hooks/post-receive
# 以上指令都需要在su git 之后执行 如果中途断开重新连接过,需要重新执行 su git指令 进入git账户。
切换root用户
创建/home/www/website文件夹,到时候博客位置就在此
[root@lYIK5tHp ~]# mkdir -p /home/www/website
[root@lYIK5tHp ~]# cd /home/www/website
[root@lYIK5tHp website]# ll
total 0
注意:文件夹权限
chmod 777 /home/www/website
chmod 777 /home/www
本地命令行打开执行ssh命令
ssh -v git@服务器的公网ip
若是失败的话:
因为以前部署过本地记住了服务器秘钥,发生改变时候报错,只需要删除本地电脑.ssh目录的known_hosts文件就行了。
注意这个密码是:geekmice
修改nginx配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
将本地博客推送服务器
修改本地博客配置文件
repo: git@这里改为服务器公网IP:/home/git/blog.git
推送博客
hexo g -d
再次访问公网IP即可显示博客内容,并且博客内容在www/website目录就已经生成了
然后重启nginx,再次访问公网IP显示博客主页
在/etc/init.d/路径下添加脚本文件,名称为nginx,内容如下
该目录包含许多系统各种服务的启动和停止脚本
#!/bin/bash
#Startup script for the nginx Web Server
#chkconfig: 2345 85 15
nginx=/usr/local/nginx/sbin/nginx
conf=/usr/local/nginx/conf/nginx.conf
case $1 in
start)
echo -n "Starting Nginx"
$nginx -c $conf
echo " done."
;;
stop)
echo -n "Stopping Nginx"
killall -9 nginx
echo " done."
;;
test)
$nginx -t -c $conf
echo "Success."
;;
reload)
echo -n "Reloading Nginx"
ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP
echo " done."
;;
restart)
$nginx -s reload
echo "reload done."
;;
*)
echo "Usage: $0 {start|restart|reload|stop|test|show}"
;;
esac
执行以下命令即可
chmod +x nginx
控制指令
# 启动
service nginx start
# 停止
service nginx stop
# 重启
service nginx reload
如何给博客添加ssl证书
阿里云获取免费ssl证书
参考:如何申请阿里云免费ssl证书,可用于https网站,下载下来
官网获取地址
https://common-buy.aliyun.com/?spm=5176.2020520163.cas.1.zTLyhO&commodityCode=cas#/buy
注意:需要有个人域名,linux安装nodejs
操作流程如下
登录到阿里云后台,并选择 “SSL证书(应用安全)” 菜单
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqW9bs6A-1642957172048)(https://yqfile.alicdn.com/47953e4804855cc5980082d0c222622a2973932a.png)]
点击购买证书按钮
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCoo8OLZ-1642957172049)(https://yqfile.alicdn.com/bab8d30b3e4faf1d1f45fc4a2b80abb758961b65.png)]
选择免费型DV SSL,Symantec,点击立即购买按钮。
(这里需要注意,阿里云免费证书一次只能购买一年)
支付操作
支付成功
填写相关信息并点击下一步dns验证
具体解析dns
点击验证按钮对证书进行验证,也可以在第6步完成后,根据提示进行验证
验证通过,即可下载
推荐nginx下载
nginx配置ssl证书
参考:nginx配置ssl证书
前提:阿里云开通443端口号,防火墙开启443端口监控
阿里云开通443端口号
防火墙开启443端口监控
1、先查看服务器防火墙开放的端口
firewall-cmd --zone=public --list-ports //查看防火墙的开放端口
2、允许防火墙放行443端口
命令含义:
–zone #作用域
–add-port=443/tcp #添加端口,格式为:端口/通讯协议
–permanent #代表永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=443/tcp --permanent
3、重启防火墙
firewall-cmd --reload
将ssl证书信息上传到linux,在/usr/local/nginx/conf
目录创建cert文件夹,解压之后放置如图所示
cd /usr/local/nginx/conf
mkdir cert
修改nginx配置文件/usr/local/nginx/conf/nginx.conf
cd /usr/local/nginx/conf
vim nginx.conf
需要在http中添加一个server节点,如图所示,若是嫌在linux修改配置文件麻烦的话,可以通过连接工具winscp或者xshell将nginx.conf下载到本地,修改之后再上传该文件到对应的目录;在没有配置之前,用户使用的是http协议进行访问,那么默认打开的端口是80,所以需要进行重定向,在上一个server节点基础上,增加一个节点进行重定向服务。
#user nobody;
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;
# 你的 my.com 要指向 你服务器的 ip 具体配置方式:阿里云 配置时 主机前缀使用 @
server {
listen 80;
server_name geekmice.cn; #浏览器访问 geekmice.cn 请求时,使用该配置
# rewrite ^ https://www.geekmice.cn$request_uri; # 区别是 http 跳转到 https
rewrite ^/(.*)$ https://www.geekmice.cn:443/$1 permanent;
}
# 你的 www.geekmice.cn 要指向 你服务器的 ip
server {
listen 80;
server_name www.geekmice.cn; #浏览器访问 www.geekmice.cn 请求时,使用该配置
# rewrite ^ https://www.geekmice.cn$request_uri; # 区别是 http 跳转到 https
}
# HTTPS server SSL 安全链接配置
server {
listen 443 ssl;
server_name www.geekmice.cn; # 拦截 https://www.irzhd.com 链接
ssl_certificate /usr/local/nginx/conf/cert/6590304_www.geekmice.cn.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/6590304_www.geekmice.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# error_page 404 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/nginx/html;
}
location / {
root /home/www/website;
index index.html index.htm;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
/usr/local/nginx/sbin/nginx
结果一重启,duang~出错了。
nginx:[emerg]unknown directive ssl,就是这个错误提示,因为我们配置这个ssl证书需要引用到nginx的ssl这模块,但是我们开始编译nginx时候并没有将ssl模块一块编译进去,所以导致这个错误
首先来到当初下载nginx包压缩的解压目录,我的目录如下
进入到解压目录,执行以下命令进行编译操作
./configure --with-http_ssl_module
重新添加这个ssl模块
执行make命令,但是不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的。
make
执行make命令,但是不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak //备份,备份则不用执行
cp objs/nginx /usr/local/nginx/sbin/nginx
出现错误,删除掉/usr/local/nginx/sbin/下的 nginx 再复制过去即可
最后我们来到Nginx安装目录下,来查看是否有安装ssl模块成功。执行
cd /usr/local/nginx/
./sbin/nginx -v
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
执行以下命令首先关闭nginx,然后再开启nginx
cd /usr/local/nginx/sbin
# 关闭nginx
./nginx -s stop
# 开启nginx
./nginx