当前位置: 首页 > news >正文

DevOps 与 部署入门:加速软件交付与运维的实践指南

DevOps 与 部署入门:加速软件交付与运维的实践指南

今天我们来深入探讨 DevOps 及其部署实践。DevOps 是一种文化和方法论,通过自动化、协作和持续改进,连接开发(Development)与运维(Operations),以实现快速、可靠的软件交付。本文将带你从零开始实现一个 DevOps 流水线,部署一个简单的 Web 应用,适合初学者快速上手,同时为有经验的开发者提供进阶建议和优化思路。

本文基于 Docker、Jenkins 和 GitHub Actions,部署一个 Python Flask 应用到 AWS EC2,结合 CI/CD 流水线和监控。让我们开始吧!

前置准备

在开始之前,确保开发环境已就绪:

  • 操作系统:Linux(Ubuntu 22.04 推荐)、Windows 或 macOS。
  • 工具
    • Git:版本控制工具。
    • Docker:容器化平台。
    • Jenkins:CI/CD 服务器。
    • AWS CLI:用于 EC2 部署。
    • GitHub 账户:用于托管代码和 Actions。
  • 云服务:AWS EC2 实例(或阿里云、Azure 等)。
  • 项目结构:一个简单的 Flask 应用,目录如下:
    flask-devops-demo
    ├── app.py
    ├── requirements.txt
    ├── Dockerfile
    ├── .github/workflows/ci.yml
    ├── Jenkinsfile
    └── .gitignore
    

安装环境

  • 安装 Git:sudo apt install git(Ubuntu)或 brew install git(macOS)。
  • 安装 Docker:sudo apt install docker.io 或从 docker.com 下载。
  • 安装 AWS CLI:pip install awscli.
  • 配置 AWS 凭证:aws configure.
  • 验证:git --version, docker --version, aws --version.

步骤 1: 创建 Flask 应用

flask-devops-demo/app.py 中创建简单的 Flask 应用:

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return 'Hello, DevOps!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

创建 flask-devops-demo/requirements.txt

Flask==2.3.3
gunicorn==23.0.0

创建 .gitignore

venv/
*.pyc
__pycache__/

步骤 2: 容器化应用

创建 flask-devops-demo/Dockerfile

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"]

构建并测试 Docker 镜像:

docker build -t flask-devops-demo .
docker run -p 5000:5000 flask-devops-demo

访问 http://localhost:5000,验证输出“Hello, DevOps!”。

步骤 3: 配置 GitHub Actions CI/CD

将代码推送到 GitHub 仓库:

git init
git add .
git commit -m "Initial commit"
git remote add origin git@github.com:your-username/flask-devops-demo.git
git push -u origin main

创建 GitHub Actions 工作流 flask-devops-demo/.github/workflows/ci.yml

name: CI/CD Pipeline
on:push:branches: [ main ]
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Set up Pythonuses: actions/setup-python@v5with:python-version: '3.10'- name: Install dependenciesrun: pip install -r requirements.txt- name: Run testsrun: python -m unittest discover- name: Build Docker imagerun: docker build -t flask-devops-demo .- name: Login to Docker Hubuses: docker/login-action@v3with:username: ${{ secrets.DOCKER_USERNAME }}password: ${{ secrets.DOCKER_PASSWORD }}- name: Push Docker imagerun: |docker tag flask-devops-demo ${DOCKER_USERNAME}/flask-devops-demo:latestdocker push ${DOCKER_USERNAME}/flask-devops-demo:latest

配置 Docker Hub 密钥:

  • 在 GitHub 仓库的 Settings > Secrets and variables > Actions 中添加 DOCKER_USERNAMEDOCKER_PASSWORD

说明

  • 工作流在代码推送时运行,构建、测试并推送 Docker 镜像到 Docker Hub。

步骤 4: 配置 Jenkins CI/CD(替代方案)

在本地或 EC2 上安装 Jenkins:

sudo apt update
sudo apt install openjdk-17-jre -y
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins -y
sudo systemctl start jenkins

访问 http://server-ip:8080,完成 Jenkins 初始化。

创建 flask-devops-demo/Jenkinsfile

