vue项目和nodejs项目部署实战 nginx+docker持续集成

一,创建后端

  1. 建立后端文件夹 vue-back 并初始化
 npm init -y  
  1. 创建server.js
let http = require("http")
const users = [
    { id: 1, name: 'bian' },
    { id: 2, name: '张三' },
    { id: 3, name: '李四' },
]
let server = http.createServer(function(req, res) {
    console.log("req", req.url)
     // 为了防止中文乱码问题,需要设置响应头,
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    //解决跨域
    res.setHeader('Access-Control-Allow-Origin', '*')

    if (req.url === '/api/users') {
        res.end(JSON.stringify(users))
    } else {
        res.end("not found")
    }
})

server.listen(3001, () => {
    console.log("3001端口服务已启动", "http://localhost:3001")
})
  1. 修改packges.json中的启动项
{
    "name": "vue-back",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "start": "node ./server.js"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
}
  1. 创建.gitignore git忽略文件.
lib
node_modules
.idea
package-lock.json
Dockerfile
.dockerignore

二,创建前端.

// 初始化一个vue项目
vue create vue-front
//安装axios请求接口用
npm install axios 

三,创建webhook

  1. 先创建文件夹vue-webhook,进入文件夹内初始化
    npm init -y

  2. 安装nodemailer
    npm i nodemailer -S

四,服务器

  1. 去阿里云选个ecs服务器
  2. 购买后ssh 连接ssh 用户名@IP地址
  3. 连接后开始在服务器中安装环境. npm update //升级命令
  4. 创建文件夹projects并安装git
  • mkdir /usr/projects
  • yum install git -y
  1. 生成git公钥
    ssh-keygen -t rsa -b 4096 -C 'xxxxxxxx@qq.com' //邮箱地址

  2. 查看公钥
    cat /root/.ssh/id_rsa.pub

  3. 进入到/usr/projects文件夹拉取前后端代码

  • git clone git@github.com:github-bian/vue-front.git
  • git clone git@github.com:github-bian/vue-back.git
  1. 服务器上安装nvm
    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

  2. 执行shell脚本
    . /root/.bashrc

  3. 安装最新稳定版本的 npm和node
    nvm install stable

  4. 安装nrm (切换npm的源)
    npm install nrm -g

五,安装Docker

  1. 安装yum工具包
    yum install -y yum-utils device-mapper-persistent-data lvm2

  2. 添加阿里的安装源
    yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3. 安装docker
    yum install -y docker-ce docker-ce-cli containerd.io

  4. 安装docker镜像 切换阿里云镜像 阿里云加速
    mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"] } EOF

  5. 重载所修改的配置
    sudo systemctl daemon-reload
    sudo systemctl restart docker

六,希望服务长久运行

pm2 服务管家
npm install pm2 -g

  1. 去vue-webhook改变启动方式

"scripts": { "start": "pm2 start ./webhook.js --watch --name webhook --watch", "stop": "pm2 stop webhook" },

  1. pm2操作命令
  • 停止 pm2 stop
  • 查看日志pm2 logs

七,git短命令

  1. 服务器配置: vi ~/gitconfig
[alias]
 a=add -A
 c=commit -m'msg'
 p=push origin master
 pu=pulll origin master

八,vue-back下创建Dockerfile

FROM node
LABEL name='vue-back'   
LABEL version='1.0'     
COPY . /app
WORKDIR /app 
RUN npm install
EXPOSE 3001
CMD npm start
  1. 创建dockerignore 忽略文件
.gitignore
node_modules 
Dockerfile
.dockerignore

九,vue-webpack下创建vue-back.sh 脚本文件

#!/bin/bash
WORK_PATH='/usr/projects/vue-back'
cd $WORK_PATH
echo '先清除老代码'
git reset --hard origin main
git clean -f
echo '拉取代码'
git pull origin main
echo '开始构建'
docker build -t vue-back:1.0 .
echo '停止并删除旧容器'
docker stop vue-back-container 
docker rm vue-back-container 
echo ' 启动新容器'
docker container run -p 3001:3001 --name vue-back-container -d vue-back:1.0
  1. vue-webpack文件内容
