公司需要添加一个debian的模板,记录一下制作的过程。
更新系统、安装常用工具(可根据需求添加或减少)
sudo apt update
sudo apt upgrade -y
sudo apt install -y vim wget curl htop net-tools iproute2 \
lsb-release dnsutils sysstat rsyslog sudo tree jq ifstat
更换 Debian 12 国内源(我换的是清华源)
先备份源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
替换内容
sudo tee /etc/apt/sources.list << 'EOF'
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
更新一下
sudo apt update
配置欢迎信息(自定义 MOTD)
Debian 使用 pam_motd + /etc/update-motd.d/ 动态生成 MOTD。
可以自定义一个脚本放进去。
创建自己的 MOTD 脚本(按需)
sudo vim /usr/local/bin/custom_motd.sh
写入内容
#!/bin/bash
# 时间
NOW=$(date "+%Y年 %m月 %d日 %A %H:%M:%S %Z")
# 登录用户数
LOGIN_USERS=$(who | wc -l)
# 系统运行时间
UPTIME_INFO=$(uptime -p | sed 's/up //')
# 负载情况
LOAD=$(uptime | awk -F'load average:' '{print $2}')
# 磁盘占用
DISK=$(df -h / | awk 'NR==2{print $5 " used (" $3 " of " $2 ")"}')
# 内存占用
MEM_USED=$(free -h | awk '/Mem:/{print $3}')
MEM_TOTAL=$(free -h | awk '/Mem:/{print $2}')
# CPU 占用率(1 秒采样)
CPU_IDLE=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}')
CPU_USED=$(echo "scale=2; 100-$CPU_IDLE" | bc)
# 网络接口(自动获取主网卡)
NIC=$(ip route get 8.8.8.8 | grep -oP 'dev \K\w+')
# 网卡流量(开机以来累计)
RX=$(cat /sys/class/net/$NIC/statistics/rx_bytes)
TX=$(cat /sys/class/net/$NIC/statistics/tx_bytes)
RX_H=$(echo "scale=2; $RX/1024/1024" | bc)
TX_H=$(echo "scale=2; $TX/1024/1024" | bc)
# IP地址
IP=$(ip -o -4 addr show $NIC | awk '{print $4}' | cut -d/ -f1)
# 默认网关
GATEWAY=$(ip route | awk '/default/ {print $3}')
# DNS服务器
DNS=$(grep -E '^nameserver' /etc/resolv.conf | awk '{print $2}' | tr '\n' ',')
# 输出内容
cat <<EOF
====== 欢迎登录XXXXX服务 ======
当前时间: $NOW
当前登录用户数: $LOGIN_USERS
系统运行时间: $UPTIME_INFO
负载情况:$LOAD
磁盘占用(/): $DISK
内存占用: $MEM_USED used / $MEM_TOTAL
CPU 占用率: $CPU_USED% used
网络接收($NIC): ${RX_H} MB
网络发送($NIC): ${TX_H} MB
IP地址($NIC): $IP
默认网关: $GATEWAY
DNS服务器: $DNS
EOF
赋予执行权限
sudo vim /usr/local/bin/custom_motd.sh
在 update-motd 中调用
sudo tee /etc/update-motd.d/00-custom << 'EOF'
#!/bin/sh
/usr/local/bin/custom_motd.sh
EOF
sudo chmod +x /etc/update-motd.d/00-custom
弄好以后重新登录就可以看到效果了
文件句柄 、 进程数优化
编辑:
sudo vim /etc/security/limits.conf
尾部添加:
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 655350
* hard nproc 655350
root soft nofile 1048576
root hard nofile 1048576
systemd 默认限制
systemd 会覆盖 limits.conf,因此需要设置:
sudo mkdir -p /etc/systemd/system.conf.d
sudo tee /etc/systemd/system.conf.d/99-limits.conf <<EOF
[Manager]
DefaultLimitNOFILE=1048576
DefaultLimitNPROC=655350
EOF
重启 systemd 组件(无需 reboot):
sudo systemctl daemon-reexec
检查是否生效:
ulimit -n
ulimit -u
网络 、 内核优化(sysctl.conf)
适用于高并发、VOIP、代理、API、Nginx等大量 TCP 连接等场景。
编辑:
sudo vim /etc/sysctl.conf
添加以下稳定参数:
###############################
# TCP 参数优化(适合服务器)
###############################
# 文件句柄
fs.file-max = 2097152
# 端口范围
net.ipv4.ip_local_port_range = 10000 65000
# TIME_WAIT 优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# SYN 洪水保护
net.ipv4.tcp_syncookies = 1
# SYN backlog 队列
net.ipv4.tcp_max_syn_backlog = 8192
# TIME_WAIT bucket 数
net.ipv4.tcp_max_tw_buckets = 5000000
###############################
# Socket 优化
###############################
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 32768
###############################
# 内存控制
###############################
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
###############################
# 保持连接优化
###############################
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
###############################
# 连接追踪
###############################
net.netfilter.nf_conntrack_max = 262144
使其生效:
sudo sysctl -p
NetworkManager 优化(可选)
编辑:
sudo vim /etc/sysctl.conf
追加:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
生效:
sudo sysctl -p