카테고리 없음

[Case Study] 개발환경 만들기 - Git/Node/Nginx/Jenkins

심심한 낙지 2019. 8. 22. 20:14

POOPOO: 배변 일기 앱

SMALL

개발환경 구성도


 

윈도우 기본설정

  1. VMWare 설치
    https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/14_0
  2. Git 설치
    https://gitforwindows.org/
  3. ConEmu64 설치
    https://conemu.github.io/

 

리눅스 기본설정

  1. Centos 7 minimal 설치 및 파티션 할당
  2. Centos 7 minimal 네트워크 설정
  3. Centos 7 minimal SSH 접속허용
  4. Centos 7 minimal SFTP 접속허용
  5. Centos 7 minimal 포트포워딩

윈도우에서 SSH Key 생성하기

1) Git Bash 실행하기

 

2) .ssh 폴더 생성하고 안으로 이동하기

$ mkdir .ssh

$ cd .ssh

3) ssh rsa key 생성하기 ( : 이 나오면 3번 다 엔터)

$ ssh-keygen -t rsa

 

리눅스 기본설정 메뉴얼을 참조하여 가상머신 4개 만들기

  • Git
    IP : 192.168.136.122
    Host : git-server
    Port : 22
  • Node
    IP : 192.168.136.133
    Host : node-server
    Port : 3000
  • Nginx
    IP : 192.168.136.180
    Host : nginx-server
    Port : 443, 80
  • Jenkins
    IP : 192.168.136.199
    Host : jenkins-server
    Port : 9090

 


Git

- 설치

# yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

# yum install -y git

 

- 사용자 생성

# useradd git

# passwd git

 

- ConEmu 를 관리자권한으로 실행 후 Git 서버에 원격접속

$ ssh -p 22 root@192.168.136.122

 

# su git

$ cd ~

 

- ssh key 등록

$ mkdir .ssh

$ cd ./.ssh

$ ssh-keygen -t rsa

$ vi authorized_keys (:wq 로 저장하여 파일 생성)

 

- ssh key 관련 파일 및 폴더에 권한부여

$ chmod 700 ~/.ssh

$ chmod 600 ~/.ssh/id_rsa

$ chmod 644 ~/.ssh/id_rsa.pub

$ chmod 600 ~/.ssh/authorized_keys

 

- 다시 윈도우의 git bash를 열어서 아래와 같은 명령어를 실행합니다.

$ cd ~/.ssh
$ scp id_rsa.pub [접속아이디]@xxx.xxx.xxx.xxx:/home/[접속아이디]/.ssh/git_id_rsa.pub

 

- 다시 서버로 돌아옵니다

- 외부에서 전송한 공개키(xxx_id_rsa.pub)를 비밀번호 없이 서버에 접속할 수 있도록 등록해줍니다.

$ cat xxx_id_rsa.pub >> authorized_keys

 

- 저장소 폴더 생성 : sample.git

$ mkdir -p /home/git/repo/sample.git/

$ cd /home/git/repo/sample.git/

$ git init --bare --shared

 

- 방화벽 PORT : 22

# firewall-cmd --permanent --add-port=22/tcp

 

윈도우에서 sample.git 프로젝트를 받는 명령어

$ git clone ssh://[유저아이디]@[서버아이피]:[포트]/[저장소경로]

ex) git clone ssh:/git@192.168.136.122/home/git/repo/sample.git


Node

- 사용자 생성

# useradd node

# passwd node

 

- ConEmu 를 관리자권한으로 실행 후 Node 서버에 원격접속

$ ssh -p 22 root@192.168.136.133

 

- Node 서버 외부접속 후 node js 설치 및 세팅하기

- 최신버전 사용

# curl -sL https://rpm.nodesource.com/setup_10.x | bash -

# sudo yum clean all && sudo yum makecache fast
# sudo yum install -y gcc-c++ make
# sudo yum install -y nodejs

# node -v

 

- Node 서버에서 사용할 포트(3000)에 대하여 방화벽설정을 해줍니다.

# firewall-cmd --permanent --add-port=3000/tcp

 

- 프로젝트 폴더를 생성해줍니다.

# su node

$ mkdir app

$ cd app

 

- package.json 파일을 만들어줍니다.

$ npm init (모두 엔터키 입력)

$ vi package.json

[수정내용]

"start" : "node /home/node/app/index.js"

 

- Node 모듈 폴더권한 변경

$ su

# chown -R root:node /usr/lib/node_moeules

# chmod -R 775 /usr/lib/node_moeules

 

- 사용자 전환 후 express 모듈 설치

# su node

$ cd ~

$ npm install express

 

- index.js 파일 생성 후 테스트코드 작성

$ vi index.js

 

- 시스템 재시작

$ su

# reboot

 

- 다시 접속 후 node 앱 실행

$ cd ~/app

$ npm start


Nginx

- 사용자 생성

# useradd nginx

# passwd nginx

 

- ConEmu 를 관리자권한으로 실행 후 Nginx 서버에 원격접속

$ ssh -p 22 root@192.168.136.180

 

- nginx 설치 및 설정

# yum install -y yum-utils

vi /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

# yum-config-manager --enable nginx-mainline

# yum install -y nginx

 

포트허용 (http : 80, https : 443)

# firewall-cmd --permanent --zone=public --add-service=http

# firewall-cmd --permanent --zone=public --add-service=https

# firewall-cmd --reload

 

서비스 재시작

# systemctl restart nginx

# systemctl enable nginx

 

- 포트포워딩(상단 기본설정 참조) : 80


Nginx + Node 연동하기 (Nginx 서버에서 설정을 해야합니다.)

- 셀리눅스 보안해제

# setsebool -P httpd_can_network_connect 1

 

