Server

[NCP] NCP Server 배포하는 방법

meizzi 2024. 2. 13. 16:51
728x90
반응형

1. Services - Compute - Server 선택

2. 서버 생성 및 이미지 선택

  • 부팅 디스크 크기: 50GB
  • 이미지타입: Application
  • Application 이미지타입: Jenkins
  • 서버 타입: Compact

서버 이미지 선택

  • 가장 최근 버전의 Jenkins-CentOS-7.8 선택

3. 서버 설정

서버 설정

4. 인증키 설정

  • 새로운 인증키 생성 및 저장

인증키 설정

5. 네트워크 접근 설정

네트워크 접근 설정
새로운 ACG 생성

6. 최종 확인

최종 확인

  • 상태가 생성중 - 부팅중 - 설정중 - 운영중으로 변경되는지 확인

7. 공인 IP 생성

  • Public IP 선택
    Public IP 생성

공인 IP 신청
공인 IP 신청

8. 포트 포워딩 설정

  • 비공인 IP
    • NCP 같은 네트워크 그룹 권한 컴퓨터에서 접속할 때 사용
    • 우리 환경에서는 사용 안함
  • 공인 IP
    • 서버 외부에서 Tomcat 등을 받을 때 사용
    • 프로그램 설치 권한 없음
    • 이미 설치된 프로그램 서비스를 받고 싶을 때 사용
  • 서버 접속용 공인 IP
    • 원격 제어로 들어가고 싶을 때 사용
    • Putty 원격 네이버 서버 접속
    • 프로그램 설치 권한 있음
  • 포트 포워딩
    • 만일 서버 접속용 공인 IP가 2000번 포트라고 할 때 자동으로 비공인 IP인 22번 포트로 연결
      • NCP server를 기본 비공인 IP 22포트로 접속
        포트 포워딩 설정

9. 리눅스 계정 암호 확인

  • 서버 관리 및 설정 변경 - 관리자 비밀번호 확인

10. ACG 규칙 (방화벽 설정)

  • 기본적으로 모든 서버로 들어오는 요청 차단
    • 22번 포트는 앞서 설정해놓았지만 2000번 포트가 새로 생겼으므로 추가 설정 필요

11. Putty 접속

  • 호스트 이름에 서버 접속용 공인 IP, 포트번호 입력
  • 계정 비밀번호 변경
    • 암호 복사해서 shift + insert + enter 동시에 클릭

12. Java 설치

  • 기존에 11 버전 깔려있음
  • 프로젝트 버전은 17 버전이므로 맞춰야 함
  • 복사한 주소 Putty에 설치
    • 설치할 폴더 생성
      • mkdir /usr/mydir
    • 생성한 폴더로 이동
      • cd /usr/mydir
    • 웹 상의 파일 다운로드
      • wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
    • 다운로드한 파일 압축 해제
      • tar -zxvf jdk-17_linux-x64_bin.tar.gz
  • 설치해도 java -version 해보면 jdk 11 버전으로 되어 있음
  • 설치한 jdk 17을 기본 버전으로 설정
    • 모든 사용자 설정 파일 경로 - /etc/profile
    • vi 에디터를 사용하여 편집
      • vi /etc/profile
      • 편집하려면 소문자 i 입력해서 insert모드로 변경
      • jdk 17 경로 추가
        • export JAVA_HOME=/usr/mydir/jdk-17.0.10
        • export JRE_HOME=/usr/mydir/jdk-17.0.10
        • PATH=$JAVA_HOME/bin:$PATH:
        • export PATH
      • 순차적으로 아래 명령어 진행
        • esc
        • shift + ;
        • :wq 입력
        • enter
          • vi 에디터 종료
      • 변경사항 저장
        • source /etc/profile
        • echo $JAVA_HOME
        • java -version

13. Maven 설치

  • pom.xml 설정에 따라 라이브러리 관리
  • sts 내장되어 있는 Maven 버전 확인
    • Window - Preferences - Maven - Installations - EMBEDDED 버전 확인
  • Maven 3.9.4 설치
  • 설치한 maven-3.9.4 버전 설정
    • vi 에디터 사용
      • vi /etc/profile
      • i 입력하여 insert 모드로 변경
      • export MAVEN_HOME=/usr/mydir/apache-maven-3.9.4
      • PATH=$JAVA_HOME/bin:$PATH:$MAVEN_HOME/bin
      • esc
      • shift + ;
      • :wq 입력
      • enter
        • vi 에디터 종료
    • 변경사항 저장
      • source /etc/profile
      • echo $MAVEN_HOME
      • mvn -version

