CentOS의 biz라는 계정에 java 관련 프로그램(java, tomcat, maven, etc) 설치하는 간단한 bash 쉘 스크립트(install.sh)

해당 내용으로 쉘 파일을 만들고 사용 (디렉토리 먼저 생성 필요)
ex)  install.sh dir 후에 install.sh java

#!/bin/sh

#Enter user account
USER=biz


check_user()
{

    if [ $USER != `/usr/bin/whoami` ] ; then
        echo "=== Error. User is not $USER"
        exit -1;
    fi
}

make_dir()
{   
    echo "=== Install default directory : Start"

    mkdir ~/apps ~/deploy ~/scripts ~/logs ~/logs/nginx ~/src

    echo "=== Install default directory : End"

}

install_java()
{   
    echo "=== Install java : Start"
  

http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1537253298_036a93e056704f23f51ee0e1e5140908

    wget "http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1537253594_0606413d75133608b6bf7ca2136e364e" -O ~/apps/jdk-8u181-linux-x64.tar.gz
    tar -xzf ~/apps/jdk-8u181-linux-x64.tar.gz -C ~/apps && rm ~/apps/jdk-8u181-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_181 ~/apps/jdk
     
    
    #JAVA DNS TTL Modify
    echo 'networkaddress.cache.ttl=60' >> ~/apps/jdk/jre/lib/security/java.security

    #set java path
    echo 'export JAVA_HOME=~/apps/jdk' >> ~/.bashrc
    echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc

    #print java version
    java -version

    echo "=== Install java : End"

}

install_maven()
{   
    echo "=== Install maven : Start"

    wget "http://apache.tt.co.kr/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz" -O ~/apps/apache-maven-3.5.4-bin.tar.gz
    tar -xzf ~/apps/apache-maven-3.5.4-bin.tar.gz -C ~/apps && rm ~/apps/apache-maven-3.5.4-bin.tar.gz && ln -s ~/apps/apache-maven-3.5.4 ~/apps/maven

    #set maven path
    echo 'export M2_HOME=~/apps/maven' >> ~/.bashrc
    echo 'export PATH=$PATH:$M2_HOME/bin' >> ~/.bashrc
    source ~/.bashrc

    #print maven version
    mvn -version

    echo "=== Install maven : End"
}

install_tomcat()
{   
    echo "=== Install tomcat : Start"

    wget 'http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz' -O ~/apps/apache-tomcat-8.5.34.tar.gz
    tar -xzf ~/apps/apache-tomcat-8.5.34.tar.gz -C ~/apps && rm ~/apps/apache-tomcat-8.5.34.tar.gz


    #remove default tomcat webapps    
    rm -rf ~/apps/apache-tomcat-8.5.34/webapps && mkdir ~/apps/apache-tomcat-8.5.34/webapps

    echo "=== Install tomcat : End"
}

#check user account
check_user


case "$1" in
dir)
    echo "### Run make default dir ###"
    make_dir
    ;;
java)   
    echo "### Run install java ###"
    install_java
    ;;
maven)
    echo "### Run install maven ###"
    install_maven
    ;;
tomcat)
    echo "### Run install tomcat ###"
    install_tomcat
    ;;
*)
    echo "Usage : $0 {dir|java|maven|tomcat}"
    exit 1
esac





biz라는 계정을 사용한다는 전제이며 셋팅은 개인취향. CentOS기준
(Windows에서 VirtualBox를 이용해서 CentOS 6.8을 설치)


biz라는 신규 계정 생성

계정 생성 및 암호 셋팅(biz라는 계정을 사용한다는 전제)
adduser biz
passwd biz

biz계정에 sudo 권한 추가
#파일의 권한을 임시로 바꾼 후 sudo 셋팅 후 롤백
chmod 640 /etc/sudoers && echo "biz        ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers


재 부팅시 네트웤 자동 활성화

vi /etc/sysconfig/network-scripts/ifcfg-eth0 후 ONBOOT=yes 로 변경


LOCALE 셋팅

# locale 명려어로 확인 후 ko_KR.UTF-8 이 아니라면 셋팅을 진행
localectl set-locale LANG=ko_KR.UTF-8

재 부팅 후 locale명령어로 확인


bash 쉘프롬프트 변경

sudo su
echo 'PS1="[\u@\h \$PWD \D{%T}]\\$ "' >> /etc/bashrc && source /etc/bashrc


ulimit 튜닝(추후 ngrinder 등을 사용하기 위해서 OS의 리소스 사용제한을 완화)

su root

echo "*    soft nofile  655350" >> /etc/security/limits.conf
echo "*    hard nofile  655350" >> /etc/security/limits.conf
echo "*    soft nproc  32768" >> /etc/security/limits.conf
echo "*    hard nproc  32768" >> /etc/security/limits.conf

