본문 바로가기
Nginx

Docker(CentOS 7) + Nginx + Spring Boot + Vue.js 배포하기 - ①

by WangTak 2021. 12. 22.
반응형

CentOS 7 배포와 Nginx 설정에 대한 내용은 ④ 편을 참조해주시기 바랍니다. ①, ②, ③ 편은 배포에 사용 될 준비물을 만드는 시간입니다.

[Nginx] - Docker(CentOS 7) + Nginx + Spring Boot + Vue.js 배포하기 - ④

 

제가 리눅스 서버를 따로 가지고 있지 않기 때문에 ① 장에서는 Docker를 사용하여 CentOS 7 환경 구축과 Nginx에 대한 설명을 하도록 하겠습니다. 

Docker 명령어나 옵션에 대한 설명은 생략하고 진행하도록 하겠습니다.

 

개발 서버 정보

  • CentOS 7.8.2003
  • Java 11
  • Nginx: 패키지 설치 & 1.20.2-1

 

1. Docker로 CentOS 7 컨테이너 실행하기

docker pull centos:7.8.2003
위 명령어로 Docker의 공식 레파지토리에 있는 centos 이미지를 가져옵니다.
다른 버전의 centos를 사용하고 싶으시면 docker search [Image Name]을 사용하여 공식 레파지토리에 있는지 확인하셔서 특정 버전의 이미지를 가져오시면 됩니다.

 

docker images
위 명령어를 사용하게 되면 현재 가지고 있는 이미지의 목록을 확인할 수 있습니다.

docker pull로 가져온 centos 이미지

 

Docker 이미지는 공식 레파지토리에 있는 것뿐만 아니라 개발자들이 직접 커스텀하여 이미지를 만들고 관리할 수도 있습니다! 이 부분은 추가적인 내용이기 때문에 여기서는 아~ 그런 게 있나 보구나~ 하고 지나가시면 될 거 같습니다.

 

컨테이너를 실행시켜보도록 하겠습니다.

docker run --privileged --restart always --name prod -p 80:80 -p 443:443 -v D:\Docker\prod:/mnt -dt centos:7.8.2003 /sbin/init

컨테이너가 정상적으로 실행이 됐는지 확인합니다.

docker ps

Docker run, ps

 

위와 같이 run 명령어 수행 이후 docker ps를 했을 때 리스트에 출력되면 컨테이너가 정상적으로 실행된 것입니다. 그럼 컨테이너로 접속해서 환경 설정하겠습니다.

docker exec -it prod /bin/bash

Docker 컨테이너 접속

 

위 명령을 치게 되면 위 사진과 같이 root 계정으로 컨테이너 안에 접속이 됩니다. 그럼 이제 세팅을 해보도록 하겠습니다. 

 

2. 빈 깡통인 CentOS 7 설정하기

# yum 최신으로 업데이트 하기
yum -y update

# sudo 명령어 설치하기
yum -y install sudo

 

서버의 환경 설정을 할 때 root 계정으로 하지 않기 때문에 sudo 권한을 가지는 임시 계정을 만들어 보도록 하겠습니다. sudoers 파일은 기본적으로 소유자에게도 읽기 권한만 있기 때문에 chmod를 통해 쓰기 권한을 부여해준 뒤에 설정을 해주고 쓰기 권한을 다시 빼야 합니다.

# wangtak 이란 이름을 가지는 유저 추가
adduser wangtak

# wangtak의 비밀번호 설정
passwd wangtak

# wangtak에게 sudo 권한 부여하기
chmod u+w /etc/sudoers
vi /etc/sudoers
chmod u-w /etc/sudoers

 

다음과 같은 구문을 추가해주시면 됩니다. 아래 사진처럼 root 밑에 추가해주시면 됩니다.

wangtak       ALL=(ALL)        ALL

sudoers 파일에 구문 추가

 

저장하고 나오면 root 계정의 할 일은 다 끝났습니다. 컨테이너에서 빠져나와서 터미널로 이동해주세요. 그리고 저희가 만든 계정(wangtak)으로 컨테이너를 다시 접속하도록 하겠습니다.

docker exec -itu wangtak prod /bin/bash

Wangtak 계정 접속 _ sudo 권한

 

그럼 위와 같이 왼쪽에 접속한 계정이 나오고, sudo를 쳤을 때 사용법이 나오면 해당 계정의 sudo 권한까지 정상적으로 적용된 것입니다. 이제 Java 11, Mysql, Nginx를 설치해보도록 하겠습니다.

 

3. CentOS 7에 Java 11 설치하기

https://www.azul.com/downloads/?package=jdk

