XingYun blog
  • JS基础

    • 图解js原型链
    • JS Event Loop
    • 对象的底层数据结构
    • 让你的JavaScript代码简单又高效
    • 函数参数按值传递
    • 判断数据类型
    • 浮点数精度问题和解决办法
    • 常用方法snippet
    • 实现Promise
    • 防抖和节流
    • 巧用sort排序
  • CSS && HTML

    • CSS也需要性能优化
    • class命名规范
    • em、px、rem、vh、vw 区别
    • CSS揭秘阅读笔记
  • 浏览器

    • 浏览器是如何渲染页面的
    • 重排和重绘
    • BOM浏览器对象模型
    • DOM事件
    • 浏览器存储
  • 数据结构

    • JS实现链表
    • JS实现栈与栈应用
    • JS实现常见排序
    • 哈夫曼编码
    • MD5算法
  • vue原理浅析

    • Vue虚拟dom与Diff算法
    • 前端打包文件的缓存机制
    • vue数组为什么不是响应式
    • v-for为什么不能用index做key
  • 前端工程化

    • 浏览器是如何渲染页面的
    • 前端打包需要gzip压缩吗
    • 前端打包文件的缓存机制
    • webpack loader和plugin
  • 轮子&&组件库

    • 实现水波浪进度球
  • 文字转语音mp3文件
  • 文件上传前后端实现
  • moment.js给定时间获取自然月、周的时间轴
  • 实现文件上传功能
  • 批量下载照片
  • leaflet改变坐标原点
  • 网络

    • 有了MAC地址 为什么还需要IP地址
    • 为什么IP地址老是变
    • 我们为什么需要IPV6
    • TCP与UDP
  • 计算机组成原理

    • ASCII、Unicode、UTF-8和UTF-16
  • VSCode

    • VSCode图片预览插件 Image preview
    • rsync:linux间的高效传输工具

XingYun

