目录
前段时间跟着神光操作了一波 nestjs,前面曾部署 nestjs 到 serverless 上,跑着还可以,但还是得解决 redis 和 mysql 服务的问题,而两个的serverless 服务超贵。
刚好这几天阿里双十一搞活动,ECS 服务新老用户都只要 99 元,对我来说,给力够用,果断入手一台
这里选择 CentOS7 系统,开通后立马就开始折腾了
登录系统
在实例右侧,点 远程连接

有以下多种登录方式

咱就用第一个吧,好久没玩服务,阿里云这个服务,开通时没太注意有设置密码,不知道密码是啥?

经过探索排查,这里可以使用重置密码功能,重设密码,我们这里设置好,就可以登录进去了
安装 Docker
这里我们要安装下 Docker
这里我们参考此文:cloud.tencent.com/developer/a…
我这里把用到的命令总结如下
# 检查系统版本,linux 内核 3.10+ 满足条件
uname -r
# 使用 root 权限更新 yum 包
yum -y update
# 注意
# yum -y update:升级所有包同时也升级软件和系统内核;
# yum -y upgrade:只升级所有包,不升级软件和系统内核
# 卸载旧版本(如果之前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
# 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置 yum 源,下面两个都可以
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
## 更新 yum 缓存
yum makecache fast
# 安装 Docker CE 及其配套插件
yum install -y docker-ce
# 查看 Docker 可用版本有哪些
# 如果需要安装特定版本的 Docker CE,可以先列出可用版本:
yum list docker-ce --showduplicates | sort -r
yum list docker-ce.x86_64 --showduplicates | sort -r
# 选择 Docker 版本并安装(我们安装指定的最新稳定版)
# 格式 yum install docker-ce-版本号(会自动安装 docker-ce-cli containerd.io)
yum -y install docker-ce-24.0.7-1.el7
yum -y install docker-ce-26.1.4-1.el7
# 安装配套插件
yum -y install docker-buildx-plugin docker-compose-plugin
# 安装完成
docker -v
# 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker
# 重启
systemctl restart docker
构建 nestjs 运行环境
启动 docker 服务后
# 拉取镜像
docker pull node:20.9.0-alpine
这里我们使用 Dockerfile 来定制,这里有 Docker 入门实践教程
这里假设你已经将 nestjs 构建输出了 dist 目录,Dockerfile 与 dist 目录同级
FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml .
RUN npm config set registry https://registry.npmmirror.com/
RUN npm i -g pnpm
RUN pnpm install
COPY . .
RUN pnpm run build
COPY .env dist/.env
EXPOSE 3000
CMD ["node", "dist/src/main.js"]
运行 docker-compose 收到警告
CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6.
from cryptography.hazmat.backends import default_backend
这是一个弃用警告,表明 cryptography 库不再支持 Python 3.6。虽然目前你的系统仍然可以运行,但未来可能会出现问题,尤其是当 cryptography 更新到完全移除 Python 3.6 支持的版本时。
paramiko 是一个用于 SSH 连接的 Python 库,它依赖于 cryptography。这个警告是通过 paramiko 触发的,但根源在于 cryptography。
可以暂时不管
构建镜像运行容器
# 构建镜像
docker build -t nestjs:1 .
# 运行容器
docker run -d --name nestjs-1 -p 3000:3000 nestjs:1
容器运行报错了
2023-11-15 11:19:36 node:internal/modules/cjs/loader:1327
2023-11-15 11:19:36 return process.dlopen(module, path.toNamespacedPath(filename));
2023-11-15 11:19:36 ^
2023-11-15 11:19:36
2023-11-15 11:19:36 Error: Error loading shared library /app/node_modules/.pnpm/bcrypt@5.1.1/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: Exec format error
2023-11-15 11:19:36 at Module._extensions..node (node:internal/modules/cjs/loader:1327:18)
2023-11-15 11:19:36 at Module.load (node:internal/modules/cjs/loader:1091:32)
2023-11-15 11:19:36 at Module._load (node:internal/modules/cjs/loader:938:12)
2023-11-15 11:19:36 at Module.require (node:internal/modules/cjs/loader:1115:19)
2023-11-15 11:19:36 at require (node:internal/modules/helpers:130:18)
2023-11-15 11:19:36 at Object.<anonymous> (/app/node_modules/.pnpm/bcrypt@5.1.1/node_modules/bcrypt/bcrypt.js:6:16)
2023-11-15 11:19:36 at Module._compile (node:internal/modules/cjs/loader:1241:14)
2023-11-15 11:19:36 at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
2023-11-15 11:19:36 at Module.load (node:internal/modules/cjs/loader:1091:32)
2023-11-15 11:19:36 at Module._load (node:internal/modules/cjs/loader:938:12) {
2023-11-15 11:19:36 code: 'ERR_DLOPEN_FAILED'
2023-11-15 11:19:36 }
2023-11-15 11:19:36
2023-11-15 11:19:36 Node.js v20.9.0
上面的错误是因为忘记添加 .dockerignore 忽略 node_modules 了,导致安装的依赖被 COPY 操作覆盖
重新配置
FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml .
RUN npm config set registry https://registry.npmmirror.com/
RUN npm i -g pnpm pm2
RUN pnpm install
COPY . .
RUN pnpm run build
EXPOSE 3000
CMD ["node", "dist/src/main.js"]
# CMD ["pm2-runtime", "dist/src/main.js"]
# debug
# CMD ["sleep", "1h"]
这样就可以了
下一篇,生产发布,搭建 nestjs + redis + mysql 运行环境