let http = require("http")
let crypto = require('crypto')
let SECRET = '123456'

function sign(body) {
   return `sha1=` + crypto.createHmac('sha1', SECRET).update(body).digest('hex');
}

let server = http.createServer(function(req, res) {
   console.log("触发webhook", req.method)
   if (req.method == 'POST' && req.url === '/webhook') {
       let buffers = [];
       req.on('data', function(buffer) {
           buffers.push(buffer)
       })

       req.on('end', function(buffer) {
           let body = Buffer.concat(buffers);
           let event = req.headers['x-gitHub-event'];
           let signature = req.headers['x-hub-signature'];
           if (signature !== sign(body)) {
               return res.end("not found")
           }

       })
       res.setHeader('Content-Type', 'application/json')
       res.end(JSON.stringify({ ok: true }))
   } else {
       res.end("not found")
   }
})

server.listen(4000, () => {
   console.log("webhook服务已经在4000端口服务已启动")
})

十,vue-webpack下创建vue-front.sh 脚本文件

#!/bin/bash
WORK_PATH='/usr/projects/vue-front'
cd $WORK_PATH
echo '先清除老代码'
git reset --hard origin main
git clean -f
echo '拉取新代码'
git pull origin main
echo '开始编译'
npm run build
echo '开始构建'
docker build -t vue-front:1.0 .
echo '停止并删除旧容器'
docker stop vue-front-container 
docker rm vue-front-container 
echo ' 启动新容器'
docker container run -p 80:80 --name vue-front-container -d vue-front:1.0

十一,vue-front下创建vue-front.conf 。 nginx自定义配置文件

  1. 先在服务器上安装nginx
    yum install nginx -y

  2. 创建 vue-front.conf 文件

  listen:80;
  server_name 106.14.181.6;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  location /api{
    proxy_pass http://106.14.181.6:3001;
  }
}
  1. 查看docker 的包/ 删除包
    docker container ps //查看docker容器下所有的包
    docker container rm bc9a21e87416 2d1ce2995142 -f //删除docker下指定ID的包 bc9a21e87416包ID

十二,webhook项目下创建sendMail.js

安装nodemailer插件
npm install nodemailer -g

smtp授权码:txakqvjzeiqqcbea

const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({
  service: 'xxx2@qq.com', // 发给QQ邮箱
  port: 465, // 发邮箱的端口号
  secureConnection: true, // 使用SSL加密传输
  auth: { // 权限认证
    user: 'QQ邮箱',
    pass: '这是邮箱的授权码在邮箱后台生成的'
  }
})

let mailOptions = {
  from: '来自xxx1@qq.com', // 发邮件的账号
  to: 'xxx2@qq.com', // 收邮件的账号
  subject: 'hello', // 标题
  html: '<html><h1>world</h1></html>' // 邮寄的内容
}

