国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

github-action+docker實現(xiàn)項目可持續(xù)自動化部署

這篇具有很好參考價值的文章主要介紹了github-action+docker實現(xiàn)項目可持續(xù)自動化部署。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這篇文章以部署vue3項目和nuxt2項目為例結合github-action,docker,nginx等介紹不同的項目自動部署流程

github actions docker,項目部署,github,docker,容器

部署vue3項目

步驟:

1、騰訊云開啟鏡像倉庫

2、github配置secrets

3、項目根目錄創(chuàng)建dockerfile文件(在action工作流中創(chuàng)建鏡像)

4、github配置action工作流(yml文件)

上面步驟執(zhí)行結束后就能實現(xiàn)在本地push項目到github倉庫后自動觸發(fā)action執(zhí)行自動部署到服務器

最主要的步驟就是配置action的yml工作流文件,這個文件包含接收到push指令后執(zhí)行的所有自動部署的流程

接下來我以部署vue3項目為例一步一步詳細介紹

1、騰訊云開啟鏡像倉庫

首先登錄騰訊云,搜索容器鏡像服務,然后創(chuàng)建個人版實例(記住用戶名和密碼)

然后點擊命名空間,點擊創(chuàng)建,新建一個命名空間(命名空間名稱隨便取,命名空間就是存放鏡像倉庫的空間)

github actions docker,項目部署,github,docker,容器

創(chuàng)建了命名空間后點擊鏡像倉庫,然后點擊新建創(chuàng)建鏡像倉庫,每一個鏡像倉庫可以存放多個鏡像(這里我是把每個項目對應的docker鏡像存放到一個單獨的鏡像倉庫中)

github actions docker,項目部署,github,docker,容器

注意創(chuàng)建的鏡像倉庫的地址,后面創(chuàng)建github的secrets會用到

tip:點擊快捷指令可以看到自己倉庫的用戶名

2、github配置secrets

首先打開github對應的項目倉庫,點擊setting->Secrets->Actions

github actions docker,項目部署,github,docker,容器

點擊新建secret,對應一個name和value,新建的每個secret在后面的action的yml文件都會用到

列舉一下我使用的幾個secret:

DOCKER_REPOSITORY: 鏡像倉庫地址,也就是上面創(chuàng)建的鏡像倉庫鏡像地址

DOCKER_USERNAME:登錄docker鏡像倉庫的賬號

DOCKER_PASSWORD: 登錄docker鏡像倉庫的密碼

HOST:部署項目的服務器ip

HOST_PORT:服務器ssh端口號(默認是22)

HOST_USERNAME:服務器登錄用戶名(一般為root)

HOST_PASSWORD: 登錄服務器的密碼

3、項目根目錄創(chuàng)建dockerfile文件

項目根目錄創(chuàng)建的dockerfile會在工作流執(zhí)行時根據(jù)這個文件創(chuàng)建docker鏡像

我的項目用到了nginx,所有還需要在項目根目錄創(chuàng)建nginx的conf文件

(1)創(chuàng)建nginx

