POOPOO: 배변 일기 앱

개발환경 구성도
윈도우 기본설정
- VMWare 설치
https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/14_0 - Git 설치
https://gitforwindows.org/ - ConEmu64 설치
https://conemu.github.io/
리눅스 기본설정
- Centos 7 minimal 설치 및 파티션 할당
- Centos 7 minimal 네트워크 설정
- Centos 7 minimal SSH 접속허용
- Centos 7 minimal SFTP 접속허용
- 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