타입스크립트

Typescript 공부하기 14일차 (2022.10.31)

개발자A입니다 2022. 11. 1. 00:17

서버 용으로 M1 Mac mini를 살 때, 애플 실리콘으로 인한 어려움이 있을 것으로 예상은 했었다.

하지만 그래도 시간이 상당기간 흘렀는데..

생각보다 M1 이전 정보로 M1 맥에 적용하기에는 정보가 부족한 것이 많이 있었다.

그나저나 왜 디렉터리에 대한 변경사항이 많은 것인가ㅠㅠ

보안칩이 추가되서 어려운 해결책도 있었고,

경로가 이전과 다르거나 이전에 쓰이던 파일이 현재는 없는 경우도 있었다.

그래도 일주일만에 원하던 상태로 만들었다.

현재 상태는 아래와 같다.

- 내 맥북만 맥미니에 ssh접근이 가능하며

- 같은 네트워크가 아니라 외부 네트워크에서도 접근 가능하여 카페에서도 서버를 관리할 수 있다.

- 서버를 재부팅 하면 launchd로 pm2가 작동한다. 

ㄴ 처음에는 sh파일로 하려고 힘들게 sh파일도 작성해서 테스트 했는데  필요 없게 되었다ㅎㅎ

   ㄴ 그러고 보니 내일은 같은 방법으로 DDNS 업데이트 자동화도 해야겠다.

- TS로 서버 연결

- 서버에 MySQL 설치

   ㄴ 이것도 데몬처리 해야겠다.

- SwaggerUI 적용

 

 

겨우 이거 하는데 일주일이 소요되었다니ㅠㅠ

m1 맥 미니가 아니었다면 하루만에 끝났을 일이다..

우분투로는 이미 경험이 있었으니까ㅎ

그래도 해놓고 나니 성취감을 느낄 수 있었다!

 

아래는 시도하면서 메모해둔 사항들이다.

 

미래의 나에게 그리고 나처럼 고생하는 누군가에게 도움이 되기를..

그리고 블로그를 완성 하면 그곳에는 이쁘게 정성들여 정리해서 올려야겠다.

=======================================

 

1)  pm2 설치
npm i pm2
2) package.json 수정
" ""scripts"": {
    ""pm2"": ""pm2 start index.js""
  },"
3) .sh script 만들기
https://www.digitalocean.com/community/tutorials/how-to-host-multiple-node-js-applications-on-a-single-vps-with-nginx-forever-and-crontab
ㄴ 참고 자료
ㄴ 1) .bashrc 파일 확인
    ㄴ 개념 https://dohk.tistory.com/191

어렵다
ㄴ export에서 환경을 설정해주어야함
https://wnw1005.tistory.com/264
ㄴ 1차 시도
     ㄴ         export PATH=/usr/local/bin:$PATH
     ㄴ 정상작동 하지만 pm2 로 제어 불가능
     ㄴ 하지만 실행은 되고 있으며 ps -ef | grep pm2로 검색하는 경우 아래와 같이 환경이 표시되어 건색됨,
     ㄴ501 55204     1   0  3:24PM ??         0:00.34 PM2 v5.2.2: God Daemon (/Users/ryan/.pm2) 
ㄴ 2차 시도 
     ㄴ echo $PATH    조회 후 가장 상위 환경을 찾는다
     ㄴ env로 조회하여 중복되는 상위 환경을 찾아보았다.
     ㄴ 결과는 /bin:
     ㄴ 기존 예제의 "PATH=/usr/local/bin:$PATH"에서 "PATH=/bin:$PATH" 으로 변경하기
     ㄴ 동일한 이슈발생
ㄴ 3차 시도
     ㄴ 여러 경로로 바꾸어 보던중 설마 맥이라 그런가? 하고 검색했보았다.
     ㄴ 해결책은 의외로 간단했다. pm2 글로벌로 설치
     ㄴ 그렇다 명령어가 안먹은 것이다ㅎㅎㅎㅎㅎㅎ

crontab으로 reboot시 작성한 쉘스크립트 실행하기
ㄴ 1차 시도
     ㄴ crontab -e로 작성시 저장 안됨
     ㄴ 나와 동일한 문제가 있는 사함들이 있었으나 해결모든 해결책이 작동하지않음
     ㄴ 해결한 사람이 결국 launchd를 사용했다고 남겨놓음
ㄴ 2차 시도
     ㄴ launchd의 존재는 알고 있었으나..사용해본적이 없다
     ㄴ 예시를 보고 작성했나 오류 발생
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html
https://alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs/
"<plist version=""1.0"">
<dict>
    <key>Label</key>
    <string>com.ryan.bootupcustom</string>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>/Users/ryan/Git/blog/back/bootup.sh</string>
    </array>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>"
     ㄴ 127에러 발생
https://tldp.org/LDP/abs/html/exitcodes.html
     ㄴ 명령어가 잘못됨
     ㄴ <string>sh</string>를 빼고 실행
     ㄴ 78번 오류 발생
I read man launchctl, find 78 means function not implemented.
     ㄴ 흠.. 그렇다면 
"     ㄴ아래 사항도 제거
<key>KeepAlive</key>
    <true/>"
     ㄴ 이제 "sudo launchctl list"를 조회했을 때 status가 0으로 확인됨
     ㄴ 아직 pm2 ls 에서 조회되는 것이 없어서 재부팅
     ㄴ 재부팅해도 pm2 ls 로 조회안됨ㅠㅠ
https://xho95.github.io/macos/daemon/launchd/launchctl/2020/05/18/Running-and-Managing-Daemons-on-Mac.html

성공!
"<?xml version=""1.0"" encoding=""UTF-8""?>
<!DOCTYPE plist PUBLIC ""-//Apple//DTD PLIST 1.0//EN"" ""http://www.apple.com/DTDs/PropertyList-1.0.dtd"">
<plist version=""1.0"">
<dict>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/opt/homebrew/Caskroom/miniforge/base/bin:/opt/homebrew/Caskroom/miniforge/base/condabin:/opt/homebrew/bin:/opt/homebrew/sbin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin</string>
    </dict>
    <key>Label</key>
    <string>com.ryan.bootup</string>
    <key>UserName</key>
    <string>ryan</string>
    <key>WorkingDirectory</key>
    <string>/Users/ryan/Git/blog/back</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/pm2</string>
        <string>start</string>
        <string>index.js</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>"
과정
1) env 명령어 결과중, PATH= 뒤에 나오는 값 복사
EnvironmentVariables 설정 내 PATH key 값에 대한 string 값으로 붙여넣기
2) env 명령어 결과중, USER= 뒤에 나오는 값 복사
Username key 값에 대한 string 값으로 붙여넣기
3) npm run pm2 명령어를 입력하는 디렉터리로 이동하여 pwd로 확인한 경로 복사
WorkingDirectory key 값에 대한 string 값으로 붙여넣기
4) which pm2 명령어 결과를 복사
ProgramArguments key 값에 대한 string 값으로 붙여넣기
5) 이어서 string 값으로 start와 실행해야하는 js파일명 입력
6) RunAtLoad에 대해 true값 설정