pipeline {agent anystages {stage('Checkout') {steps {git 'https://github.com/your-username/flask-devops-demo.git'}}stage('Build') {steps {sh 'pip install -r requirements.txt'}}stage('Test') {steps {sh 'python -m unittest discover'}}stage('Build Docker Image') {steps {sh 'docker build -t flask-devops-demo .'}}stage('Push Docker Image') {steps {withCredentials([usernamePassword(credentialsId: 'docker-hub', usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {sh 'echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin'sh 'docker tag flask-devops-demo $DOCKER_USERNAME/flask-devops-demo:latest'sh 'docker push $DOCKER_USERNAME/flask-devops-demo:latest'}}}}
}

在 Jenkins 中配置:

  • 新建 Pipeline 项目,指向 GitHub 仓库和 Jenkinsfile
  • 添加 Docker Hub 凭证(ID: docker-hub)。

步骤 5: 部署到 AWS EC2

  1. 启动 EC2 实例

    • 在 AWS 控制台创建 Ubuntu 22.04 实例,开放 80 和 22 端口。
    • SSH 登录:ssh -i key.pem ubuntu@ec2-ip.
  2. 安装 Docker

    sudo apt update
    sudo apt install docker.io -y
    sudo usermod -aG docker ubuntu
    
  3. 部署应用

    docker pull your-docker-username/flask-devops-demo:latest
    docker run -d -p 80:5000 your-docker-username/flask-devops-demo:latest
    
  4. 验证

    • 访问 http://ec2-ip,确认显示“Hello, DevOps!”。

步骤 6: 运行和测试

  1. 测试 CI/CD

    • 提交代码更改到 GitHub,验证 Actions 自动运行。
    • 检查 Jenkins 构建日志,确认测试和镜像推送成功。
  2. 测试部署

    • 访问 EC2 公网 IP,验证应用运行。
    • 检查 Docker 容器状态:docker ps.
  3. 调试技巧

    • 查看 Actions 日志:GitHub 仓库 Actions 页面。
    • 检查 Jenkins 失败原因:Console Output。
    • 服务器日志:docker logs container-id.

进阶与最佳实践

  • 监控与日志

    • 集成 Prometheus 和 Grafana:
      docker run -d -p 9090:9090 prom/prometheus
      docker run -d -p 3000:3000 grafana/grafana
      
    • 配置 Flask 应用日志:
      import logging
      logging.basicConfig(level=logging.INFO)
      app.logger.info('Application started')
      
  • 自动化部署

    • 使用 Terraform 自动化 EC2 配置:
      provider "aws" {region = "us-east-1"
      }
      resource "aws_instance" "app" {ami           = "ami-0c55b159cbfafe1f0"instance_type = "t2.micro"
      }
      
  • 安全性

    • 配置 AWS 安全组,仅允许 80、22 和 443 端口。
    • 使用 HTTPS:通过 Let’s Encrypt 配置 Nginx(参考上一教程)。
  • 蓝绿部署

    • 使用 Docker Compose 实现零停机部署:
      version: '3'
      services:app:image: your-docker-username/flask-devops-demo:latestports:- "80:5000"
      
  • 资源推荐

    • 书籍《The DevOps Handbook》、《Site Reliability Engineering》。
    • Docker 官网(docker.com)、AWS 文档(aws.amazon.com)。
    • 多实践 Kubernetes 和 ArgoCD。

总结

通过这个 DevOps 示例,你学会了使用 GitHub Actions 和 Jenkins 构建 CI/CD 流水线,容器化 Flask 应用,并部署到 AWS EC2。DevOps 实践通过自动化和协作加速软件交付,适用于现代开发流程。

http://www.dtcms.com/a/503586.html

相关文章:

  • 优化网站seo中山做百度网站的公司名称
  • 上海袜网站建设电商营业执照
  • 找到K个最接近的元素
  • Java中JDK、JRE、JVM概念
  • MySQL 表操作核心指南:CRUD 与进阶技巧
  • 网站开发个人总结网页设计与网站建设在线考试1
  • 算法笔记 05
  • 游戏科技网站杭州建设工程交易中心网站
  • 网站做推广要备案吗四川seo快速排名
  • 有关房地产开发建设的网站哪些网站可以接点私活做的
  • 有关应广单片机数据类型与ROM空间优化的一点看法
  • 【2026计算机毕业设计】基于Jsp的医疗设备及业务综合巡检系统
  • 个人业务技能提升如何助力:从“做事”到“成事”的跃迁之路
  • 我们需要的中文编程是什么样子的?
  • 那些网站可以接私活做做兼职有哪些网站
  • 绚星智慧科技斩获智享会三项大奖,领跑AI时代学习与发展赛道
  • 零基础入门Java·基础篇 学习大纲
  • XSS 攻击详解:原理、类型与防范策略
  • 青岛网站建设 百度天津基础设施建设
  • 内蒙古住房和建设厅网站wordpress会员修改
  • 网站排名优化教程wordpress themes.php
  • 机器学习18:扩散模型(Diffusion Model)与Stable Diffusion
  • 17-机器学习与大模型开发数学教程-第1章 1-9 凸函数与凸优化基础
  • 空间建设网站企业建站程序推荐
  • 网站建设 点指成名网站开发调查问卷
  • 【经典书籍】C++ Primer 第10到12章精华讲解
  • 前端数据存储localStorage、sessionStorage 与 Cookie
  • 电影网站制作有哪些做微信小游戏的网站
  • Git从入门到精通教程
  • 课程视频网站建设的必要性色母图片