场景
本地开发的 Vue 项目, 测试之后准备部署;
本地使用 http-server 正常运行;
服务器环境为: Docker 运行的 Nginx 和 Node.js 容器;
目标是将项目通过 Node.js 容器运行
Node.js 容器启动命令为
sudo docker run --name msg_page \
--network nginx_net \
-it -dp 3002:3002 \
--mount type=bind,src=/home/ubuntu/workspace/msg_page,dst=/usr/src/app \
-w /usr/src/app \
node bash
Nginx 对应部分配置
server {
listen 80;
server_name xxx.com;
location / {
proxy_pass http://msg_page:3002;
}
启动 Node.js 容器后, 安装 http-server
$ npm install http-server -g
错误操作
进入文件挂载目录后, 使用命令
$ http-server -p :3002
错在 3002 前多写了冒号, 这个命令的默认地址就是 0.0.0.0 , 不需要冒号, 而且这个 flag 是 -p , 只是指定端口,
完整命令应该是
$ http-server -a 0.0.0.0 -p 3002
逆天的是把冒号作为端口参数也能运行成功, 显示了两个冒号看到了还没反应过来
bug
导致访问地址出现 502 Bad Gateway 错误, Nginx 查看 access.log, 接入正常, 关闭对应容器, 也是 502 错误, 说明容器内网关服务未启动.
教训|经验
操作过程都应该有明文记录, 不能依赖 history 命令, bash 命令应写入 xxx.sh 然后执行.
第一次执行较复杂的操作应该记录操作过程.
502 Bad Gateway 可能是服务未启动 \ 响应时间过长.
挂载文件修改之后, 需要重启容器才能读取改变.
debug
之前同样的场景成功部署了一个前端服务, 进入其容器查看历史命令后, 发现没有加端口号, 再去查 http-server 命令教程, 发现原因所在.