# ./nginx/blog-vue3.conf
server{
    listen 80;
    server_name haixtx.cn;
    #靜態(tài)資源
    location / {
        root /usr/share/nginx/html/blog;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    #反向代理獲取動態(tài)資源(解決跨域)
    location /api {
        proxy_pass http://haixtx.club/node;
    }
    # #靜態(tài)資源緩開啟緩存
    # location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    # {
    #     expires 30d;
    # }
    # location ~ .*.(js|css)?$
    # {
    #     expires 12h;
    # }
}
# ./nginx/gzip.conf
# /etc/nginx/conf.d/gzip.conf
?
gzip on; # 默認off,是否開啟gzip
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
?
gzip_static on;
gzip_proxied any;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_min_length 1k;
gzip_http_version 1.1;

(2)創(chuàng)建dockerfile

#nginx鏡像
FROM nginx
LABEL name="blog-vue3"
LABEL version="latest"
# 新建nginx靜態(tài)資源目錄
RUN mkdir -p /usr/share/nginx/html/blog
# 將打包后的文件夾放在docker容器中的nginx靜態(tài)資源文件夾目錄下
COPY  ./dist/ /usr/share/nginx/html/blog
# 將項目根目錄的nginx配置文件放在docker容器中的nginx子配置文件夾目錄下
COPY ./nginx/blog-vue3.conf /etc/nginx/conf.d/
COPY ./nginx/gzip.conf /etc/nginx/conf.d/
# docker容器對外暴露端口號設置為80
EXPOSE 80

(3)創(chuàng)建.dockerignore忽略文件(生成docker鏡像的時候不會打包的文件夾目錄)

.git
node_modules
package-lock.json
Dockerfile
.dockerignore
4、github配置action工作流(yml文件)

還是在github的項目倉庫中,點擊Actions,選擇nodejs后點擊configure創(chuàng)建工作流

github actions docker,項目部署,github,docker,容器

點擊后開始編寫yml文件,這個是整個部署階段最重要的地方

github actions docker,項目部署,github,docker,容器

在內容區(qū)域ctrl+a全選然后刪除,粘貼進以下內容:

name: BlogVue3 Docker Image CI/CD
on:
  push:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest      
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: "16.x"
      - name: Install and Build
        run: |
          npm install
          npm run build
      - name: Build Image
        run: docker build -t ${{ secrets.DOCKER_REPOSITORY }}:latest ./
      - name: Login to registry
        run: docker login ccr.ccs.tencentyun.com --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }}
      - name: Push Image
        run: docker push ${{ secrets.DOCKER_REPOSITORY }}:latest
  pull-docker:
    needs: [build]
    name: Pull Docker
    runs-on: ubuntu-latest
    steps:
      - name: Deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.HOST_USERNAME }}
          password: ${{ secrets.HOST_PASSWORD }}
          port: ${{ secrets.HOST_PORT }}
          script: |
            docker stop $(docker ps --filter ancestor=${{ secrets.DOCKER_REPOSITORY }} -q)
            docker rm -f $(docker ps -a --filter ancestor=${{ secrets.DOCKER_REPOSITORY }}:latest -q)
            docker rmi -f $(docker images ${{ secrets.DOCKER_REPOSITORY }}:latest -q)
            docker login ccr.ccs.tencentyun.com --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }}
            docker pull ${{ secrets.DOCKER_REPOSITORY }}:latest
            docker run -d -p 8000:80 ${{ secrets.DOCKER_REPOSITORY }}:latest

整個yml文件需要嚴格遵循yml文件的格式,下面來一遍上面代碼的注釋

name: BlogVue3 Docker Image CI/CD  # workflow名稱,可以隨意改
on:   # workflow的事件鉤子,告知程序什么時候出發(fā)自動部署
  push:
    branches: [ master ]   # 在master分支有push操作的時候自動部署
