备份服务器
cd /home/docker && bash start-backup.sh
恢复服务器
- 网站域名映射到新的服务器IP
- 连接服务器
ssh -o ServerAliveInterval=60 root@ip
。如果连接时报错,可能是因为本机~/.ssh/known_hosts文件中有缓存 - 更新系统,运行
apt update && apt upgrade -y
更新系统。update命令更新可用的软件包列表,upgrade命令安装可用的软件包更新 - 安装常用的工具
apt install rsync htop curl fd-find tldr -y
,按需安装 - 在本地电脑上执行命令
scp ~/.ssh/id_rsa.pub root@<服务器地址>:/root/.ssh/authorized_keys
。这句命令的作用是将本地id_rsa.pub
文件复制到远程服务器上,并重命名为authorized_keys
。以后登录ssh时,就会自动验证密钥,不需要主动输密码了 - 安装docker
Debian最新版
:官方教程https://docs.docker.com/engine/install/debian/Debian11
:https://www.dedicatedcore.com/blog/install-docker-debian/Debian10
:https://opentechdir.com/how-guides/how-install-and-use-docker-debian-10
# 安装好后,检查开机自启动有没有配置 systemctl is-enabled docker
提醒:Docker容器暴露出来的端口,ufw无法进行限制。可以用ufw-docker 关闭所有docker端口,然后用 ufw route 命令打开指定端口。注意:ufw-docker只能关闭-p模式的端口,不能关闭host模式的端口
- 执行
dpkg-reconfigure tzdata
设置时区,然后查看/etc/timezone显示的时间是否是你刚才设置的时区,如果不是,就将刚才设置的时区写入到这个文件,比如echo "Asia/Shanghai" > /etc/timezone
,最后执行dpkg-reconfigure tzdata重新加载时区 - 打开/etc/vim/vimrc.tiny,添加以下内容
还遇到一个问题,vi编辑模式下粘贴中文显示乱码。最后排查的原因是:要从纯文本编辑器中复制,粘贴时中文才不会显示乱码set nocompatible set backspace=2 set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf-8 set encoding=utf-8
开启BBR加速
BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种由Google开发的网络拥塞控制算法,BBR算法通过动态调整拥塞窗口大小和传输速度,更好地利用网络带宽,同时减少网络延迟,从而实现网络加速的效果
uname -r
查看当前的linux内核版本号,如果版本号大于4.9,直接跳到第四步apt-cache search linux-image | grep $(uname -r)
搜索与当前内核版本号匹配的BBR模块,如果没有打印结果,就手动将这两个命令分开来执行。因为随着时间的推移,文件命名规则有可能会改变- 使用apt安装刚才找到的模块
- 打开文件
vi /etc/sysctl.conf
,然后输入这两行,并wq保存退出net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
- 执行
sysctl -p
- 用
sysctl net.ipv4.tcp_congestion_control
,查看输出结果
输出这个表示配置成功net.ipv4.tcp_congestion_control = bbr
防止ssh被暴力破解
安装fail2ban
apt update && apt install fail2ban -y
进入/etc/fail2ban目录,在该目录下,创建jail.local
文件,并写入以下内容
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
backend = systemd
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
# 最大尝试次数
maxretry = 2
# 封禁时间,单位s。-1为永久封禁
bantime = -1
可能会报错
root@racknerd-88be8c:/etc/fail2ban# systemctl status fail2ban
× fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Mon 2024-04-15 09:40:34 EDT; 1min 24s ago
Duration: 162ms
Docs: man:fail2ban(1)
Process: 14087 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION)
Main PID: 14087 (code=exited, status=255/EXCEPTION)
CPU: 156ms
Apr 15 09:40:34 racknerd-88be8c systemd[1]: Started fail2ban.service - Fail2Ban Service.
Apr 15 09:40:34 racknerd-88be8c fail2ban-server[14087]: 2024-04-15 09:40:34,435 fail2ban.configreader [14087]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
Apr 15 09:40:34 racknerd-88be8c fail2ban-server[14087]: 2024-04-15 09:40:34,451 fail2ban [14087]: ERROR Failed during configuration: Have not found any log file for sshd jail
Apr 15 09:40:34 racknerd-88be8c fail2ban-server[14087]: 2024-04-15 09:40:34,457 fail2ban [14087]: ERROR Async configuration of server failed
Apr 15 09:40:34 racknerd-88be8c systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
Apr 15 09:40:34 racknerd-88be8c systemd[1]: fail2ban.service: Failed with result 'exit-code'.
解决方案:https://github.com/fail2ban/fail2ban/issues/3567
启动fail2ban
systemctl restart fail2ban
# 查看状态
systemctl status fail2ban
查看fail2ban运行状态
fail2ban-client status
fail2ban-client status sshd
添加/取消 ip地址
# 添加
fail2ban-client set sshd banip <ip-address>
# 取消
fail2ban-client set sshd unbanip <ip-address>
配置网站
- 在服务器上创建文件夹/home/docker
- onedrive中的docker/rclone文件夹下载到本地
- rclone文件夹上传到服务器,
scp -r rclone root@ip:/home/docker/rclone
- 在服务器上运行
chmod +x start-copy.sh && bash start-copy.sh
- 等待下载。。。。。
- 挨个执行每个程序
- 上传网站源代码然后执行
- 在网站搜索crontab关键字,看看哪里需要配置
遇到的问题:
- rclone要重新配置
其他
一般情况下,服务器只需要开启ssh端口和80/443端口,docker容器端口用ufw-docker
关闭。
- 80/443端口用cdn隐藏
- ssh端口搭配fail2ban工具进行限制🚫
总结
最后,把服务器重启下,确保以上所有配置在重启后依然有效