시놀로지 NAS위에 젠킨스 도커로 node서버 자동배포환경 만들기

이태혁·2022년 12월 2일
0

1. 나스에서 jenkins:jenkins 이미지 다운로드(이미 젠킨스 환경이 설치되어 있어서 편함)

2. 위 이미지로 컨테이너 생성(49156, 49155는 임의로 정함)

  - 나중을 위해 NAS볼륨과 포트를 연결해줌
  - 포트의 경우 나중에 더 추가해도 되는데 젠킨스를 접속하게 할 8080포트와 express가 실행할 3000포트는 필수임
  - 이 도커 컨테이너 포트(내부)를 나스의 포트(외부)로 연결해서 밖에서 접속할 수 있음
  - 예) xxxx.synology.me:49155로 도커의 localhost:8080에 접속가능
  <img src="https://velog.velcdn.com/images/taelee/post/d3dc06d0-cafe-4f9a-8bbb-b8865deeca84/image.png" width=500>
  <img src="https://velog.velcdn.com/images/taelee/post/6c351e67-81d5-49d8-8a22-6e0d07720b23/image.png" width=500>
  - 볼륨은 나중에 도커 컨테이너 내부로 파일을 옮길때 필요(이번 프로젝트에서는 딱히 사용하지는 않는데 나중을 위해 만듬)

3. 리버스 프록시로 젠킨스의 접속할때 https로 접속가능하게 해주기(40333은 임의로 정함)

  • 위에 컨테이너만 실행해도 사실 xxxx.synology.me:49155로 접속하면 젠킨스 서버로 접속가능

  • 다만 젠킨스를 https로 접속하려면 아래 설정해서 리버스 프록시를 설정해주면 됨

  • 그러면 https://xxxx.synology.me:40333 -> http://xxxx.synology.me:49155로 접속할 수 있음

  • 나중에 해도 될것 같긴한데 젠킨스 초반 설정할 때 현재 젠킨스 서버 url을 입력하는게 있어서 나중에 바꾸면 이것도 바꿀수 있나 싶음

    • https로 이용할거면 미리 하는게 나은 듯

    4. 젠킨스 초반설정

  • https://xxxx.synology.me:40333으로 접속하면 젠킨스 초기 설정 페이지가 뜸

  • 초반 비번 치라하는데 아래 경로가면 초기 비번 볼 수 있음(cat /var/jenkins_home/secrets/initialAdminPassword 치면 될듯)

  • install sugested plugins만 선택하고, 앞으로 쓸 아이디, 비번, 이름, 이메일정도 치면 자동으로 완료됨

  • 블로그에 잘 설명되어 있음

5. 깃헙 레포지토리 웹훅 설정하기

  • 깃헙 레포에 푸쉬를 했을때 젠킨스 서버로 알려주는 일종의 프로그램
  • 깃헙 레포지토리의 setting→webhooks→add webhook

  • 주의할점 젠킨스 주소 뒤에 /github-webhook/을 붙여야 되는데 마지막에 /안붙이면 302에러 남
  • Content type은 application/json으로 해서 잘 됐는데
  • application/x-www-form-urlencoded으로 하면 어떨지 모르겠음
  • 중간에 SSL Verification은 젠킨스 주소를 https로 입력해야지만 나타남

6. 젠킨스 서버에서 item 만들기

  • 위에서 알림을 보냈을때 젠킨스 서버가 git을 pull받고 이후 행동들을 하기 위함
  • 블로그 글 보고 따라함
  • 중간에 깃헙 주소 넣을 때 아이디 패스워드 쓰지말라는 에러가 날수잇는데
    해결법이 두개 있음
    - 깃헙 주소 앞에 github token을 입력해서 주소를 넣음
    - 예) https://gitub.com/xxxhttps://깃헙토큰@gitub.com/xxx
    - credential에 깃헙 아이디 + 토큰 입력
    - password치는 란에 토큰을 입력해서 저장해놓고 그때그때 불러서 쓰면 되는듯
  • 빌드 Steps에 레포로부터 받았을때 실행할 동작을 입력한다
  • npm install 후에 pm2로 실행된 프로젝트들을 리스타트해주게 한다

7. 익스프레스 서버 만들고 서버에 pm2실행해놓기

  • 로컬에서 npx express-generator로 서버 하나 만들고
  • 위에 웹훅을 지정해놓은 서버에 푸쉬해놓는다
  • 맨처음부터 젠킨스가 빌드해주는지 모르겠는데 내 경우는 뭐가 잘 안돼서 아래 사진의 build now를 직접 클릭함
  • 마지막으로 젠킨스가 돌아가고 있는 도커의 터미널로 접속해서 젠킨스 아이템이 클론되는 폴더로 들어감
    • cd /var/jenkins_home/workspace/jenkins-nodejs-221201 마지막 부분은 젠킨스 아이템명
    • 여기에서 pm2 start bin/www 로 pm2로 익스프레스 서버를 실행시키면 앞으로 젠킨스가 레포를 풀 받았을때 pm2가 자동으로 변화를 감지해서 서버를 재시작 시켜줌

8. 전체 원리 정리

  • 깃헙 웹훅에서 레포가 푸쉬될때마다 신호를 젠킨스에게 보냄
  • 신호를 받은 젠킨스는 깃헙 레포를 풀받고 미리 입력된 build step을 실행함
  • npm install과 pm2 restart all로 혹시 pm2에 인식안됐을 때를 대비해서 pm2를 리스타트 시킴
  • 도커의 내부 3000포트와 연결된 외부포트(여기서 49156)로 접속하면 잘 실행되는 서버를 볼수 있음
    • 주소: xxxx.synology.me:49156

참고

  • 만약에 중간에 젠킨스 서버에 뭔가 설치해야되는데 sudo권한이 없어서 설치하기 힘들다면

    • 해결책을 찾아보니 sudo를 깔라는데 root계정이 아니라 sudo조차 깔지 못함
    • 블로그에서 설명해줌
    1. 제어판 터미널 및 SNMP에서 SSH서비스 활성화 클릭

    2. 맥 터미널을 켜서 SSH접속

      • 2211 포트를 열어놨으면 ssh 나스아이디@xxxx.synology.me -p 2211 을 치면 됨
      • 여기서 포트를 열어놨다는 말은 집에서 공유기 와이파이가 아닌 외부에서 접속했을때를 말함(=포트포워딩)
      • 포트 여는 방법은 아래 사진 참고(공유기 관리자의 접속하는 방법은 인터넷 참고)
      • 2211을 포트를 열어놓지 않았다면 집에서 공유기로 와이파이를 접속해야만 접근가능함
      • 이때는 ssh 나스아이디@192.168.0.xx -p 2211 로 접속하면 됨 xx는 나스가 공유기로부터 할당받은 아이피주소에 따라 달라짐.
        • 그리고 iptime 공유기이면 보통 192.168.0.xx 형식인데 다른 공유기이면 이 주소도 달라짐
      • 이렇게 접속하면 핑거프린트 어쩌구에서 yes누르고 시놀로지 나스 비번치면 접속됨
      • 이게 나스를 터미널로 조종할 수 있게됨
    3. 나스에서 도커 컨테이너의 root로 접속하기

      sudo docker container exec -u 0 -it 컨테이너이름 bash 치고 시놀로지 나스 비번치면 도커 컨테이너에 접속됨

    이제 vim 이나 이것저것 깔수 있음

profile
back-end, cloud, docker, web의 관심이 있는 예비개발자입니다.

0개의 댓글