jobs:
  # 第一個工作-build
  build:  # 打包并上傳docker鏡像
    runs-on: ubuntu-latest   # 依賴的環(huán)境,注意:actions提供的linux環(huán)境只有ubuntu
    steps:
      # 使用actions/checkout@v2獲取項目中的代碼(name是階段名,可以隨便填,每一個name必須對應一個run/uses)
      - name: Checkout
        uses: actions/checkout@v2
      # 下載node版本環(huán)境
      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: "16.x"
      # 下載項目依賴并打包(如果上傳了package-lock.json文件到github倉庫,注意依賴包的源地址,我這里本地npm源地址是公司內網(wǎng),所以lock文件里面有的依賴包地址也是公司內網(wǎng),這時github執(zhí)行install就會請求失?。?/span>
      - name: Install and Build
        run: |
          npm install
          npm run build
      # 創(chuàng)建docker鏡像
      - name: Build Image
        # ${{ secrets.DOCKER_REPOSITORY }}是讀取之前在Secret創(chuàng)建的名為DOCKER_REPOSITORY的值
        # 從項目根目錄的dockerfile文件創(chuàng)建docker鏡像
        run: docker build -t ${{ secrets.DOCKER_REPOSITORY }}:latest ./
      # 登錄剛剛創(chuàng)建的騰訊云docker鏡像倉庫
      - name: Login to registry
        run: docker login ccr.ccs.tencentyun.com --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }}
      # 將鏡像提交到鏡像倉庫
      - name: Push Image
        run: docker push ${{ secrets.DOCKER_REPOSITORY }}:latest
  # 第二個工作-pull-docker
  pull-docker:
    needs: [build]
    name: Pull Docker
    runs-on: ubuntu-latest
    steps:
      # 登錄騰訊云服務器并將docker鏡像倉庫的鏡像pull下來后啟動新容器
      - name: Deploy
        # 使用appleboy/ssh-action@master完成ssh登錄服務器
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.HOST_USERNAME }}
          password: ${{ secrets.HOST_PASSWORD }}
          port: ${{ secrets.HOST_PORT }}
          # 登錄上服務器后執(zhí)行的代碼步驟(停止舊容器->刪除舊容器->刪除舊鏡像->登錄鏡像倉庫->pull新鏡像->利用新鏡像啟動新容器)
          script: |
            docker stop $(docker ps --filter ancestor=${{ secrets.DOCKER_REPOSITORY }} -q)
            docker rm -f $(docker ps -a --filter ancestor=${{ secrets.DOCKER_REPOSITORY }}:latest -q)
            docker rmi -f $(docker images ${{ secrets.DOCKER_REPOSITORY }}:latest -q)
            docker login ccr.ccs.tencentyun.com --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }}
            docker pull ${{ secrets.DOCKER_REPOSITORY }}:latest
            docker run -d -p 8000:80 ${{ secrets.DOCKER_REPOSITORY }}:latest

總結:

上述配置完成后,本地push代碼到倉庫,倉庫就會觸發(fā)配置的actions工作流執(zhí)行yml中提取配置好的步驟:

第一步先在github中將項目下載依賴后打包,然后根據(jù)打包內容及dockerfile創(chuàng)建鏡像并上傳到鏡像倉庫

第二步登錄服務器后刪除舊鏡像舊容器,登錄鏡像倉庫拷貝新鏡像,再通過新鏡像啟動新容器

至此就完成了項目的自動部署

部署nuxt2項目

部署nuxt2項目主體流程和上面部署vue3一樣,但是也存在一些不同的地方,主要就是docker容器的創(chuàng)建及啟動

部署vue3項目的docker容器只存在nginx鏡像,但是部署nuxt2項目的docker容器要存在node和nginx,所以nuxt2項目的docker鏡像是基于node鏡像創(chuàng)建,但是在創(chuàng)建過程中需要安裝nginx

node環(huán)境是因為nuxt會啟動后端服務來監(jiān)聽請求并整合請求對應資源返回html給瀏覽器,需要npm命令,nginx是因為在docker中啟動nuxt項目后會啟動后端服務,后端服務在127.0.0.1本地ip下,需要nginx代理轉發(fā)請求到啟動的127.0.0.1服務下

注: 部署nuxt項目和部署vue項目不同,vue項目只需build打包后把dist靜態(tài)資源文件放在服務器中通過nginx代理就行,而nuxt不僅要build打包,還需要啟動后端服務來監(jiān)聽瀏覽器的請求并從打包的文件中整合資源為html并返回給瀏覽器,所以部署nuxt項目既需要build打包項目,又需要執(zhí)行start命令啟動nuxt項目(啟動后端服務)

直接放nuxt2項目的dockerfile

# node服務器
FROM node:16.14.2
LABEL name="blog-nuxt2"
LABEL version="latest"
RUN mkdir -p /usr/src
COPY . /usr/src
# 安裝nginx(docker創(chuàng)建的默認都是debian系統(tǒng)的容器,安裝命令為apt而不是yum)
RUN apt-get update
# 加上-y遇到確認會繼續(xù)執(zhí)行
RUN apt-get install nginx -y
COPY ./nginx/blog-nuxt2.conf /etc/nginx/conf.d/
COPY ./nginx/gzip.conf /etc/nginx/conf.d/
WORKDIR /usr/src
RUN npm install
RUN npm run build
EXPOSE 82
# 執(zhí)行腳本命令
CMD sh ./nginx.sh