계정에 재 접속 후 적용됨


사용할 디렉토리들 생성

cd /home/biz/

#사용 디렉토리 생성(logs는 가능하면 용량 큰 디스크 마운트해서 심볼릭 링크 거세요)
mkdir apps && mkdir deploy && mkdir scripts && mkdir logs && mkdir logs/nginx


Git 설치

sudo su
yum install git-core

JAVA 설치

#jdk 다운로드
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.tar.gz" -O ~/apps/jdk-8u91-linux-x64.tar.gz
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz" -O ~/apps/jdk-8u121-linux-x64.tar.gz

#압축 해제해서 심볼릭 링크
tar -xzf ~/apps/jdk-8u91-linux-x64.tar.gz -C ~/apps && rm ~/apps/jdk-8u91-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_91 ~/apps/jdk
tar -xzf ~/apps/jdk-8u121-linux-x64.tar.gz -C ~/apps && rm ~/apps/jdk-8u121-linux-x64.tar.gz && ln -s ~/apps/jdk1.8.0_121 ~/apps/jdk

#DNS TTL 무제한-> 1분으로 변경
vi ~/apps/jdk/jre/lib/security/java.security

networkaddress.cache.ttl=-1을 networkaddress.cache.ttl=60 로 변경

#java path 설정
echo 'export JAVA_HOME=/home/biz/apps/jdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

#확인
java -version

Tomcat 설치

wget 'http://apache.mirror.cdnetworks.com/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.tar.gz' -O ~/apps/apache-tomcat-8.0.39.tar.gz
tar -xzf ~/apps/apache-tomcat-8.0.39.tar.gz -C ~/apps && rm ~/apps/apache-tomcat-8.0.39.tar.gz && ln -s ~/apps/apache-tomcat-8.0.39 ~/apps/tomcat-8.0.39



Maven 설치

wget "http://mirror.navercorp.com/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz" -O ~/apps/apache-maven-3.3.9-bin.tar.gz
tar -xzf ~/apps/apache-maven-3.3.9-bin.tar.gz && rm ~/apps/apache-maven-3.3.9-bin.tar.gz && ln -s ~/apps/apache-maven-3.3.9 ~/apps/maven

#환경변수 등록
export M2_HOME=~/apps/maven
export PATH=$PATH:$M2_HOME/bin
source ~/.bashrc

#확인
mvn -version


Nginx 설치

#root 계정으로 전환
sudo su

#nginx 저장소 추가
vi /etc/yum.repos.d/nginx.repo

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

enabled=1



#nginx 설치
yum install nginx

#nginx 서비스 활성화 (재부팅시 nginx가 자동실행되도록 서비스를 활성화 합니다.)
systemctl enable nginx


확인방법 : systemctl list-unit-files | grep nginx

#cent OS 7이 아니라면 아래 명령어로
chkconfig nginx on


REDIS 설치(최신 버전으로 설치) 

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm  # CentOS 6용
  - 참고: sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm  # CentOS 7용

sudo yum install --enablerepo=remi redis

sudo service redis start
  redis-cli >> 정상으로 접속되는지 확인
  redis-cli --version >> 버전확인

# 재 부팅시 redis 서비스 프로세스가 시작되도록 처리
sudo chkconfig redis on


Redis Conf 튜닝 예(sudo vim /etc/redis.conf)

bind 0.0.0.0

주석처리(메모리 캐쉬로만 사용하기 위해서)
#save 900 1
#save 300 10
#save 60 10000

537라인쯤에 아래 추가
maxmemory 512m


적용 : sudo service redis restart


  1. STS설치
  2. lombok 설치 : java get, setter 등을 소스에서 없애서 가독성 향상
  3. SVN커넥터 설치 : Subversive로 설치








  4. 글꼴 변경
  5. 코드 템플릿 변경





  6. JRE(Java) 설정



  7. 톰캣서버 설정



  8. 로거 자동완성용 Java 템플릿 추가
    • CTRL+Space로 로거 자동 완성을 위한 템플릿 등록(LOG 타이핑 후 CTRL+Space를 누르면 자동 완성 됨)
      • private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);




  9. 인코딩 변경
















  10. javascript 자동완성 셋팅
    • javascript 어시스트 기능 ON



    • javascript Plug-In 설치(문제가 있을 수 있으니 필요한 경우에만 설치)


  1. STS설치
  2. lombok 설치 : java get, setter 등을 소스에서 없애서 가독성 향상
  3. SVN커넥터 설치 : Subversive로 설치





  4. 글꼴 변경
  5. 코드 템플릿 변경



  6. JRE(Java) 설정


  7. 톰캣서버 설정


  8. 로거 자동완성용 Java 템플릿 추가(lombok을 사용한다면 클래스파일위에 @slf4j를 사용하기 때문에 셋팅할 필요 없음)
    • CTRL+Space로 로거 자동 완성을 위한 템플릿 등록(LOG 타이핑 후 CTRL+Space를 누르면 자동 완성 됨)
      • private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);



  9. 인코딩 변경









  10. javascript 자동완성 셋팅
    • javascript 어시스트 기능 ON


    • javascript Plug-In 설치(필요시)


  11. 저장시 자동으로 포맷팅 및 import 처리

