简单做系列:Docker部署egg.js到云服务器
看了好多 Docker 部署的文章,除了列举相同的主要步骤,具体到底怎么部署的,愣是没搞明白.也许到了这个部署 node 的阶段的前端都已经是大神了,不需要讲那么清楚,那我就只好自己摸索记录一下.
也不需要讲什么具体概念,直接就冲方法,先把成就感拿到,回头你再反复咀嚼,看看别人文章里的概念细节,品位品位.
如果讲的不对的地方有大佬指正,将不胜感激.
0. 前提
本项目是 egg.js+mongoDB 的 youtubeclone 的后端项目.
修改项目
在 egg 项目的 package.json 文件中,在 start 启动项中,–daemon 是后台启动。如果使用 docker 容器,需要去除 –daemon .
大体流程
1. 买服务器
首先,你得有个服务器.没有自己想办法白嫖,什么阿里腾讯的学生机,什么 AWS 的一年免费小水管.
买了服务器,肯定要装系统,建议就是 Linux 的,什么 CentOS,Debian 之类的.
2. 安装 Docker
文章目的就是冲它,肯定要先装它.
1 | curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
测试安装是否成功
1 | docker -v |
1 | // 启动docker |
3. 安装 Docker-compose
1 | // 国内 |
添加可执行权限
1 | chmod +x /usr/local/bin/docker-compose |
查看版本
1 | docker-compose --version |
4. 创建 Dockerfile
通过 Dockfile 创建镜像.之后使用.
自动生成
安装 vscode 插件,搜索 docker.安装后 F1,输入 docker add.按照提示一步一步生成 Dockerfile.
手动写
1 | # 使用node镜像 |
新建dockerignore
排除一些不需要打包的文件.
5. 上传代码
不管是上传到 github,gitlab,还是 gitee.因为需要在服务器上下载.
当然如果想手动上传压缩也行,不过后期要配置自动化 CI/CD 的,那样比较麻烦.
6.下载代码到服务器
安装 git
记得安装 git,
不知道服务端怎么安装点这里
或者搜符合自己服务器版本的.
1 | git clone https://github.com/xx-coding/youtube-clone-backend |
7. 构建镜像
1 | cd youtube-clone-backend |
查看镜像
1 | 查看所有镜像 |
8. 创建容器
1 | docker run -itd --name youtube-clone-container -p 7001:7001 youtube-clone-backend |
测试是否连通
1 | curl localhost:7001 |
注意服务器的安全组中端口开放.
查看容器
1 | 查看所有容器 |
此时,还不能启动这个容器,因为我的需要连接数据库.
9. 部署 mongoDB
1 | 拉取镜像 |
-v
: 将宿主机~/docker/mongo
目录挂载到容器中的/data/db
中,此目录为 MongoDB 数据存储位置.-d
:设置容器以守护进程方式运行-p
:宿主机 27017 端口映射到容器 27017 端口
创建用户
不创建好像连接后访问不了.
1 | 进入mongoDb容器 |
用管理员账户创建普通用户管理你的数据库.
1 | 用刚创建的管理用户登录 |
10. 将数据库容器与后端容器关联
修改后端项目中 MongoDB 的配置
1 | // config.default.js |
创建自定义网络
1 | docker network create youtube-net |
将容器连接进网络
1 | 服务端容器连接网络 |
1 | MongoDB连接网络 |
两个都连接到自定义网络就可以通信了.
至此.就应该可以通过 ip+端口号进行后端的接口访问了.
查看问题
1 | 查看执行日志 |
更简单的方法 docker-compose
其实就是把上面的指令写到文件中执行