transporter.sendMail(mailOptions, (err, info) => {
  if (!err) {
    console.log('邮件已经发生完成')
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在将前端项目部署Docker 中时,你需要执行以下步骤: 1. 创建一个 Dockerfile 文件。Dockerfile 是一个文本文件,用于定义要在 Docker 容器中运行的应用程序所需的各种设置。 2. 在 Dockerfile 中,你需要指定要使用的基础镜像。这可以是一个现有的镜像,例如 node,也可以是你自己创建的镜像。 3. 在 Dockerfile 中,你还需要设置环境变量、工作目录、挂载卷等选项。 4. 在 Dockerfile 中,你还需要指定要执行的命令。这通常是用于安装依赖项、构建前端项目的命令。 5. 在命令行中,使用 `docker build` 命令来构建 Docker 镜像。 6. 使用 `docker run` 命令来运行 Docker 容器。 7. 在浏览器中访问你的前端项目。 请注意,这只是部署前端项目Docker 中的一般流程。实际步骤可能因项目而异。 ### 回答2: Docker是一种容器化技术,可以将应用程序及其依赖项打包成一个独立的可移植容器。使用Docker部署前端项目可以简化开发和部署流程,提高项目的可移植性和可扩展性。 要实现Docker部署前端项目,以下是一些主要的步骤: 1. 创建Dockerfile:在项目根目录下创建一个名为Dockerfile的文件。Dockerfile是一个文本文件,其中定义了构建Docker镜像的指令。 2. 编写Dockerfile指令:在Dockerfile中,可以使用指令来描述Docker镜像的构建过程。以下是一些可能用到的指令: - FROM:指定基础镜像,可以选择官方提供的Node.js镜像。 - WORKDIR:设置工作目录,将之后的指令在此目录下执行。 - COPY:将项目文件复制到镜像中的指定路径。 - RUN:执行一些必要的命令,如安装依赖项、打包项目等。 3. 构建Docker镜像:在终端中执行构建命令,通过Dockerfile构建镜像,例如:docker build -t frontend-image . 4. 运行Docker容器:使用构建好的镜像运行Docker容器,可以指定容器的端口映射等配置,例如:docker run -d -p 8080:80 frontend-image。 5. 验证部署:通过浏览器访问宿主机的地址和映射的端口,能够看到前端应用程序正常运行。 使用Docker部署前端项目可以提供更加独立和可靠的开发环境,避免了直接在开发机上安装各种依赖项和配置的复杂性。同时,将前端项目打包成Docker镜像后,可以在不同的服务器和环境上进行部署,提高了项目的可移植性。此外,Docker还提供了更好的隔离性,使得不同的项目可以在同一个主机上并存,而互不干扰。 ### 回答3: 在使用Docker部署前端项目时,我们可以通过以下步骤来实现编码: 1. 安装Docker:首先,我们需要在本地计算机上安装Docker。可以通过官方网站或其他可靠的渠道下载并安装适合自己操作系统的Docker版本。 2. 编写Dockerfile:在项目的根目录下创建一个名为Dockerfile的文件。Dockerfile是一个文本文件,用于定义如何构建Docker镜像。可以使用文本编辑器打开Dockerfile并编写相关的指令。 3. 定义基础镜像:在Dockerfile中,我们需要指定要使用的基础镜像。对于前端项目,通常会选择一个包含基本Web服务器的镜像,例如nginx。可以使用"FROM"指令来指定基础镜像,例如:"FROM nginx:latest"。 4. 添加项目文件:将前端项目的所有文件添加到Docker镜像中。可以使用"ADD"指令将项目文件复制到镜像中的指定目录中。例如:"ADD . /usr/share/nginx/html"将当前目录的所有文件复制到nginx默认服务目录。 5. 定义端口映射:在Dockerfile中,我们可以使用"EXPOSE"指令定义容器内的服务监听的端口。例如:"EXPOSE 80"将容器的80端口映射到宿主机器上。 6. 构建Docker镜像:使用Docker命令行工具,在命令行中进入到项目目录,并运行"docker build -t frontend:1.0 ."命令来构建镜像。其中,"frontend:1.0"是镜像的名称和标签,可以自行定义。 7. 运行容器:构建完成后,可以使用"docker run -d -p 8080:80 frontend:1.0"命令来创建并运行容器。其中,"8080"是宿主机的端口,"80"是容器内服务的监听端口,"frontend:1.0"是之前构建的镜像名称。 通过以上步骤,我们就可以使用Docker部署前端项目了。在部署完成后,我们可以通过浏览器访问宿主机的"localhost:8080"来访问前端项目。这样可以确保在不同环境中,我们的前端项目能够以一致的方式运行,并且方便部署和迁移。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值