14. Tomcat 설치

  • sts에 내장되어 있는 Tomcat 버전 확인
    • Tomcat 10.1.17
  • Tomcat 10.1.17 설치
    • https://tomcat.apache.org/download-10.cgi
      • 해당 브라우저에 안나와있는 버전이면 Archives에서 확인
      • apache-tomcat-10.1.17.tar.gz 링크 주소 복사
    • wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.17/bin/apache-tomcat-10.1.17.tar.gz
    • tar -zxvf apache-tomcat-10.1.17.tar.gz
  • 설치한 tomcat-10.1.17 버전 설정
    • vi 에디터 사용
      • vi /etc/profile
      • i 입력하여 insert 모드로 변경
      • export TOMCAT_HOME=/usr/mydir/apache-tomcat-10.1.17
      • esc
      • shift + ;
      • :wq 입력
      • enter
        • vi 에디터 종료
    • 변경사항 저장
      • source /etc/profile
      • echo $TOMCAT_HOME
  • Tomcat 시작
    • $TOMCAT_HOME/bin/startup.sh
  • Tomcat 종료
    • $TOMCAT_HOME/bin/shutdown.sh
  • Tomcat 사용
    • Tomcat 서버 시작
    • 비공인IP:22 → 서버 접속용 공인 IP:2000 → Putty 접속용
    • http://ncp공인IP:8080 사용
    • ACG (방화벽) 설정해야 접속 가능
      • 8080 포트 열어달라고 설정
    • 성공

15. MySQL 설치

  • MySQL 8 버전 설치
    • https://www.mysql.com/downloads/
    • 마지막 아래 링크로 이동
    • MySQL Yum Repository로 이동
    • 확장자가 rpm은 Redhat 계열 설치 종류
    • centOS는 Redhat 계열
    • 이건 tar 명령어로 압축 해제하지 못하고 rpm이나 yum으로 해제 가능
      • yum install https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm 
      • MySQL 실행할 때 필요한 모든 종속 라이브러리 다운로드 관리 명령
    • 설치 가능한 목록 확인
      • yum list mysql-community-*
    • 설치
      • yum install mysql-server
    • 설치된 MySQL 관련 디렉토리
      • find / -name “mysql*”
      • 마지막에 8 버전 설치 됐는지 확인
    • 설치 경로 확인
      • which mysql
    • Windows는 MySQL을 같이 부팅 동시 시작
    • Linux는 mysql을 수동 명령어로 시작
      • systemctl start mysqld
  • MySQL 설정
    • 관리자 계정 내장된 root의 초기 암호 변경
      • 암호정보 포함 파일명
        • /var/log/mysqld.log
      • 암호 확인하는 방법
        • vi /var/log/mysqld.log
        • grep ‘temporary password’ /var/log/mysqld.log
          • 더 쉽게 확인 가능
      • 암호 변경
        • mysql -u root -p
          • 초기 암호 복사해서 shift + insert + enter 동시에 눌러서 붙여넣기
        • alter user root@localhost identified by “변경할 암호”;
        • quit으로 빠져나와서 다시 mysql -u root -p으로 암호 변경 확인
    • root는 현재 서버 컴퓨터에서만 접속 가능한 유저
    • 새로운 유저 생성
      • 모든 컴퓨터 접속
      • create user 유저아이디 @’%’ identified by ‘비밀번호’;
    • 현재 데이터베이스 조회
      • show databases;
    • 새 데이터베이스 생성
      • create database kodi_ncp_db;
    • 권한 부여
      • grant all privileges on kodi_ncp_db .* to kodi_ncp;
    • quit으로 빠져나오고 kodi_ncp 계정으로 재접속
      • mysql -u kodi_ncp -p;
    • 현재 접속하고 있는 유저 확인
      • select user();
    • 사용할 데이터베이스 변경
      • use kodi_ncp_db;
    • 현재 접속하고 있는 데이터베이스 확인
      • select database();
    • 데이터베이스 테스트
      • create table test(a int , b varchar(30), c text);
      • insert into test values(1, 'text1', '1번 텍스트데이터');
      • select * from test;
  • 데이터 이관
    1. 내 컴퓨터에서 NCP 서버에 있는 DB에 접속
      • ACG 규칙에 3306 포트 설정 추가
        • 클라이언트는 0.0.0.0/0로 설정
      • cmd 창에서 MySQL 접근
        • mysql -u kodi_ncp -h 공인 IP -p
      • 데이터베이스 확인
        • use kodi_ncp_db;
        • select user(), database();
        • select * from test;
    2. Workbench에서 NCP 서버에 있는 DB에 접속
      • Workbench - Connection 생성
        • Hostname - 공인 IP
      • 테이블 데이터 확인
        • select * from test;
      • Workbench에서 데이터 삽입 후 Putty에서 확인
        • insert into test values(2, 'text2', 'workbench 데이터 이관');
    3. 로컬에 있는 DB 테이블을 NCP 서버로 넘기기 (export/import)
      • export
        • 기존 데이터베이스를 외부 파일/폴더로 저장
        • KoDi에서 진행
      • import
        • export한 db를 동일 db나 다른 db로 복사
        • kodi_ncp에서 진행
        • import한 테이블 확인
      • 데이터 이관 후 Putty에서 데이터 확인
  • sts 프로젝트와 연결
    • properties 파일 내 db 연결 정보 NCP 서버에 있는 db 사용하도록 변경
      # db 연결정보
      spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
      spring.datasource.url=jdbc:mysql://공인IP:3306/ncp에 만든 db명
      spring.datasource.username=ncp 유저 이름
      spring.datasource.password=ncp 유저 비밀번호​
    • DB 정보 변경하고 프로젝트 실행해서 연결 잘 됐는지 확인
    • 이때 사용하는 DB는 로컬 DB가 아니라 NCP DB