冲!
  • JS基础

    • 图解js原型链
    • JS Event Loop
    • 对象的底层数据结构
    • 让你的JavaScript代码简单又高效
    • 函数参数按值传递
    • 判断数据类型
    • 浮点数精度问题和解决办法
    • 常用方法snippet
    • 实现Promise
    • 防抖和节流
    • 巧用sort排序
  • CSS && HTML

    • CSS也需要性能优化
    • class命名规范
    • em、px、rem、vh、vw 区别
    • CSS揭秘阅读笔记
  • 浏览器

    • 浏览器是如何渲染页面的
    • 重排和重绘
    • BOM浏览器对象模型
    • DOM事件
    • 浏览器存储
  • 数据结构

    • JS实现链表
    • JS实现栈与栈应用
    • JS实现常见排序
    • 哈夫曼编码
    • MD5算法
  • vue原理浅析

    • Vue虚拟dom与Diff算法
    • 前端打包文件的缓存机制
    • vue数组为什么不是响应式
    • v-for为什么不能用index做key
  • 前端工程化

    • 浏览器是如何渲染页面的
    • 前端打包需要gzip压缩吗
    • 前端打包文件的缓存机制
    • webpack loader和plugin
  • 轮子&&组件库

    • 实现水波浪进度球
  • 文字转语音mp3文件
  • 文件上传前后端实现
  • moment.js给定时间获取自然月、周的时间轴
  • 实现文件上传功能
  • 批量下载照片
  • leaflet改变坐标原点
  • 网络

    • 有了MAC地址 为什么还需要IP地址
    • 为什么IP地址老是变
    • 我们为什么需要IPV6
    • TCP与UDP
  • 计算机组成原理

    • ASCII、Unicode、UTF-8和UTF-16
  • VSCode

    • VSCode图片预览插件 Image preview
    • rsync:linux间的高效传输工具
  • VSCode图片预览插件 Image preview
  • Linux服务器
  • 记录git使用
  • mac终端
  • 代理
  • nginx部署网站
  • CDN与对象存储-七牛云
  • rsync:linux间的高效传输工具
  • 正则表达式
  • yarn
  • Alfred
  • npm
  • vim编辑器基础
  • docker部署node服务
    • lux一行命令下载全网视频
    • Chrome-Tips
    • 工具
    XingYun
    2022-03-26
    目录

    docker部署node服务

    记录 docker 部署网站后端 node 服务的过程

    # Dockerfile

    首先在项目根目录新增一个 Dockerfile 文件

    
    # FROM 表示设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载。
    # 指定我们的基础镜像是node,latest表示版本是最新
    FROM node:latest
    
    # 执行命令,创建文件夹
    RUN mkdir -p /home/node-docker
    
    # 将根目录下的文件都copy到container(运行此镜像的容器)文件系统的文件夹下
    COPY ./ /home/node-docker
    
    # WORKDIR指令用于设置Dockerfile中的RUN、CMD和ENTRYPOINT指令执行命令的工作目录(默认为/目录),该指令在Dockerfile文件中可以出现多次,如果使用相对路径则为相对于WORKDIR上一次的值,
    # 例如WORKDIR /data,WORKDIR logs,RUN pwd最终输出的当前目录是/data/logs。
    # cd到 /home/node-docker
    WORKDIR /home/node-docker
    
    # 安装项目依赖包
    RUN npm install
    # RUN npm run build
    
    # 配置环境变量
    ENV HOST 0.0.0.0
    ENV PORT 3000
    
    # 容器对外暴露的端口号
    EXPOSE 3000
    
    # 容器启动时执行的命令,类似npm run start 这里增加了一个production参数标识docker生产环境
    CMD ["node", "/home/node-docker/index.js", "production"]
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

    # 1.同步项目文件到服务器

    部署过程是本地文件传输到服务器,在服务器中执行 docker build, 所以只需要传项目源码就可以, node_modules 包不需要

    我用的 rsync 将 node 项目传输到服务器

    
    rsync -vrh --exclude={'node_modules/_','.git/_','spider/\*'} /Users/xinyun/gcy/node-server-template/ root@162.14.118.95:/usr/node-server-template
    
    # 这里 --exclude={'node_modules/_','.git/_','spider/\*'} 语法忽略不想上传的文件夹
    
    1
    2
    3
    4

    以后需要更新版本,只需要传源码重新打包即可

    # 2.登陆服务器指定目录

    • ssh 连接服务器
    • cd /usr/node-server-template

    # 3.服务器 build 镜像

    
    docker build -t node-server-template  .
    
    docker ps
    docker stop < containerID > # 停止老容器
    docker rm < containerID > # 删除老容器
    
    docker images
    docker rmi < imageID > # 删除老镜像
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 4.run 镜像

    docker run -d -p 3000:3000 node-server-template

    • -d 表示后台运行
    • -p 3000:3000 监听容器内 3000 端口并映射到宿主机 3000 端口
    • node-server-template 容器名

    这时输入服务器 ip+端口应该可以直接访问 node 应用了

    # Nginx 转发

    因为项目前后端分开部署,所以需要将前端的 API 请求通过 nginx 转发给 后端, 所以这里 nginx 需要做一些配置

    先约定前端的 API 请求都加一个 /api/ 前缀

    nginx 配置

    
    
      server {
            listen       80;
            server_name  demo.espe.work;
            root   /usr/share/nginx/html/demo/dist;
    
            location / {
              root   /usr/share/nginx/html/demo/dist;  # 静态资源都交给nginx部署 性能高 稳定
              index  index.html;
            }
    
            location /api/ {
              proxy_pass http://127.0.0.1:3000/;  # api 前缀的接口 走后端  后端部署在服务器的3000端口 这里3000后的 / 表示重写 /api/前缀 
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
      }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    上次更新: 2023/04/05, 09:41:10
    vim编辑器基础
    lux一行命令下载全网视频

    ← vim编辑器基础 lux一行命令下载全网视频→

    最近更新
    01
    JavaScript-test
    07-20
    02
    二维码的原理
    07-20
    03
    利用ChatGPT优化代码
    07-20
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 XingYun | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式