- nginx 설정파일 수정

proxy_pass http://[Node 서버 아이피]:[Node Port];

 

선택 1) default.conf 가 include 되어있는 부분을 지우고 직접 입력하기

vi /etc/nginx/nginx.conf

 

선택 2) default.conf 를 수정하기 

vi /etc/nginx/conf.d/default.conf

server {
    listen        80;
    server_name   localhost;
    
    // 추가내용
    location / {
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $http_host;
         proxy_set_header X-NginX-Proxy true;

         proxy_pass http://192.168.136.133:3000;
         proxy_redirect off;
    }
    
    // ...
}

 

nginx 재시작

# service nginx restart


Jenkins

- 사용자 생성

# useradd jenkins

# passwd jenkins

 

- ConEmu 를 관리자권한으로 실행 후 Jenkins 서버에 원격접속

$ ssh -p 22 root@192.168.136.199

 

- Jenkins 설치 및 세팅하기

- JDK 설치 가능한 버전 확인

# yum list java*jdk

- JDK 1.8 설치

# yum install -y java-1.8.0-openjdk.x86_64

 

- java 설치 경로를 확인 (맨위의 폴더)

# ls -l /usr/lib/jvm/

- 환경변수 설정

# vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64

 

- 환경변수 반영

# source /etc/profile

 

- wget 설치

# yum install -y wget

 

- jenkins 레포지토리 추가/ key 파일 임포트

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

 

- jenkins 설치

# yum install -y jenkins

 

- jenkins 포트변경 8080 ---> 9090

# vi /etc/sysconfig/jenkins

JENKINS_PORT="9090"

 

- 외부접근 허용

# firewall-cmd --permanent --add-port=9090/tcp

firewall-cmd --reload

 

- 포트포워딩 : 9090

 

- 접근허용

# systemctl enable jenkins

# systemctl start jenkins

# reboot

 

- 다시 접속 후 초기 비밀번호 확인

# cat /var/lib/jenkins/secrets/initialAdminPassword

 

- 윈도우에서 해당 포트로 접속 후 위에서 확인한 초기 비밀번호를 입력합니다.
http://192.168.136.199:9090/

 

- 왼쪽의 Install suggested plugins 버튼을 클릭후 설치를 기다립니다.

 

- 관리자계정을 생성하는 화면에 정보를 입력한 다음 Save and Continue 버튼을 클릭합니다.

 

-  jenkins URL을 입력 후 Save and Finish 버튼을 누릅니다.

- 이 부분은 나중에 정해질 수도 있으니 상황에 따라 Not now 를 누르고 다음에 재설정을 해 줄 수도 있습니다.

 

- Start using Jenkins 버튼을 클릭합니다.


소스코드관리 : Jenkins + Git 연동하기

- 빌드를 위한 git 설치

# yum install -y git

 

- ssh key 생성

$ mkdir .ssh

$ cd ./.ssh

$ ssh-keygen -t rsa

 

- Git Server에 ssh key 전송하기

# scp id_rsa.pub git@192.168.136.122/home/git/.ssh/jenkins_id_rsa.pub

 

- Git Server로 접속해서 jenkins ssh key 등록하기

[root@git-server .ssh]# cat jenkins_id_rsa.pub >> authorized_keys

 

- Git 빌드 설정하기

http://192.168.136.199:9090/job/Git/configure


빌드 및 배포 : Jenkins + Node 연동하기

- node 빌드를 위한 매개변수 추가

remote_ip : 원격접속 아이피

app_root : 프로젝트 소스가 들어있는 경로

 

- Jenkins 관리 > 플러그인 관리

 

- 설치 가능 탭 클릭

 

- Managed Script 설치

 

- Jenkins 관리 > Managed files 클릭

 

- Add a new Config 클릭

 

- Managed script file 를 체크한 다음 Submit 버튼 클릭

- 위에서 선언한 Argument (매개변수) 와 쉘 스크립트 코드를 넣고 Submit 버튼 클릭

- 원래는 배포를 위한 스크립트를 작성해야 하지만 아래 예시는 매개변수가 잘 오는지 테스트하는 코드를 입력해 두었습니다.

${remote_ip}

${app_root}

${branch_name}

 

- 아까 만들어 놓은 빌드 항목을 클릭(Node js)

 

- 왼쪽 사이드메뉴에서 구성을 클릭

 

- Build 항목에서 Excecute shell 선택 후 빌드 스크립트 작성

- Build 항목에서 Excecute Managed Script 선택 후 배포 스크립트 작성

 

- node 배포 스크립트 작성 진행중 ...

1) Node 간단한 코드 작성 후 pm2 를 이용하여 서비스 종료 시작을 해보기

2) Git 브랜치를 만든 다음에 거기에 커밋할 해면서 클론하고 서비스 기동하고를 반복해서 잘 되는지 확인

3) 스크립트 파일로 만든 다음에 잘 되는지 확인

4) Jenkins 스크립트에 복사해서 넣은 다음 잘 되는지 확인

https://setyourmindpark.github.io/2017/04/22/jenkins/jenkins-2/

https://setyourmindpark.github.io/2017/04/23/jenkins/jenkins-3/

 

jenkins로 배포하기 - nodejs-2

jenkins로 nodejs 서버 배포하기 - 2이전 포스트 jenkins로 nodejs 서버 배포하기 - 1 를 통해 nodejs 서버를 remote 서버로 쉘스크립트 EOF를 사용하여 remote 서버에서 git clone 하여 배포하는 법을 알아보았다.이번 포스트에서는 두번째방법으로 첫번째 방법보다는 좀더 간단한 방법을 소개하려한다. 쉘 스크립트

setyourmindpark.github.io

 

LIST