常见问题
- 部署成功却访问不了服务怎么办?
- 部署失败如何查错?
- 部署失败常见错误日志
- 部署后,在服务器能找到发布包吗?
- 从云服务器 ECS 的远程连接功能可以下载日志吗?
- 能否用 SSH 客户端远程连接到云服务器?
- IDE 中选择了保存文件时自动部署,但实际保存文件,并没有实现云服务自动部署。
- 应用发布部署后状态一直没有更新怎么办?
- 客户端部署时报错“获取云应用OSS上传地址失败:VERSION_ALREADY_EXISTS”。
一、部署成功却访问不了服务怎么办?
原因:若应用成功启动,却在启动之后自行结束了进程,则会导致应用虽然显示为“部署成功”,但应用服务却无法访问。
解决方案:登录应用所在的 ECS,查看应用的启动日志,排查错误。
二、部署失败如何查错?
进入应用详情页查看部署错误日志。错误日志仅显示部署失败阶段的日志。
应用部署可以分以下几个阶段:
- 切除虚拟服务器组流量。
- 下载用于配置部署过程的脚本。
- 安装部署应用所需的软件,如 JDK 等。
- 配置服务器环境。
- 下载应用发布包。
- 部署(启动)应用。
- 检查应用进程是否存在,服务端口是否能访问。
- 恢复虚拟服务器组流量。
若仅凭部署错误日志无法确定部署失败的原因,则登录应用所在 ECS 查看应用的启动日志,以排查错误。点击 云服务器 ECS 标签中的 远程连接 按钮即可登录 ECS。详细操作参见 查看应用详情 > 云服务器 > 远程连接 章节。
应用启动日志的默认位置为 /home/admin/logs
,对于 Spring Boot 和 SOFA BOOT 应用,其中 stdout.log
是应用的标准输出内容,stderr.log
是应用的报错输出内容。对于 Node.js 应用,则分别对应 master-stdout.log
和 master-stderr.log
两个文件。另外,部署各阶段的详细日志存放在 xdeploy
文件夹中。建议您将自定义日志也放在该目录下以方便管理。
三、部署失败常见错误日志
Agent status not running.
原因:该错误通常出现在云服务器刚刚重启后,部署应用时。由于云服务器启动后部分服务还未初始化完成,导致无法执行应用部署。
解决方案:稍等片刻,待云服务器开机启动的服务初始化完毕后,再尝试部署。
execute timeout / python run time out
原因:部署时间过长导致超时,通常是由于应用服务未成功启动,导致检测服务超时,也可能是网络 IO 原因导致系统未接收到应用部署的某一阶段完成的消息。
解决方案:先重试部署,若仍旧失败,则登录应用所在 ECS,查看应用的启动日志,排查错误。
Nginx 重启失败
若部署失败日志中有如下输出,说明 Nginx 重启失败。
nginx command:nginx -c /home/admin/resources/nginx-prod.conf
INFO 2018-11-02 16:56:27 /home/admin/lifecycle/ac_deploy deploy 125 Spring Boot deploy.sh stderr:
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
原因: 由于记录 Nginx 进程号的文件 /var/run/nginx.pid
被误删除,停止 Nginx 命令会执行失败,导致 Nginx 重启失败。
解决方案:
运行命令 ps aux|grep nginx
查询 Nginx 进程。假设返回如下:
得到 Nginx 进程号为 14054 和 14057。
执行如下命令杀死当前 Nginx 进程。
kill 14054
kill 14057
重新部署应用。
四、部署后,在服务器能找到发布包吗?
可以,在 /home/admin/release
文件夹下有部署到该服务器的各版本发布包。
五、IDE 中选择了保存文件时自动部署,但实际保存文件,并没有实现云服务自动部署。
原因: 只有对后端代码文件的更改才会触发自动部署云服务。
解决方案: 编辑 server 目录里的文件。
六、从云服务器 ECS 的远程连接功能可以下载日志吗?
Web SSH 能提供的功能有限,并不能选择复制字符,也不能下载指定的日志。需要查看日志,请使用 IDE 或 IDEA 插件的服务器日志查看功能。如需本地 SSH 到远程服务器,请参见 问题七。
七、能否用 SSH 客户端远程连接到云服务器?
远程日志访问服务 会开放云服务器的SSH端口(22端口),用户可以使用root账户通过自己SSH客户端连接到云服务器。
在云应用详情页面中,点击云服务器列表中的 更多 > 开启远程日志服务,即可开启该服务。
八、应用发布部署后状态一直没有更新怎么办?
如果您在发布部署后,界面提示发布成功,但应用状态一直没有变化,很可能您所在的租户并没有打开AppService开关。AppService模型是新加入发布部署系统的底层模型,小程序云应用服务依赖该模型进行发布部署。然而,入驻已久的租户并没有默认打开AppService,需要您提交工单,让客服帮您打开。
九、客户端部署时报错“获取云应用OSS上传地址失败:VERSION_ALREADY_EXISTS”。
发布包版本已存在,需要修改当前部署的发布包版本号。建议采用客户端默认生成的发布包版本号,不会与之前上传部署的发布包版本号重复。