CentOs7에 서버 환경 구성

개요

  • 설치 OS : CentOs7
  • Web/WAS : 아파치, 톰캣
  • DB : mariaDB

tomcat 설치

tomcat 다운로드

https://tomcat.apache.org/download-80.cgi

톰캣 다운로드

압출 풀기

1
2
gunzip apach-tomcat-8.x.xx.tar.gz
tar -xvf apach-tomcat-8.x.xx.tar

원하는 위치로 이동

1
mv apach-tomcat-8.x.xx /usr/local/apach-tomcat-8.x.xx

톰캣을 위한 폴더 생성

1
2
3
4
cd /usr/username
mkdir src
cd src
mkdir tomcat1

이후 이 곳에서 war파일을 배포한다.

톰캣 설정

1
2
cd /usr/local/apach-tomcat-8.x.xx/conf
vi server.xml

최 하단쪽에 아래 문구를 찾음

1
2
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">

여기서 unpackWARsautoDeploy는 성능에 영향을 미치기 때문에 사용하지 않는다.
아래와 같이 수정한다.

1
2
3
4
<Host name="localhost" appBase="."
unpackWARs="false" autoDeploy="false">
<Context doocBase="/home/usrname/src/tomcat1" path=""
reloadable="false"/>

톰캣 확인

아래 명령어로 톰캣 실행

1
2
/usr/local/apache-tomcat-8.x.xx/bin/startup.sh
tail -f /usr/local/apache-tomcat-8.x.xx/logs/catalina.out

정상적으로 로그가 나오는지 확인

수동으로 톰캣에 배포하기

이클립스에서 빌드하기

war 파일로 배포하는 것을 설명한다.

jar → war 변경

만약 프로젝트 배포가 jar로 배포하도록 초기 설정을 하였다면 아래와 같이 수정한다.

gradle의 경우 아래와 같이 추가한다
1
2
3
4
5
6
apply plugin: 'war'

war {
baseName = 'gradle'
version = '0.0.1'
}
maven의 경우 아래와 같이 추가한다
1
2
3
4
<groupId>com.example</groupId>
<artifactId>maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
ServletInitializer를 추가한다

스프링부트를 통해 만든 웹 애플리케이션의 경우 embeded 톰켓을 이용한다면 @SpringBootApplication을 구현한 클래스만 있으면 되지만, 따로 톰켓을 통해 배포하는 경우 SpringBootServletInitializer를 상속받은 클래스가 필요합니다.

1
2
3
4
5
6
7
8
public class ServletInitializer extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoWarApplication.class);
}

}

DemoWarApplication.class 부분은 본인의 @SpringBootApplication 구현체를 넣으시면 됩니다. (스프링부트 생성시 존재하는 클래스)

DemoWarApplication

ServletInitializer 추가

ServletInitializer 추가

위와 같이 ServletInitializer를 추가해 주시면 됩니다.(war 패키징 되는 프로젝트로 생성하면 처음 초기화 시 위와 같이 ServletInitializer도 같이 생성되는 걸 볼 수 있습니다.)

gadle 빌드하기

이클립스 상단 Window > Show View > Other…를 선택한다. 여러가지 목록 중 Gradle > Gradle Tasks를 선택하고 ok를 클릭하면 Gradle Tasks 뷰가 추가된다.

Gradle Tasks 뷰가 추가

build 메뉴를 우클릭하고 Run Gradle Tasks를 선택

Run Gradle Tasks

그러면 이클립스에서 자동으로 Gradle Execution 뷰가 열리고 빌드가 진행된다.

Gradle Execution

war 파일은 애플리케이션의 build 폴더 밑의 libs 폴더에 만들어 진다.

배포하기

톰캣에 배포하는 것을 설명한다.

앞에서 만든 war파일을 서버에 전송하고 war파일의 압출을 푼다.

앞에서 만든 /home/username/src/tomcat1 폴더로 war파일을 전송한다.

war 파일의 압출을 풀기 위해 아래와 같이 명령어를 실행한다.

1
jar -xvf xxxx.war

만약 jar 명령어가 없다면 아래와 같이 설치한다.

1
yum install java-1.8.0-openjdk-devel

이후 아래와 같이 재시작한다.

1
2
3
/usr/local/apache-8.x.xx/bin/shutdown.sh
/usr/local/apache-8.x.xx/bin/startup.sh
tail -f /usr/local/apache-tomcat-8.x.xx/logs/catalina.out

로그를 확인하고 정상적으로 동작하는지 확인한다.

서버 부팅시 Tomcat 자동 실행

1. 실행 스크립트 작성

1
2
[root@tourWeb1 ~]# cd /etc/rc.d/init.d/
[root@tourWeb1 ~]# vi tomcat

