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虚拟环境 venv / pipenv 依赖隔离 版本锁定 Node.js环境 nvm 版本管理 npm / nrm 前端构建 Docker & Compose 容器化部署 多服务编排 环境一致性 Git版本控制 分支策略 协作规范 四个工具相互配合,构建可复现、易维护的开发环境

这四个工具,说白了就是一套组合拳:Python虚拟环境管后端依赖,Node.js管前端工具链,Docker保证环境一致性,Git管代码版本。缺一个,开发效率都会打折扣。

我的建议: 刚开始别追求完美。先把环境跑起来,能写代码就行。随着项目变大,你自然会体会到这些工具的价值。嗯,慢慢来。


公众号:蓝海资料掘金营,微信deep3321