上面的dockerfile需要用到的其他文件及注意點:

1、dockerfile需要用到nginx對啟動的nuxt項目進行端口的反向代理,nuxt2項目啟動后也是類似于node啟動的后端項目,但是需要注意:

node啟動的項目(node app.js)在服務器可以直接通過服務器ip+端口訪問,但是nuxt啟動的項目(npm start)不能直接訪問,需要nginx代理一下才能訪問

# ./nginx/blog-nuxt2.conf
server{
    # 監(jiān)聽docker容器內部的82端口
    listen 82;
    server_name haixtx.cn;
    # 將82端口反向代理到啟動的nuxt端口4000
    location / {
        proxy_pass http://127.0.0.1:4000;
    }
}

2、首先簡要說明一下RUN和CMD的區(qū)別

相同點,都是執(zhí)行命令,不同點在于,RUN 是在打包鏡像的時候執(zhí)行,CMD是在運行容器的執(zhí)行

dockerfile的CMD可以執(zhí)行多次,但是只會以最后一次為準,也就是說只能存在一個CMD,但是nuxt的docker需要在容器被創(chuàng)建時執(zhí)行npm start啟動nuxt項目,還需要重載docker容器內部的nginx(因為更新了nginx的配置項),所以需要CMD執(zhí)行兩個命令,我在這里使用的方法就是在項目根目錄新建一個sh腳本,再CMD命令通過sh執(zhí)行這個腳本達到執(zhí)行多條命令的目的

# nginx.sh
nginx -c /etc/nginx/nginx.conf
nginx -s reload
npm start

CMD執(zhí)行這個腳本就會在創(chuàng)建docker容器時在容器內部重載nginx并啟動nuxt2項目

3、注意點:在install安裝命令后加上-y會在安裝過程中遇到是否繼續(xù)執(zhí)行(y/n)時選擇繼續(xù)執(zhí)行比如上面安裝nginx:apt-get install nginx -y

補充:放幾個我經常用但是又經常忘的linux-centos系統(tǒng)命令

1、netstat -ntulp | grep 80 查看端口占用情況

2、安裝curl查看網(wǎng)址返回內容yum -y install curl

curl http://localhost:3000/

3、docker exec -it 容器名 /bin/bash 進入docker容器文章來源地址http://www.zghlxwxcb.cn/news/detail-858689.html