16. Github 연결

  • Putty에 git.exe 설치
    • yum install git
    • git --version
  • git 연결
    • 클론할 디렉토리 변경
      • cd /usr/mydir
    • 클론
      • git clone 클론할 Github 주소
    • 클론한 디렉토리로 이동
      • cd KODI_project
    • 현재 경로 확인
      • pwd
    • application.properties 파일이 없어서 새로 생성
      • vi KODI/src/main/resources/application.properties
      • sts에 있는 application.properties 내용 그대로 복사
  • sts에서 Maven Build
    • pom.xml 아래 코드 추가
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
              <skipTests>true</skipTests>
          </configuration>
      </plugin>​​
    • 추가하고 Github에 push 후 Putty에서도 다시 push
      • git pull origin main
    • Run As - Maven Build - Edit Configuration
      • Goals에 clean package 입력
  • Putty에서 Maven Build 및 부트 실행
    • cd KODI
    • mvnw 사용
      • ./ : 현재 폴더에 있는 mvnw 사용
        • ./mvnw clean package
      • mvnw를 실행할 수 있도록 실행 권한 부여하고 다시 실행
        • chmod +x mvnw
        • ./mvnw clean package
    • cd target
      • 프로젝트명-0.0.1- SNAPSHOT.war가 있으면 maven 빌드 잘 된 것
    • SpringBoot 서버 실행
      • java -jar KODI_project-0.0.1-SNAPSHOT.war
    • 브라우저에서 http://ncp서버공인IP:포트번호로 사용하므로 실행 전 ACG 규칙에 7777 포트번호 추가
    • http://ncp서버공인IP:7777 실행
    • SpringBoot 서버 종료
      • Ctrl + c
  • 지금까지는 프로젝트 내부에 있던 Maven과 Tomcat 사용
    • NCP 서버 내부에 있는 걸로 변경
    • 리눅스 Tomcat 사용
      • $TOMCAT_HOME/bin/startup.sh → 시작
      • $TOMCAT_HOME/bin/shutdown.sh → 종료
      • $TOMCAT_HOME/webapps/ROOT.war (내장)
        • http://공인ip:8080/ = http://공인ip:8080/index.jsp
      • $TOMCAT_HOME/webapps/톰캣서버 실행 프로젝트
        • ex) $TOMCAT_HOME/webapps/demo.war
        • http:// 공인ip:8080/뷰이름 = http://공인ip:8080/demo/
      • 아래 경로에서 최종실행파일 결과물 확인
        • /usr/mydir/KODI_project/KODI/target/KODI_project-0.0.1-SNAPSHOT.war
        • 내장 톰캣이 아니라 8080 포트인 NCP에 설치한 외부 서버를 사용하여 실행하도록 설정
          • KODI_project-0.0.1-SNAPSHOT.war 이것만 $TOMCAT_HOME/webapps 밑에 복사
          • 이름 바꿔서 복사 가능
            • cp /usr/mydir/KODI_project/KODI/target/KODI_project-0.0.1-SNAPSHOT.war $TOMCAT_HOME/webapps/kodi.war
          • 복사 확인
            • ls $TOMCAT_HOME/webapps
        • kodi.war 안에 프로젝트 뷰들이 나열된 것 확인 가능
          • ls $TOMCAT_HOME/webapps/kodi/WEB-INF/views
        • controller나 다른 자바 코드들은 classes 밑에 있음
    • Tomcat 실행
      • http://공인ip:8080/kodi/ = http://공인ip:7777/

