→ 작성한 react 코드를 js, html ,css 변환하는 작업을 우선 해준다.
server
폴더로 이동시켜준다.🔗 참고 : NodeJS에서 Path 사용방법
import path from "path";
app.use(express.static(path.join(__dirname, "../build")));
app.get("/*", (req, res) => {
res.sendFile(path.join(__dirname, "../build/index.html"));
});
위의 작업을 모두 완료한 후 server
에서 npm start
실행하면
서버 실행 포트인 localhost:5000 에 들어가도 클라이언트 화면이 잘 나오는 것을 확인할 수 있음!
heroku
는 단순히 package.json
파일을 참조하여 npm run start
를 한다고 생각하기.package.json
파일 생성후 script 코드를 작성해 줘야한다.🚀 배포 과정
client 폴더로 이동 ⇒ npm ci ⇒ npm run build ⇒ 서버에 빌드폴더로 이동
server 폴더로 이동⇒ npm ci ⇒ npm start
npm ci
⇒ 패키지들을 설치해준다.npm ci --dev
라고 명시해주면 devDependencies 에 있는 의존성들도 추가로 설치해준다!heroku
에서는 60초 이내에 빌드를 다 끝내고 서버 코드를 실행해야함따라서 npm start
전에 미리 해당 작업을 완료시켜주는 코드를 작성한다.
"client-build": "cd client && npm ci && npm run build && cd ../",
"server-build": "cd server && npm ci --dev && cd ../ ",
"heroku-prebuild": "npm run client-build && npm run server-build && mv ./client/build ./server/build",
npm run heroku-prebuild && npm run start
마주친 에러 ⇒ 아마 node 로 실행하는 import문을 못읽는 것 같다,
package.json
파일에서 start
스크립트문을 수정했다
// 에러메세지
> node server.js --exec babel-node
(node:62597) Warning: To load an ES module, set "type": "module"
in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/gyeongjiyun/Desktop/DevProject/seoul-cyber-punk/server/server.js:1
import "dotenv/config";
^^^^^^
"start" : "node --exec server.js babel-node" // ES 오류
만약 babel 설정을 해두었다면 start 스크립트가 babel-node
로 되어있는지 살펴보기
"start": "babel-node server.js" // 제대로 작동
"start" : "nodemon --exec babel-node server.js" // 제대로 작동
⛔️ nodemon
으로 빌드하여 서버에서 실행했을때 잘 작동하지만, 배포할때 nodemon
을 계속 사용하면 에러가 발생한다.
따라서, nodemon
은 개발 종속성으로 따로 스크립트문을 작성하고 배포를 위해서는 babel-node
를 사용하기
“start:dev" : “nodemon --exec babel-node server.js”
create a new app
클릭!Procfile
파일 만들기⇒ 애플리케이션 실행시 실행할 커맨드를 정의할 수 있는 파일
⇒ 프로젝트 root 디렉토리에 파일을 생성하고 <process>: <command>
의 형태로 내용을 추가하면 Heroku
는 이 파일을 기준으로 커맨드를 실행하게 된다.
[Node.js] Heroku에서 배포하기+H10(App crashed) 에러 해결방법
2022-02-06T20:56:10.128489+00:00 heroku[web.1]: State changed from starting to crashed
2022-02-06T20:56:11.918417+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" ...
2022-02-06T20:56:12.986375+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/...
nodemon
을 사용하고있는지 package.json
파일 살펴보기package.json
에 node
와 npm
버전 명시해주기Procfile
파일 만들어주기"engines": {
"node": "16.16.0",
"npm": "8.11.0"
},
web:npm start
api.js
의코드를 다시 살펴보기.env
파일에 있는 url
주소를 가져다 사용하고 있었고 heroku 는 당연히 .env
파일을 읽지 못한다. (gitignore 에 .env 파일이 있기때문에)async function get(apiUrl) {
const result = await axios.get(
`${process.env.REACT_APP_BASE_URL}${apiUrl}`,
{
withCredentials: true,
}
);
.....중략
const result = await axios.get(
`${process.env.REACT_APP_BASE_URL || "https://seoul-cyber-punk.herokuapp.com"}${apiUrl}`,
{
withCredentials: true,
}
);
https://seoul-cyber-punk.herokuapp.com/
📍 참고자료
Heroku에 React + Express 서비스 자동 배포하기 (HM #1)