到了這里,關于github-action+docker實現(xiàn)項目可持續(xù)自動化部署的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【日常記錄】自動化部署與持續(xù)交付:GitHub Actions CICD

    【日常記錄】自動化部署與持續(xù)交付:GitHub Actions CICD

    當我們做項目的時候,如果做完了,要發(fā)布,就需要打包,扔到服務器上,如果改了一點東西,還得打包,扔到服務器上,重復的執(zhí)行 打包= 扔到服務器上 詳細記錄如何使用github actions自動化部署項目 自動化部署與持續(xù)交付:GitHub Actions CICD 自動化部署一般以下方式 Jenkins

    2024年02月02日
    瀏覽(36)
  • 【Github-Action】自動為PR添加修改文件類型的label

    【Github-Action】自動為PR添加修改文件類型的label

    如果你對github-action感興趣,還可以看這篇文章, 這篇文章教會你如何開發(fā)Github Action,并且讓你明白它是什么,怎么用,如何做到的。如何開發(fā)一個action pr-label自動添加工具,為您添加核心團隊提交的標志和修改的文件類型… 可以從的pr列表中一眼辨別哪些是核心團隊開發(fā)的

    2024年01月25日
    瀏覽(23)
  • jenkins+docker實現(xiàn)可持續(xù)自動化部署springboot項目

    目錄 一、前言 二、微服務帶來的挑戰(zhàn) 2.1 微服務有哪些問題

    2024年04月15日
    瀏覽(42)
  • Django實現(xiàn)接口自動化平臺(十)自定義action names【持續(xù)更新中】

    Django實現(xiàn)接口自動化平臺(十)自定義action names【持續(xù)更新中】

    相關文章: Django實現(xiàn)接口自動化平臺(九)環(huán)境envs序列化器及視圖【持續(xù)更新中】_做測試的喵醬的博客-CSDN博客 深入理解DRF中的Mixin類_做測試的喵醬的博客-CSDN博客? python中Mixin類的使用_做測試的喵醬的博客-CSDN博客? 本章是項目的一個分解,查看本章內容時,要結合整體項

    2024年02月16日
    瀏覽(29)
  • Github Actions實現(xiàn)Spring Boot自動化部署(第二彈)

    Github Actions實現(xiàn)Spring Boot自動化部署(第二彈)

    ? 今天就來講述一下如何使用GitHub結合Actions實現(xiàn)Spring Boot程序從提交代碼到打包、容器化、部署全過程自動化。首先咱們得現(xiàn)有一個能夠在本地運行的Spring Boot程序,并且在Github上擁有一個倉庫。 1.1 提交代碼到Github 1.2 設置服務器密鑰、GitHub私鑰、DockerHub賬號 secret value rem

    2024年02月08日
    瀏覽(28)
  • Docker五部曲之五:通過Docker和GitHub Action搭建個人CICD項目

    Docker五部曲之五:通過Docker和GitHub Action搭建個人CICD項目

    該項目是一個入門CICD-Demo,它由以下幾部分組成: Dockerfile:用于構建自定義鏡像 compose.yml:用于搭建應用程序依賴環(huán)境并部署 deploy.yml:通過GitHub Actions連接騰訊云服務器并構建環(huán)境 通過這個Demo,你可以: 從開發(fā)到部署所需的所有操作全部都在本地定義完成 不需要在服務器

    2024年01月19日
    瀏覽(43)
  • 白嫖GitHub Action實現(xiàn)開源項目CICD

    在今天這個快速變化的時代,開發(fā)者們需要與時俱進,不斷提升自己的工作效率。在這篇文章里,將一起探討如何使用CI/CD和Github Action讓你的項目更加高效,快速響應市場變化。 CI(持續(xù)集成,Continuous Integration)是一種軟件開發(fā)實踐,它要求開發(fā)者頻繁地將代碼集成到共享的

    2023年04月26日
    瀏覽(27)
  • 04.使用 github actions+docker 自動部署前后端分離項目 zhontai (.net core+vue)

    04.使用 github actions+docker 自動部署前后端分離項目 zhontai (.net core+vue)

    Github Actions是什么?是 GitHub 提供的一種持續(xù)集成/持續(xù)部署(CI/CD)工作流程自動化服務,助力項目的自動化構建、測試和部署。 依托于平臺,本文將分享使用 GitHub Actions 完成對一個.Net Core+Vue 的前后端分離項目 zhontai 的構建,并使用 docker 部署到云服務器(阿里云) 經過一番嘗

    2024年02月11日
    瀏覽(24)
  • github action初體驗實現(xiàn)maven項目自動ci test

    github action初體驗實現(xiàn)maven項目自動ci test

    這里是 weihubeats ,覺得文章不錯可以關注公眾號 小奏技術 ,文章首發(fā)。拒絕營銷號,拒絕標題黨 GitHub Actions是GitHub提供的一種持續(xù)集成/持續(xù)交付(CI/CD)工具,它可以幫助開發(fā)者自動化軟件開發(fā)流程中的各種任務,如構建、測試、部署等。通過在代碼倉庫中配置和定義工作流

    2024年01月23日
    瀏覽(23)
  • GitHub Actions自動化部署+定時百度鏈接推送

    GitHub Actions自動化部署+定時百度鏈接推送

    # 前言 最近用VuePress搭建了一個靜態(tài)網(wǎng)站,由于是純靜態(tài)的東西,每次修改完文章都要重新打包上傳很是麻煩。雖然vuepress-theme-vdoing主題作者提供了GitHub Actions自動化部署的教程文章,但是過于簡陋且是19年發(fā)布的。。 # 1. 創(chuàng)建一個GitHub倉庫(私有倉庫也可以) # 2. 設置服務器地

    2024年02月12日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包