前言
一直以来都是用宝塔面板来部署项目,最初部署nodejs项目还是使用传统的方式 – 将文件手动上传到网站目录,然后重启应用,对应到宝塔面板中的功能则是:网站 > Node 项目
这种部署应用最大的问题在于更新文件容易漏掉,无法保证开发版本和生产版本的一致性。
进入正题
接下来分享一下我自己使用宝塔面板docker功能部署nodejs应用的经验,这里我使用的宝塔面板版本为 v9.2.0。
使用docker部署,首先需要将自己的项目构成成docker镜像,关于docker的基本使用这里不再展开。
接下来将构建好的docker镜像上传到镜像仓库供宝塔面板中的docker拉取,这里需要注意不要将镜像上传到docker官方镜像仓库,否则会由于网络问题导致拉取慢或者直接超时。
我使用的是阿里云的容器镜像服务,个人版可以免费使用,配置方法请阅读我另外一篇文章 《如何将docker镜像上传到阿里云》
添加仓库
镜像准备完毕后,则需要进入宝塔面板配置docker仓库信息,如下图:
拉取镜像
仓库信息添加完成后,则可以开始拉取镜像了
镜像拉取完成后则会在列表出现
运行镜像
这里我们使用docker-compose运行,进入页面 docker > 容器编排,填写 compose.yaml 配置,如下:
services: servce-name: image: test:latest # 此处填写镜像列表中镜像的完整名称 extra_hosts: - "host.docker.internal:host-gateway" # 容器和宿主机网络映射 ports: - "3002:3002" # 端口映射,格式为服务端口:容器端口
运行完成后即可在 docker > 容器 页面查看正在运行的容器
绑定域名
以上所有工作完成后,正常情况下node服务就能正常启动了,接下来就是绑定域名供外网访问。
进入 Docker > 容器 >,在列表中点击管理,在弹窗中选择反向代理菜单,绑定域名即可。
相关问题
1、容器访问宿主机MySQL,加入以下配置,再将数据库连接的 host 设置为 host.docker.internal
extra_hosts: - "host.docker.internal:host-gateway"
2、时区问题,设置以下环境变量
environment: - TZ=Asia/Shanghai