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

如何使用此脚本:

  1. 保存脚本: 将上面的代码复制并粘贴到一个新文件中,例如命名为 enable_bbr.sh

  2. 授予执行权限: 打开终端,进入脚本所在的目录,然后运行:

    Bash

    1chmod +x enable_bbr.sh
    
  3. 以 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