常见问题

一、部署成功却访问不了服务怎么办?

原因:若应用成功启动,却在启动之后自行结束了进程,则会导致应用虽然显示为“部署成功”,但应用服务却无法访问。

解决方案:登录应用所在的 ECS,查看应用的启动日志,排查错误。

二、部署失败如何查错?

进入应用详情页查看部署错误日志。错误日志仅显示部署失败阶段的日志。

image

image

应用部署可以分以下几个阶段:

  • 切除虚拟服务器组流量。
  • 下载用于配置部署过程的脚本。
  • 安装部署应用所需的软件,如 JDK 等。
  • 配置服务器环境。
  • 下载应用发布包。
  • 部署(启动)应用。
  • 检查应用进程是否存在,服务端口是否能访问。
  • 恢复虚拟服务器组流量。
    若仅凭部署错误日志无法确定部署失败的原因,则登录应用所在 ECS 查看应用的启动日志,以排查错误。点击 云服务器 ECS 标签中的 远程连接 按钮即可登录 ECS。详细操作参见 查看应用详情 > 云服务器 > 远程连接 章节。

image

应用启动日志的默认位置为 /home/admin/logs,对于 Spring Boot 和 SOFA BOOT 应用,其中 stdout.log是应用的标准输出内容,stderr.log 是应用的报错输出内容。对于 Node.js 应用,则分别对应 master-stdout.logmaster-stderr.log 两个文件。另外,部署各阶段的详细日志存放在 xdeploy 文件夹中。建议您将自定义日志也放在该目录下以方便管理。

image

三、部署失败常见错误日志

Agent status not running.

原因:该错误通常出现在云服务器刚刚重启后,部署应用时。由于云服务器启动后部分服务还未初始化完成,导致无法执行应用部署。

解决方案:稍等片刻,待云服务器开机启动的服务初始化完毕后,再尝试部署。

execute timeout / python run time out

原因:部署时间过长导致超时,通常是由于应用服务未成功启动,导致检测服务超时,也可能是网络 IO 原因导致系统未接收到应用部署的某一阶段完成的消息。

解决方案:先重试部署,若仍旧失败,则登录应用所在 ECS,查看应用的启动日志,排查错误。

Nginx 重启失败

若部署失败日志中有如下输出,说明 Nginx 重启失败。

  1. nginx command:nginx -c /home/admin/resources/nginx-prod.conf
  2. INFO 2018-11-02 16:56:27 /home/admin/lifecycle/ac_deploy deploy 125 Spring Boot deploy.sh stderr:
  3. nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
  4. nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
  5. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  6. nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
  7. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  8. nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
  9. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  10. nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
  11. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  12. nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
  13. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  14. nginx: [emerg] still could not bind()

原因: 由于记录 Nginx 进程号的文件 /var/run/nginx.pid 被误删除,停止 Nginx 命令会执行失败,导致 Nginx 重启失败。

解决方案:

运行命令 ps aux|grep nginx 查询 Nginx 进程。假设返回如下:

image.png

得到 Nginx 进程号为 14054 和 14057。

执行如下命令杀死当前 Nginx 进程。

  1. kill 14054
  2. 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”。

发布包版本已存在,需要修改当前部署的发布包版本号。建议采用客户端默认生成的发布包版本号,不会与之前上传部署的发布包版本号重复。

原文: https://docs.alipay.com/mini/cloud-service/fyvf3m