Github Actions和Docker实现自动部署

简介

在现代软件开发中,CI/CD(持续集成/持续部署)已经成为标准实践。通过Github Actions和Docker的结合,我们可以实现代码提交后的自动构建、测试和部署,大大提高开发效率。

Github Actions简介

Github Actions是Github提供的自动化工作流工具,可以自动执行软件开发中的各种任务。每当有代码推送或PR时,都可以触发预定义的工作流程。

实战配置

1. 创建工作流配置文件

在项目根目录创建.github/workflows/deploy.yml文件:

yaml:.github/workflows/deploy.yml 复制代码
name: Deploy to Production

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: your-username/your-app:latest

2. 创建Dockerfile

在项目根目录创建Dockerfile

dockerfile:Dockerfile 复制代码
FROM node:16-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000
CMD ["npm", "start"]

3. 配置密钥

在Github仓库的Settings -> Secrets中添加以下密钥:

  • DOCKER_USERNAME: Docker Hub用户名
  • DOCKER_PASSWORD: Docker Hub密码

工作流程说明

  1. 当代码推送到main分支时,工作流自动触发
  2. 检出代码到运行环境
  3. 登录到Docker Hub
  4. 构建Docker镜像并推送到Docker Hub
  5. (可选)部署到服务器

服务器自动部署

可以在服务器上创建一个简单的部署脚本:

bash:deploy.sh 复制代码
#!/bin/bash

# 拉取最新镜像
docker pull your-username/your-app:latest

# 停止并删除旧容器
docker stop your-app || true
docker rm your-app || true

# 启动新容器
docker run -d \
  --name your-app \
  -p 3000:3000 \
  your-username/your-app:latest

优势

  1. 自动化: 减少人工操作,提高效率
  2. 一致性: 确保开发、测试和生产环境的一致性
  3. 可追溯: 每次部署都有完整的日志记录
  4. 快速回滚: 出现问题时可以快速回退到之前的版本

注意事项

  1. 确保.gitignore正确配置,避免敏感信息泄露
  2. 定期清理旧的Docker镜像,避免占用过多存储空间
  3. 建议在workflow中添加测试步骤
  4. 考虑使用Docker多阶段构建优化镜像大小

总结

通过Github Actions和Docker的结合,我们可以轻松实现代码的自动化构建和部署。这不仅提高了开发效率,也保证了部署的一致性和可靠性。

相关推荐
TunerT_TQ5 分钟前
Valhalla 静态工程审阅 #012|Hertz 源码证据驱动评测【大厂开源基础设施特辑】
测试工具·微服务·开源·github·字节跳动·cloudwego·http框架
一次旅行10 分钟前
fzf+ripgrep+fd终端三合一实战:一套检索工具链,大幅提升大型项目开发效率
人工智能·python·github
Dear~yxy40 分钟前
HAproxy企业级实战
github
AI大佬的小弟1 小时前
私有化 Dify 应用开发(3):Docker 核心原理与零基础实战
运维·docker·容器技术·ai 应用开发·私有化 ai 部署·docker 教程·dify 运维
BullSmall10 小时前
Anolis OS 8.10 Docker 部署 PostgreSQL 15 完整实操
docker·postgresql·容器
栈溢出的浪漫12 小时前
国内MCP工具推荐:AIbase宣布推出MCP资源网站
github·开发者·mcp·aibase·资源网站
一可米13 小时前
gitHub.com Actions自动化发布
运维·自动化·github
java_logo14 小时前
Docker 部署 CUPS Web:浏览器即可管理打印机与打印任务
docker·容器·打印机·轩辕镜像·cups web·cups web 镜像部署·cups web 部署教程
小弥儿15 小时前
GitHub今日热榜 | 2026-08-01:硬件安全工具与AI教育并行
人工智能·学习·开源·github