들어가기 전에
하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 GCP에 대해 알아보겠습니다.
GCP
개발한 어플리케이션을 다른 기술과 함께 적용하려면 서버가 일반적으로 필요합니다. 하지만, 서버는 비용이나 부수적인 문제로 인해 운영하기 쉽지 않습니다. 이러한 상황에서 GCP(Google Cloud Platform) 또는 AWS(Amazon Web Services)와 같은 클라우드 서비스는 아주 유용합니다. 물리적인 서버에 비해 가격이 저렴하고 쉽게 서버를 구성할 수 있기 때문입니다.
구글은 GCP를 처음 시작하면 3개월동안 사용할 수 있는 $300의 크레딧을 지원합니다. 사용자는 이 금액 내에서 자신이 원하는 사양을 선택하여 사용할 수 있습니다. AWS를 비롯한 다른 클라우드 서비스는 정해진 사양만 체험할 수 있는 것에 비해 GCP의 가장 큰 장점이라고 할 수 있습니다.
GCP 가입하기
먼저 아래 사이트에 접속하여 GCP를 가입해보겠습니다.
계속 버튼을 눌러도 다음 단계가 로딩이 안 될 경우, 아래 주소로 접속해서 가입을 해주셔야 합니다.
- 원래 가입할 때 계속 버튼 아래에 약관 동의 내용이 있어야 하는데 그 부분이 제대로 안 떠서 계속 버튼이 눌리지 않는 것입니다.
아래 주소로 접속하여 상단 오른쪽의 콘솔을 눌러 약관을 동의하면 크레딧 활성화가 가능합니다.
cloud.google.com/gcp/getting-started/?hl=ko
VM 인스턴스 생성하기
먼저 VM을 생성해보겠습니다. 가상 서버 생성을 위해 GCP 콘솔 메뉴에서 Compute Engine > VM 인스턴스를 선택합니다. VM 인스턴스 화면에 진입하면 [만들기] 버튼을 활성화될 때까지 1분가량 기다려야 합니다.
- VM 이름은 원하는 이름으로 지정하고, 지역은 seoul로 하면 됩니다.
- 코어나 메모리는 1개에 4GB면 충분할 것이므로 기본으로 선택합니다.
- OS는 익숙한 CentOS 7을 사용하도록 하겠습니다.
- 방화벽의 경우, 추후 다시 설정하겠지만, 기본적인 HTTP와 HTTPS를 허용해줍니다.
네트워크 설정하기
VM 인스턴스를 생성할 경우 OS만 설치됩니다. 따라서 필요한 어플리케이션의 설치뿐 아니라 네트워크 관련 설정도 필요합니다. 고정 IP 연결이나 방화벽에 포트 추가 작업등을 진행해주어야 합니다.
앞서 만든 VM 인스턴스의 오른쪽의 점 세개 버튼을 클릭하여 [네트워크 세부정보 보기] 메뉴로 이동합니다. 네트워크에서는 두 가지 설정이 필요합니다.
- 고정 IP 설정
- 클라우드 서비스는 기본적으로 동적인 외부 IP를 가지고 있습니다. 즉, 인스턴스가 재실행될 경우 IP가 변경될 수 있다는 의미입니다.
- 따라서, 인스턴스가 유지되는 동안 고정 IP를 사용하여 IP가 변경되지 않도록 해야 합니다.
- 방화벽에 사용할 포트 추가
고정 IP 설정
고정 IP 설정을 위해 외부 IP 주소 메뉴를 선택합니다.
방화벽 규칙 변경하기
물리 서버 장비에 설치된 CentOS의 경우는 OS에 접속해 직접 CentOS 7에서 사용중인 Firewalld 방화벽 설정을 진행하지만, GCP는 GCP 콘솔에서 방화벽 규칙을 적용해주어야 합니다.
VPC 네트워크 > 방화벽 탭을 보면 현재 설정되어 있는 방화벽 규칙을 확인할 수 있습니다. 해당 항목들 외에도 게시판 프로젝트가 동작하는 데 필요한 규칙들을 추가해야 합니다. 아래 캡쳐 화면을 보면서 하기 4가지 포트를 방화벽 규칙에 추가하면 됩니다.
포트 | 설명 |
8080 | board 어플리케이션 실행하는 톰캣 포트 |
8888 | cloud-config 어플리케이션 실행하는 톰캣 포트 |
3306 | mySQL 포트 |
9100 | Jenkins 포트 |
VM 기본 설정하기
ROOT 비밀번호 설정하기
처음 VM 인스턴스를 생성하면 root 계정의 비밀번호가 설정되어 있지 않습니다. 따라서, root 계정의 비밀번호를 생성해야 합니다.
로그인 계정명 변경하기
기본적으로, 로그인 계정명은 구글 아이디를 이용해 만들어져있으므로 다른 계정을 생성해 해당 계정으로 로그인할 수 있도록 변경했습니다.
MySQL 설치하기
CentOS 7에서는 MySQL이 아닌 MariaDB가 탑재되어 있습니다. 따라서, yum을 통해 MySQL을 설치해주어야 합니다. 책에서는 MySQL 5.7 버전을 설치했지만, 어디선가 듣기로는 mySQL 5 버전이 유지보수 기간이 끝났다는 이야기를 언뜻 들은 것 같아 최신 버전을 설치해주었습니다.
원하는 버전에 맞는 mySQL의 yum rpm 패키지 링크 가져오는 법
- 먼저 dev.mysql.com/downloads/mysql/에 접속하여 mySQL을 다운받을 OS 버전을 선택합니다.
- 하단의 MySQL Yum Repository의 Download Now 버튼을 클릭합니다.
- 자신의 OS 버전에 맞는 항목에서 Download 버튼을 클릭합니다.
- No thanks, just start my download에 마우스를 가져다 놓고 오른쪽 버튼을 눌러 링크 주소 복사를 누릅니다.
링크를 가져왔다면, 아래 명령어를 터미널에 차례로 실행하여 MySQL을 설치합니다.
sudo yum -y install http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# MySQL 레포지터리를 추가합니다.
sudo yum -y install mysql-community-server
# MySQL을 설치합니다.
sudo systemctl enable mysqld
# 시스템 재시작 시, MySQL이 자동으로 실행되도록 합니다.
sudo systemctl start mysqld
# MySQL을 실행합니다.
MySQL 설정하기
MySQL을 설치했다면, 아래와 같이 문자열 인코딩, 보안 설정 등을 진행해야 합니다. 기본적으로 MySQL을 설치할 경우 외부 접속이 되지 않습니다. 즉, GCP의 VM 인스턴스에 설치한 MySQL을 로컬 환경에서 접속할 수 없다는 것입니다.
MySQL 보안 설정하기
아래 명령어를 통해 MySQL 보안 설정을 진행해야 합니다.
/usr/bin/mysql_secure_installation
위 명령어를 치면 Enter password for user root: 가 뜹니다. 이 경우, mySQL 설치 시 root 비밀번호를 설정하지 않았으므로 Enter를 치고 넘어가려 하겠지만, 어느 버전 이후부터인가 mySQL은 스스로 설치할 때 임시 비밀번호를 root에 설정합니다.
따라서, Enter를 치면, Error: Access denied for user 'root'@'localhost' (using password: NO)라는 에러를 만나게 됩니다.
이때는, 아래 명령어를 작성하여 임시 비밀번호를 찾아 복사한 후 보안 설정을 시작해야 합니다.
sudo cat /var/log/mysqld.log | grep 'temporary password'
보안 설정 시, 하기 내용들에 대해 Y를 눌러 익명 사용자 로그인 차단 및 root 사용자로 다이렉트 접속 차단 및 사용하지 않는 test 데이터베이스 삭제, 설정 변경을 위해 권한 테이블 재로딩을 합니다.
MySQL 사용자 생성하기
로컬 환경에서 개발할 때는 root 사용자를 사용했지만, root 사용자의 권한은 일반적으로 개발자에게 주지 않으므로, 개발용 사용자를 생성하겠습니다.
- root 사용자는 데이터베이스의 모든 정보를 삭제할 수도 있습니다.
- 모든 개발자에게 root 권한을 주면 큰 문제가 발생할 수 있어 일반적으로 개발자에게는 특정 스키마에만 접속을 허용하고 개발에 필요한 CRUD 권한을 주는 것이 일반적입니다.
아래 명령어를 입력하여 사용자 계정을 새로 생성합니다.
mysql -u root -p
create user '사용자아이디'@'localhost' identified by '비밀번호';
create user '사용자아이디'@'%' identified by '비밀번호';
grant all privileges on *.* to '사용자아이디'@'%';
flush privileges;
- 사용자 생성 시 '사용자아이디'@'localhost'와 '사용자아이디'@'%' 두가지를 사용했습니다.
- MySQL의 경우 localhost와 외부에서 접속할 수 있는 권한이 분리되어 있습니다. 여기서 localhostfks MySQL가 설치되어 있는 서버를 의미합니다.
- 따라서 호스트를 localhost로 지정할 경우 MySQL이 설치되어 있는 서버에서만 MySQL에 접속할 수 있고, 외부에서는 접속이 불가능(개발자 PC에서 서버의 MySQL 접속 불가)합니다.
- 호스트를 %로 지정하면 외부 접속이 가능합니다.
- grant all privileges on [스키마].[테이블] to '사용자아이디'@'호스트': 사용자에게 모든 권한을 준다는 의미로, *.*로 스키마와 테이블을 설정하면 모든 스키마와 테이블에 대해 권한을 준다는 것입니다.
- flush privileges: 변경된 내용을 반영합니다.
문자열 설정
MySQL 설정 파일(/etc/my.cnf)을 열어 문자열을 UTF-8로 변경해야 합니다. 아래 설정파일과 같이 [client]와 [mysqldump], [mysqld]에 대해 문자열을 설정합니다. 만약, [client]와 [mysqld]가 없다면 추가하면 됩니다.
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
[client]
default-character-set = utf8
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
### custom setting ###
character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
[mysqldump]
default-character-set=utf-8
하기 설정을 완료했다면, mySQL을 아래 명령어를 통해 재시작하여 설정을 반영합니다.
sudo systemctl restart mysqld
mySQL 재시작이 완료되면, GUI 툴로 데이터베이스에 접속하고 앞서 만들었던 게시판 관련 테이블을 생성하면 됩니다.
JDK 설치하기
VM 장비에서 자바를 사용할 수 있도록 JDK를 설치해보겠습니다. openJDK 다운로드 페이지에서 JDK 파일을 다운로드(.tar.gz)합니다. 필자는 로컬 환경과 동일한 버전의 JDK를 사용하기 위해 JAVA 11.0.9.1을 선택했습니다.
그 후 다운로드된 tar.gz 파일을 VM 서버에 업로드합니다.
업로드가 완료되면 아래 명령어를 통해 압축을 풀어줍니다.
tar zxvf zulu11.43.55-ca-jdk11.0.9.1-linux_x64.tar.gz
파일의 압축을 풀면 zulu11.43.55-ca.jdk11.0.9.1-linux_x64 폴더가 생성됩니다. 아래 명령어를 통해 압축을 푼 jdk 폴더는 원하는 위치로 이동하고 심볼릭 링크를 만들어줍니다.
sudo mv zulu11.43.55-ca-jdk11.0.9.1-linux_x64 /user/local
cd /usr/local
sudo ln -s zulu11.43.55-ca-jdk11.0.9.1-linux_x64/ java
java 심볼릭 링크가 생성되면, 이제 /etc/profile에 아래와 같이 JDK 환경변수를 등록합니다.
sudo vi /etc/profile
# /etc/profile 내 하기 내용 추가
JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH
# profile 파일 저장하고 나오기
# 설정된 환경변수가 동작하도록 셀에 적용시키기
source /etc/profile
TOMCAT 설치 및 설정하기
Spring 어플리케이션을 구동할 WAS(Web Application Server)인 톰캣을 설치해보겠습니다. SpringBoot 어플리케이션의 경우 기본적으로 TOMCAT이 내장되어 있어 jar 파일로 빌드하고 배포하면 서버에 tomcat이 없어도 바로 구동이 가능합니다. 이때, 내장 tomcat과 외장 tomcat 간 유의미한 성능 차이는 없으므로 내장 tomcat 사용하는 것이 편합니다.
하지만, 기존 시스템과의 연동등의 이유로 외장 tomcat을 사용하는 경우가 많으니, GCP VM 인스턴스에 tomcat을 설치해보겠습니다.
TOMCAT을 위한 폴더 생성하기
가장 먼저 할 작업은 tomcat이 사용할 소스코드가 놓일 폴더를 생성하는 것입니다. tomcat이 사용할 소스코드는 tomcat 설치 폴더 내 webapps 폴더이므로, 소스코드 업로드 및 관리에는 불편할 수 있는 위치입니다. 따라서 tomcat이 사용할 소스코드 폴더를 새로 생성하고, 그곳에 소스코드를 모아 손쉽게 관리할 수 있도록 해보겠습니다.
cd
mkdir webroot
cd webroot
mkdir board
mkdir config
- webroot: 소스 코드를 모아둘 폴더
- webroot/board: 이전에 만든 게시판 어플리케이션이 올라갈 폴더
- webroot/config: 추후 Cloud Config Server를 이용한 어플리케이션이 사용할 폴더
TOMCAT 설치하기
먼저 tomcat 홈페이지에서 리눅스용 tomcat을 다운로드합니다. tomcat 역시 mySQL처럼 yum을 통해 설치할 수도 있지만, 하나의 tomcat 파일을 복사해 2개의 tomcat 서버를 설정할 예정이므로 직접 설치를 하려합니다.
tomcat.apache.org/download-80.cgi
업로드 완료한 파일은 아래 명령어를 사용하여 압축을 풀고, tomcat을 복사하여 게시판용과 config 서버용으로 나누어 저장합니다.
tar zxvf apache-tomcat-8.5.61.tar.gz
cp -r apache-tomcat-8.5.61 apache-tomcat-8.5.61-board
mv apache-tomcat-8.5.61 apache-tomcat-8.5.61-config
sudo mv apache-tomcat-8.5.61* /usr/local/.
그리고, 필자의 경우 편리하게 tomcat에 접근하기 위해 아래와 같이 소프트링크 설정을 하였으니, 참고하면 좋을것 같습니다.
cd
mkdir sw
ln -s /usr/local/apache-tomcat-8.5.61-board board-tomcat
ln -s /usr/local/apache-tomcat-8.5.61-config config-tomcat
TOMCAT 설정하기
앞서 설치한 2개의 tomcat 설정값을 일부 변경해보도록 하겠습니다. 기본적으로, tomcat은 8080 포트로 동작하게 되어 있는데, 현재 tomcat을 두 가지로 나누어 사용할 것이라 포트 변경이 필요합니다. 이외에도 필요한 부분에 대해 수정해보겠습니다.
board TOMCAT
board tomcat은 기본 포트를 사용합니다. 따라서, tomcat의 document root만 변경하면 됩니다.
# /usr/local 위치 자체는 root 권한이 있어야 하겠지만, 처음에 tomcat 설치 시, tomcat 폴더 권한을 일반user 권한으로 했기 때문에 따로 sudo 사용하지 않았음
cd /usr/local/apache-tomcat-8.5.61-board/conf
vi server.xml
- appBase와 docBase를 통해 게시판 프로젝트 소스 위치를 지정할 수 있습니다.
- 기본적으로, appBase안에서 docBase를 찾게 됩니다. 예를 들어 appBase안에 /home/earth/webroot을 지정하고, docBase에 board라고 작성하면 프로젝트 소스 위치를 /home/earth/webroot/board라고 생각하게 됩니다.
- unpack과 autoDeploy 옵션은 모두 사용하지 않았습니다(책에서 unpackWARs도 false로 설정하고 있어 이렇게 설정)
- autoDeploy: 해당 속성이 true라면, 필요에 따라 동적으로 WAS를 업데이트를 시도하게 됩니다.
- 예를 들어, appBase 폴더에 새로운 .war 파일이 떨구어지면 기존 war에서 신규 war로 재배치
- unpack: 해당 속성이 false라면, .war 파일의 압축은 풀리지 않습니다.
- autoDeploy: 해당 속성이 true라면, 필요에 따라 동적으로 WAS를 업데이트를 시도하게 됩니다.
config TOMCAT
config TOMCAT의 경우 board tomcat과 다른 포트를 사용하기 위해 포트 변경이 필요합니다. 또한, config tomcat 역시 소스 위치를 지정해야 합니다.
cd /usr/local/apache-tomcat-8.5.61-config/conf/
vi server.xml
- 8080 포트를 8888 포트로 변경합니다.
- 프로젝트 소스 경로는 이전에 board용 config 수정할때처럼 수정하면 됩니다.
책과 상관없이 변경한 TOMCAT 설정
로그의 위치를 한 곳으로 몰아서 보고 싶어서 필자의 경우, 하기와 같이 따로 logs 디렉토리를 생성하고 해당 디렉토리 내 tomcat 로그를 보관합니다.
cd
mkdir logs
mkdir logs/board
mkdir logs/config
- server.xml 수정하기
- catalina.sh 수정하기
- logging.properties 수정하기
TOMCAT 실행해보기
이번에는 tomcat이 정상적으로 설치되고 설정되었는지 확인해보도록 하겠습니다. 아래 명령어를 통해 tomcat을 실행하고 로그를 확인해보겠습니다.
cd
cd sw/board-tomcat/bin
./startup.sh
cd
cd logs/board
tail -f catalina.out
Jenkins 설치하기
마지막으로 Jenkins를 설치해보겠습니다. 로컬환경에서 개발이 끝나면 서버에 배포를 해야 다른 사람들과 공유하며 사용할 수 있습니다. Jenkins는 이러한 배포 작업을 쉽게 처리할 수 있도록 도와줍니다. 여기서는 설치만 간단하게 해보겠습니다.
Jenkins 설치하기
Jenkins는 yum 레포지토리를 추가한 후 yum 명령어로 설치할 수 있습니다.
sudo yum -y install wget
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins
- 책에서는 레포지토리로 http://pkg.jenkins-ci.org/redhat/jenkins.repo를 사용했지만, 안정화된 다른 레포지터리가 있어 해당 레포지토리로 설치했습니다.
- sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo: jenkins 레포지토리에 jenkins.repo를 업로드합니다.
- sudo rpm --impor https://pkg.jenkins.io/redhat-stable/jenkins.io.key: jenkins 키를 import합니다.
- sudo yum install jenkins: jenkins 설치합니다.
Jenkins 설정하기
Jenkins 포트 변경
Jenkins의 포트를 변경해야 합니다. 기본적으로 jenkins의 포트는 8080으로 tomcat과 겹치기 때문에 다른 값으로 변경이 필요합니다. 여기에서는 9100으로 변경해주겠습니다.
sudo vi /etc/sysconfig/jenkins
포트변경이 완료되었으면, 아래 명령어를 통해 젠킨스를 실행합니다.
sudo systemctl start jenkins
jenkins를 실행하면 아래와 같이 에러가 발생합니다. 해당 에러에 적힌대로 status를 확인하면 아래와 같습니다.
- 위 터미널 화면을 보면, jenkins가 /usr/bin/java를 찾고 있음을 확인할 수 있습니다. 기존에 설치한 java 경로는 /usr/local/java이기 때문에 jenkins의 자바 경로를 변경해주어야 합니다.
Jenkins 자바 경로 설정
sudo vi /etc/init.d/jenkins
- 여기서 JAVA 경로는 자바 설치 폴더가 아닌, 자바 실행파일인 java를 의미하기 때문에, /usr/local/java/bin/java를 추가해야 합니다.
Jenkins 확인하기
이제 다시 아래 명령어를 통해 젠킨스 실행을 확인하면 됩니다.
sudo systemctl start jenkins
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units 경고 메시지가 나오면 해당 메시지가 요구하는대로 해주면 jenkins를 재시작할 수 있습니다.
jenkins 시작을 확인하기 위해 크롬에서 해당 사이트를 열어보도록 하겠습니다. 9100포트를 사용하기 때문에 http://[ GCP VM 인스턴스의 external IP]:9100으로 접근하면 됩니다.
AWT is not propertly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=ture"
위와 같은 에러가 발생하면 해당 에러에 적힌 것처럼 https://jenkins.io/redirect/troubleshooting/java.awt.headless에 접속해보면 된다.
트러블슈팅 방법을 보고 아래와 같이 그대로 따라했다. 그 결과, 제대로 jenkins에 접속됨을 확인할 수 있었다.
sudo yum install dejavu-sans-fonts
sudo yum install fontconfig
sudo systemctl restart jenkins
Jenkins를 최초 실행할 경우, 아래와 같은 화면이 나옵니다. 화면에는 Jenkins의 초기 비밀번호가 저장되어 있는 위치를 보여줍니다. 해당 위치에 접근해서 찾은 초기 비밀번호를 이용해 로그인을 하면 아래와 같은 화면을 확인할 수 있습니다. 해당 화면에서 Install suggested plugins 버튼을 눌러 기본 플러그인을 설치합니다.
플러그인들 설치가 완료되면 관리자 계정 생성 화면으로 이동합니다. 계정명, 암호, 이름, 이메일 주소 모두 필수로 입력해야 합니다. 그 다음 젠킨스 주소를 설정하는 화면에서는 따로 주소 변경 없이 [Save and Finish] 버튼을 클릭하여 설정을 완료합니다.
플러그인 설치하기
다음 포스팅에서는 비트버킷과 젠킨스를 연동하여 자동 배포 환경을 구성할 예정입니다. 따라서, 관련 플러그인들을 미리 설치하도록 하겠습니다.
- 비트버킷(Bitbucket): 아틀라시안(Atlassian)이 서비스하는 git 저장소
Bitbucket 플러그인 설치하기
Jenkins 관리 > 플러그인 관리 탭에 들어가 Bitbucket, Bitbucket Server Integration 플러그인을 선택하고 [지금 다운로드하고 재시작 후 설치하기]를 클릭합니다.
Git 설치하기
VM 장비에 접속하여 하기 명령어를 통해 git을 설치하고, git 설치 여부를 확인합니다.
sudo yum -y install git
git --version
Gradle 설치하기
sudo yum -y install unzip
sudo wget https://services.gradle.org/distributions/gradle-4.8.1-bin.zip
unzip gradle-4.8.1-bin.zip
sudo mv gradle-4.8.1 /opt/gradle
export PATH=$PATH:/opt/gradle/bin
gradle -v
그 외 설정하기
Jenkins user 변경하기
Jenkins를 설치하면 기본 사용자가 jenkins로 되어있습니다. jenkins는 젠킨스 관리용 사용자이기 때문에 SSH를 이용해 다른 서버에 접속할 수 없습니다. 따라서, Jenkins 자동 빌드 및 배포를 위해서는 젠킨스의 사용자를 변경해 SSH로 대상 서버에 접속할 수 있어야 합니다.
먼저, Jenkins의 사용자를 변경하기 위해 Jenkins 설정 파일을 엽니다.
sudo vi /etc/sysconfig/jenkins
필자의 경우 user명이 earth이기 때문에 earth로 변경했고 아래와 같이 jenkins 관련 파일들의 소유자를 earth가 가질 수 있도록 변경했습니다. 자신이 가진 user로 소유자를 변경하면 됩니다(JENKINS_USER로 사용한 user로 소유자 변경).
SSH 등록하기
젠킨스가 SSH를 이용해 배포 서버에 접근할 수 있도록 SSH 키를 등록해야 합니다. 아래 명령어를 실행합니다.
cd
ssh-keygen
# passphrase 설정하기 않으므로 엔터로 넘깁니다
cd .ssh
cat id_rsa.pub >> authorized_keys
ssh [ Jenkins_user ]@서버 IP
Permission denied (publickey, gssapi-keyex,gssapi-with-mic) 에러 해결법
하기 사이트에서 알려준 방법대로 진행하니, ssh 접근이 되는 것을 확인할 수 있었습니다.
sudo vi /etc/ssh/sshd_config
# PasswordAuthentication yes로 변경
sudo systemctl restart sshd
ssh [ Jenkins_user ]@서버 IP
stackoverflow.com/questions/36300446/ssh-permission-denied-publickey-gssapi-with-mic
Tomcat에 JAVA_HOME 설정하기
SSH를 이용해 원격 서버에 접속하면, JAVA_HOME과 같은 환경 변수를 사용할 수 없습니다. 따라서, Jenkins가 SSH를 이용해 원격 서버의 tomcat을 조정하려면 tomcat에 JAVA 환경변수를 등록해야 합니다. Jenkins가 사용하는 tomcat 기능은 tomcat의 start|stop입니다. 이는 각각 startup.sh, shutdown.sh를 호출하는 것이기 때문에, 해당 스크립트 모두에 JAVA_HOME을 등록해야 합니다.
config tomcat과 board tomcat 모두 JAVA_HOME을 넣어줍니다.
'FRAMEWORK > Spring' 카테고리의 다른 글
[SpringBoot] 게시판 구현하기 20 (스프링 프로파일 적용하기) (0) | 2021.01.11 |
---|---|
[SpringBoot] 게시판 구현하기 19 (Swagger) (0) | 2021.01.11 |
[SpringBoot] 게시판 구현하기 17 (스프링 데이터 JPA 사용해보기) (2) | 2021.01.03 |
[SpringBoot] 게시판 구현하기 16 (REST API로 변경하기) (0) | 2021.01.01 |
[SpringBoot] 게시판 구현하기 15 (RESTful 게시판 만들기) (0) | 2021.01.01 |