安装Ubuntu-Server


1.安装首页

image-20250408200547094

2. 选择安装语言

image-20250408200555748

3. 安装器

这里选择不更新安装器,直接继续安装 image-20250408200608186

4.选择键盘布局

image-20250408200618190

5. 选择安装类型

既然是安装服务器系统,当然选择最小安装 image-20250408200642689

6. 设置网络连接

image-20250408200715676 image-20250408200726295 image-20250408200741352 image-20250408200759318

7. 配置镜像源地址

这里配置的是国内的阿里云的镜像源地址,下载速度快 image-20250408200810932

8. 磁盘分区

image-20250408200824055 image-20250408200849869 image-20250408200859780

9. 创建登录用户

创建登录用户,Ubuntu默认是不允许root登录(可以在后面步骤设置允许root用户登录) image-20250408200943252

10.配置安装openssh-server

配置安装openssh-server,这个可以用来进行远程连接 image-20250408201009266

11.配置安装其他额外的软件

image-20250408201024376

12. 开始安装系统

image-20250408201037085

13. 重启系统

image-20250408201056901

14. 安装vim编辑器

image-20250408201131720

15. 设置root密码

image-20250408201141265

16. 编辑ssh服务的配置文件

image-20250408201204731 修改下面两个参数 image-20250408201217596 重启ssh服务 systemctl restart ssh

17. 远程登录root用户

ssh root@Ip地址

18. 设置静态IP地址

如果在前面第6步没有设置静态IP地址,使用的是默认dhcp动态分配IP地址,那么可以在这一步配置静态IP地址,如果已经设置过,此步可忽略 image-20250408201231547 如下这样设置即可,然后重启服务器reboot image-20250408201242706 下面是一个配置IP的脚本:

