vue使用docker+node+nginx+linux自动化部署

news2024/11/25 20:55:36

假定你已经有一个vue项目了,并且已经用github进行管理了,

假定你还有一台免费的linux服务器,想用自动化部署的方式解放双手,

假定你已经了解dockerhub使用,想玩转docker容器:docker构建vue项目镜像并发布到dockerhub中使用_1024小神的博客-CSDN博客

假定你已经熟悉了github的action怎么用,想用于自动化部署:

使用github的pages配合action自动部署vue项目_1024小神的博客-CSDN博客

那么,你来对地方了,哈哈哈哈哈哈,1024小神欢迎您

首先看一下你本地的vue项目,创建一个Dockerfile文件:

 内容如下:

# 用于build编译
FROM node:14.18
COPY ./ /app
WORKDIR /app
RUN npm install
RUN npm run build

# 用于发布到nginx
FROM nginx:stable-alpine
RUN rm /etc/nginx/conf.d/default.conf
ADD default.conf /etc/nginx/conf.d/
COPY --from=0 /app/dist/ /usr/share/nginx/html/

然后再创建一个default.conf文件,用于nginx服务用的:

server {
    listen       80;
    server_name  localhost; # 修改为docker服务宿主机的ip

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

再创建一个.github\workflows\deplayServer.yml文件,用于github的action的:

# # 1发布项目到自己的服务器上的配置
# name: DeployServer
# # on 表示触发actions的条件
# on:
#     push:
#         branches: [main] #main分支在push的时候会触发
#     pull_request:
#         branches: [main] #main分支在PR的时候会触发

# jobs:
#     build:
#         runs-on: ubuntu-latest #nodejs执行的操作系统

#         steps:
#             - uses: actions/checkout@v3 #拉取你的最新代码
#             - name: Use Node.js
#               uses: actions/setup-node@v3
#               with:
#                   node-version: "14.x"
#             - run: npm install
#             - run: npm run build
#             - name: TranslateFile
#               # uses: wangyucode/sftp-upload-action@24f8bb83383dc39bed201ee5da01475e6c38c568
#               uses: wangyucode/sftp-upload-action@v1.1
#               with:
#                   host: ${{ secrets.SERVER_IP }} #你的nginx服务器公网ip
#                   port: ${{ secrets.SERVER_PORT }} #你的nginx服务器ssh端口
#                   username: ${{ secrets.USERNAME }} #你的nginx服务器用户名
#                   password: ${{ secrets.PASSWORD }} #你的nginx服务器密码
#                   localDir: "dist" #你vue项目build好的文件的路径,每次服务器上会自动删除对应的文件夹后重新覆盖
#                   remoteDir: ${{ secrets.SERVER_DESTINATION }} #你要把你build好的文件夹放到nginx服务器上的什么位置

# # 2以下是构建vue项目发布到githubpages上的配置
# name: DeployGitpages

# on:
#     push:
#         branches:
#             - main # 这里只配置了main分支,所以只有推送main分支才会触发以下任务
# jobs:
#     build-and-deploy:
#         runs-on: ubuntu-latest
#         steps:
#             - uses: actions/checkout@v3
#             - name: Use Node.js
#               uses: actions/setup-node@v3
#               with:
#                   node-version: "14.x"
#             - run: node -v
#             - run: npm install
#             - run: npm run build
#             - name: Deploy # 部署
#               uses: JamesIves/github-pages-deploy-action@v4.3.3
#               with:
#                   branch: gh-pages # 部署后提交到那个分支
#                   folder: dist # 这里填打包好的目录名称

# 3以下是用docker部署项目到自己的服务器的配置
name: deplayDocker
# 触发条件为 push
on: [push] # 执行时机
# 任务
jobs:
    build-and-deploy:
        # 运行的环境
        runs-on: ubuntu-latest
        # 步骤
        steps:
            - uses: actions/checkout@v3 # git pull
            - name: Use Node.js
              uses: actions/setup-node@v3
              with:
                  node-version: 14
            - name: Docker Hub
              run: |
                  docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
                  docker build -t cvreport-image  .
                  docker tag cvreport-image ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest
                  docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest

            - name: LoginServer
              uses: appleboy/ssh-action@master
              with:
                  host: ${{ secrets.SERVER_IP }}
                  username: ${{ secrets.USERNAME }}
                  password: ${{ secrets.PASSWORD }}
                  script: |
                      docker stop cvpod
                      docker rm cvpod
                      docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest
                      docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest
                      docker run -d -p 9090:80 --name cvpod ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest

然后到项目的settings添加secrets,用于工作流里面的账号信息:

 添加如下内容:

DOCKER_USERNAME:Docker Hub 的账号,没有的话要注册哦

DOCKER_PASSWORD:Docker Hub 的密码

DOCKER_REPOSITORY:Docker Hub 存储镜像的仓库名称

USERNAME:服务器用户名

PASSWORD:服务器密码

SERVER_IP:服务器地址,默认使用了22端口

填写好之后,就可以直接push一下了,然后到action里面看一下:绿色就表示成功了

 然后到服务器上看一下:可以看到容器和服务都起来了

然后访问一下服务器地址:9090端口,就可以看到我们的项目了:如果访问不了,就要看一下你服务器的9090端口是否放开了

当然有时候,部署不是一次就成功的:我也是出错了好几次,然后针对每次错误,看一下日志,根据具体的错误找到解决办法:

 比如这次

我就怀疑是没有打包成功,没有build成功,那为啥会build不成功呢,开始一步一步的注释Dockerfile里面的步骤,找到原因,然后修改,然后重新提交 。不要气馁,详细你会弄好的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT 5 学习笔记-学习绘图相关+画图形图片等+绘图设备+基础学习(2)】

【QT 5 学习笔记-学习绘图相关画图形图片等绘图设备基础学习(2)】1、说明2、实验环境3、参照连接4、自己的学习与理解5、学习与实践代码(1)移动图片测试实验(1)继续之前的工程(2)引入…

不知道变年轻特效软件有哪些?这些有趣的app建议收藏

现在刷短视频几乎已经成为我们消遣时间的主要项目之一,因为里面涵盖了多种方面的内容,例如情景短剧、知识点讲解、酷炫的卡点视频、有趣的照片特效等等,能满足不同人群的喜好。 而最近变年轻的特效再次流行起来,你们是不是跟我一样…

K_A09_008 基于 STM32等单片机驱动ES08A SG90舵机按键控制正反转

目录 一、资源说明 二、基本参数 参数 型号:SG90 型号:ES08A 引脚说明 三、驱动说明 SG90舵机 ES08A 舵机 对应程序: 四、部分代码说明 接线说明 STC89C52RCES08A SG90舵机 STM32F103C8T6ES08A SG90舵机 五、基础知识学习与相关资料下载 六、视频…

AI遮天传 DL-深度学习在自然语言中的应用

本文简要介绍一些深度学习在自然语言应用的基本任务,词表示,文本翻译和机器翻译。 一、典型任务 词性标注和句法分析问答和对话系统文本/文档分类情感分析和观点挖掘机器翻译文本生成......1.1 词性标注和句法分析 词性(POS)标注即对句子里的每个词给出…

WPF入门第二篇 MVVM与Binding

MVVM与Binding MVVM,即Model-View-ViewModel的首字母缩写,在这种开发模式下常用binding来对View和ViewModel进行绑定。 添加三个文件夹,分别命名为Models、Views、ViewModels。 在Model文件夹中,添加Student类,并将…

Java学到什么程度可以找工作?这10点赶紧自查!

最近收到了不少私信,询问Java学到什么程度可以找工作。 我也去问了几个同组大佬的想法,总结了10点,大家可以对照自查一下,看看你都做到了吗? 基本技能自查 1、Java SE基础 推荐学习Java8,这依旧是个有代表…

【2023最新】腾讯云注册域名及服务器使用宝塔绑定域名教程

1 在腾讯云注册域名 在官网:https://buy.cloud.tencent.com/domain,注册想要的域名,需要认证信息模板 注册好以后,在右上角输入框,输入域名,查找并进入到域名控制台 在域名控制台,添加记录&…

基础算法系列之排序算法(一)[快速排序,归并排序,二分查找]

文章目录前言快速排序关键点实现选角排序重复实现稳定性分析记忆模板归并排序关键点实现二分查找总结前言 先来一波预热,本次寒假将要更新的博文系列为:基础算法部分,最新前言论文研读(不包含论文复现-耗时太长)&…

day21【代码随想录】二叉树的层序遍历、二叉树的层序遍历|| 、二叉树的层平均值 、二叉树的锯齿形层序遍历 、二叉树的右视图 、N叉树的层序遍历

文章目录前言一、二叉树的层序遍历(力扣102)二、二叉树的层序遍历||(力扣107)三、二叉树的层平均值(力扣637)四、二叉树的锯齿形层序遍历(力扣103)五、二叉树的右视图(力…

吃透Chisel语言.39.Chisel实战之单周期RISC-V处理器实现(一)——需求分析和初步设计

Chisel实战之单周期RISC-V处理器实现(一)——需求分析和初步设计 需求分析 首先明确我们要做的是什么,这个在标题里面已经说明了,我们要做的是一个单周期RISC-V处理器。 但光是个短语不足以支撑我们开展项目,我们需…

大数据学习:shell基础(3)

文章目录history命令参数说明任务一:查看历史操作记录任务二:查看最近10条历史命令任务三:查看最开始10条历史命令任务四:曾多少次使用vim编辑文本文件?任务五:执行历史第5条命令任务六:执行上一…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Recurrent Neural NetWork(RNN)

文章目录一、Slot Filling二、Recurrent Neural NetWork(RNN)三、Bidirectional RNN(双向RNN)四、Long Short Term Memory(LSTM)五、Learning Target六、RNN 很难 Train七、Helpful Techniques7.1 LSTM7.2 …

CSDN竞赛14期·12月11日考试

CSDN竞赛14期12月11日考试 1、题目名称:字符串全排列 // 请关闭中文输入法,用英文的字母和标点符号。 // 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮, //…

半入耳式蓝牙耳机哪款音质好?音质好的半入耳式蓝牙耳机推荐

对于喜欢听歌的朋友来讲,你只佛会关注到蓝牙耳机的佩戴舒适度,音质清晰这种情况,入耳式的带有耳塞,往往更加佩戴有更好的密闭性,半入耳的不完全进入耳道,佩戴更加舒适,下面整理了几款音质不错的…

[附源码]Python计算机毕业设计非处方药的查询与推荐系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Prometheus+Grafana监控一网打尽

PrometheusGrafana监控一、Prometheus介绍二、监控组件node-exportermysqld-exportercadvisorprometheus三、Grafana 展示平台docker启动配置Data sources导入Dashboard模板Linux主机监控Mysql监控Nginx监控Redis监控PostgreSQL监控Kafka监控ElasticSearch监控一、Prometheus介…

这四类项目经理一定带不好项目

项目经理就一定可以带好项目嘛?,当然不一定 失败的项目不少,除去一些本身就很坑的项目,大多项目失败,都和项目经理的个性有关。 也总结了2组极端特质: 第一,烂好人VS劳模型 第二,马…

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-059(CVE-2019-0230)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

JavaEE-多线程初阶3

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录volatile关键字wait 和 notify多线程案例单例模式饿汉模式懒汉模式volatile关键字 volatile : 易变的,易失的 vo…

关于实体类中VO、DTO、Entity的区别

关于实体类中VO、DTO、Entity的区别 1、entity 里的每一个字段,与数据库相对应, 2、vo 里的每一个字段,是和你前台 html 页面相对应, 3、dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。(DTO中拥…