발단
회사 코드를 배포하는 과정에서 개발 단계에서 아무런 문제가 없었는데 pm2로 서버를 열자 에러가 났다.
error bucket is required at new s3storage
어라? multer 관련 config에서 환경변수 세팅을 잘 했는데..
그리고 개발단계에서는 에러가 나지 않는데?
먼저 이 에러는 new s3storage를 사용하기 위해서는 bucket이 필요하다는 것이고,
당연히 필요하다. 그런데 저장장소를 지정해주어야 하는데, 이 부분이 지정되지 않았다는 것이다.
해결과정
1. bucket의 환경변수를 개발, 배포환경에서 둘 다 디버깅하여 확인한다.
console.log(process.env)
확인해본 결과 개발환경에서는 각 .env에 입력한 환경변수가 정상적으로 출력되는데,
배포환경에서는 pm2에 관련된 세팅들이 길게 나열되었고, .env의 내용은 없었다.
2. pm2에서 env를 적용하기 위해서 별도로 설정을 해준다.
설정하기 위해서 먼저 아래 명령어를 입력하면 ecosystem.config.js 파일이 생성된다.
pm2 ecosystem
3. env에 관련한 세팅을 한다.
es6으로 별도로 지정하기에는 당장 배포를 얼른 하는게 중요했어서 확장자명을 cjs로 변경하고 그대로 진행했다.
es6으로 package.json에서 type과 함께 import 문으로 바꿔도 좋겠지만 당장 중요한 부분은 아니고 본론은 아니니 생략하려 한다.
name은 pm2에서 설정할 이름, script는 서버의 진입점, watch는 변경사항이 있을 때 바로 nodemon처럼 재시작할지 여부다.
처음 설치가 되면 여러 설정에 대한 디폴트값이 있지만, 당장 필요한 것은 환경변수 세팅이므로 env 프로퍼티에 값을 입력해준다.
const dotenv = require('dotenv');
dotenv.config();
module.exports = {
apps: [
{
name: "server",
script: "./src/server.js",
watch: true,
env: {
PORT: process.env.PORT,
MARIA_USERNAME: process.env.MARIA_USERNAME,
MARIA_PASSWORD: process.env.MARIA_PASSWORD,
MARIA_DATABASE: process.env.MARIA_DATABASE,
MARIA_HOST: process.env.MARIA_HOST,
...
},
}
]
};
개발환경과 배포환경의 환경변수가 다를 경우 아래와 같이 세팅한 이후 이어서 세팅하면 된다.
env: {
// 개발 환경설정
NODE_ENV: 'development',
},
env_production: {
// 배포 환경설정
NODE_ENV: 'production',
}
혹시나 하드코딩을 원할 경우 이렇게 직접 입력도 가능하다.
module.exports = {
apps: [
{
name: "server",
script: "./src/server.js",
watch: true,
env: {
"HOST": "example123123"
},
}
]
};
마지막으로, 입력한 env를 실행해줘야 한다.
pm2 start ecosystem.config.js // NODE_ENV: "development"
pm2 start ecosystem.config.js env-production // NODE_ENV: "production"
환경변수 문제만 있던 것이라면 바로 서버가 열릴 것이다. 이후 process.env를 출력해보면 pm2에서는 pm2의 설정들과 그 아래에 입력한 env 내용들이 입력된 것을 알 수 있다.
'개발 > http, server' 카테고리의 다른 글
[AWS] 도대체 클라이언트는 어떻게 private subnet에 있는 api와 통신할 수 있는가.. (해결) (0) | 2023.10.26 |
---|---|
[AWS]The AWS Access Key Id you provided does not exist in our records. (0) | 2023.10.18 |
[nginx] location /api 로 api주소를 시작하는 이유 (0) | 2023.08.18 |
[AWS EC2] ssh 접속시 permission publickey 에러 (0) | 2023.08.17 |
[http api] 특정 api에서만 헤더의 쿠키가 보이지 않는 경우 (0) | 2023.07.22 |