使用字节跳动的Trae Solo CN编写了一个两个参与者的博弈类小游戏,该游戏使用 nodejs 加 expressjs 加 socket.io 实现。开发完毕后,将该应用部署到互联网,记录一下部署过程。
申请云主机
选择阿里云免费申请一个云主机,使用ubuntu 22.04操作系统,默认安装docker服务。
上传应用
远程登录阿里云主机,上传nodejs应用。
部署应用
因为需要在Docker中运行 npm install 构建 nodejs 应用部署环境,因此无法直接使用默认的 nodejs 镜像,需要自定义 nodejs 镜像。
创建一个高效的 Dockerfile
在项目的根目录下,创建一个名为Dockerfile的文件,并写入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 选择一个基础镜像,比如 Node.js 20 FROM node:20-alpine
# 在容器中创建并设置工作目录 WORKDIR /usr/src/app
# 先复制依赖管理文件(这是为了利用 Docker 的缓存,避免每次代码变动都重新安装依赖) COPY package*.json ./
# 安装项目依赖 RUN npm install # 如果是生产环境,推荐使用 npm ci 以获得更快、更可靠的安装 # RUN npm ci --only=production
# 复制所有应用源代码到工作目录 COPY . .
# 应用运行的端口 EXPOSE 8080
# 指定容器启动时运行的命令 CMD ["node", "server.js"]
|
构建与运行
在包含上述Dockerfile的目录下,运行以下命令来构建镜像:
1 2 3 4 5
| # 构建镜像 docker build -t my-node-app .
# 查看镜像 docker image ls
|
构建成功后,使用docker run命令启动容器,并将宿主机的端口映射到容器内的端口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 后台运行docker镜像 docker run -d -p 80:8080 -d my-node-app
# 交互式运行docker镜像 docker run -it -p 80:8080 -d my-node-app
# 查看容器 docker container ls
# 查看docker进程 docker ps
# 访问nodejs应用 curl http://localhost:80
# 删除容器 docker container rm container_id
# 删除镜像 docker image rm image_id
|
远程访问
在阿里云主机的管理界面上,设置防火墙,允许外部主机访问云主机的web服务端口。
打开浏览器,输入网址访问 http://ip ,其中ip为云主机的公网ip 。
参考链接
- Docker使用帮助,by huangwang.