- 前端进阶之旅:https://interview2.poetries.top
- 博客:https://blog.poetries.top
- 公众号/小程序:「前端进阶之旅」 每天分享技术干货,学前端不迷路
- 作者:程序员poetry
一、云服务器docker-compose部署
装置docker环境
装置工具包
yum install yum-utils device-mapper-persistent-data lvm2 -y
设置阿里镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
装置docker
yum install docker-ce docker-ce-cli containerd.io -y
启动docker
systemctl start docker# 设为开机启动systemctl enable docker
设置docker镜像源
vi /etc/docker/daemon.json
{ "registry-mirrors": [ "https://register.docker-cn.com/" ],}
后续拉取镜像间接从 https://hub.docker.com 网站拉取速度更快
重启docker
systemctl restart docker
装置mysql镜像测试
docker pull daocloud.io/library/mysql:8.0.20
运行mysql镜像
docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456(设置登录明码) be0dbf01a0f3(镜像ID)
进入mysql容器外部
至此mysql镜像搭建胜利,上面咱们应用docker-compose
来治理docker容器,不在独自一个个装置MySQL、redis、nginx
装置docker-compose
# 应用国内源装置curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
设置docker-compose执行权限
chmod +x /usr/local/bin/docker-compose
创立软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否装置胜利:
$ docker-compose --versiondocker-compose version 1.22.0, build f46880fe
编写docker-compose
version: "3.0"services: # docker容器启动的redis默认是没有redis.conf的配置文件,所以用docker启动redis之前,须要先去官网下载redis.conf的配置文件 redis: # 服务名称 container_name: redis # 容器名称 image: daocloud.io/library/redis:6.0.3-alpine3.11 # 应用官网镜像 # 配置redis.conf形式启动 command: redis-server /usr/local/etc/redis/redis.conf --requirepass 123456 --appendonly yes # 设置redis登录明码 123456、--appendonly yes:这个命令是用于开启redis数据长久化 # 无需配置文件形式启动 # command: redis-server --requirepass 123456 --appendonly yes # 设置redis登录明码 123456 ports: - 6380:6379 # 本机端口:容器端口 restart: on-failure # 主动重启 volumes: - ./deploy/redis/db:/data # 把长久化数据挂载到宿主机 - ./deploy/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf # 把redis的配置文件挂载到宿主机 - ./deploy/redis/logs:/logs # 用来寄存日志 environment: - TZ=Asia/Shanghai # 解决容器 时区的问题 networks: - my-server mysql: container_name: mysql image: daocloud.io/library/mysql:8.0.20 # 应用官网镜像 ports: - 3307:3306 # 本机端口:容器端口 restart: on-failure environment: - MYSQL_ROOT_PASSWORD=123456 # root用户明码 volumes: - ./deploy/mysql/db:/var/lib/mysql # 用来寄存了数据库表文件 - ./deploy/mysql/conf/my.cnf:/etc/my.cnf # 寄存自定义的配置文件 # 咱们在启动MySQL容器时主动创立咱们须要的数据库和表 # mysql官网镜像中提供了容器启动时主动docker-entrypoint-initdb.d下的脚本的性能 - ./deploy/mysql/init:/docker-entrypoint-initdb.d/ # 寄存初始化的脚本 networks: - my-server server: # egg服务 container_name: server build: # 依据Dockerfile构建镜像 context: . dockerfile: Dockerfile ports: - 9000:9000 restart: on-failure # 设置主动重启,这一步必须设置,次要是存在mysql还没有启动实现就启动了node服务 networks: - my-server depends_on: # node服务依赖于mysql和redis - redis - mysql# 申明一下网桥 my-server。# 重要:将所有服务都挂载在同一网桥即可通过容器名来相互通信了# 如egg连贯mysql和redis,能够通过容器名来相互通信networks: my-server:
nestjs/Dockerfile
FROM daocloud.io/library/node:14.7.0# 设置时区ENV TZ=Asia/Shanghai \ DEBIAN_FRONTEND=noninteractiveRUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata && rm -rf /var/lib/apt/lists/*# 创立工作目录RUN mkdir -p /app# 指定工作目录WORKDIR /app# 复制以后代码到/app工作目录COPY . ./# npm 源,选用国内镜像源以进步下载速度# RUN npm config set registry https://registry.npm.taobao.org/# npm 装置依赖RUN npm install # 打包RUN npm run build# 启动服务# "start:prod": "cross-env NODE_ENV=production node ./dist/src/main.js",CMD npm run start:prodEXPOSE 9000
批改代码
凋谢云服务器端口
凋谢端口9000、6380、3307
启动我的项目
docker-compose -h
查看命令
docker-compose up
启动服务,控制台可见日志docker-compose up -d
后盾启动服务docker-compose build --no-cache
从新构建镜像不应用缓存(最初docker-compose up -d
启动)- 进行服务
docker-compose down
- 下载镜像过程
docker-compose pull
- 重启服务
docker-compose restart
后盾启动服务 docker-compose up -d
测试
二、微信云托管部署
云托管流水线部署更不便
redis服务
这里咱们下面部署应用的自建服务器上docker搭建的redis服务作为演示
mysql服务
这里咱们下面部署应用的自建服务器上docker搭建的mysql服务作为演示
批改代码
而后上传代码到github,通过云托管流水线构建
新建服务
点击公布后,云托管会执行Dockerfile构建流水线,到日志能够查看构建进度
微信云托管部署胜利后,能够在实例列表,点击进入容器看到代码,这里外面的内容不能批改,在容器启动后会笼罩
调试接口
测试redis
三、腾讯云serverless部署
须要留神,云函数的代码包不能超过500M
模板部署 -- 部署 Nest.js 示例代码
- 登录 Serverless 利用控制台。
- 单击新建利用,抉择Web 利用>Nest.js 框架,如下图所示:
- 单击“下一步”,实现根底配置抉择
- 上传形式,抉择示例代码间接部署,单击实现,即可开始利用的部署。
- 部署实现后,您可在利用详情页面,查看示例利用的根本信息,并通过 API 网关生成的拜访门路 URL 进行拜访,查看您部署的 Nest.js 我的项目
自定义部署nest
初始化您的 Nest.js 我的项目
npm i -g @nestjs/clinest new nest-app
在根目录下,执行以下命令在本地间接启动服务。
cd nest-app && npm run start
关上浏览器拜访 http://localhost:3000,即可在本地实现 Nest.js 示例我的项目的拜访。
部署上云
接下来执行以下步骤,对已初始化的我的项目进行简略批改,使其能够通过 Web Function 疾速部署,此处我的项目革新通常分为以下两步:
- 新增
scf_bootstrap
启动文件。 - 批改监听地址与端口为
0.0.0.0:9000
。
- 批改启动文件
main.ts
,监听端口改为9000
:
- 在我的项目根目录下新建
scf_bootstrap
启动文件,在该文件增加如下内容(用于启动服务):
您也能够在控制台实现该模块配置。
# scf_bootstrap#!/bin/bashSERVERLESS=1 /var/lang/node12/bin/node ./dist/main.js
新建实现后,还需执行以下命令批改文件可执行权限,默认须要 777 或 755 权限才可失常启动。示例如下:
chmod 777 scf_bootstrap
本地配置实现后,执行启动文件,确保您的服务能够本地失常启动,接下来,登录 Serverless 利用控制台,抉择Web 利用>Nest.js 框架,上传形式能够抉择本地上传或代码仓库拉取
留神:启动文件以我的项目内文件为准,如果您的我的项目里曾经蕴含 scf_bootstrap 文件,将不会笼罩该内容。
单个函数代码体积 500mb 的下限。在实际操作中,云函数尽管提供了 500mb
对于绕过配额问题:
如果超的不多,那么应用 npm install --production
就能解决问题
本文由mdnice多平台公布