引言:为什么需要专业的开发环境?
想象一下,如果米开朗基罗只有一把小刀和一块粗糙的石头,《大卫》雕像会是什么样子?在软件开发的世界里,开发环境就是我们的"工作室",各种工具就是我们的"雕刻刀"和"画笔"。一个精心配置的开发环境不仅能提高效率(少走弯路),还能保证质量(减少错误),同时让团队协作更加顺畅(大家用同样的工具)。
在前面的文章中,我们已经搭建了私有镜像仓库("Docker超市")和私有代码仓库("代码图书馆")。今天,我们将把这些基础设施整合起来,打造一个完整的开发环境——你的"代码工作室"!
第一步:选择合适的开发工具
就像艺术家需要选择适合自己的画笔一样,开发者也需要选择适合自己的工具。我们这里以一个典型的Web开发环境为例,包括前端和后端开发工具。
IDE(集成开发环境)
Visual Studio Code(VS Code)是目前最受欢迎的轻量级IDE之一,它免费、跨平台、扩展丰富,就像一把瑞士军刀!
# 安装依赖
sudo yum install -y libXScrnSaver
# 下载VS Code RPM包
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
# 安装VS Code
sudo yum install -y code
# 验证安装
code --version
容器开发环境
在CentOS上 ,我们可以使用Docker命令行工具,而不是Docker Desktop(Docker Desktop对CentOS的支持有限):
# 确保Docker已安装(如果你已完成私有镜像仓库的搭建,可以跳过)
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户添加到docker组 ,避免每次都需要sudo
sudo usermod -aG docker $USER
# 注意:需要重新登录才能生效
第二步:配置开发环境与私有仓库的集成
现在,让我们将之前搭建的私有镜像仓库和代码仓库与我们的开发环境集成起来,就像把工作室与材料供应商和图书馆连接起来一样!
配置Docker客户端使用私有镜像仓库
# 创建Docker配置目录(如果不存在)
mkdir -p ~/.docker
# 编辑Docker配置文件
vi ~/.docker/config.json
# 添加以下内容(假设你的私有仓库地址是192.168.1.100:5000)
{
"auths": {
"192.168.1.100:5000": {
"auth": "bXl1c2VyOm15cGFzc3dvcmQ=" # 这是base64编码的用户名:密码
}
},
"insecure-registries": ["192.168.1.100:5000"]
}
# 保存并关闭文件(按ESC,然后输入:wq回车)
如果你不想手动编辑配置文件,也可以使用Docker登录命令:
# 登录到私有仓库
docker login 192.168.1.100:5000 -u myuser -p mypassword
配置Git客户端使用私有代码仓库
# 设置全局Git用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 生成SSH密钥(如果你还没有)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 将SSH密钥添加到SSH代理
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
# 查看公钥并复制
cat ~/.ssh/id_rsa.pub
然后,将公钥添加到你的Gitea账户中(如我们在上一篇文章中所述)。
第三步:安装开发依赖和工具链
不同的项目可能需要不同的开发工具和依赖。这里,我们以一个典型的Node.js + Python开发环境为例:
Node.js开发环境
# 安装Node.js版本管理器nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
# 加载nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# 安装最新的LTS版本的Node.js
nvm install --lts
# 验证安装
node --version
npm --version
# 安装常用的全局包
npm install -g yarn typescript nodemon eslint prettier
Python开发环境
# 安装开发工具和依赖
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel bzip2-devel libffi-devel xz-devel
# 安装Python版本管理器pyenv
curl https://pyenv.run | bash
# 添加pyenv到PATH
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
pyenv install 3.10.0
# 设置全局Python版本
pyenv global 3.10.0
# 验证安装
python --version
# 安装虚拟环境工具
pip install virtualenv virtualenvwrapper
第四步:配置VS Code扩展和设置
VS Code的强大之处在于其丰富的扩展生态系统。让我们安装一些必备的扩展:
# 安装Docker扩展
code --install-extension ms-azuretools.vscode-docker
# 安装Git扩展
code --install-extension eamodio.gitlens
# 安装Python扩展
code --install-extension ms-python.python
# 安装JavaScript/TypeScript扩展
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
# 安装远程开发扩展
code --install-extension ms-vscode-remote.remote-containers
接下来,配置VS Code的用户设置:
# 创建或编辑VS Code设置文件
mkdir -p ~/.config/Code/User/
vi ~/.config/Code/User/settings.json
添加以下内容:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"git.enableSmartCommit": true,
"git.confirmSync": false,
"docker.host": "unix:///var/run/docker.sock",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"javascript.updateImportsOnFileMove.enabled": "always",
"typescript.updateImportsOnFileMove.enabled": "always"
}
第五步:创建项目模板
为了提高新项目的启动效率,我们可以创建一些项目模板,就像艺术家准备好画布和底色一样:
前端项目模板(React)
# 创建模板目录
mkdir -p ~/templates/react-app
# 使用Create React App创建模板
npx create-react-app ~/templates/react-app/template
# 添加常用依赖
cd ~/templates/react-app/template
npm install axios styled-components react-router-dom
# 创建Dockerfile
cat > Dockerfile << 'EOF'
FROM node:16-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
EOF
# 创建.dockerignore
cat > .dockerignore << 'EOF'
node_modules
npm-debug.log
build
.git
.gitignore
EOF
# 创建.gitignore
cat > .gitignore << 'EOF'
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
EOF
后端项目模板(Python Flask)
# 创建模板目录
mkdir -p ~/templates/flask-app
# 创建虚拟环境
cd ~/templates/flask-app
python -m venv venv
source venv/bin/activate
# 安装Flask和常用依赖
pip install flask flask-cors flask-sqlalchemy gunicorn
# 创建app.py
cat > app.py << 'EOF'
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/api/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello, World!"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
EOF
# 创建requirements.txt
pip freeze > requirements.txt
# 创建Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
EOF
# 创建.dockerignore
cat > .dockerignore << 'EOF'
venv
__pycache__
*.pyc
.git
.gitignore
EOF
# 创建.gitignore
cat > .gitignore << 'EOF'
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# Virtual environments
venv/
env/
ENV/
# Flask stuff
instance/
.webassets-cache
# Environments
.env
.venv
EOF
# 退出虚拟环境
deactivate
第六步:创建开发工作流脚本
为了简化日常开发工作,我们可以创建一些实用的脚本:
# 创建脚本目录
mkdir -p ~/scripts
# 创建新项目脚本
cat > ~/scripts/create-project.sh << 'EOF'
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Usage: $0 <project-type> <project-name>"
echo "Available project types: react, flask"
exit 1
fi
PROJECT_TYPE=$1
PROJECT_NAME=$2
case $PROJECT_TYPE in
react)
echo "Creating React project: $PROJECT_NAME"
cp -r ~/templates/react-app/template $PROJECT_NAME
cd $PROJECT_NAME
npm install
git init
git add .
git commit -m "Initial commit"
;;
flask)
echo "Creating Flask project: $PROJECT_NAME"
cp -r ~/templates/flask-app $PROJECT_NAME
cd $PROJECT_NAME
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
git init
git add .
git commit -m "Initial commit"
deactivate
;;
*)
echo "Unknown project type: $PROJECT_TYPE"
echo "Available project types: react, flask"
exit 1
;;
esac
echo "Project created successfully: $PROJECT_NAME"
EOF
# 创建Docker构建和推送脚本
cat > ~/scripts/docker-build-push.sh << 'EOF'
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Usage: $0 <image-name> <tag> [registry]"
echo "Example: $0 my-app latest 192.168.1.100:5000"
exit 1
fi
IMAGE_NAME=$1
TAG=$2
REGISTRY=${3:-""}
if [ -z "$REGISTRY" ]; then
FULL_IMAGE_NAME="$IMAGE_NAME:$TAG"
else
FULL_IMAGE_NAME="$REGISTRY/$IMAGE_NAME:$TAG"
fi
echo "Building Docker image: $FULL_IMAGE_NAME"
docker build -t $FULL_IMAGE_NAME .
if [ $? -eq 0 ]; then
echo "Docker image built successfully"
if [ ! -z "$REGISTRY" ]; then
echo "Pushing Docker image to registry: $FULL_IMAGE_NAME"
docker push $FULL_IMAGE_NAME
if [ $? -eq 0 ]; then
echo "Docker image pushed successfully"
else
echo "Failed to push Docker image"
exit 1
fi
fi
else
echo "Failed to build Docker image"
exit 1
fi
EOF
# 创建Git推送脚本
cat > ~/scripts/git-push.sh << 'EOF'
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Usage: $0 <remote-url> <branch>"
echo "Example: $0 git@192.168.1.100:222/username/repo.git main"
exit 1
fi
REMOTE_URL=$1
BRANCH=${2:-"main"}
# 检查是否已经初始化Git仓库
if [ ! -d .git ]; then
echo "Initializing Git repository"
git init
git add .
git commit -m "Initial commit"
fi
# 添加远程仓库
git remote add origin $REMOTE_URL
# 推送到远程仓库
git push -u origin $BRANCH
if [ $? -eq 0 ]; then
echo "Code pushed successfully to $REMOTE_URL"
else
echo "Failed to push code"
exit 1
fi
EOF
# 添加执行权限
chmod +x ~/scripts/create-project.sh
chmod +x ~/scripts/docker-build-push.sh
chmod +x ~/scripts/git-push.sh
# 添加脚本到PATH
echo 'export PATH="$HOME/scripts:$PATH"' >> ~/.bashrc
source ~/.bashrc
第七步:测试开发环境
现在,让我们测试一下我们的开发环境是否正常工作:
# 创建一个测试项目
mkdir -p ~/projects
cd ~/projects
create-project.sh react test-app
# 启动开发服务器
cd test-app
npm start
如果一切正常,你应该能够在浏览器中访问http://localhost:3000
看到React应用的欢迎页面 。
接下来,让我们测试与私有仓库的集成:
# 构建并推送Docker镜像到私有仓库
cd ~/projects/test-app
docker-build-push.sh test-app latest 192.168.1.100:5000
# 推送代码到私有代码仓库
git-push.sh git@192.168.1.100:222/username/test-app.git main
第八步:团队开发环境标准化
为了确保团队成员使用相同的开发环境,我们可以创建一个环境配置脚本:
# 创建环境配置脚本
cat > ~/scripts/setup-dev-env.sh << 'EOF'
#!/bin/bash
echo "Setting up development environment..."
# 安装基本工具
sudo yum update -y
sudo yum install -y git curl wget gcc gcc-c++ make
# 安装Docker
if ! command -v docker &> /dev/null; then
echo "Installing Docker..."
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
echo "Docker installed successfully"
else
echo "Docker already installed"
fi
# 安装Docker Compose
if ! command -v docker-compose &> /dev/null; then
echo "Installing Docker Compose..."
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s )-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
echo "Docker Compose installed successfully"
else
echo "Docker Compose already installed"
fi
# 安装VS Code
if ! command -v code &> /dev/null; then
echo "Installing VS Code..."
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo yum install -y code
echo "VS Code installed successfully"
else
echo "VS Code already installed"
fi
# 安装Node.js
if ! command -v node &> /dev/null; then
echo "Installing Node.js..."
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
echo "Node.js installed successfully"
else
echo "Node.js already installed"
fi
# 安装Python
if ! command -v pyenv &> /dev/null; then
echo "Installing Python via pyenv..."
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel bzip2-devel libffi-devel xz-devel
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
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
pyenv install 3.10.0
pyenv global 3.10.0
echo "Python installed successfully"
else
echo "pyenv already installed"
fi
# 配置Git
echo "Configuring Git..."
read -p "Enter your Git username: " git_username
read -p "Enter your Git email: " git_email
git config --global user.name "$git_username"
git config --global user.email "$git_email"
# 配置Docker私有仓库
echo "Configuring Docker private registry..."
read -p "Enter private registry address (e.g., 192.168.1.100:5000): " registry_address
read -p "Enter registry username: " registry_username
read -p "Enter registry password: " -s registry_password
echo ""
docker login $registry_address -u $registry_username -p $registry_password
echo "Development environment setup completed successfully!"
EOF
# 添加执行权限
chmod +x ~/scripts/setup-dev-env.sh
团队成员只需运行这个脚本,就能快速配置好与团队一致的开发环境。
结语:享受你的"代码工作室"
恭喜!你现在拥有了一个完整的开发环境——你的"代码工作室"。在这里,你可以高效地编写代码,使用私有镜像仓库管理Docker镜像,通过私有代码仓库协作开发,一切都在你的掌控之中。
记住,就像真正的工作室需要不断整理和更新一样,定期更新你的开发工具和依赖是个好习惯:
# 更新系统
sudo yum update -y
# 更新Node.js
nvm install --lts --reinstall-packages-from=default
# 更新Python
pyenv update
pyenv install 3.x.y # 替换为最新版本
pyenv global 3.x.y
现在,尽情享受你的开发环境带来的便利和效率吧!有了这个"代码工作室",你可以专注于创造,而不是被工具所困扰。
参考文献
Docker官方文档:CentOS安装指南
Node.js官方文档:nvm安装指南
Python官方文档:pyenv安装指南
React官方文档:Create React App
Git官方文档:配置Git
CentOS官方文档:软件包管理
CentOS官方文档:防火墙配置