가끔 kibna 대쉬보드를 다른사람 또는 시스템에 공유(iframe처리)할 때 full 스크린으로 보여줄 필요가 있다.


방법은,

url(shot cut url이 아니라 full url) 뒤에 &embed=true를 붙여주면 된다.


kibana 5.0.1 버전에서 잘 작동됨을 확인하였다.


참고 : https://github.com/elastic/kibana/issues/1610

Mongo DB 설치 및 Replica set으로 설정

#tokumx설치
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install tokumx-enterprise

-- OS 커널쪽 설정 수정
echo never > /sys/kernel/mm/transparent_hugepage/enabled


프로세스 시작 후 mongo 커멘드로 콘솔 접속


# primary와 arbiter만으로 2개 노드로  replica set 띄워봄
config = {
           _id: "repl_set",
           members: [
                      {_id: 0,host: "Primary IP입력:27017"},
                      {_id: 0,host: "Secondary IP입력:27017"},
                      {_id: 2,host: "Arbiter IP입력:37017",arbiterOnly:true},
                    ]
         }

rs.initiate(config);


# 참고 secondary 장비 셋팅이 완료된 후에 노드 add
rs.add("Secondary IP입력:27017")


참고 샘플 - Primary 또는 Secondary 노드 시작 커멘드
/usr/bin/mongod --replSet repl_set --dbpath /data/mongo/repl_0 --fork --logpath /var/log/tokumx/repl_0.mongod --expireOplogDays 3 --cacheSize 1g --quiet --maxConns 20000

참고 샘플 - arbiter 노드 시작 커멘드

/usr/bin/mongod --replSet repl_set --dbpath /data/mongo/arbiter --fork --logpath /var/log/tokumx/repl_arbiter.mongod --expireOplogDays 1 --oplogSize 1 --port 37017 --noprealloc


정리가 더 필요하지만 메모 목적으로 우선 블로그에 저장


elasticsearch 설치

#유저홈 밑의 apps 디렉토리에 설치하며 1개 물리서버에 인스턴스를 2개띄움
cd ~/apps

wget 'https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.1/elasticsearch-2.3.1.tar.gz'
tar -xzf elasticsearch-2.3.1.tar.gz
rm elasticsearch-2.3.1.tar.gz

#2개 인스턴스를 띄울예정
mv elasticsearch-2.3.1 elasticsearch-2.3.1-node-01
ln -s elasticsearch-2.3.1-node-01 elasticsearch-01

#설정 수정
vi ~/apps/elasticsearch-01/config/elasticsearch.yml

#아래 Elasticsearch Plugin 설치완료 후에 복사해서 node-02생성
cp -R ~/apps/elasticsearch-2.3.1-node-01 ~/apps/elasticsearch-2.3.1-node-02
ln -s elasticsearch-2.3.1-node-02 elasticsearch-02
vi ~/apps/elasticsearch-02/config/elasticsearch.yml


Elasticsearch  Plguin 설치

cd ~/apps/elasticsearch-01/bin

-- HQ(head 플러그인보다 비쥬얼적으로 좋음)
./plugin install royrusso/elasticsearch-HQ
접속URL : http://elasticsearch도메인/_plugin/HQ/

