3、基础依赖安装:Python环境搭建、JDK与Node.js安装、数据库选型与部署(MySQL/PostgreSQL)
说实话,很多自动化部署项目翻车,不是死在架构设计上,而是死在基础环境上。我见过太多人上来就写代码,结果Python版本不对、JDK冲突、数据库连不上,折腾两天才发现是环境问题。
这一章,咱们就把这些基础依赖一次性搞定。我的原则是:能脚本化就别手动,能标准化就别随意。你想想看,如果每台机器环境都不一样,那自动部署还有什么意义?
3.1 Python环境搭建
Python是我们策略系统的核心语言。我个人习惯用pyenv来管理多版本,而不是直接装系统Python。为什么?因为系统Python往往版本老旧,而且你不敢随便升级——万一yum或者apt依赖它呢?
核心要点:Python版本选择3.8+,推荐3.10。3.6已经EOL了,别再用。
3.1.1 安装pyenv
# 安装依赖(CentOS/RHEL)
yum install -y gcc make patch zlib-devel bzip2 bzip2-devel \
readline-devel sqlite-devel openssl-devel tk-devel git
# 安装pyenv
curl https://pyenv.run | bash
# 配置环境变量(写入~/.bashrc)
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
小技巧:如果你在墙内,pyenv下载Python源码会很慢。我一般提前把源码包放到~/.pyenv/cache/目录下,这样pyenv会直接使用本地缓存。
3.1.2 安装指定Python版本
# 查看可安装版本
pyenv install --list | grep " 3\.[89]"
# 安装Python 3.10.12
pyenv install 3.10.12
# 设置全局版本
pyenv global 3.10.12
# 验证
python --version
# 输出: Python 3.10.12
3.1.3 虚拟环境配置
每个项目都应该有自己的虚拟环境。我曾经见过一个项目,所有依赖都装在全局site-packages里,结果两个项目依赖同一个包的不同版本,直接炸了。
# 创建虚拟环境
python -m venv /opt/venvs/auto-strategy
# 激活
source /opt/venvs/auto-strategy/bin/activate
# 安装项目依赖
pip install --upgrade pip
pip install -r requirements.txt
注意:生产环境不要用pip install直接装包。一定要用requirements.txt锁定版本,否则某天某个包升级了,你的系统可能就挂了。我吃过这个亏。
3.2 JDK与Node.js安装
为什么自动策略系统需要JDK和Node.js?嗯,这里要说明一下:我们的策略引擎核心虽然是Python写的,但有些组件——比如规则引擎Drools、前端管理界面——分别依赖Java和Node.js。
3.2.1 JDK安装(推荐JDK 11 LTS)
JDK版本选择上,我个人建议用JDK 11。JDK 8太老,JDK 17虽然新但有些库还没完全适配。JDK 11是LTS版本,稳定且生态成熟。
# 下载JDK 11(以OpenJDK为例)
wget https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.20%2B8/OpenJDK11U-jdk_x64_linux_hotspot_11.0.20_8.tar.gz
# 解压到指定目录
tar -xzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.20_8.tar.gz -C /opt/
mv /opt/jdk-11.0.20+8 /opt/jdk11
# 配置环境变量
cat >> /etc/profile.d/jdk.sh << 'EOF'
export JAVA_HOME=/opt/jdk11
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile.d/jdk.sh
# 验证
java -version
# 输出: openjdk version "11.0.20" 2023-07-18
避坑指南:不要用系统自带的yum install java-11-openjdk。为什么?因为系统包管理器安装的JDK,你很难控制具体版本号。万一哪天yum源更新了,你的JDK版本就变了。手动安装虽然麻烦点,但版本可控。
3.2.2 Node.js安装(推荐使用nvm)
Node.js版本更迭快得像翻书一样。我建议用nvm来管理,这样切换版本只需要一条命令。
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
# 重新加载shell配置
source ~/.bashrc
# 安装Node.js 18 LTS
nvm install 18
# 设置默认版本
nvm alias default 18
# 验证
node --version
# 输出: v18.17.1
npm --version
# 输出: 9.6.7
为什么选Node 18?因为它是LTS版本,而且对ESM模块支持很好。我们的前端管理界面用了Vite + Vue 3,Node 18是最佳搭档。
3.3 数据库选型与部署
数据库选型这个问题,说白了就是看你的业务场景。我直接说结论:
- MySQL 8.0:适合结构化数据、事务性强的场景。比如策略元数据、用户权限、审计日志。
- PostgreSQL 15:适合复杂查询、JSON数据、地理空间数据。比如策略规则配置、运行时指标。
我们的自动策略生成系统,两者都用。MySQL存核心业务数据,PostgreSQL存策略规则和运行时数据。你可能会问:为什么不只用一种?嗯,因为MySQL的JSON查询能力不如PG,而PG的复制和高可用方案不如MySQL成熟。各取所长嘛。
3.3.1 MySQL 8.0部署
# 使用Docker部署(推荐)
docker run -d \
--name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=StrongPass@2024 \
-e MYSQL_DATABASE=auto_strategy \
-v /data/mysql:/var/lib/mysql \
--restart=always \
mysql:8.0
# 验证连接
mysql -h 127.0.0.1 -u root -p -e "SELECT VERSION();"
注意:生产环境一定要挂载数据卷!我见过有人用Docker跑MySQL没挂载卷,结果容器重启后数据全丢了。那场面,简直灾难。
3.3.2 PostgreSQL 15部署
# Docker部署PostgreSQL
docker run -d \
--name pg15 \
-p 5432:5432 \
-e POSTGRES_PASSWORD=StrongPass@2024 \
-e POSTGRES_DB=auto_strategy_rules \
-v /data/postgres:/var/lib/postgresql/data \
--restart=always \
postgres:15
# 验证连接
psql -h 127.0.0.1 -U postgres -d auto_strategy_rules -c "SELECT version();"
3.3.3 数据库初始化脚本
我个人习惯把数据库初始化写成脚本,纳入版本控制。这样新环境部署时,一条命令就能搞定。
#!/bin/bash
# init_db.sh - 数据库初始化脚本
# MySQL初始化
mysql -h 127.0.0.1 -u root -p'StrongPass@2024' <<SQL
CREATE DATABASE IF NOT EXISTS auto_strategy DEFAULT CHARACTER SET utf8mb4;
CREATE USER IF NOT EXISTS 'strategy_user'@'%' IDENTIFIED BY 'UserPass@2024';
GRANT ALL PRIVILEGES ON auto_strategy.* TO 'strategy_user'@'%';
FLUSH PRIVILEGES;
SQL
# PostgreSQL初始化
psql -h 127.0.0.1 -U postgres <<SQL
CREATE DATABASE auto_strategy_rules;
CREATE USER strategy_user WITH PASSWORD 'UserPass@2024';
GRANT ALL PRIVILEGES ON DATABASE auto_strategy_rules TO strategy_user;
\c auto_strategy_rules
GRANT ALL ON SCHEMA public TO strategy_user;
SQL
echo "数据库初始化完成!"
3.4 本章知识体系
下面这张图,是我梳理的基础依赖安装的整体流程。你可以把它当作一个检查清单,部署时对着来就行。
这张图把整个依赖安装分成了三条主线:Python、JDK/Node.js、数据库。你部署的时候,按这个顺序来就行。先装Python环境,再装JDK和Node.js,最后部署数据库。每一步都有版本锁定和标准化配置,这样不管换多少台机器,环境都是一致的。
最后说一句:基础环境搭建看似简单,但往往是整个项目最容易被忽视的环节。我见过太多项目因为环境不一致导致线上问题。所以,花点时间把这一步做好,后面会省很多事。
公众号:蓝海资料掘金营,微信deep3321