完全安照:https://eggjs.org/zh-cn/core/deployment.html 的方式进行部署的。
本地或服务器执行 npm run dev 都没有任何问题,一切正常。
但是执行 npm start 后,服务器拒绝访问或502错误。
各种依赖肯定都是有的。
不知道egg.js 部署还有哪些注意事项
启动脚本如下:
> [email protected] start /home/website/qingzhiyuedu
> egg-scripts start --daemon --port=8080
[egg-scripts] Starting egg application at /home/website/qingzhiyuedu
[egg-scripts] Run node /home/website/qyapi/node_modules/egg-scripts/lib/start-cluster {"v":false,"port":8080,"framework":"/home/website/qyapi/node_modules/egg","baseDir":"/home/website/qyapi"} --title=undefined
[egg-scripts] Save log file to /root/logs/server
而且:--title=undefined 始终是undefined, 即使设置了 egg-scripts start --daemon --port=8080 --title=egg-server-qyapi ,也是undefined。
部分package.json 如下
"dependencies": {
"egg": "^1.7.0",
"egg-mysql": "^3.0.0",
"egg-scripts": "^1.1.0",
"egg-view-nunjucks": "^2.1.3"
},
"devDependencies": {
"autod": "^2.9.0",
"autod-egg": "^1.0.0",
"egg-bin": "^4.1.0",
"egg-ci": "^1.8.0",
"egg-mock": "^3.9.0",
"eslint": "^4.3.0",
"eslint-config-egg": "^5.0.0",
"webstorm-disable-index": "^1.2.0"
},
"engines": {
"node": ">=6.0.0"
},
"scripts": {
"start": "egg-scripts start --daemon --port=8080",
"stop": "egg-scripts stop",
"dev": "egg-bin dev --port 3001",
"test": "npm run lint -- --fix && npm run test-local",
"test-local": "egg-bin test",
"cov": "egg-bin cov",
"lint": "eslint .",
"ci": "npm run lint && npm run cov",
"autod": "autod"
}
查看日志如下:
[---- server]# tail -f egg-web.log
2017-08-25 01:33:37,325 INFO 5387 [egg-static] starting static serve /public/ -> /home/website/qyapi/app/public
2017-08-25 01:33:37,328 INFO 5387 [egg-security] use csrf middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use methodnoallow middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use noopen middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use nosniff middleware
2017-08-25 01:33:37,332 INFO 5387 [egg-security] use xssProtection middleware
2017-08-25 01:33:37,332 INFO 5387 [egg-security] use xframe middleware
2017-08-25 01:33:37,333 INFO 5387 [egg-security] use dta middleware
2017-08-25 01:33:37,333 INFO 5387 [egg-security] compose 7 middlewares into one security middleware
2017-08-25 01:33:37,368 INFO 5387 [egg-watcher:app] watcher start success
egg-agent.log,common-error.log 日志文件都是空的
说明:
同样的环境, express generator 生成的项目通过 node 或pm2 部署启动都是没有问题的。
应该不是端口的问题,换成其他端口也是一样的
[egg-scripts] Save log file to /root/logs/server
看下日志
发自我的 iPhone
在 2017年8月25日,01:39,Leeson notifications@github.com 写道:
[egg-scripts] Save log file to /root/logs/server
@atian25
[---- server]# tail -f egg-web.log
2017-08-25 01:33:37,325 INFO 5387 [egg-static] starting static serve /public/ -> /home/website/qyapi/app/public
2017-08-25 01:33:37,328 INFO 5387 [egg-security] use csrf middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use methodnoallow middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use noopen middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use nosniff middleware
2017-08-25 01:33:37,332 INFO 5387 [egg-security] use xssProtection middleware
2017-08-25 01:33:37,332 INFO 5387 [egg-security] use xframe middleware
2017-08-25 01:33:37,333 INFO 5387 [egg-security] use dta middleware
2017-08-25 01:33:37,333 INFO 5387 [egg-security] compose 7 middlewares into one security middleware
2017-08-25 01:33:37,368 INFO 5387 [egg-watcher:app] watcher start success
egg-agent.log,common-error.log 日志文件都是空的
应该还有 2 个 master-xx 的日志的。另外你在服务器上直接 curl localhost 对应端口看看
发自我的 iPhone
在 2017年8月25日,09:04,Leeson notifications@github.com 写道:
@atian25
[---- server]# tail -f egg-web.log
2017-08-25 01:33:37,325 INFO 5387 [egg-static] starting static serve /public/ -> /home/website/qyapi/app/public
2017-08-25 01:33:37,328 INFO 5387 [egg-security] use csrf middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use methodnoallow middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use noopen middleware
2017-08-25 01:33:37,329 INFO 5387 [egg-security] use nosniff middleware
2017-08-25 01:33:37,332 INFO 5387 [egg-security] use xssProtection middleware
2017-08-25 01:33:37,332 INFO 5387 [egg-security] use xframe middleware
2017-08-25 01:33:37,333 INFO 5387 [egg-security] use dta middleware
2017-08-25 01:33:37,333 INFO 5387 [egg-security] compose 7 middlewares into one security middleware
2017-08-25 01:33:37,368 INFO 5387 [egg-watcher:app] watcher start successegg-agent.log,common-error.log 日志文件都是空的
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
额,我昨天也想发这个Issue的,我也遇到,我是一个hello world,直接npm start是跑不了,就像你那样。
title 的那个是 bug,https://github.com/eggjs/egg-scripts/pull/3 修复中。
但跟你们问题中的报错没关系,请提供下复现方式,可以尝试下:
@atian25 node v8.4.0 用egg-init新建一个simple的项目,安装完依赖,跑npm start就会出现。
还是无法复现
➜ aa node -v
v8.1.4
➜ aa npm start
> [email protected] start /Users/tz/Workspaces/tmp/aa
> egg-scripts start --daemon
[egg-scripts] Starting egg application at /Users/tz/Workspaces/tmp/aa
[egg-scripts] Run node /Users/tz/Workspaces/tmp/aa/node_modules/[email protected]@egg-scripts/lib/start-cluster {"v":false,"framework":"/Users/tz/Workspaces/tmp/aa/node_modules/egg","baseDir":"/Users/tz/Workspaces/tmp/aa"} --title=undefined
[egg-scripts] Save log file to /Users/tz/logs/aa
➜ aa curl localhost:7001/
hi, egg%
➜ aa npm stop
> [email protected] stop /Users/tz/Workspaces/tmp/aa
> egg-scripts stop
[egg-scripts] Stopping egg application at /Users/tz/Workspaces/tmp/aa
[egg-scripts] Got master pid ["33724"]
[egg-scripts] Stopped
原来这样就是成功吗?:)
因为没有什么提示,我和楼主都觉得没成功吧
curl 成功了啊
发自我的 iPhone
在 2017年8月29日,11:57,Ryan notifications@github.com 写道:
原来这样就是成功吗?:)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
楼主的问题是 服务器拒绝访问或502错误。
502 Bad Gateway 我怀疑是前面的 nginx 的端口配置不对导致反代没过来,@leeson8888 ssh 上去看看吧
目前的问题,我觉得可能和环境有关吧。
因为测试环境和本地是可以。
关键是日志文件里面没有明显的报错。
@atian25
奇怪的是,目前通过pm2 可以启动,但是启动的端口是7001,不知道pm2 启动走的是哪里,如何配置端口?
// server.js
const egg = require('egg');
const workers = Number(process.argv[2] || require('os').cpus().length);
egg.startCluster({
workers,
baseDir: __dirname,
});
@leeson8888 你没明白我的意思,我现在怀疑在 nginx 那层就拦截了请求了,根本没到 egg 那边。
你要 ssh 到服务器去,用 egg-scripts start --port=8080 启动服务后,然后 curl localhost:8080 看能否访问先
感谢 @atian25 的热心回答。
应该不是 nginx 拦截的问题,因为新启的虚拟机,没有任何其他服务。
关键是npm start 的时候,只能启动node服务,不能启动监听的端口(肯定没有占有),换过不同的端口试过,防火墙也关了的。
我觉得可能还是环境问题导致端口无法启动。
因为具体是运维在部署,我明天再让他全局安装一下egg-scripts(直接执行会找不到命令),按照你说的egg-scripts start --port=8080 启动试试,看看有什么错误。
@atian25 另外可以确定:
通过npm start 的方式
// config/config.prod.js
exports.cluster = {
listen: {
port: '8181',
}
}
这里配置的端口并不能生效,仍然启动的是7001的端口。
但是
"start": "egg-scripts start --daemon --port=8181", 是可以启动8181端口的
我在公司测试环境,阿里云上都试过了。
加了个用例,https://github.com/eggjs/egg-scripts/pull/4
listen 这个好像是有问题,@popomore 看看?
可以确认 egg-scripts 这边没有传 PORT
// https://github.com/eggjs/egg-cluster/blob/master/lib/app_worker.js#L16
const port = options.port = options.port || listenConfig.port;
options.port 是有值的,被 https://github.com/eggjs/egg-cluster/blob/master/lib/utils/options.js#L14 formatOptions 了。
@leeson8888 不需要全局,你 ssh 到服务器去,./node_modules/egg-scripts start --port=8080 然后 curl http://localhost:8080 看看
用 sudo npm start 试试
@leeson8888 listen.port 那个已经在 https://github.com/eggjs/egg-cluster/pull/40 修复了,重新安装下依赖即可。
但你反馈的 服务器拒绝访问或502错误。 这个问题,还是需要你 ssh 去看看啥原因。
@atian25 谢谢。
关于“服务器拒绝访问或502错误”,这个问题已经解决了,一直忙,忘了来更新。
是因为数据库的一个权限,导致端口启动失败。
比较奇怪的是为什么日志里面没有记录,必须通过egg-scripts start才能看到错误日志。
而且当时通过pm2 start,7001 端口启动成功了,没有想到是数据库权限的问题。
你要看错误日志是在哪里的,直接 node index.js 的话,master 的日志是在控制台输出的,不会在文件,除非你自己 >。
egg-scripts start 把 master 日志输出到 master-stderr.log 了。
是npm start 时候的日志,logs 下面的所有日志,包括了master-stderr.log,只提示启动失败,自动退出,但是没有 像egg-scripts start 一样,提示是数据库connection.js 的问题
你的 npm start 是啥? 不是 egg-scripts ?
"scripts": {
"start": "egg-scripts start --daemon --port=8080",
"stop": "egg-scripts stop",
"dev": "egg-bin dev --port 3001",
"test": "npm run lint -- --fix && npm run test-local",
"test-local": "egg-bin test",
"cov": "egg-bin cov",
"lint": "eslint .",
"ci": "npm run lint && npm run cov",
"autod": "autod"
}
没有区别啊,就是多了一个守护参数 --daemon。 执行的都是一样的啊。
提示是数据库connection.js 的问题
有日志截图么?
--daemon 只是把日志重定向到文件而已,不输出到控制台。
@coolicer https://github.com/eggjs/egg-scripts/pull/7/files 支持成功后输出 URL 了
@atian25 我使用egg日志,运行命令 EGG_SERVER_ENV=test npm start,输出显示在 Save log file to /home/appadmin/logs,但是我的日志设置了
logger: {
dir: "../logs"
}
该目录下也有日志,但是奇怪的是:只是启动时记录了一两条日志,再后面就没有记录日志了!想请问下是什么原因
绝对路径, appInfo.root join 下看看
Most helpful comment
@coolicer https://github.com/eggjs/egg-scripts/pull/7/files 支持成功后输出 URL 了