17. Jenkins 연결

  • 포트번호로 18080 사용하므로 ACG 규칙에 추가
  • http://공인IP:18080 접속
    • Putty에서 암호 경로(/var/lib/jenkins/secrets/initialAdminPassword)로 암호 알아와서 입력
      • cat /var/lib/jenkins/secrets/initialAdminPassword
    • Install suggested plugins 선택
  • Maven 설정
    • Jenkins 관리 - Tools로 이동
      • Putty에서 Maven 경로 확인
        • $MAVEN_HOME
      • File path에 /usr/mydir/apache-maven-3.9.4/conf/settings.xml 입력
      • Maven 이름, MAVEN_HOME 경로 입력
        • /usr/mydir/apache-maven-3.9.4
  • JDK 설정
    • Putty에서 자바 경로 확인
      • $JAVA_HOME
    • JDK 이름, MAVEN_HOME 경로 입력
      • /usr/mydir/jdk-17.0.10  
  • Tomcat 설정 전 Plugin 설치
    • Jenkins 관리 - Plugins로 이동
    • Deploy to container 설치
      • ex) tomcat/webapps/a.war가 있을 때 context 이름을 a로 대신해주는 Tool
    • Jenkins 관리 - System로 이동
    • Jenkins Home Directory
      • /var/lib/jenkins
  • Github 설정
    • Jenkins 관리 - System로 이동
      • ADD - Jenkins 선택
      • Secret text 클릭 - github 토큰 입력
      • Test Connection 후 저장
  • 새로운 Item - item 이름 입력 - Freestyle project 선택
  • Jenkins pull 자동화
    • /var/lib/jenkins/workspace/젠킨스아이템명/프로젝트명
    • /var/lib/jenkins/workspace/kodi_jenkins/KODI
      • kodi_jenkins - Configuration - Build Steps - Execute shell
        echo $JENKINS_HOME pwd cat /var/lib/jenkins/workspace/kodi_jenkins/KODI/src/main/resources/application.properties
      • 이대로 지금 빌드하면 실패
      • application.properties 파일이 없어서 나는 에러
      • 매번 pull할 때마다 사라지므로 jenkins한테 명령어 실행하라고 주기
      • 하기 전에 Putty에서 cp 명령 권한 부여해야 함
        • jenkins ALL=(ALL) NOPASSWD:ALL
      • Build Steps에 아래 코드 추가
        • sudo cp /usr/mydir/KODI_project/KODI/src/main/resources/application.properties /var/lib/jenkins/workspace/kodi_jenkins/KODI/src/main/reources/
      • 재빌드하면 성공
  • Maven 빌드
    • kodi_jenkins - Configuration - Build Steps - Add build step - Invoke top-level Maven targets
    • 정보 입력 후 저장
    • systemctl start mysqld
    • systemctl status mysqld
    • 재빌드하면 성공
  • Tomcat 설정
    • kodi_jenkins - Configuration - 빌드 후 조치 추가 - Deploy war/ear to a container
    • Context path 경로 설정
    • TOMCAT WEB CONTAINER 이용하려면 관리자가 필요
      • url 관리자 설정 변경 → 관리자 접속 허용
      • ls $TOMCAT_HOME/conf/tomcat-users.xml
      • vi $TOMCAT_HOME/conf/tomcat-users.xml
        • <role rolename="manager-gui"/>
        • <role rolename="manager-script"/>
        • <role rolename="manager-status"/>
        • <user username="" password="" roles="manager-gui,manager-script,manager-status" />
      • ls $TOMCAT_HOME/webapps/manager/META-INF/context.xml
      • vi $TOMCAT_HOME/webapps/manager/META-INF/context.xml
        • value 허용값이 로컬이라 이걸 다 풀어주기 위해 주석처리
    • Tomcat 실행
      • $TOMCAT_HOME/bin/startup.sh
      • http://공인IP:8080/manager/html로 접속
        • 아이디, 비밀번호는 vi $TOMCAT_HOME/conf/tomcat-users.xml 여기서 적은 username, password 사용
      • 정상 동작
    • Jenkins에서 Tomcat 9.x Remote - Add - Jenkins 선택
    • 계정 정보 입력
    • Tomcat URL - http://공인IP:8080/ 입력
    • 재빌드하면 끝
728x90
반응형