위 사이트에서 Linux용 JDK 11 tar.gz을 다운로드합니다. 1번에서 컨테이너를 실행시켰을 때 -v 옵션을 사용하여 볼륨을 설정했습니다. 콜론(:)을 기준으로 왼쪽은 호스트 디렉토리, 오른쪽은 컨테이너 디렉토리입니다. 볼륨 옵션을 통해 다운로드한 tar.gz을 호스트 디렉토리에 옮기면, 설정한 컨테이너 디렉토리에 tar.gz을 사용할 수 있습니다.

 

sudo mv *.tar.gz /usr/local/lib # [/mnt에서 /usr/local/lib으로 tar.gz을 이동]
sudo tar -zxvf *.tar.gz # [/usr/local/lib에서 tar.gz을 압축 해제]
sudo mv zulu11.52.13-ca-jdk11.0.13-linux_x64 zulu11 # [압축 해제되어 나온 파일의 이름을 zulu11로 rename]

 

환경 변수 설정을 합니다.

sudo vi /etc/profile

```
JAVA_HOME=/usr/local/lib/zulu11
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME
export JRE_HOME
```

source /etc/profile
java -version
# 정상 출력되면 설치 정상적으로 마무리

 

어떤 컨테이너는 위처럼 /etc/profile에 환경 변수를 세팅하고 source /etc/profile을 하게 되면 영구적으로 java가 등록이 되지만, 어떤 컨테이너는 종료 후에 다시 접속하여 java를 실행할 경우 command not found가 발생하고, source /etc/profile을 하게 되면 정상적으로 java를 인식합니다. 뭔가 컨테이너 실행 시에 /etc/profile을 못읽는 느낌입니다.. 그래서 영구적으로 하기 위해서는 [cd ~], [.bashrc] 파일에 추가를 해야 될 거 같습니다.

 

4. CentOS 7에 Mysql 설치하기

별도로 포스팅을 하도록 하겠습니다. [CentOS 7에 MySQL 설치하고 설정하는게 보안 이슈 때문에 생각보다 짚고 넘어가야 할 요소들이 많기 때문입니다.. ㅠ]

[개발 환경] - Docker + CentOS 7 + MySQL 8.0 설치하기

 

Spring Boot와 MySQL의 커넥션을 위해 사용될 계정 정보는 다음과 같습니다.

username: sa
password: cleancode!!

 

5. CentOS 7에 Nginx 설치하기

yum 저장소에는 nginx repository가 없기 때문에 외부 저장소를 추가해줘야 합니다.

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

 

sudo를 사용할 당시에 비밀번호를 입력하라고 나오면 root 계정으로 커스텀 계정(wangtak)을 만들 당시에 입력했던 비밀번호를 입력해주시면 됩니다. 그리고 nginx.repo에는 다음과 같이 입력해줍니다.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

 

위와 같이 nginx.repo를 만들어주면 nginx를 설치할 수 있습니다.

sudo yum -y install nginx

 

설치 시퀀스가 끝나고 다음과 같은 명령어를 입력했을 때 정상적으로 출력되면 정상적으로 설치가 완료된 것입니다.

# 설치 된 패키지 버전 확인 명령어
rpm -q nginx

nginx 설치 후 버전 확인

 

그럼 이제 설치된 nginx를 실행해보도록 하겠습니다.

# nginx의 상태 확인
sudo systemctl status nginx

# nginx 실행
sudo systemctl start nginx

# nginx 중지
sudo systemctl stop nginx

 

nginx를 실행했을 때 status 명령어를 쳐보면 다음과 같이 출력되면 정상적으로 서버가 실행 중인 것입니다.

nginx 정상 실행 상태

 

추가적으로 nginx와 관련된 정리를 해보면 다음과 같습니다.

  • curl localhost를 했을 때 nginx에서 초기 설정된 html이 정상적으로 출력되어야 합니다.
  • nginx의 설정 파일은 /etc/nginx 경로에 있습니다.
  • nginx의 pid, error.log, access.log는 /etc/nginx 경로에 있는 nginx.conf에 명시되어 있습니다.
  • nginx의 설정을 변경하려면 nginx.conf 혹은 conf.d에 있는 *.conf 파일을 수정하면 됩니다.
  • conf 파일을 수정한 이후에 변경된 내용이 문제가 있는지 없는지 확인을 하고 싶을 때는 sudo nginx -t 명령어를 사용하면 됩니다.

 

① 장 이후에는 API를 담당할 Spring 애플리케이션과 사용자의 View를 담당하는 Vue.js 애플리케이션을 만들어보고 Nginx의 설정 파일을 수정하여 배포하는 것을 정리해보도록 하겠습니다.

 

 

반응형