前言
众所周知,宝塔面板的出现,给了很多非计算机专业的小伙伴们一个可以相对轻松搭建自己网站的机会。
不过,由于宝塔最近加入了强制手机登陆验证(虽然可以用方法取消:宝塔去除登陆,宝塔海外版本aapanel也不需要手机验证),还是让一些小伙伴觉得很不爽,装了宝塔之后,总是感觉有一双眼睛盯着自己,自己服务器上的数据随时在被宝塔监控着(宝塔是开源的,不过如果你做了一些奇怪的事情,宝塔不一定不会上报你的数据信息)
我们自建服务器图啥?图的不就是自由和隐私么?绝对不允许这样的情况出现!
不过,不用面板工具,我们难道要手动自己去下载配置LNMP环境么?好像有点复杂……
确实,我自己尝试手动,有点繁琐,市面上也有辅助配置的,比如LNMP一键安装包,不过后续的维护升级似乎也有些麻烦,对于计算机专业的同学来讲,可以试一试,对于我们这些非计算机专业的小伙伴,其实就不是非常必要了,我们可以尝试换一个选择——用Docker。
就我目前的体验来看,服务器上安装好Docker,利用Docker镜像已经可以部署我的90%小项目了。由于我的服务器比较多,所以我选择一台服务器安装aapanel(宝塔国际版)备用(针对个别docker无法实现的项目),另一台服务器纯原生环境+Docker来折腾。
所以接下来的一段时间,就让我们一起用Docker来玩一玩服务器吧,折腾起来!
视频
Bilibili:https://www.bilibili.com/video/BV1kh411x7RL/
操作环境
- 服务器:
腾讯香港轻量应用服务器 24 元 / 月 VPS 一台咕咕自己搭建用的是腾讯轻量应用服务器 ,(最好是选 非大陆(香港)的服务器)如果是小白刚开始玩的话,还可以购买 Racknerd 的服务器(地区选美西),最低一年不到 100 块(Racknerd 服务器介绍:点击查看) - 系统:Debian10或以上(Ubuntu 20.04以上)
不建议用CentOS,具体原因请见:解释使用Debian而不是CentOS的原因
DD一个纯净的系统(非必需)
腾讯云轻量服务器本身帮小白用户做了一些基础的防护工作(如默认禁止密码登陆、默认禁止root登陆等),其实没必要DD。 当然,也有不少有“洁癖”的小伙伴们,嫌弃系统上装有的监控软件,那么可以做以下的操作,给自己一个纯净的原生操作系统~
sudo -i #切换到root用户 sudo apt update -y #更新一下包
脚本一
腾讯云轻量非大陆机器建议用这个:
wget --no-check-certificate -O AutoReinstall.sh https://git.io/AutoReinstall.sh && bash AutoReinstall.sh
- CentOS默认密码Pwd@CentOS 其它系统Pwd@Linux
- OpenVZ / LXC 架构系统不适用
来源:https://blog.hicasper.com/post/135.html 参考:https://www.ydyno.com/archives/1245.html 感谢大佬的付出!
脚本二
这个有时候会失效:
以下命令默认是Debian10,自定义root密码
和自定义ssh端口
自己修改成你自己想要的。
bash <(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 10 -v 64 -p "自定义root密码" -port "自定义ssh端口"
等待15
到30
分钟左右,连接即可,也可以自己ping一下域名,看看通不通,然后尝试连接。
其他参数
-d 10 -v 64
-d 9 -v 64
-u 20.04 -v 64
-u 18.04 -v 64
具体参考
重要提醒!!!
- 请仔细阅读服务器商家的ToS条款,事先确认你的服务器提供商是否支持你DD系统(重装自己的系统)
- 由于授权问题,很多服务器提供商是禁止你把服务器DD成Windows系统的(比如Contabo),发现会暂停服务甚至删鸡!
- OpenVZ / LXC 架构系统不适用此脚本
- 注意重装有风险,请妥善备份好自己的数据,(阿里腾讯搬瓦工等有快照的商家,你可以先在后台存一个快照)可能导致无法开机(部分商家可以用VNC救回来,但本文不涉及),谨慎操作!
1、BBR
新的 TCP 拥塞控制算法 BBR (Bottleneck Bandwidth and RTT)
可以让服务器的带宽尽量跑满,并且尽量不要有排队的情况,让网络服务更佳稳定和高效。
Linux Kernel 内核升级到 4.9
及以上版本可以实现 BBR 加速(Ubuntu 18.04 默认的内核是 4.15
版本的内核,Ubuntu 20.04 默认的内核是 5.4
版本的内核,并已经默认编译了 TCP BBR 模块,可以直接通过参数开启)。
目前 Debian 10 自带的内核版本一般是4.19
,我们可以查看一下内核版本(如果是 5.6
及以上内核则集成了 WireGuard )
hostnamectl #或者 uname -r
我们选择更新到新的稳定版本的5.1
内核(目前为止),再开启BBR
。
1、给 Debian 10 添加官方 backports
源,获取更新的软件库
sudo nano /etc/apt/sources.list
说明
本文以 Debian 10 为例,所以使用
/etc/apt/sources.list
仍无问题,但如果你并不是根据本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立/etc/apt/sources.list.d/
文件夹,并在这个文件夹内建立自己的配置文件,形如/etc/apt/sources.list.d/vpsadmin.list
,以此保证兼容性,也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。
2、然后把下面这一条加在最后,并保存退出。
deb http://deb.debian.org/debian buster-backports main
3、刷新软件库并查询 Debian 官方的最新版内核并安装。请务必安装你的 VPS 对应的版本(本文以比较常见的【amd64】为例)。
sudo apt update && sudo apt -t buster-backports install linux-image-amd64
注意
如果你的 VPS 支持,可以尝试【云服务器专用内核】
linux-image-cloud-amd64
,优点就是精简、资源占用低,缺点嘛是有同学反馈不支持的系统强行安装会导致无法开机(Kernel 无法识别)。为了避免无法识别的悲剧,请确保:
- 尝试前做一个系统快照,或者
- 你有
vnc
可以救场(并且你知道怎么用)
4、修改 kernel
参数配置文件 sysctl.conf
并指定开启 BBR
sudo nano /etc/sysctl.conf
说明
本文以 Debian 10 为例,所以使用
/etc/sysctl.conf
仍无问题,但如果你并不是跟着本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立/etc/sysctl.d/
文件夹,并在这个文件夹内建立自己的配置文件,形如/etc/sysctl.d/vpsadmin.conf
,以此保证兼容性,因为部分发行版在systemd
207 版本之后便不再从/etc/sysctl.conf
读取参数。使用自定义配置文件也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。
5、把下面的内容添加进去
net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
6、重启 VPS、使内核更新和BBR
设置都生效
sudo reboot
啰嗦君
因为我做展示的 VPS 支持云服务器专用内核,所以动图中我用了
linux-image-cloud-amd64
。如果你不确定你的 VPS 是否支持,那请务必按照第 3 步的命令,使用常规内核linux-image-amd64
。
8、确认BBR
开启
如果你想确认 BBR
是否正确开启,可以使用下面的命令:
lsmod | grep bbr
此时应该返回这样的结果:
tcp_bbr
如果你想确认 fq
算法是否正确开启,可以使用下面的命令:
lsmod | grep fq
此时应该返回这样的结果:
sch_fq
uname -r
内核版本已经变成了5.10
2、修改时间
首先,我们需要修改服务器的时间与我们本地的时间一致。
香港的服务器的话时间是一样的,就无所谓了,如果是欧美的服务器,可以通过下面的方式修改~
sudo -i #切换到root用户 apt update -y && apt upgrade -y #更新一下包
先查看时间:
timedatectl
DD完之后,可以看到我们的时间变成了纽约时间,这边需要改一下。
timedatectl list-timezones #列出所有时区
sudo timedatectl set-timezone Asia/Shanghai #改成上海
发现没有sudo命令,这是因为我们的系统现在是纯净的,没有装其他的东西,
这边我们手动安装几个常用的命令~
apt install sudo curl wget
然后重新运行
3、添加SWAP
swap是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的。它类似于Windows中的虚拟内存。在Windows中,只可以使用文件来当作虚拟内存。而linux可以文件或者分区来当作虚拟内存。
这个虚拟内存对于内存小的VPS非常有必要,可以提高我们的运行效率。
这里我们用脚本来添加。
wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
更多常用脚本,可以看这篇:整理一些常用的脚本(持续更新中)
这边建议是2
倍,我添加了1倍,也就是1024MB
4、其他服务器安全相关的工作
安全无小事,建议大家保护好自己的小鸡!
5、安装Docker、Docker-compose
更新、安装必备软件
apt-get update && apt-get install -y wget vim
非大陆Docker安装
wget -qO- get.docker.com | bash
注意:出现sudo: unable to resolve host [hostname]
,可以编辑nano /etc/hosts
然后在
localhost后面空一格,再打上[hostname]
你对应的hostname内容。
查看Docker版本
docker -v
开机自动启动
systemctl enable docker
卸载Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
非大陆Docker-compose安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
修改Docker配置(来自烧饼博客)
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):
cat > /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/80", "experimental":true, "ip6tables":true } EOF
然后重启 Docker 服务:
systemctl restart docker
6、文件管理
强烈建议大家专门给Docker的数据、配置文件新建一个文件夹,
mkdir -p data/docker_data
这样如果换服务器或者想要备份,都会很方便。
这边我们以之前搭建过的minimalist为例子
来简单讲讲。
首先进入我们创建好的文件夹下,
运行,
wget https://github.com/pereorga/minimalist-web-notepad/archive/refs/heads/docker.zip
然后
没有unzip,我们就安装一个
apt install unzip
再运行
unzip docker.zip
cd minimalist-web-notepad-docker/
建立镜像,
docker build -t minimalist-web-notepad .
安装minimalist,
docker run -d -it --restart=always --name minimalist-web-notepad -v /root/data/docker_data/minimalist/minimalist-data:/var/www/html/_tmp -p 8006:80 minimalist-web-notepad
注意这里的映射路径,我们改成了刚前面创建的路径/root/data/docker_data/minimalist
这样你的东西就都在这边啦。
一般来说,看到这一长串的东西,就说明创建成功啦。
由于Debian是本身开放所有端口的,所以直接访问即可,但是因为我们是腾讯云轻量服务器,后台默认还有一个防火墙,我们需要登陆把后台的防火墙里的8006
端口打开(对应docker命令的8006:80
),这样就能访问了。
当然你要是觉得麻烦,也可以直接填ALL
,这样就开放所有端口了,以后就不用每次来设置了,但是不推荐。
然后我还非常推荐你再建立一个txt
文件,记录这条docker命令。
nano config.txt
然后输入前面的命令,
docker run -d -it --restart=always --name minimalist-web-notepad -v /root/data/docker_data/minimalist/minimalist-data:/var/www/html/_tmp -p 8006:80 minimalist-web-notepad
Ctrl+x
退出,按y
确认,回车。
用IP+端口就可以访问了!
问题来了,之前我们都是通过宝塔面板上面建立一个空壳站点,然后修改配置文件来进行反向代理的,这下没有了宝塔面板,要怎么搞?
难道要手动去修改nginx的配置文件吗?
我还得安装一个nginx?感觉好麻烦啊!
不!下期将介绍一个非常牛逼的工具,可以让你只要点击几下鼠标就能非常轻松完成反向代理,当然它自身也是基于Docker搭建的 ^ ^
所以暂时先憋着,丑就丑一点,我们下期视频来处理这个事情。
7、备份数据
参考这篇:
【有用的小知识】Docker容器如何更新?如何迁移应用?如何卸载?
附
如果还是放不下宝塔面板(或者担心以后会用到宝塔)的话,可以在第一部分BBR开启完毕之后,到宝塔官网下载宝塔(宝塔安装需要服务器是干净的没有安装过别的软件),安装宝塔完成之后(取消登陆框可以看这个:宝塔去除登陆)(失效了,大家直接下载宝塔海外版aapanel即可),修改时间和添加SWAP可以在软件商店搜索Linux工具箱,利用工具箱来修改。之后安装Docker可以选择用宝塔来安装,也可以选择按上文的步骤来安装。