-- SQL로 조회하는 Plugin (https://github.com/NLPchina/elasticsearch-sql)
접속URL : http://elasticsearch도메인/_plugin/sql/  

-- 은전한닢 es plugin(한글 형태소 분석기)
./plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.1.0

한글 형태소분석기 은전한닢 설치(은전한닢 설치 : http://guruble.com/?p=416)

[사전작업]
vi ~/.bashrc 후 아래내용 추가(미 추가시 mecab엔진을 제대로 설치 못하거나 logstash로 집계할 때 elastic search가 죽음)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/

1. mecab-ko 형태소 분석기 엔진 설치

cd {다운로드할 경로}
wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz -O mecab-0.996-ko-0.9.2.tar.gz
tar -xvzf mecab-0.996-ko-0.9.2.tar.gz
cd mecab-0.996-ko-0.9.2
./configure
make
make check
sudo make install

아래 명령어로 정상 설치여부 확인
mecab --version


2. mecab-ko-dic 사전(dictionary)파일 설치

cd {다운로드할 경로}
wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.1-20150920.tar.gz -O mecab-ko-dic-2.0.1-20150920.tar.gz
tar -xvzf ./mecab-ko-dic-2.0.1-20150920.tar.gz
cd mecab-ko-dic-2.0.1-20150920
./autogen.sh
./configure
make
sudo make install

아래 명령어로 정상 설치여부 확인
mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
# 나는 당신을 사랑합니다.


3. libMeCab.so, MeCab.jar 라이브러리 설치

wget https://mecab.googlecode.com/files/mecab-java-0.996.tar.gz -O mecab-java-0.996.tar.gz
tar -xvzf mecab-java-0.996.tar.gz
cd mecab-java-0.996
Makefile을 열어서
vi Makefile

# Java Home 설정
# 참고. Mac OSX 에서 JAVA HOME 은 /usr/libexec/java_home 명령어로 확인할 수 있습니다.
INCLUDE={your java home path}/include

#  optimize level 을 -O1 로 변경
$(CXX) -O1 -c -fpic $(TARGET)_wrap.cxx $(INC)

# javac 와 test.java 사이에 -cp . 추가
$(JAVAC) -cp . test.java
컴파일 후 복사, 권한 변경

make
sudo cp libMeCab.so /usr/local/lib
sudo cp MeCab.jar /usr/local/lib
sudo chown -R {your user}:{your group} /usr/local/lib/libMeCab.so
sudo chown -R {your user}:{your group} /usr/local/lib/MeCab.jar
sudo chown -R {your user}:{your group} /usr/local/lib/*mecab*

vi ~/.bashrc 후 아래내용 추가(미 추가시 logstash로 집계할 때 elastic search가 죽음)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/




4. mecab-ko Elasticsearch plugin 설치

cd {Elastic 디렉토링}
./bin/plugin install https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/elasticsearch-analysis-mecab-ko-2.2.0.0.zip




logstash 설치
all plugin 포함 버전오로 설치

wget 'https://download.elastic.co/logstash/logstash/logstash-all-plugins-2.3.1.tar.gz' -O ~/apps/logstash-all-plugins-2.3.1.tar.gz

tar -xzf ~/apps/logstash-all-plugins-2.3.1.tar.gz
rm ~/apps/logstash-all-plugins-2.3.1.tar.gz
ln -s ~/apps/logstash-2.3.1 logstash

#logstash mysql-jdbc plugin 설치(jdbc는 인터넷에서 다운로드 가능
mkdir -p ~/apps/logstash/lib/jdbc
다운파일 복사

실행
~/apps/kibana/bin/kibana >> /dev/null &


kibana 설치(필요시)
wget 'https://download.elastic.co/kibana/kibana/kibana-4.5.0-linux-x64.tar.gz' -O ~/apps/kibana-4.5.0-linux-x64.tar.gz
tar -xzf ~/apps/kibana-4.5.0-linux-x64.tar.gz
rm ~/apps/kibana-4.5.0-linux-x64.tar.gz
ln -s ~/apps/kibana-4.5.0-linux-x64 kibana

설정값 수정
vi ~/apps/kibana/config/kibana.yml



방화벽오픈(root권한 필요)

sudo vi /etc/sysconfig/iptables 후 내용 추가하고 sudo service iptables restart

#elastic
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 29200:29201 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 9300:9301 -j ACCEPT

#logstash listen topbeat
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 5044:5045 -j ACCEPT

#logstash listen packetbeat
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 6044:6045 -j ACCEPT

#kibana
-A INPUT -m state --state NEW -m tcp -p tcp -s IP주소 --dport 5601 -j ACCEPT





포트 스캔 후 서버 공격이 들어오는 패턴이 많다.

그렇기에 가능하면 ping 응답은 막아두자..


방법

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

(vim으로는 안됨)




AWS ELB를 이용해서 로드밸런싱을 하는데 주기적으로 응답이 느려지는 현상(몇초마다 응답이 10초가 넘어감)이 발생했다.

어플리케이션 문제인가 싶어서 소거법으로 하나하나 테스트를 해봤는데 아니었다.


1. 테스트환경을 구축 후 반복해서 URL을 호출

  watch --interval=1 time curl "검증 URL" > /dev/null


2. ELB 모니터링 및 DNS도 확인




결론은, ELB를 새로 띄우니 감쪽같이 해결되었다.

아직 한국 리전에서 불안전한 케이스가 있는게 아닌가 싶다..(AWS 사용자 사이에서 몇가지 카더라도 있고..)




+ Recent posts