前言
之前买的vps因为商家重构了vps虚拟化的控制平台,数据也全部清除了(还好我之前对关键配置文件做了备份),现在不得不重新配置一次vps。之前配置vps都是直接google上搜索的,但很多资料不全和过期,今天趁这个机会刚好记录下自己配置vps的一些步骤,给以后的自己做一下参考,也希望可以帮助到有需要的人。
VPS配置查看
拿到一台vps首先需要查看下机器的基本配置,比如硬盘io(建站需要关注io)、带宽、线路(针对于国外的vps,主要类型有gt、cn2和cn2gia)。查看之前我先把系统重装成了ubuntu 20,当然你也可以选择其他的。在测试完后一般会重装系统,因为测试需要安装不少软件,但这些软件在测试完后就没用了,所以之后会重装。
测试vps综合性能
wget -N --no-check-certificate https://raw.githubusercontent.com/V2RaySSR/vps/master/vpstest.sh && bash vpstest.sh
运行后输入2即可查看综合性能。(其他的测试代码参见我的另一篇文章https://www.lingan1996.top/51967.html
这是脚本返回的结果,从中可以看出vps的CPU、硬盘大小、硬盘IO和服务器带宽。
我这台vps是1G内存,120+MB/s的IO,100M带宽,虚拟化方式为kvm。
测试三网回程路由
还是使用上面那个脚本,运行后输入3即可。
我这台电信是cn2gia2,移动联通直连。是什么线路看中间的路由节点就知道了,不懂的具体google下吧
基础配置
vps的基础信息已经测试完了,下面开始重装系统开始配置。这里我选择的还是ubuntu 20。
- 命令行修改密码
重装完后首先在命令行修改密码,为什么这么做的原因是让秘密和面板上的密码不一样。命令如下
passwd
修改DNS
修改/etc/hosts文件,在最前面添加两行
1.1.1.1 8.8.8.8
更新系统
apt update && apt upgrade
如果出现如下报错:
E: Failed to fetch https://mirrors.aliyun.com/ubuntu/pool/main/n/netplan.io/netplan.io_0.100-0ubuntu4~20.04.3_amd64.deb Undetermined Error [IP: 47.246.16.227 443] E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
那就再执行下面命令:
apt update --fix-missing && apt upgrade # 更新完后重启下 reboot
安装bbr加速
按需选择,我选择的是第一个
不卸载内核版本 wget -N "https://github.000060000.xyz/tcpx.sh" && chmod +x tcpx.sh && ./tcpx.sh 卸载内核版本 wget -N "https://github.000060000.xyz/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
然后我只选了'''BBR+CAKE加速''',这个按需选择最适合你的配置
防火墙UFW(可选
查看是否安装了ufw
ufw status verbose # 如果按照了,会有输出 Status: inactive (在没激活的时候) # 如果没安装ufw,执行下面命令 apt install ufw
开启ufw
ufw enable
开放常用端口和你需要的端口
ufw allow 22 # ssh的端口 ufw allow 80 ufw allow 443 ufw allow xxx # xxx为你需要的端口
安装fail2ban,防止暴力破解(可选
# 安装 apt install fail2ban # 开启服务 systemctl start fail2ban systemctl enable fail2ban
配置
vi /etc/fail2ban/jail.local # 修改配置信息,在其中写入如下内容 [DEFAULT] # fail2ban忽略的IP #ignoreip = 192.168.145.23 113.168.58.39 # 客户端被禁止时长(秒) bantime = 86400 # one day # 客户端主机被禁止允许失败的次数 maxretry = 10 # 查找失败次数的时长(秒) findtime = 600 #日志修改检测机制(gamin、polling和auto这三种) backend = polling [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] # sendmail-whois[name=SSH, dest=i_suichuan@163.com, sender=fail2ban@email.com]
重启服务
systemctl restart fail2ban
v2ray安装配置
我选择的v2ray配置是v2ray+nginx+tls的方法,安装的软件是multi-v2ray。虽然v2ray+nginx+tls的方法会慢一些,但是安全点,另外需要低延时的时候使用ss
安装nginx,multi-v2ray
# nginx apt install nginx # v2ray source <(curl -sL https://multi.netlify.app/v2ray.sh) --zh
- 配置方法就不介绍了,我是直接复原之前的配置文件。这部分建议查看其他人的文章!
安装acme.sh,用来生成网站的证书,这里采用dns的方式
安装acme.sh
curl https://get.acme.sh | sh # 安装后运行下面命令 source ~/.bashrc
认证dns
# dns认证,然后在域名管理上添加相应的解析记录 acme.sh --issue -d *.lingan1996.top -d lingan1996.top --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please # 重新认证 acme.sh --renew -d *.lingan1996.top -d lingan1996.top --yes-I-know-dns-manual-mode-enough-go-ahead-please
使用dns api的模式进行证书申请。获取AccessKey ID和AccessKey Secret。
这样设置以后就不用在证书到期后重新续签证书了,acme.sh会自动帮你续签
我使用的是ali dns,添加访问控制的网址为https://usercenter.console.aliyun.com/#/manage/ak
其他dns服务商的设置自行百度,或者查看https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md?spm=a2c6h.12873639.0.0.74fb1af3xI0gCh&file=README.md
export Ali_Key="key" export Ali_Secret="key Secret" # 执行一次即可,下次就不用再次执行这个命令了 acme.sh --issue --dns dns_ali -d *.lingan1996.top -d lingan1996.top
给nginx安装证书,如果/etc/nginx/ssl路径不存在,就
mkdir /etc/nginx/ssl
acme.sh --installcert -d *.lingan1996.top \ --key-file /etc/nginx/ssl/lingan1996.key \ --fullchain-file /etc/nginx/ssl/fullchain.cer \ --reloadcmd "service nginx force-reload"
配置nginx的配置文件,样例
server { listen 443; server_name localhost; ssl on; root html; index index.html index.htm; ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/lingan1996.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
自建测速网站
speedtest脚本,自建测速网址
bash <(curl -Lsk https://raw.githubusercontent.com/lingan1996/speedtest-go-script/master/install.sh)
端口限速(可选
有时vps提供商会限制不能长时间占满带宽,所以需要对用来下载的v2ray或者ss端口进行限速。
下面的脚本将网卡ens17中的2002、2102、2101端口限速到50Mb/s。
# 下面的ens17是网卡名,按需修改。
tc qdisc add dev ens17 root handle 1:0 htb default 1
tc class add dev ens17 parent 1:0 classid 1:1 htb rate 50Mbit
tc class add dev ens17 parent 1:1 classid 1:10 htb rate 50Mbit ceil 50Mbit
tc qdisc add dev ens17 parent 1:10 handle 10: sfq perturb 10
tc filter add dev ens17 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
iptables -A OUTPUT -t mangle -p tcp --sport 2002 -j MARK --set-mark 10
但上面的命令在重启之后会失效,所以要一直有效的话,需要把这些加入到rc.local中
hexo-blog站点配置
将hexo站点布置在vps上,参考文章https://brucehan.top/2020/01/21/hello-world/,https://www.azjhong.com/2020-02/%E9%83%A8%E7%BD%B2Hexo%E5%8D%9A%E5%AE%A2%E5%88%B0VPS/
创建git用户
adduser git
chmod 740 /etc/sudoers
vi /etc/sudoers
在其中找到以下内容:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在后面添加一行,然后保存:
git ALL=(ALL) ALL
创建git目录下的blog仓库
# 先切换到git用户,再执行下面的操作
su git
cd ~
mkdir blog && cd ./blog
mkdir blog.git && cd ./blog.git
git init --bare
然后配置git hooks,新建 post-receive
cd /home/git/blog/blog.git/hooks
touch post-receive
vim post-receive
在其中加入:
#!/bin/bash
#git仓库
GIT_REPO=/home/git/blog/blog.git
TMP_GIT_CLONE=/tmp/hexo
#你的网站目录
PUBLIC_WWW=/var/www/blog
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
添加脚本执行权限:
chmod +x post-receive
添加git在网站目录的权限
chown git:git -R /var/www/blog
添加git用户的免密登录
在本机上执行下面的命令即可
ssh-copy-id git@host
同步本地hexo博客到vpsuh
本机上操作。
打开 hexo 文件夹,修改站点配置文件 _config.yml,修改如下内容:
deploy:
type: git
repo: git@host:/home/git/blog/blog.git
branch: master
然后在shell中正常更新博客就行了:
hexo clean && hexo g && hexo d
参考文章
1: https://www.lingan1996.top/51967.html
2: https://blog.csdn.net/weixin_43507959/article/details/102763985
3: https://blog.csdn.net/nice_really/article/details/91414435
4: https://github.com/Jrohy/multi-v2ray
5: https://usercenter.console.aliyun.com/#/manage/ak
6: https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md?spm=a2c6h.12873639.0.0.74fb1af3xI0gCh&file=README.md
7: https://developer.aliyun.com/article/674835
8: https://brucehan.top/2020/01/21/hello-world/
9: https://www.azjhong.com/2020-02/%E9%83%A8%E7%BD%B2Hexo%E5%8D%9A%E5%AE%A2%E5%88%B0VPS/