第二章:环境规划与部署

说实话,很多运维新手一上来就急着装软件、敲命令,结果后面全崩了。我见过太多这样的案例——服务器配置不对,Python版本冲突,数据库跑着跑着就挂了。嗯,这一章咱们就把地基打牢。

2.1 服务器选型与操作系统配置

选服务器这事儿,说白了就是看你的业务规模。我个人习惯先问三个问题:

  • 并发量多大? 日均PV多少?峰值多少?
  • 数据量多大? 日志、数据库、缓存各占多少?
  • 预算多少? 这个最实在。

我给大家一个参考配置表,这是我踩过不少坑后总结出来的:

场景 CPU 内存 磁盘 推荐型号
小型实验环境 4核 8G SSD 100G 阿里云ECS 轻量级
中型生产环境 8核 32G SSD 500G + HDD 2T 华为云 c6.4xlarge
大型集群环境 16核以上 64G以上 全闪存 1T+ 物理机 Dell R750
我的经验: 千万别在磁盘上省钱。我曾经为了省几百块用了机械盘,结果数据库IO打满,整个平台卡成PPT。后来换了SSD,世界清净了。

操作系统我推荐 CentOS 7.9Ubuntu 20.04 LTS。为什么?因为社区活跃,坑少,文档全。配置时注意几点:

  • 关闭SELinux(除非你真的很懂它)
  • 调整文件描述符上限(ulimit -n 65535)
  • 同步系统时间(ntpdate 或 chrony)
  • 配置国内yum/apt源(不然下载慢到怀疑人生)
注意: 生产环境千万别用最小化安装!我见过有人装完发现连ifconfig都没有,还得现装net-tools。建议选「开发工具」或「带GUI的服务器」模板。

2.2 Python3与虚拟环境搭建

Python版本这事儿,真的让人头大。系统自带的Python2.7早该退休了,但很多工具还依赖它。我的做法是:系统Python不动,自己装Python3

具体步骤:

# 安装依赖
yum install -y gcc openssl-devel bzip2-devel libffi-devel

# 下载Python3.9.6
wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz
tar -xzf Python-3.9.6.tgz
cd Python-3.9.6

# 编译安装(指定路径,别覆盖系统Python)
./configure --prefix=/usr/local/python3
make && make install

# 建立软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

# 验证
python3 --version
pip3 --version
核心要点: 一定要用虚拟环境!每个项目独立隔离,互不干扰。我见过有人把所有依赖装到系统Python里,结果两个项目依赖冲突,折腾了一整天。

虚拟环境我用 venv(Python3自带)或 virtualenv。推荐 venv,因为不用额外安装:

# 创建虚拟环境
python3 -m venv /opt/venv/opsplatform

# 激活
source /opt/venv/opsplatform/bin/activate

# 安装依赖
pip install flask==2.0.1
pip install pymysql redis

# 退出
deactivate

为什么要用虚拟环境?你想想看,一个项目用Flask 1.x,另一个用2.x,如果装在一起,迟早出问题。虚拟环境就是给每个项目一个独立的「小房间」。

2.3 数据库选型与初始化

数据库选型,说白了就是看你的数据长什么样。

  • MySQL: 结构化数据,需要事务,需要复杂查询。比如用户信息、订单记录。
  • Redis: 缓存、会话、计数器。比如登录状态、API限流、排行榜。

我一般两个都用。MySQL存持久化数据,Redis做缓存层。这样既保证了数据安全,又提升了访问速度。

2.3.1 MySQL安装与初始化

# 安装MySQL 8.0
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server

# 启动
systemctl start mysqld
systemctl enable mysqld

# 查看临时密码
grep 'temporary password' /var/log/mysqld.log

# 安全初始化
mysql_secure_installation

初始化时记得做这几件事:

  • 修改root密码(别用弱口令)
  • 删除匿名用户
  • 禁止root远程登录(除非你真的很需要)
  • 删除test数据库
我曾经踩过的坑: 有次忘了改字符集,结果插入中文直接报错。后来在my.cnf里加了 character-set-server=utf8mb4,才搞定。记住,utf8mb4 才是真正的UTF-8,MySQL的utf8只是个阉割版。

2.3.2 Redis安装与配置

# 安装Redis 6.2
yum install -y epel-release
yum install -y redis

# 修改配置 /etc/redis.conf
# 绑定内网IP(别暴露到公网)
bind 127.0.0.1 192.168.1.100

# 设置密码
requirepass MyStrongPassword123

# 开启持久化(AOF + RDB)
appendonly yes
save 900 1
save 300 10
save 60 10000

# 启动
systemctl start redis
systemctl enable redis

Redis配置里,持久化 是重点。默认只开了RDB快照,但万一断电,可能丢几分钟的数据。我建议同时开启AOF,虽然会慢一点,但数据安全多了。

我的习惯: 生产环境Redis一定要设置密码,而且密码要复杂。我见过有人Redis裸奔,结果被挖矿程序盯上,CPU直接飙到100%。嗯,那场面,惨不忍睹。

知识体系总览

这一章的内容比较多,我画了张图帮你理清思路:

自动化运维平台 - 环境规划与部署 服务器选型与OS配置 Python3与虚拟环境 数据库选型与初始化 CPU/内存/磁盘选型 OS配置:SELinux/时间/源 Python3编译安装 venv虚拟环境隔离 MySQL 8.0安装与安全 Redis持久化与密码 核心原则:稳定 > 性能 > 花哨 先跑起来,再优化。别一开始就追求完美。

这张图把本章的三个核心模块串起来了。你从服务器开始,搭好操作系统,然后装Python环境,最后搞定数据库。每一步都是下一步的基础,别跳步。

最后说一句: 环境搭建这事儿,看着简单,但细节决定成败。我见过太多人因为一个小配置没做对,后面排查半天。所以,每一步做完,记得验证一下。比如装完MySQL,就建个表插条数据试试。装完Redis,就set一个key看看。这样心里才有底。

专注资料整理