CentOS的源已经停更,时至2025年,是时候放弃了!买个VPS安装debian 11折腾一下,记录一下折腾的日子。
1.开启bbr
1#!/bin/bash
2
3# ==============================================================================
4# Script to enable Google BBR on Debian 11
5#
6# Usage:
7# 1. Save this script to a file, e.g., enable_bbr.sh
8# 2. Make it executable: chmod +x enable_bbr.sh
9# 3. Run it with sudo: sudo ./enable_bbr.sh
10# ==============================================================================
11
12# --- Configuration ---
13SYSCTL_CONF_FILE="/etc/sysctl.conf"
14BBR_SETTINGS=(
15 "net.core.default_qdisc=fq"
16 "net.ipv4.tcp_congestion_control=bbr"
17)
18
19# --- Helper Functions ---
20log_info() {
21 echo "[INFO] $1"
22}
23
24log_warn() {
25 echo "[WARN] $1"
26}
27
28log_error() {
29 echo "[ERROR] $1" >&2
30}
31
32# --- Main Logic ---
33
34# 1. Check for root privileges
35if [ "$(id -u)" -ne 0 ]; then
36 log_error "此脚本需要以 root 权限运行。请使用 'sudo $0' 来执行。"
37 exit 1
38fi
39
40log_info "开始配置 BBR..."
41
42# 2. Backup sysctl.conf
43BACKUP_FILE="${SYSCTL_CONF_FILE}.bak_$(date +%Y%m%d_%H%M%S)"
44if cp "$SYSCTL_CONF_FILE" "$BACKUP_FILE"; then
45 log_info "当前 sysctl 配置已备份到: $BACKUP_FILE"
46else
47 log_warn "无法备份 $SYSCTL_CONF_FILE。继续操作请谨慎。"
48fi
49
50MADE_CHANGES=0
51
52# 3. Check and append settings if necessary
53for setting in "${BBR_SETTINGS[@]}"; do
54 # Check if the exact setting (uncommented) already exists
55 if grep -qE "^\s*$(echo "$setting" | sed 's/[.=]/\\&/g')\s*$" "$SYSCTL_CONF_FILE"; then
56 log_info "配置已存在: $setting"
57 else
58 # Check if the setting key exists (possibly commented out or with a different value)
59 setting_key=$(echo "$setting" | cut -d'=' -f1)
60 if grep -qE "^\s*#?\s*${setting_key}\s*=" "$SYSCTL_CONF_FILE"; then
61 log_info "找到 '$setting_key' 的现有行。将确保其值为BBR所需设置(如果已注释则添加新行)。"
62 # For simplicity, we will append. sysctl usually takes the last valid definition.
63 # A more robust script might use sed to uncomment or replace.
64 fi
65
66 log_info "添加配置: $setting"
67 # Ensure there's a newline at the end of the file before appending
68 if [[ $(tail -c1 "$SYSCTL_CONF_FILE" | wc -l) -eq 0 ]]; then
69 echo "" >> "$SYSCTL_CONF_FILE" # Add a newline if file doesn't end with one
70 fi
71 echo "$setting" >> "$SYSCTL_CONF_FILE"
72 MADE_CHANGES=1
73 fi
74done
75
76# 4. Apply sysctl changes
77if [ "$MADE_CHANGES" -eq 1 ]; then
78 log_info "正在应用新的 sysctl 配置..."
79 if sysctl -p; then
80 log_info "sysctl 配置已成功应用。"
81 else
82 log_error "应用 sysctl 配置失败。请检查 $SYSCTL_CONF_FILE 文件内容。"
83 log_error "您可以使用备份文件 $BACKUP_FILE 进行恢复。"
84 exit 1
85 fi
86else
87 log_info "所有 BBR 配置似乎已存在于 $SYSCTL_CONF_FILE 中。"
88 log_info "为确保内核参数已加载,仍将执行 sysctl -p。"
89 sysctl -p > /dev/null # Suppress output if no effective changes from file
90fi
91
92# 5. Display verification instructions
93echo ""
94log_info "BBR 启用脚本执行完毕。"
95log_info "请通过以下命令验证 BBR 是否已成功启用:"
96echo "--------------------------------------------------"
97echo "1. 检查 TCP 拥塞控制算法:"
98echo " sudo sysctl net.ipv4.tcp_congestion_control"
99echo " => 预期输出应包含: net.ipv4.tcp_congestion_control = bbr"
100echo ""
101echo "2. 检查默认队列调度算法:"
102echo " sudo sysctl net.core.default_qdisc"
103echo " => 预期输出应包含: net.core.default_qdisc = fq"
104echo ""
105echo "3. (可选) 检查是否有活动的 TCP 连接正在使用 BBR (需要有网络活动):"
106echo " ss -ti | grep bbr"
107echo "--------------------------------------------------"
108
109exit 0
如何使用此脚本:
-
保存脚本: 将上面的代码复制并粘贴到一个新文件中,例如命名为
enable_bbr.sh
。 -
授予执行权限: 打开终端,进入脚本所在的目录,然后运行:
Bash
1chmod +x enable_bbr.sh
-
以 root 权限运行脚本:
Bash
1sudo ./enable_bbr.sh
2.精简debian 11
-
清理APT缓存
1sudo apt clean # 删除所有已下载的deb包 2sudo apt autoclean # 删除旧版本的deb包 3# 保留当前内核,删除旧内核 4sudo apt purge --auto-remove $(dpkg -l | awk '/^ii linux-image-[0-9]+/{print $2}' | grep -v $(uname -r)) 5sudo rm -rf /usr/lib/modules/5.10.0-22-amd64 && \ 6sudo apt purge linux-headers-5.10.0-22* -y && \ 7sudo apt autoremove --purge -y 8# 清理旧内核在 /boot 中的残留文件 9sudo rm -f /boot/vmlinuz-5.10.0-22-amd64 /boot/initrd.img-5.10.0-22-amd64 10# 更新GRUB配置 11sudo update-grub 12 13# 清空系统日志(保留最新日志) 14sudo journalctl --rotate 15sudo journalctl --vacuum-time=1d 16# 删除临时文件 17sudo rm -rf /tmp/* /var/tmp/* 18 19# 删除冗余文档 20sudo rm -rf /usr/share/doc/* /usr/share/man/* 21 22# 清理locale文件(保留英文) 23sudo find /usr/share/locale -mindepth 1 -maxdepth 1 ! -name 'en*' -exec rm -rf {} \; 24 25# 清理缩略图缓存 26rm -rf ~/.cache/thumbnails/* 27# 1. 删除图形界面 (改用命令行) 28sudo systemctl isolate multi-user.target # 先切换到命令行 29sudo apt purge --auto-remove 'gnome*' gdm3 xorg -y 30 31# 2. 删除 CUPS 打印子系统 32sudo apt purge --auto-remove cups* -y 33 34# 3. 删除蓝牙支持 35sudo apt purge --auto-remove bluez* -y 36 37# 4. 清理 Python 缓存 38sudo find / -name __pycache__ -type d -exec rm -rf {} + 39 40# 进入当前内核模块目录 41cd /usr/lib/modules/$(uname -r) 42 43# 删除不常用驱动(示例) 44sudo rm -rf kernel/drivers/{gpu,media,thunderbolt} # 显卡/媒体/雷电接口 45sudo rm -rf kernel/sound/{pci,usb} # 高级声卡驱动 46sudo rm -rf kernel/net/{bluetooth,can} # 蓝牙/CAN总线 47 48# 重建模块依赖关系 49sudo depmod -a 50 51sudo journalctl --vacuum-size=50M # 限制日志最大为50MB 52sudo rm -rf /var/log/*.gz /var/log/*.old # 删除旧日志 53 54#禁用swapoff 55sudo swapoff /swapfile 56sudo rm /swapfile 57 58# 3. 清理残留配置 59sudo apt autoremove --purge -y 60 61# 安装vim 62sudo apt update 63sudo apt install vim -y 64echo "syntax on" >> ~/.vimrc 65echo "set nocp" >> ~/.vimrc 66 67 68#安装git 69sudo apt install --no-install-recommends \ 70 git \ 71 git-man \ 72 -y 73sudo git config --global core.autocrlf false 74sudo git config --global core.untrackedCache true 75sudo git config --global advice.detachedHead false 76sudo git config --global init.defaultBranch main 77sudo rm -rf /usr/share/doc/git* /usr/share/man/man1/git* 78 79#修复颜色没有彩色 80sudo apt install --no-install-recommends coreutils -y 81 82# 配置颜色显示 83echo "alias ls='ls --color=auto'" >> ~/.bashrc 84echo "alias ll='ls --color=auto -l'" >> ~/.bashrc 85echo "export LS_COLORS='di=1;31:ln=35:so=32:pi=33:ex=31:bd=34;46:cd=34;43:su=30;41:sg=30;46:tw=30;42:ow=30;43'" >> ~/.bashrc 86source ~/.bashrc 87 88sudo du -sh /* | sort -h 89df -h
3.安装nginx
1sudo apt update && sudo apt install -y \
2 nginx-full certbot \
3 python3-certbot-nginx apache2-utils
4.安装docker(精简安装)
- Ubuntu/Debian 示例:
1# 安装最小依赖,跳过推荐包
2sudo apt-get update
3sudo apt-get install --no-install-recommends docker-ce docker-ce-cli containerd.io docker-compose-plugin
4
5# 安装后立即清理缓存
6sudo apt-get clean
7sudo rm -rf /var/lib/apt/lists/*
-
删除所有未使用的资源:
1docker system prune -a -f # 清理无用镜像、容器、网络、缓存 2# 删除无用的镜像 3docker rmi $(docker images -q --filter "dangling=true") 4# 重启docker 5systemctl restart docker 6# 查看 Docker 具体资源占用: 7docker system df 8# 删除文档 9sudo rm -rf /usr/share/doc/docker-compose
-
限制 Docker 日志大小:
1# 修改 Docker 配置文件 /etc/docker/daemon.json 2{ 3 "log-driver": "json-file", 4 "log-opts": { 5 "max-size": "10m", # 单个日志文件最大 10MB 6 "max-file": "1" # 只保留 1 个日志文件 7 } 8}
-
配置docker仓库
(1) 添加 Docker GPG 密钥
1sudo mkdir -p /etc/apt/keyrings 2curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
(2) 添加 Debian Bullseye 仓库
1echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
(3) 更新 APT 索引
1sudo apt-get update
5.安装searxng
使用docker安装,docker-compose.yml文件:
1version: '3.7'
2
3services:
4 searxng:
5 image: searxng/searxng:latest
6 container_name: searxng
7 ports:
8 - 8080:8080
9 volumes:
10 - ./data:/etc/searxng:rw
11 - ./searxng-custom.png:/usr/local/searxng/searx/static/themes/simple/img/searxng.png:rw
12 environment:
13 - SEARXNG_BASE_URL=http://localhost:8080/ # 根据您的访问方式修改
14 # - SEARXNG_HOSTNAME=your_domain.com # 如果您使用域名访问,请取消注释并修改
15 restart: unless-stopped
16 cap_drop:
17 - ALL
18 cap_add:
19 - CHOWN
20 - SETGID
21 - SETUID
22 logging:
23 driver: 'json-file'
24 options:
25 max-size: '1m'
26 max-file: '1'
使用方式:
1# 启用
2docker compose up -d
3
4# 重启
5docker compose restart searxng
6
7# 停止
8docker compose stop searxng
9
10# 停止并移除容器(保留数据卷)
11docker compose down
12
13# 停止并移除容器及所有数据卷
14docker compose down -v
特别说明:
1首次运行时,必须从 docker-compose.yaml 文件中删除 cap_drop: - ALL,searxng 服务才能成功创建 /etc/searxng/uwsgi.ini 文件。这是必要的,因为 cap_drop: - ALL 指令会删除所有功能,包括创建 uwsgi.ini 文件所需的功能。首次运行后,出于安全考虑,您应该将 cap_drop: - ALL 重新添加到 docker-compose.yaml 文件中。
2
3我最初没有设置它。
4但这样做确实可以正常工作。
5
6我简短地
7
8将
9
10cap_drop:
11- ALL
12更改为
13
14# cap_drop:
15# - ALL
16执行 docker compose up -d
17将上述内容改回原样
18执行 docker compose up -d --force-recreate
6.安装rclone
通过官方脚本安装(推荐)
1# 下载并执行安装脚本
2curl https://rclone.org/install.sh | sudo bash
3
4# 验证安装
5rclone version
初始化配置
1rclone config
基本使用:
- 列出远程存储内容
1rclone ls remote-name:path
2# 示例:列出 Google Drive 根目录
3rclone ls google-drive:
- 本地同步到云端
1rclone sync /local/path remote-name:remote-path
2# 示例:同步备份文件到 OSS
3rclone sync /backup/filebrowser oss:bucket-name/backups
- 云端同步到本地
1rclone sync remote-name:remote-path /local/path
- 增量备份(仅传输新文件)
1rclone copy /local/path remote-name:remote-path
- 添加同步任务(每天凌晨 3 点同步)
1crontab -e
20 3 * * * /usr/bin/rclone sync /backup/filebrowser remote-name:remote-path >> /var/log/rclone.log 2>&1
- 加密同步(保护敏感数据)
1# 创建加密远程存储
2rclone config
选择 crypt
类型,绑定到现有远程存储路径,并设置密码。
- 限制带宽
1rclone sync /local/path remote-name:remote-path --bwlimit 1M # 限制 1MB/s
- 排除文件
1rclone sync /local/path remote-name:remote-path --exclude "*.tmp" --exclude "temp/**"
7.安装cloudreve
docker-compose.yml:
1version: '3.8'
2
3services:
4 cloudreve:
5 image: cloudreve/cloudreve:latest
6 container_name: cloudreve
7 restart: unless-stopped
8 volumes:
9 - ./uploads:/cloudreve/uploads # 用户文件存储
10 - ./config:/cloudreve/config # 配置文件
11 ports:
12 - "5212:5212"
13 environment:
14 - TZ=Asia/Shanghai # 时区设置
15 command:
16 - "--database-sqlite" # 使用 SQLite 精简模式
7.安装 ImageMagick
1sudo apt-get update
2sudo apt-get install imagemagick
基础示例
- 格式转换
将 input.jpg
转换为 PNG 格式:
1convert input.jpg output.png
- 调整图像尺寸
将图片缩放为宽度 800 像素,高度按比例调整:
1convert input.jpg -resize 800x output_resized.jpg
- 裁剪图片
裁剪图片的左上角区域(宽 400px,高 300px):
1convert input.jpg -crop 400x300+0+0 output_cropped.jpg
- 添加文字水印
在图片右下角添加文字水印,字体大小为 20,颜色为白色:
1convert input.jpg -gravity southeast -fill white -pointsize 20 -annotate +10+10 "Copyright" output_watermarked.jpg
- 旋转图片
顺时针旋转 90 度:
1convert input.jpg -rotate 90 output_rotated.jpg
- 图片合成(叠加两张图片)
将 overlay.png
叠加到 background.jpg
上,位置为左上角偏移 (50, 100):
1convert background.jpg overlay.png -geometry +50+100 -composite output_composite.jpg
- 生成缩略图
生成 200x200 的缩略图,填充空白区域为灰色:
1convert input.jpg -resize 200x200 -background gray -gravity center -extent 200x200 thumbnail.jpg
- 图片模糊处理
高斯模糊(模糊半径 10):
1convert input.jpg -blur 0x10 output_blurred.jpg
- 提取图片中的颜色直方图
生成颜色分布直方图:
1convert input.jpg -define histogram:unique-colors=true -format %c histogram:histogram.png
- 批量处理图片
批量将目录中所有 JPG 文件转为 PNG:
1mkdir output
2for file in *.jpg; do convert "$file" "output/${file%.jpg}.png"; done
- Bash 脚本示例
保存为 resize_images.sh
,批量调整图片尺寸:
1#!/bin/bash
2for img in *.jpg; do
3 convert "$img" -resize 1024x "resized_$img"
4done