3、开发环境搭建:Python虚拟环境、Node.js环境、Docker与Docker Compose、Git版本控制
说实话,搭建开发环境这件事,看着简单,但坑是真不少。我见过太多人花了一整天装环境,结果项目还没跑起来就崩溃了。所以这一章,咱们把基础打牢。
我会带你一步步搞定四个核心工具:Python虚拟环境、Node.js、Docker全家桶、还有Git。嗯,这些都是运维平台的基石。
核心思路: 本地开发环境要隔离、可复现、易迁移。说白了,就是别让一个项目污染另一个项目,也别让换台电脑就抓瞎。
3.1 Python虚拟环境:为什么必须用?
Python的依赖管理,曾经让我头疼很久。我记得刚入行那会儿,直接在系统全局装包,结果两个项目一个要Django 2.2,一个要3.2,冲突到怀疑人生。后来我才明白,虚拟环境就是干这个的。
虚拟环境的核心作用:每个项目拥有独立的Python解释器和包目录。你想想看,A项目装什么包,完全不影响B项目。
3.1.1 使用 venv(Python 3.3+ 内置)
我个人习惯用 venv,因为它不需要额外安装,Python 3.3 以后就自带了。
# 创建虚拟环境
python3 -m venv venv
# 激活(Linux/Mac)
source venv/bin/activate
# 激活(Windows)
venv\Scripts\activate
# 退出
deactivate
小技巧: 我习惯把虚拟环境目录命名为 venv 或 .venv,然后加到 .gitignore 里。这样既不会污染代码仓库,别人拉下来也能一眼看到。
3.1.2 使用 pipenv(更现代的选择)
如果你觉得手动激活/退出麻烦,可以试试 pipenv。它自动管理虚拟环境和依赖文件。
# 安装
pip install pipenv
# 创建虚拟环境并安装依赖
pipenv install flask
# 激活
pipenv shell
# 生成 Pipfile.lock(锁定版本)
pipenv lock
我在项目中遇到过一个问题:Pipfile.lock 文件很大,但千万别删。它记录了每个依赖的精确版本哈希,能保证你在任何机器上装出来的环境一模一样。
避坑指南: 我曾经因为忘记激活虚拟环境,直接在全局装了包,结果项目跑起来报错说找不到模块。后来我养成了一个习惯:每次打开终端,先看一眼命令行前面有没有 (venv) 前缀。没有?那就先激活。
3.2 Node.js环境:前端与工具链的基础
运维平台的前端部分,离不开Node.js。不管是Vue、React,还是各种构建工具,都得靠它跑起来。
3.2.1 安装 Node.js 和 npm
我个人推荐用 nvm(Node Version Manager)来管理Node版本。为什么?因为不同项目可能依赖不同版本的Node,你总不能每次都卸载重装吧。
# 安装 nvm(Linux/Mac)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
# 安装指定版本
nvm install 18.17.0
# 切换版本
nvm use 18.17.0
# 设置默认版本
nvm alias default 18.17.0
安装完成后,验证一下:
node -v # 输出 v18.17.0
npm -v # 输出 9.6.7
3.2.2 使用 nrm 管理 npm 源
国内访问 npm 官方源,速度你懂的。我建议用 nrm 切换淘宝镜像。
# 安装 nrm
npm install -g nrm
# 查看可用源
nrm ls
# 切换到淘宝源
nrm use taobao
# 测试速度
nrm test
小技巧: 我个人习惯把 npm 的缓存目录改到非系统盘,避免C盘爆炸。命令是 npm config set cache "D:\npm-cache"(Windows示例)。
3.3 Docker与Docker Compose:环境一致性的终极方案
你想想看,开发环境、测试环境、生产环境,配置不一样怎么办?Docker就是来解决这个问题的。说白了,就是把你的应用和所有依赖打包成一个镜像,走到哪跑到哪。
3.3.1 安装 Docker
Docker的安装,不同系统略有差异。我以 Ubuntu 为例:
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
避坑指南: 我曾经在安装Docker后,发现每次都要加 sudo 才能运行。解决办法是把当前用户加入 docker 组:sudo usermod -aG docker $USER。然后退出重新登录,就再也不用输 sudo 了。
3.3.2 Docker Compose:多容器编排
运维平台通常不止一个服务:后端API、前端、数据库、Redis……一个个手动启动太累了。Docker Compose 就是用来定义和运行多容器应用的。
一个典型的 docker-compose.yml 示例:
version: '3.8'
services:
backend:
build: ./backend
ports:
- "8000:8000"
volumes:
- ./backend:/app
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/opsplatform
depends_on:
- db
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend:/app
depends_on:
- backend
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: opsplatform
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
启动命令很简单:
# 启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止并删除容器
docker-compose down
小技巧: 我习惯在 docker-compose.yml 里用 volumes 挂载本地代码目录。这样修改代码后,容器内会自动同步,不用每次重新构建镜像。开发效率提升不少。
3.4 Git版本控制:不只是保存代码
Git的重要性,不用我多说。但我想强调的是:Git不只是用来保存代码的,更是用来管理协作流程的。
3.4.1 初始化仓库与基本操作
# 初始化
git init
# 添加文件到暂存区
git add .
# 提交
git commit -m "feat: 初始化运维平台项目结构"
# 关联远程仓库
git remote add origin https://github.com/yourname/ops-platform.git
# 推送
git push -u origin main
3.4.2 分支策略:我推荐 Git Flow
我个人习惯用 Git Flow 来管理分支。简单说就是:
- main:生产分支,只合并经过测试的代码
- develop:开发分支,日常开发的基础
- feature/*:功能分支,从 develop 拉出,开发完合并回去
- release/*:发布分支,用于准备新版本
- hotfix/*:紧急修复分支,从 main 拉出,修完合并回 main 和 develop
核心原则: 永远不要在 main 分支上直接开发。我见过有人直接在 main 上改代码,结果上线前发现冲突,回滚都来不及。嗯,血的教训。
3.4.3 .gitignore 配置
有些文件不该被提交到仓库,比如虚拟环境目录、编译产物、敏感配置等。一个典型的 .gitignore:
# Python
venv/
__pycache__/
*.pyc
*.pyo
*.egg-info/
# Node
node_modules/
dist/
.npm/
# Docker
.env
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.db
避坑指南: 我曾经把 .env 文件不小心提交到了仓库,里面包含了数据库密码。虽然马上删除了,但Git历史里还有记录。后来我用了 git filter-branch 才彻底清理掉。所以,敏感文件一定要先加到 .gitignore 再提交。
3.5 本章知识体系总览
下面这张图,帮你把本章的核心逻辑串起来:
这四个工具,说白了就是一套组合拳:Python虚拟环境管后端依赖,Node.js管前端工具链,Docker保证环境一致性,Git管代码版本。缺一个,开发效率都会打折扣。
我的建议: 刚开始别追求完美。先把环境跑起来,能写代码就行。随着项目变大,你自然会体会到这些工具的价值。嗯,慢慢来。
公众号:蓝海资料掘金营,微信deep3321