此博客的生前

大学几年尝试过几台服务器,也尝试过搭建一些环境,服务。但一直没有把这些总结,

正巧本次找到渠道买了三年服务器(2H2G 4M 400多点),为了长久稳定安全使用,便打算细致的配一次环境便有了此文。

本文章内容过于基础,仅作为学习思路供初学小白参考,如有疏漏差错欢迎交流学习。

仅作为过程记录 实际环境各不相同 即便按照下文操作会有各种报错 失败乃成功之母

为什么购买服务器

1、大学生优惠是真的香 2h2g2m 110左右可以接受

在大学生优惠使用结束可以在淘宝购买优惠【通过商家链接注册新用户】439 三年 2h2g4m

当然选择腾讯轻量型服务器的好处 开发票可以自定义额度 其中的奥妙尽在不言之中

1
2
抬头:三江学院
税号:12320000MB0150666E

2、日常安全练习、渗透时操作需要

3、搭建博客访问速度更快,体验更好,拥有自己的专属域名

4、等等

初用服务器

服务器系统可以选 Debian centos 当然别选最新的系统版本 装不上环境恐怖如斯

Xshell SSH连接 ; winscp 文件传输

进入服务商控制台 重置一下root的密码 记得使用强密码

【之前一个白嫖的服务器没有改默认密码 被爆破攻击但幸运因为服务运行在docker容器中 没有损失】

【不要有侥幸心理 如果服务器内正在运行服务或者存储重要数据 一定要有安全意识】

新建用户

1
2
3
4
useradd -m -s /bin/bash userName

passwd userName
//设置密码,输入此命令后会提示你输入密码

新建用户是没有sudo权限的

1
L0sE2 is not in the sudoers file.  This incident will be reported.

1、切换至root账号

2、添加sudoers文件的写权限 sudoers文件默认是只读的,对root来说也是,因此需先添加sudoers文件的写权限,执行下面命令:

1
chmod u+w /etc/sudoers

3、编辑sudoers文件

找到这行 root ALL=(ALL) ALL,在他下面添加 ALL=(ALL) ALL(username是你的用户名)

1
2
3
4
youuser ALL=(ALL) ALL             //允许用户youuser执行sudo命令(需要输入密码).
%youuser ALL=(ALL) ALL //允许用户组youuser里面的用户执行sudo命令(需要输入密码).
youuser ALL=(ALL) NOPASSWD: ALL //允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
%youuser ALL=(ALL) NOPASSWD: ALL //允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.

4、撤销sudoers文件写权限

1
chmod u-w /etc/sudoers

博客

搭建 博客 推荐静态 hexo 之前有师傅动态博客被日穿删库跑路

Nvm

首先安装 nvm nodejs 包管理器 完美解决多版本 nodejs npm的环境问题

nvm/README.md at master · nvm-sh/nvm

因为是新买的服务器多余的便不再赘述 如果有nodejs 删干净

官方文档安装命令写的很清楚

在使用curl下载文件时,关于出现报错,是因为GitHub的raw.githubusercontent.com域名解析被污染了。

通过https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。

1
2
3
4
5
6
7
8
cat <<"EOF" | bash                              
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
export PATH=$PATH:$HOME/.nvm/nvm.sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
nvm --help
EOF

nvm ls-remote 查看可安装版本【须先 nvm install node】nvm list available 为windows

如果 nvm ls-remote / nvm install node 无反应 网速问题换源

1
2
3
4
5
6
7
 修改 环境变量
sudo vi ~/.bashrc
# 在最后添加淘宝镜像
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/
export NVM_IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs
# 让配置生效
source ~/.profile

Hexo 模板[先安装 hexo模板用于验证网站路径设置 也可以在 博客搭建流程进行]

1
2
3
4
npm install hexo-cli -g
hexo init
输入hexo g生成静态文件,此时public文件夹中生成网页文件(命令也写成hexo generate)
输入hexo s本地测试,默认运行在4000端口上,浏览器输入127.0.0.1:4000出现hexo hello world说明第一步成功了。

安装nginx

sudo lsof -i:80

nginx -t 查找nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nginx                                                 #打开 nginx
nginx -t #测试配置文件是否有语法错误
nginx -s reopen #重启Nginx
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #停止Nginx服务(即处理完所有请求后再停止服务)


nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

-?,-h : 打开帮助信息
-v : 显示版本信息并退出
-V : 显示版本和配置选项信息,然后退出
-t : 检测配置文件是否有语法错误,然后退出
-q : 在检测配置文件期间屏蔽非错误信息
-s signal : 给一个 nginx 主进程发送信号:stop(强制停止), quit(优雅退出), reopen(重启), reload(重新加载配置文件)
-p prefix : 设置前缀路径(默认是:/usr/share/nginx/
-c filename : 设置配置文件(默认是:/etc/nginx/nginx.conf)
-g directives : 设置配置文件外的全局指令

安装nginx成功后 修改nginx.conf root后面的路径即可

1
2
include /etc/nginx/conf.d 
include /etc/nginx/sites-enabled

此处包含/etc/nginx/sites-enabled 中的default配置文件

sites-enabled 中的配置文件为 /etc/nginx/sites-available中的软链接

因此修改/etc/nginx/sites-available中的路径即可

1
root /home/blog/public;  //此处路径为hexo渲染生成的静态页面

nginx -s reload 访问ip即可看到hexo 模板页面

nginx -s reload 重载的时候遇到

1
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)

