云服务器建站学习&练习
0x00 前提
正好最近腾讯云打折,就买了三年2核4G云服务器,拿来转移下博客阵地,也能深度学习下服务器、建站方面的知识
0x01 hexo搭建博客
shell连接云服务器
购买服务器会让你先选择系统镜像,我选择的是Ubuntu 20.04,
打开腾讯云的控制台,重置默认密码,然后就可以用shell工具连接服务器辣
可以选择密码连接或者在控制台那里生成密钥,使用私钥连接(我选择密码,因为我懒x x)
打开 sshd_config
配置文件
sudo vi /etc/ssh/sshd_config
找到 ##Authentication
,将 PasswordAuthentication
参数修改为 yes
若
sshd_config
配置文件中无此配置项,则添加PasswordAuthentication yes
项即可
重启 ssh 服务
sudo systemctl restart sshd
shell端选择的是FinallShell,新建会话,主机名输入控制台可以看到的公网IP,端口默认22,
**注意:**用户名是Ubuntu!!!不是root,也不是lighthouse,在这卡了好长时间,密码即刚才重置的新密码
安装nodejs及hexo
然后想安装hexo,提示要先安装npm
sudo apt install npm
然后报错了…
正确流程
sudo apt update
sudo apt install nodejs npm
但是这样安装完的node版本为v10.19.0
,在安装hexo时还是会显示node版本过低报错
更新node版本
sudo npm install -g n
sudo n 12.22.1
这时node -v
显示仍未旧版本,前面的操作提示说
If "node --version" shows the old version then start a new shell, or reset the location hash with: hash -r (for bash, zsh, ash, dash, and ksh) rehash (for csh and tcsh)
hash -r
后即可
然后sudo npm install -g hexo-cli
下载hexo
安装并配置git
添加用户git,并下载Git
sudo adduser git
sudo apt install git
在home
目录下建立一个.ssh
目录,赋予其700权限mkdir ~/.ssh && chmod 700 ~/.ssh
添加git用户的权限
chmod 740 /etc/sudoers
vim /etc/sudoers
找到这个内容:root ALL=(ALL:ALL) ALL
加入:git ALL=(ALL:ALL) ALL
改回权限:chmod 400 /etc/sudoers
切换至git用户(很重要) 进行下面操作:
su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
修改authorized_keys中内容为服务器密钥对的公钥
修改上面这两个文件的权限:
chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh
然后本地测试连接ssh -v git@云服务器IP
,连接成功
若出现
Host key verification failed.
报错,则删除/home
文件夹下的known_hosts文件再连接即可
创建git仓库并配置nginx
建立文件路径:
sudo mkdir /var/repo
修改权限:
chown -R $USER:$USER /var/repo/
chmod -R 755 /var/repo/
创建远程Git仓库:
cd /var/repo
git init --bare blog.git
安装Nginx:
apt-get install nginx -y
配置 Nginx 托管文件目录:
sudo su root
mkdir -p /var/hexo
chown -R git:git /var/hexo
chmod -R 755 /var/hexo
修改 Nginx 的 default
文件使得 root 指向刚刚创建的 /var/hexo
目录:
vim /etc/nginx/sites-available/default
修改server字段的root部分为root /var/hexo;
然后重启 nginx 服务:
service nginx restart
这时访问公网IP显示403,因为未搭建任何东西,在/hexo
目录下新建index.html
<html>
<body>
<p>This is my Blog.</p>
</body>
</html>
再打开公网IP即显示“This is my Blog.”
配置git-hooks
配置 git-hooks,即配置git推送后执行的脚本
vim /var/repo/blog.git/hooks/post-receive
添加
##!/bin/bash
git --work-tree=/var/hexo --git-dir=/var/repo/blog.git checkout -f
脚本目的是从blog.git
仓库覆盖掉/var/hexo
目录,达到更新的目的
然后为其添加执行权限
chmod +x /var/repo/blog.git/hooks/post-receive
更改blog.git目录的拥有者
chown -R git:git blog.git
修改本地配置文件
修改本地博客目录下的**_config.yml**站点配置文件
deploy:
type: git
repository : git@<ip地址或域名>:/var/repo/blog.git
branch: master
然后更新博客,hexo cl&&hexo g&&hexo d
即可啦
设置https访问
但是现在没有SSL协议不能通过https访问,域名访问的话会被拦截,那就要申请一下ssl证书,腾讯云有一个免费一年的,我就申请了,
很快就可以审核成功,然后下载下来文件,包括sheeprooo.top.csr
,sheeprooo.top.key
,sheeprooo.top_bundle.crt
,sheeprooo.top_bundle.pem
将.crt
证书文件和.key
私钥文件上传到服务器etc/nginx/conf.d/ssl
目录下(根据实际nginx安装路径决定)
上传时发现失败,原因是登录权限不是root,而直接root连接会失败,要先修改
/etc/ssh/sshd_config
文件修改两项
PasswordAuthentication yes
和## Authentication:
下的PermitRootLogin yes
编辑/etc/nginx/sites-available/default
,添加
server {
listen 80; ## 监听80端口
server_name _; ## 表示任何域名
return 301 https://$host$request_uri; ## 通过301重定向到https
}
server {
ssl_certificate /etc/nginx/conf.d/ssl/sheeprooo.top_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/sheeprooo.top.key;
listen 443 ssl;
server_name sheeprooo.top;
root /var/hexo;
index index.html;
}
然后重启nginx服务即可
nginx -s reload
或
service nginx restart (不推荐)
后记(后续更新)
上面创建的git用户可以通过ssh连接,进行任何操作。为了安全性,我们需要将git用户的活动限制在与Git相关的范围,也就是把git用户的shell改成 git-shell
0x02 使用子域名创建多个网站
ICP备案通过了,就可以开始搞搞之前想做的子域名了
通过子域名实现在同一个服务器搭建多个网站的目的
使用nginx监听80端口,通过反向代理将不同的子域名指向不同的文件目录从而实现多个子域名建站
首先在DNS服务商添加解析子域名到服务器IP
腾讯云免费的SSL证书是单域名证书,所以如果使用子域名的话要每个子域名都申请一个SSL证书,
本人均上传到
etc/nginx/conf.d/ssl
文件夹中
编辑/etc/nginx/sites-available/default
server {
listen 80; ## 监听80端口
server_name _; ## 表示无论什么hostname都会被匹配
return 301 https://$host$request_uri; ## 把用户的HTTP请求永久重定向(301 Moved Permanently)到HTTPS,并且保证链接的剩余部分不变,即host以及URI部分都是一样的
}
server {
server_name sheeprooo.top;
rewrite ^(.*) https://www.$host$request_uri permanent; ## 如果访问的域名为主域名自动跳转www
}
server {
ssl_certificate /etc/nginx/conf.d/ssl/www.sheeprooo.top_bundle.crt; ## SSL证书文件位置
ssl_certificate_key /etc/nginx/conf.d/ssl/www.sheeprooo.top.key; ## SSL密钥文件位置
listen 443 ssl; ## 监听443端口
server_name www.sheeprooo.top;
root /var/www; ## www域名对应的文件目录
index index.html index.php; ## 主页的文件名称
}
server {
ssl_certificate /etc/nginx/conf.d/ssl/blog.sheeprooo.top_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/blog.sheeprooo.top.key;
listen 443 ssl;
server_name blog.sheeprooo.top;
root /var/hexo;
index index.html;
}
server {
ssl_certificate /etc/nginx/conf.d/ssl/study.sheeprooo.top_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/study.sheeprooo.top.key;
listen 443 ssl;
server_name study.sheeprooo.top;
root /var/study;
index index.html index.php;
}
server {
ssl_certificate /etc/nginx/conf.d/ssl/test.sheeprooo.top_bundle.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/test.sheeprooo.top.key;
listen 443 ssl;
server_name test.sheeprooo.top;
root /var/test;
index index.html index.php;
}
保存后,重启nginx服务
nginx -s reload
如果重启服务报错,可使用
nginx -t
检查是否服务是否有问题
将博客移入了blog子域名访问注意将本地含域名的文件修改一下