스크립트 내용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# Startup script for the Tomcat Server
# chkconfig: 345 50 50
# description: Tomcat is a Web application server.
# processname: java
# directory : CATALINA_HOME=/usr/local/apache-tomcat-8.x.xx
source /etc/profile
export CATALINA_HOME=/usr/local/apache-tomcat-8.x.xx
case "$1" in
start)
echo "Starting tomcat: "
su - test -c $CATALINA_HOME/bin/startup.sh
;;
stop)
echo "Shutting down tomcat: "
su - test -c $CATALINA_HOME/bin/shutdown.sh
;;
restart)
echo "Restarting tomcat: "
su - test -c $CATALINA_HOME/bin/shutdown.sh;
su - test -c $CATALINA_HOME/bin/startup.sh
;;
*)
echo "Usage: service tomcat {start|stop|restart}"
exit 1
esac
exit 0

위의 su - test 로 시작되는 문구는 해당 user 계정으로 톰캣을 실행하겠다는 의미이니, test 부분을 사용자 계정ID로 변경한다.

su - test -c $CATALINA_HOME/bin/startup.sh

su - test -c $CATALINA_HOME/bin/shutdown.sh

su - test -c $CATALINA_HOME/bin/shutdown.sh;

su - test -c $CATALINA_HOME/bin/startup.sh

2. 파일 소유권/실행권한 지정 및 run level 등록

1
2
3
4
5
6
7
8
9
10
11
# 사용자 계정에게 소유권 변경
[root@tourWeb1 ~]# chown test:test tomcat

# 실행권한 주기
[root@tourWeb1 ~]# chmod 755 tomcat

# runlevel 등록
[root@tourWeb1 ~]# chkconfig --add tomcat

# 등록확인
[root@tourWeb1 ~]# chkconfig --list tomcat

3. tomcat 프로세스 수동 실행/정지 해보기.

1
2
[root@tourWeb1 ~]# service tomcat start
[root@tourWeb1 ~]# service tomcat stop

mariaDb 설치

docker 설치

docker 다운로드.

1
sudo yum install docker

docker 등록

1
2
sudo systemctl start docker
sudo systemctl enable docker

docker 실행 확인

1
sudo docker run hello-world

docker hello-world

마리아db 이미지 다운로드

1
docker pull mariadb

컨테이너 시작

1
docker run --name="mariadb" -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1 mariadb
  • –name은 Container의 이름 으로 mariadb로 설정하였습니다.

  • -d 는 detached mode로 Container가 백그라운드로 실행됩니다.

  • -p는 Host와 Container의 포트를 연결하는 것으로 Host에서 3306 포트로 접속시 Container 3306으로 포워딩 되도록 한 설정 입니다.

  • -e는 Container 내에서 사용할 환경변수로 MYSQL_ROOT_PASSWORD는 root 계정의 password 를 설정하기 위한 환경변수 입니다.

  • 마지막에 있는 mariadb는 위에서 pull한 image 이름 입니다.

Container bash에 접속

1
docker exec -it mariadb /bin/bash

exec를 통해 Container에 특정 명령을 실행할수 있습니다.

-it는 -i와 -t의 옵션을 합친 것으로 Container에서 Bash를 사용할 수 있습니다.

mariadb는 run시 지정한 Container의 이름입니다.

/bin/bash는 bash Shell에 연결하겠다는 의미입니다.

명령을 실행 후 터미널을 보면 root 계정으로 Container Bash에 접속한 것을 알 수 있습니다.

MariaDB 접속

드디어 mysql -u root -p 를 통해 MariaDB에 접속할 수 있습니다. 비밀번호는 docker run시 환경변수로 설정한 MYSQL_ROOT_PASSWORD의 값입니다.

MariaDB characterset 설정

status 명령어를 사용해서 MariaDB의 설정정보를 볼수 있는데 characterset을 보면 Server와 DB의 characterset이 latin1로 되어 있는 것을 알 수 있습니다. latin1에서는 한글이 깨질 수 있기 때문에 UTF8로 변경해 줘야 합니다.

/etc/mysql/my.cnf 파일에서 내용을 아래와 같이 추가/수정해 줍니다.

1
2
3
4
5
6
7
8
9
10
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

종료시에는 exit로 나옵니다.

변경한 설정을 저장하기 위해 Container를 restart 해줍니다. Container의 ID는 docker ps 명령어를 사용해서 확인할 수 있습니다.

외부 접근 허용

MariaDB 설치는 끝났다.

하지만 외부에서 DB로 접근이 아직 안된다.

방화벽 포트를 열어주고, MariaDB에서 권한을 부여해야한다.

1. 방화벽 포트 개방

ssh를 위한 22번과 MySQL 3306포트가 열린것을 확인할 수 있다.

1
2
3
4
5
6
[jamong@localhost ~]$ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[jamong@localhost ~]$ sudo firewall-cmd --reload
success
[jamong@localhost ~]$ sudo firewall-cmd --list-ports
22/tcp 3306/tcp

2. MySQL 권한 부여

mysql -u root -p 실행

-모든 ip 개방

1
2
3
4
5
mariadb> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '비밀번호';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mariadb> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
공유하기