先kill一下nginx的进程 因为上面无法找到的文件是配置文件中生成的因此

1
nginx -c /etc/nginx/nginx.conf

主题的配置 【本次选择比较简朴 以及小众的主题 萌新可以选择比较主流 各种插件轮子可以拿来即用】

https://github.com/hooozen/hexo-theme-tranquility

1
2
cd hexo  /此步切换到博客根目录  如果在theme目录里下载需要删除下载文件的 thmem tranquility 两个文件夹
git clone https://github.com/hooozen/hexo-theme-tranquility.git themes/tranquility

并配置根目录下 _config.yml 中的 theme 字段为 tranquility(参考 主题 | Hexo。)

1
npm install hexo-pagination moment opentype.js

关于使用本博客特色功能 案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
subpage: # 开启“子页”功能,详见 README
enable: true
pages:
- name: STUDY # 文章的分类(category)名,如 developer
path: study # 若不设置则默认使用 name
title: 技术 # 菜单名,如 开发者
icon: /images/icon/icon-code.svg # 图标的路径
description: 网安学生的日常学习 # 描述
- name: POETRY # 文章的分类(category)名,如 developer
path: poetry # 若不设置则默认使用 name
title: 随笔 # 菜单名,如 开发者
icon: /images/icon/icon-pi.svg # 图标的路径
description: 欢迎来到我的随笔,或许我的观点小众,或许幼稚,但如果能带给你一丝一毫的感同身受,便是我的荣幸之极 # 描述
- name: LIFE # 文章的分类(category)名,如 developer
path: life # 若不设置则默认使用 name
title: 人生如歌 # 菜单名,如 开发者
icon: /images/icon/icon-pi.svg # 图标的路径
description: 一些我所拍摄的照片 # 描述

md文档头部案例

1
2
3
4
5
6
7
8
9
10
11
12
13
title: 再见
date: 2023-06-30 16:51:45
categories:
- STUDY

tags:
- 测试
cover: /images/cover/sanyueqi.gif
toc: 0 // 是否使用目录功能
timeline: article # 展示在列


那么,很高兴再见。<!--more--> //此处为部分展示内容 more之前的将进行展示

网易云插件

【小技巧】在网页端听歌的时候 url中的id替换下文中的id 即可享用版权音乐

1
2
3
4
<div style="display: flex; justify-content: center;">//用于居中
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=1975304314&auto=0&height=66"></iframe>

</div>

增加小破站计时功能

themes\tranquility\layout_partials 的layout.njk

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
33
34
35
36
37
38
39
40
41
42
43
44
 <a href="https://github.com/hooozen/hexo-theme-tranquility">致远</a>&nbsp;驱动
//此处为主题默认的版权信息 备案后打算改成备案信息
</div>

<div style="text-align: center;"> //此处作用为使模块居中
<span id="sitetime"></span>
<script language=javascript>
function siteTime(){
window.setTimeout("siteTime()", 1000);
var seconds = 1000;
var minutes = seconds * 60;
var hours = minutes * 60;
var days = hours * 24;
var years = days * 365;
var today = new Date();
var todayYear = today.getFullYear();
var todayMonth = today.getMonth()+1;
var todayDate = today.getDate();
var todayHour = today.getHours();
var todayMinute = today.getMinutes();
var todaySecond = today.getSeconds();
/* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
year - 作为date对象的年份,为4位年份值
month - 0-11之间的整数,做为date对象的月份
day - 1-31之间的整数,做为date对象的天数
hours - 0(午夜24点)-23之间的整数,做为date对象的小时数
minutes - 0-59之间的整数,做为date对象的分钟数
seconds - 0-59之间的整数,做为date对象的秒数
microseconds - 0-999之间的整数,做为date对象的毫秒数 */
var t1 = Date.UTC(2023,07,1,0,00,00); //北京时间2018-2-13 00:00:00
var t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond);
var diff = t2-t1;
var diffYears = Math.floor(diff/years);
var diffDays = Math.floor((diff/days)-diffYears*365);
var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours);
var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes);
var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds);
document.getElementById("sitetime").innerHTML="已运行"+diffYears+" 年 "+diffDays+"</font> 天 <font style=color:#f391a9>"+diffHours+"</font> 时 <font style=color:#fdb933> "+diffMinutes+"</font> 分 <font style=color:#a3cf62>"+diffSeconds+"</font> 秒";
}
siteTime();
</script>

<div>

对于不同的主题文件位置会有所改变

找到页脚部分的代码 并在最下方 备案信息处 新建

添加模块即可

Hexo g 渲染 【更新时间线需要重启hexo】

Hexo s 本地测试即可