2016-12-18 2 views
0

postjava가있는 nodejs webapp가 있습니다. 나는이 서버에서 supervisord을 사용하여 이것을 실행하고있다. 문제는 nodejs에서 postgresql 로그인이 실패하고 있다는 것입니다. 오류 메시지는 다음수퍼바이저를 사용하여 노드 응용 프로그램을 실행할 때 Postgres 연결이 실패합니다.

no PostgreSQL user name specified in startup packet

기본적으로 DB에 연결하는 동안 어떤 사용자 이름 웹 애플리케이션으로부터 전달되고 있지 의미한다.

웹 응용 프로그램에서 포스트그레스에 연결하기 위해 유닉스 소켓을 사용하고 있습니다.

[program:webapp1] 
user=webapp1 
command = node /home/webapp1/projects/webapp1/app.js 
directory = /home/webapp1/projects/webapp1 
autostart = true 
autorestart = true 
stdout_logfile = /var/log/supervisor/webapp1.log 
stderr_logfile = /var/log/supervisor/webapp1_err.log 

내가 관리자가 웹 애플리케이션 사용자 webapp1에서 실행되는 실행되고 있음을 확인했다 :

webapp1.conf는 것 같습니다.

한 가지 더 - 사용자가 webapp1으로 로그인하여 내 webapp를 시작하면 다른 기능이 작동합니다. 당신이 당신의 서버가이 peer 정도 오래과 포스트 그레스에 구성된 사용자가 거기로 그 trustpg_hba.conf 세트 local 로그인을 예를 PostgreSQL--하는 암호없는 로그인을 사용하도록 설정있어 같은

+0

마침내 포기하고 사용 [PM2] (http://pm2.keymetrics.io/) – unlimit

답변

0

소리가 난다 귀하의 리눅스 사용자와 동일한 이름으로 Postgres를 응용 프로그램에서 작동 시키려면 추가 구성을 할 필요가 없습니다. Linux 사용자 계정을 기반으로 DB에 대한 액세스를 효과적으로 부여합니다.

cron을 통해 간단한 nodejs 스크립트를 실행할 때도 동일한 문제가있었습니다. 그것은 쉘에서 잘 작동하지만 cron을 통해 실행할 때 username이 누락되었다고 불평했습니다. 가능한 한 자동으로 구성을 구성했기 때문에 코드에서 사용자 이름을 명시 적으로 설정하는 것은 옵션이 아니 었습니다. 스크립트를 실행하는 사용자의 권한을 파악하는 데 필요했습니다.

커넥터 라이브러리 또는 포스트그레스 자체가 환경 변수의 사용자 이름을 유추합니다. 내 crontab의 상단에 USER=<cron user name>을 설정하여 문제를 해결할 수있었습니다 (대화식 셸의 env에서 명시 적으로 설정 되었기 때문에 이것이 작동합니다).

그것은 것입니다 당신의 webapp1.conf에 추가 할 올바른 구문과 같습니다

environment=USER="<user name here>"