CentOS + Nginx + Tomcat + MySQL

Java 와 HTML5/SenchaTouch 를 다루는 개발자에게 Linux Server 설정은 쉬운 일이 아니다.
여러번 고생고생하며 했던 작업들을 공유합니다.
(여러분의 시간은 소중하니까요)

실제로 clean 설치한 CentOS 에서 작업하며 글을 작성 했습니다.
저와 같은 Linux 초보를 위해 최대한 yum 을 이용하여 설치 하였습니다.
2014.07.25 시점으로 최대한 최신버전을 설치 하였습니다.

Linux 확인 작업

처음 리눅스를 받았을 때 몇가지 확인 작업

Linux Version 확인

cat /etc/*release*

OS 64bit 확인하기

getconf LONG_BIT

프롬프트에 절대경로 표시하기

개인적으로 Linux 프롬프트에 절대 경로(Full path)가 표시 되는 것을 선호 한다.

절대경로 표시

vi /etc/bashrc
PS1="[u@h ] 이부분 찾아서
[ "$PS1" = "s-v$ " ] && PS1="[u@h $PWD]$ "

yum 속도 향상

yum-fastestmirror 설치하여 ping 이 빠른 서버 자동으로 찾기

  • 설치여부 확인 : yum list installed | grep fastestmirror
  • 설치 방법 : yum install yum-plugin-fastestmirror yum-fastestmirror

NGINX 설치

yum install nginx 하면 못찾겠다고 나온다.
그래서,
yum repository 에 nginx 가 있는 곳을 알려주는 작업을 먼저 해야 한다.

NGINX 설치 – yum repository 내용 구하기

이곳에서 버전에 맞는 yum repository 를 구한다.
본인은 CentOS 6.5 이므로 아래와 같다

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

주의 사항!!
“$releasever” 이부분을 CentOS 첫글자(‘6’)로 바꿨다.

NGINX 설치 – yum repository 추가

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

이곳에 위에서 구한 yum repository 를 넣는다.

NGINX 설치 – yum 설치

yum install nginx

NGINX 설치 확인

방금 설치한 NIGNX 를 확인해 본다.

NGINX Start

service nginx start
  • 그리고 서버에 접속하면 반응이 없을 것이다.
  • 방화벽에 막혔기 때문이다.

방화벽 설정을 위한 setup 설치

yum install setuptool system-config-securitylevel-tui authconfig system-config-network-tui ntsysv
  • setup 입력
  • 방화벽 설정 > 사용자 설정 > www 체크 > 계속 OK…
  • 변경한 방화벽 설정을 즉시 적용

.

/etc/init.d/iptables restart
  • 이제 서버에 접속하면 “Welcome to nginx” 문구를 볼 수 있다

PHP 설치하고 NGINX 와 연동

PHP 설치

// yum-priorities 설치
yum install yum-priorities

php 5.3 버전을 확인하고 설치한다.

yum install php php-cli php-common php-fpm php-mysql

설치 완료.

그리고, 아래 설치 방법은 따라 하지 않는다.!!!
아래 처럼 설치하면 php5.5 가 설치 되는데, 이것저것 귀찮은 것이 생긴다.
위에 있는 5.3을 설치 한다. (기록은 위해 남겨 두는 것이므로 따라하지 말자)

// yum repository 추가
// CentOS 6.x 버전이 아닌 경우 이곳에서 다른 것을 설치한다. - http://www.if-not-true-then-false.com/2011/install-nginx-php-fpm-on-fedora-centos-red-hat-rhel/

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum --enablerepo=remi,remi-php55 install php php-fpm php-common
service php-fpm start

php -v
php-fpm -v

php-fpm 자동 실행 등록

setup <– 서비스에서 php-fpm 체크

PHP 연동

vi /usr/share/nginx/html/info.php

이곳에 아래 내용을 붙여 넣는다. (PHP 코드)

<?php
phpinfo();
?>

NGINX 설정 변경

vi /etc/nginx/conf.d/default.conf

아래 내용을 넣는다. (이미 주석처리 되어 있으므로 주석을 풀어 준다.)
단!! fastcgi-param 부분과 root 부분의 코드가 주석과 다르니 주의 한다.!!

location ~ \.php$ {
  root           /usr/share/nginx/html;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include        fastcgi_params;
}

이제 nginx 재기동 하면, (service nginx restart)
info.php 접속하면 정상으로 보여야 한다.

PHP 연동을 php-fpm 으로 변경

php 보다 php-fpm 이 더 빠르다고 한다.
(상세한 설명은 생략한다)

php-fpm 수정

vi /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000     <-- 주석처리 하고
listen = /tmp/php5-fpm.sock  <-- 이걸 넣는다.

NGINX 에서 php-fpm 사용으로 설정 변경

fastcgi_pass   unix:/tmp/php5-fpm.sock; <-- 원래 "127.0.0.1:9000;" 이거 였다

Tomcat 설치

/etc/yum.repos.d/epel.repo 파일이 있다면 간단히 yum 으로 설치 하면 된다.
없다면, 아래 내용을 epel.repo 파일에 넣는다.

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

Tomcat

Tomcat 은 버전 7을 설치 한다. (AWS 의 Tocmat 이 7까지 있어서…)

yum install tomcat

Tomcat 자동 실행 등록

setup <– 서비스에서 tomcat 체크

NGINX 와 연동

vi /etc/nginx/conf.d/defulat.conf

아래 내용 삽입

    location ~ \.do$ {
      proxy_pass              http://localhost:8080;
      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;
    }
    location ~ \.jsp$ {
      proxy_pass              http://localhost:8080;
      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;
    }
    location ^~/servlets/* {
      proxy_pass              http://localhost:8080;
      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;
    }

Tomcat 의 server.xml 에 아래 내용 삽입

<Host name="www.jongkwang.com"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="/home/www/www.jongkwang.com" debug="1" reloadable="true" />
</Host>

MySQL 설치

일반적으로 그냥 yum install mysql 하면 낮은 버전(5.1)이 설치 된다.

주의 사항 : 5.1과 5.5이상에서 사용하는 비밀번호 암호화 로직이 다르다. 맞출 수 는 있는지 주의 하도록 한다.
(5.1의 데이터를 5.5 이상에 부었을 때, 비밀번호를 재설정 할 수도 있다는 이야기다)

rpm download & install

아래 주소에서 자신에 맞는 rpm 을 구한다.
http://dev.mysql.com/downloads/repo

CentOS 6.5 를 사용하는 나의 경우는 이것을 사용 :
“http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm”

wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum localinstall http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum update
yum install mysql-community-server

service mysqld start

MySQL 자동 실행 등록

setup <– 서비스에서 mysqld 체크

MySQL root 계정 비밀번호 셋팅

mysqladmin -u root password XXXX

MySQL 한글(UTF-8) 설정 – 작업 전 화면

mysql -u root -p XXXX
show variables like 'c%';

    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    | collation_connection     | utf8_general_ci            |
    | collation_database       | latin1_swedish_ci          |
    | collation_server         | latin1_swedish_ci          |
    | completion_type          | NO_CHAIN                   |
    | concurrent_insert        | AUTO                       |
    | connect_timeout          | 10                         |
    | core_file                | OFF                        |
    +--------------------------+----------------------------+

utf8 도 있지만, latin1 도 보이고 한다.
이것들을 바꿔 보자

vi /etc/my.cnf

[mysqld]
character_set_server=utf8
collation_server=utf8_general_ci
init_connect=set collation_connection=utf8_general_ci
init_connect=set names utf8
character-set-server=utf8
character-set-client-handshake = TRUE

다시 설정을 살펴보면

service mysqld restart

mysql -u root -p XXXX
show variables like 'c%';

    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | utf8                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    | collation_connection     | utf8_general_ci            |
    | collation_database       | utf8_general_ci            |
    | collation_server         | utf8_general_ci            |
    | completion_type          | NO_CHAIN                   |
    | concurrent_insert        | AUTO                       |
    | connect_timeout          | 10                         |
    | core_file                | OFF                        |
    +--------------------------+----------------------------+

잘 바뀌어 있다.

MySQL 실행 안될 때

  • 로그 보는 법 : vi /var/log/mysqld.log

MySQL 전체 Backup & Restore

  • Backup : mysqldump –opt –host=localhost –user=root –password=XXXX –all-databases > /tmp/backup/MySql_DailyBackup.sql
  • Restore : mysql -uroot -pXXXX < MySql_DailyBackup.sql

MySQL 부분 Backup & Restore

DB백업
mysqldump -u아이디 -p DB명 > 저장할파일명.sql

테이블 백업
mysqldump -u아이디 -p DB명 테이블명 > 저장할파일명.sql

테이블복사
create table 새로운테이블명 as select * from 복사할테이블명  

DB복원
mysql -u아이디 -p암호 --default-character-set=utf8 디비명 < 복원할파일명.sql

Subversion

그냥 yum install subversion 설치하면 1.6 버전이 보통 설치 된다.
1.6 버전은 폴더마다 .svn 폴더가 생겨서 매우 번거롭다. 반드시 1.7 이상을 설치 하도록 하자

Subversion 설치

vi /etc/yum.repos.d/wandisco.svn.repo

[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/$basearch/
enabled=1
gpgcheck=0

repo 추가 후

yum clean all
yum install subversion

svn --version    <-- 1.8 버전이 나타날 것이다.

Linux 부팅 시 자동으로 SVN 실행 되도록

vi /etc/rc.local

/usr/bin/svnserve -d -r /home/svnrepository  <-- 이것 추가

Node.js

yum 설치는 없는 듯 하다.

Node.js 설치

yum groupinstall "Development Tools"
yum install screen

cd /usr/local/src
wget http://nodejs.org/dist/node-latest.tar.gz
tar zxf node-*.tar.gz
cd node-v*

./configure
make
make install

node --version
npm --version

Node.js 백그라운드 실행 (자꾸 잊어서..;; 적어둠)

nohup node app.js > nohup.txt &

FTP

FTP는 보안 문제로 잘 사용하지 않는다.
SFTP를 주로 사용하지만, WordPress 의 Update 기능을 간편하게 사용하려면 FTP 가 편리하다.

FTP 설치

yum install vsftpd
service vsftpd start
setup <-- vsftpd 활성화

FTP 에 root 계정 사용

ftp는 보안상 root 계정의 로그인을 차단한다.
차단하는 것이 좋지만…. 풀어 버리려면 아래 2개 파일에서 root 계정을 주석처리 한다.

vi /etc/vsftpd/user_list
vi /etc/vsftpd/ftpusers

// 그리고
service vsftpd restart

Java 설치

보통 Java 1.6이 설치되어 있다.
1.7을 설치 한다.

yum list java*jdk-devel
yum install java-1.7.0-openjdk-devel
// yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
java -version

김종광 프로필 사진
[ 김종광 – JongKwang Kim ]

  • 주식회사 종광, CTO & Founder
  • 한국센차유저그룹 운영자
  • 미래부/NIPA, 소프트웨어 마에스트로 멘토
    • E-Mail : kim@jongkwang.com
    • Blog : http://jongkwang.com
    • Twitter : @jongkwang
    • Facebook : https://facebook.com/kimjongkwang