1. Ubuntu环境部署概述
作为Linux发行版中最受欢迎的选项之一,Ubuntu以其稳定的性能和友好的社区支持成为开发者和运维人员的首选。我在过去五年中参与过数十次Ubuntu环境部署,从个人开发机到企业级服务器都有涉及。这次我想系统性地分享一套经过实战检验的部署方案,涵盖从系统安装到生产环境配置的全流程。
选择Ubuntu 22.04 LTS作为基础版本是个明智的决定——长期支持版本意味着五年安全更新,这对需要稳定运行的生产环境至关重要。根据Canonical官方统计,超过60%的云实例都运行着LTS版本。我们将从ISO镜像获取开始,逐步深入到网络配置、安全加固和服务部署等关键环节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统安装与基础配置
2.1 镜像获取与启动准备
首先访问Ubuntu官网下载22.04 LTS镜像时,建议选择位于亚洲的镜像源以获得更快的下载速度。我通常使用清华大学的镜像站,速度能提升3-5倍。下载完成后,使用以下命令验证SHA256校验和:
bash复制echo "5dfb1a5f2a0c1344b3a7e6a5e5e8e9c1f3e3e3e3e3e3e3e3e3e3e3e3e3e3e3 *ubuntu-22.04.3-live-server-amd64.iso" | shasum -a 256 --check
制作启动盘推荐使用Ventoy这款开源工具,它允许你在同一个U盘存放多个ISO文件,且支持Legacy和UEFI两种启动方式。相比传统的Rufus或Etcher,Ventoy在多次安装场景下能节省大量时间。
2.2 安装过程关键选择
安装界面有几个需要特别注意的选项:
- 网络连接:建议安装时保持联网,这样能自动下载最新安全更新
- 存储配置:生产环境建议选择LVM,便于后期磁盘扩容
- 软件选择:最小化安装(仅SSH服务)是最安全的选择
安装完成后立即执行这三条命令:
bash复制sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
重要提示:如果安装时跳过了用户创建步骤,务必通过恢复模式添加sudo用户,禁用root远程登录是安全基线要求。
3. 网络与安全配置
3.1 网络优化设置
Ubuntu默认使用Netplan进行网络配置,我习惯将/etc/netplan/00-installer-config.yaml修改为:
yaml复制network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
routes:
- to: 10.0.0.0/8
via: 192.168.1.254
应用配置后测试网络连通性时,我有个小技巧:同时ping网关和外网地址,这样能快速定位是局域网还是外网问题:
bash复制ping -c 4 192.168.1.1 & ping -c 4 google.com
3.2 安全加固措施
根据CIS Benchmark标准,这些是必须执行的安全配置:
- 修改SSH端口并禁用密码登录:
bash复制sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
- 配置防火墙规则(UFW):
bash复制sudo ufw allow 2222/tcp
sudo ufw enable
- 安装fail2ban防御暴力破解:
bash复制sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
4. 开发环境部署
4.1 Docker引擎安装
虽然Ubuntu仓库提供了Docker包,但我推荐使用官方源获取最新版本:
bash复制sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
配置Docker守护进程时,我通常会调整存储驱动为overlay2,并限制日志大小:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
4.2 Python环境配置
对于Python开发,我强烈建议使用pyenv管理多版本环境。以下是安装步骤:
bash复制sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
安装Python 3.10.6的示例:
bash复制pyenv install 3.10.6
pyenv global 3.10.6
5. 生产环境优化
5.1 性能调优
针对服务器负载特点,我通常会调整以下内核参数:
bash复制echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
echo "net.core.somaxconn=65535" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
对于数据库服务器,还需要调整文件描述符限制:
bash复制echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
5.2 监控与维护
安装基础监控工具:
bash复制sudo apt install sysstat glances
配置每日日志轮转:
bash复制sudo cp /etc/logrotate.conf /etc/logrotate.custom.conf
echo "/var/log/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
}" | sudo tee -a /etc/logrotate.custom.conf
6. 常见问题排查
6.1 网络连接故障
当遇到网络问题时,我遵循这个排查流程:
- 检查物理连接状态:
bash复制ip link show eth0
- 验证IP配置:
bash复制ip addr show eth0
- 测试网关连通性:
bash复制ping -c 4 $(ip route show default | awk '{print $3}')
- 检查DNS解析:
bash复制dig google.com +short
6.2 性能瓶颈分析
使用这个组合命令快速定位系统瓶颈:
bash复制top -b -n 1 | head -12 && echo "---" && df -h && echo "---" && free -h && echo "---" && ss -s
对于内存泄漏检测,我习惯使用smem统计:
bash复制sudo apt install smem
smem -t -k -P "python|java"
7. 进阶部署方案
7.1 使用Ansible自动化
创建基础配置的playbook(base-config.yml):
yaml复制---
- hosts: all
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install basic packages
apt:
name: ["htop","vim","git","curl","wget"]
state: present
- name: Configure sysctl
sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
sysctl_file: /etc/sysctl.d/99-custom.conf
state: present
reload: yes
with_items:
- { key: 'vm.swappiness', value: '10' }
- { key: 'net.core.somaxconn', value: '65535' }
7.2 Kubernetes节点准备
为K8s节点做的特别优化:
bash复制cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
在完成所有部署后,我习惯创建一个系统快照:
bash复制sudo apt install timeshift
sudo timeshift --create --comments "Initial Setup" --tags "O"
这些配置和技巧都是我在实际运维工作中积累的经验,特别是安全加固部分曾帮我避免过多次入侵尝试。每个生产环境都有其特殊性,建议在实施前先在测试环境验证。对于关键业务系统,一定要建立完整的备份和回滚机制。