#!/bin/bash
# ip与dns地址接受验证函数
validate_ip() {
    local ip_var_name=$1
    while true
    do
        read -p "Input IP address($ip_var_name): " $ip_var_name

        # 检测是否为空
        if [ -z "${!ip_var_name}" ]; then
            echo "Input is empty. Please try again."
            continue
        fi

        # 检测是否符合IP地址的格式
        if ! [[ ${!ip_var_name} =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
            echo "Invalid IP address format. Please try again."
            continue
        fi

        # 输入符合要求,跳出循环
        break
    done
}

# 调用函数并传递变量名作为参数,使用函数给变量赋值并验证
validate_ip "ip_address"
echo "IP address: $ip_address"

validate_ip "ip_gateway"
echo "IP gateway: $ip_gateway"

validate_ip "dns1_ip"
echo "Dns1 ip: $dns1_ip"

validate_ip "dns2_ip"
echo "Dns2 ip: $dns2_ip"


cat > /etc/netplan/00-installer-config.yaml << EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: false
      dhcp6: false
      addresses:
        - ${ip_address}/24
      routes:
        - to: default
          via: ${ip_gateway}
      nameservers:
          addresses: [${dns1_ip}, ${dns2_ip}]
EOF

apt install resolvconf -y

cat > /etc/resolvconf/resolv.conf.d/head << EOF
nameserver ${dns1_ip}
nameserver ${dns2_ip}
EOF

systemctl restart resolvconf

echo "过个10秒左右的样子可以关闭终端,然后换成刚才输入的主机IP进行ssh登陆即可."

netplan apply

19. 设置镜像源

如果前面第7步已经设置了镜像源,此步可忽略
cd /etc/apt
sed  -i  's/http:\/\/cn.archive.ubuntu.com\/ubuntu/https:\/\/mirrors.aliyun.com\/ubuntu/g' sources.list

20.设置时区与主机名

# 设置时区
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 设置主机名
read -p "请输入主机名" my_host_name
hostnamectl set-hostname $my_host_name

21. 设置字符集

echo 'export LANG=en_US.UTF-8'|tee -a /etc/profile && source /etc/profile

locale-gen en_US.UTF-8
echo "en_US.UTF-8 UTF-8" > /var/lib/locales/supported.d/local
cat > /etc/default/locale << EOF
LANG=en_US.UTF-8
LANGUAGE=en_US:en
EOF

22.安装常用软件

# 把常用的软件加入次列表
apt install -y curl wget unzip gcc swig automake make perl ipset cpio git libmbedtls-dev libudns-dev libev-dev python-pip python3-pip lrzsz iftop nethogs nload htop ifstat iotop iostat vim net-tools
apt-get clean all

23.优化系统内核

# 显示修改内容与注释
cat <<EOF
# /etc/sysctl.conf
fs.file-max = 1000000
# 这个参数定义了系统中最大的文件句柄数。文件句柄是用于访问文件的数据结构。增加这个值可以提高系统同时打开文件的能力。

fs.inotify.max_user_instances = 8192
# inotify是Linux内核中的一个机制,用于监视文件系统事件。这个参数定义了每个用户可以创建的inotify实例的最大数量。

net.ipv4.tcp_syncookies = 1
# 当系统遭受SYN洪水攻击时,启用syncookies可以防止系统资源被耗尽。SYN cookies是一种机制,用于在TCP三次握手中保护服务器端资源。

net.ipv4.tcp_fin_timeout = 30
# 这个参数定义了TCP连接中,等待关闭的时间。当一端发送FIN信号后,等待对端关闭连接的超时时间。

net.ipv4.tcp_tw_reuse = 1
# 启用该参数后,可以允许将TIME-WAIT状态的TCP连接重新用于新的连接。这可以减少系统中TIME-WAIT连接的数量。

net.ipv4.ip_local_port_range = 1024 65000
# 这个参数定义了本地端口的范围,用于分配给发送请求的应用程序。它限制了可用于客户端连接的本地端口范围。

net.ipv4.tcp_max_syn_backlog = 16384
# 这个参数定义了TCP连接请求的队列长度。当系统处理不及时时,超过该队列长度的连接请求将被拒绝。

net.ipv4.tcp_max_tw_buckets = 6000
# 这个参数定义了系统同时保持TIME-WAIT状态的最大数量。超过这个数量的连接将被立即关闭。

net.ipv4.route.gc_timeout = 100
# 这个参数定义了内核路由表清理的时间间隔,单位是秒。它影响路由缓存的生命周期。

net.ipv4.tcp_syn_retries = 1
# 这个参数定义了在发送SYN请求后,等待对端回应的次数。超过指定次数后仍未响应,连接将被认为失败。

net.ipv4.tcp_synack_retries = 1
# 这个参数定义了在发送SYN+ACK回应后,等待对端发送ACK的次数。超过指定次数后仍未收到ACK,连接将被认为失败。

net.core.somaxconn = 32768
# 这个参数定义了监听队列的最大长度。当服务器正在处理的连接数超过此值时,新的连接请求将被拒绝。

net.core.netdev_max_backlog = 32768
# 这个参数定义了网络设备接收队列的最大长度。当接收队列已满时,新的数据包将被丢弃。

net.core.netdev_budget = 5000
# 这个参数定义了每个网络设备接收队列在每个时间间隔中可以处理的数据包数量。

net.ipv4.tcp_timestamps = 0
# 禁用TCP时间戳。时间戳可以用于解决网络中的数据包乱序问题,但在高负载环境下可能会增加开销。

net.ipv4.tcp_max_orphans = 32768
# 这个参数定义了系统中允许存在的最大孤立(没有关联的父连接)TCP连接数量。超过这个数量的孤立连接将被立即关闭。
EOF


[ -z "$(grep 'fs.file-max' /etc/sysctl.conf)" ] && cat >> /etc/sysctl.conf << EOF
fs.file-max = 1000000
fs.inotify.max_user_instances = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.core.netdev_budget = 5000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_orphans = 32768
EOF
sysctl -p

24.设置时间同步

# Update time
which ntpdate || apt-get update && apt install ntpdate

ntpdate pool.ntp.org

[ ! -e "/var/spool/cron/crontabs/root" -o -z "$(grep ntpdate /var/spool/cron/crontabs/root 2>/dev/null)" ] && { echo "*/20 * * * * $(which ntpdate) pool.ntp.org > /dev/null 2>&1" >> /var/spool/cron/crontabs/root;chmod 600 /var/spool/cron/crontabs/root; }