docker

Docker Basic

written by sean

Github |

Chapter 0: About

Linux is the best software for software paradise

Thanks to

  • sean
  • Mr Ju SS
  • OSS Members
  • 한글

SEAN's Paradise

I think that My Life as Software Engineer was torrible , but it's role for social is important so, I keep going for better life & software development

chapter 1 : 설치

1.1 CentOS

1.1.1 버전 확인

CentOS 버전 확인

cat /etc/centos-release

커널 버전 확인

uname -r

1.1.2 자바 설치

기존 자바 설치 파일 확인

rpm -qa | grep java

확인된 기존 자바 삭제

yum remove 검색된openjdk이름

자바.tar.gz 압축 풀기(/usr/local) 및 심볼릭 링크

tar -zxvf 파일명.tar.gz
ln -s 링크파일 링크명

환경변수 설정 및 적용

vim /etc/profile

export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

자바 버전 확인

java -version
javac -version

1.1.3 톰캣 설치

톰캣.tar.gz 압축 풀기(/usr/local) 및 심볼릭 링크

tar -zxvf 파일명.tar.gz
ln -s 링크파일 링크명

환경변수 설정 및 적용

vim /etc/profile

export CATALINA_HOME=/usr/local/tomcat
export CLASSPATH=$CATALINA_HOME/lib-jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar
export PATH=$CATALINA_HOME/bin

source /etc/profile

8080포트 방화벽 해제

vim /etc/sysconfig/iptables

iptables -A INPUT -m state --state NEW -p tcp --dport 8080 -j ACCEPT

service iptables save
service iptables restart

톰캣 서버 작동 및 중지

/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh

부팅 시 자동실행 설정

vim /etc/rc.d/init.d/tomcat

#!/bin/sh
# chkconfig: 345 90 90
# description: init file for tomcat
# processname: tomcat

export JAVA_HOME=/usr/local/java
export CATALINA_HOME=/usr/local/tomcat
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib-jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

export JAVA_OPTS="-Djava.awt.headless=true -server -Xms2048m -Xmx4096m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+DisableExplicitGC"
#export JAVA_OPTS="-Djava.awt.headless=true -server -Xms2048m -Xmx4096m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+DisableExplicitGC -Dscouter.config=/usr/local/apache-tomcat-7.0.78/scouter/scouter.conf"

export CATALINA_OPTS="-Denv=product -Denv.servername=projectTomcat"
#export CATALINA_OPTS="-Denv=product -Denv.servername=projectTomcat -javaagent:/usr/local/apache-tomcat-7.0.78/lib/scouter.agent.jar "

# Get Config
[ -f /usr/local/tomcat/conf/server.xml ] && [ -f /usr/local/tomcat/conf/web.xml ] || exit 0

source /etc/profile

# Source function library
. /etc/rc.d/init.d/functions

# caution :
#           variable=<value> space between variable and value is not allowed
RETVAL=0
prog=tomcatd

# Start function
start()
{
  echo -n "Starting $prog : "
  daemon $CATALINA_HOME/bin/startup.sh
  RETVAL=$?
  echo
  touch /var/lock/subsys/tomcat
  return $RETVAL
}

# Stop fucntion
stop()
{
  echo -n "Stopping $prog : "
  daemon $CATALINA_HOME/bin/shutdown.sh
  RETVAL=$?
  echo
  rm -f /var/lock/subsys/tomcat
  return $RETVAL
}

# Restart function
restart()
{
  stop
  start
}

# See how we were called
case "$1" in
     start)
           start
           ;;
     stop)
           stop
           ;;
     restart)
           restart
           ;;
     *)
           echo $"Usage : $0 {start|stop|restart}"

esac

exit $RETVAL

실행권한 부여

chmod u+x /etc/rc.d/init.d/tomcat
chmod 755 /etc/rc.d/init.d/tomcat

작동 테스트

/etc/rc.d/init.d/tomcat start
/etc/rc.d/init.d/tomcat restart
/etc/rc.d/init.d/tomcat stop

chkconfig 등록

chkconfig --add tomcat
chkconfig --list tomcat
tomcat  0:해제   1:해제    2:해제    3:활성    4:활성    5:활성    6:해제
reboot

* 만약 3~5번이 활성화 되있지 않다면, chkconfig --level 345 tomcat on

8080 포트 확인 및 프로세스 확인

netstat -ntl
ps -ef | grep tomcat

1.1.4 MariaDB 설치(tar.gz)

MariaDB 설치 확인

rpm -qa | grep MariaDB

MariaDB 압축 해제 및 파일 이동

tar -zxvf 파일명.tar.gz
rm -rf 파일명.tar.gz
mv 마리아폴더 /usr/local

MariaDB 심볼릭 링크

ln -s 마리아폴더 mariadb

MariaDB 사용자 및 그룹 추가(선택)

useradd -M mariadb
usermod -d 마리아폴더 mariadb
grep mariadb /etc/passwd

groupadd mariadb
useradd -g mariadb mariadb

MariaDB 사용자 권한 설정(선택)

chown mariadb.mariadb -R 마리아폴더
chmod 755 -R 마리아폴더

my.cnf 복사

cp 마리아폴더/support-files/아래파일명 /etc/my.cnf
시스템 메모리가 4G이상일  : my-innodb-heavy-4G.cnf
시스템 메모리가 1G~2G일  : my-huge.cnf
시스템 메모리가 512MB정도   : my-large.cnf
시스템 메모리가 32MB~64MB정도   : my-medium.cnf
시스템 메모리가 64MB이하일  : my-small.cnf

한글(my.cnf에 내용 추가)

character-set-server=utf8
collation-server=utf8_general_ci

실행데몬 복사

cp 마리아폴더/support-files/mysql.server /etc/init.d/mysqld

사용자 권한 설정(선택)

chown mariadb.mariadb /etc/init.d/mysqld
chmod 750 /etc/init.d/mysqld

실행데몬 수정

vim /etc/init.d/mysqld

basedir=마리아폴더
datadir=마리아폴더/data

PATH 설정 및 적용

vim /etc/profile

PATH=$PATH:마리아폴더/bin

source /etc/profile

MariaDB 실행

service mysqld start

부팅 시 자동시작

chkconfig mysql on
chkconfig --list mysql

2~5:on

보안설정

./마리아폴더/bin/mysql_secure_installation –basedir=마리아폴더

Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

접속확인

mysql -uroot -p

# DB생성 (mariadb 계정으로 로그인) /usr/local/mariadb/scripts/mysql_install_db –user=mariadb –basedir=/usr/local/mariadb –datadir=/usr/local/mariadb/data rpm 설치

rpm -qa 'mysql*'
rpm -ivh MariaDB-*

1.1.5 MairaDB 설치(rpm)

기존 설치 파일 확인

rpm -qa | grep mysql

기존 설치 파일 삭제

rpm -e --nodeps mysql-libs-5.1.73-8.el6_8.x86_64

MariaDB.rpm 서명 체크(선택)

rpm --checksig $(find . -name '*.rpm')

MariaDB.rpm 서명 가져오기(선택)

gpg --keyserver hkp://pgp.mit.edu --recv-keys 1BB943DB
gpg --export --armour 1BB943DB > mariadb-signing-key.asc
rpm --import mariadb-signing-key.asc
rpm -qa gpg-pubkey*

rpm --checksig $(find . -name '*.rpm')

perl-DBI 설치 및 MariaDB 설치

rpm -Uvh perl-DBI-*
rpm -Uvh MariaDB-*

설치 확인 및 실행

rpm -qa | grep MariaDB

/etc/init.d/mysql start

비밀번호 설정

/usr/bin/mysqladmin -u root password '패스워드'

1.1.6 아파치 설치

기존 아파치 설치 파일 확인

rpm -qa | grep httpd

기존 httpd 삭제

rpm -e --nodeps 검색된httpd이름

httpd 설치

rpm -ivh httpd-*

기본 설정

vim /etc/httpd/conf/httpd.conf

아파치에서 .php 파일 등 연결

AddType application/x-httpd-php .php .ph .phtml .php3 .php4 .sql .inc .html .htm
AddType application/x-httpd-php-source .phps

ServerName 변경

ServerName 127.0.0.1:80

방화벽 설정

vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

/etc/init.d/iptables restart

자동실행 설정

chkconfig httpd on
chkconfig --list httpd
httpd    0:off 1:off   2:on    3:on    4:on    5:on    6:off

동작 확인

ps -ef | grep httpd

1.1.7 mod_JK

파일 복사

/etc/httpd/modules/mod_jk.so

SELinux  사용한다면 mod_jk.so  httpd_modules_t Context  설정되어야 apache httpd  읽을  있다. 다음 명령어로 설정하자.
chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so

Apache 웹서버에서 mod_jk 설정

vim /etc/httpd/conf/httpd.conf

LoadModule jk_module modules/mod_jk.so

ServerName localhost

include /etc/httpd/conf.d/mod_jk.conf

vim /etc/httpd/conf.d/mod_jk.conf

<IfModule mod_jk.c>
 # Where to find workers.properties
 # JkWorkersFile /etc/httpd/conf/workers_jk.properties

 # Where to put jk shared memory
 JkShmFile run/mod_jk.shm

 # Where to put jk logs
 JkLogFile logs/mod_jk.log

 # Set the jk log level [debug/error/info]
 JkLogLevel info

 # Select the timestamp log format
 JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

 # If you want to put all mounts into an external file
 # that gets reloaded automatically after changes
 # (with a default latency of 1 minute),
 # you can define the name of the file here.
 JkMountFile /etc/httpd/conf/uriworkermap.properties
</IfModule>

mod_jk worker 설정

vim /etc/httpd/conf/workers_jk.properties

worker.list=worker1, worker2

worker.worker1.port=8009
worker.worker1.host=server1
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

## server 2
worker.worker2.port=8009
worker.worker2.host=server2
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

톰캣 연결 설정

vim /usr/local/tomcat/conf/server.xml
tomcat  기본 URIEncoding  ISO-8859-1 이므로 한글이 깨지므로 모든 커넥터 설정에 URIEncoding="UTF-8"  추가해야 한다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

어떤 url 요청에 대해 tomcat 과 연계할지 설정한다.

vim /etc/httpd/conf/uriworkermap.properties
## Mapping the URI /service1 under worker1
/service1/*.do=worker1
/service1/*.jsp=worker1

# /service2 요청으로 들어온 것은 worker2 로 mount
/service2/*=worker2

# png와 jpg 는 apache 가 처리
!/service2/*.png=worker2
!/service2/*.jpg=worker2

## 아래와 같이 설정하면 모든 요청(jsp, do, image, js등)을 tomcat으로 보내서 처리한다.
# /*=worker1

테스트

apachectl start
catalina.sh start

http://아이피/index.jsp 으로 호출이 되면 성공

chapter 2 : 명령어

2.1 CentOS

2.1.1 IP 설정

IP 설정

vim /etc/sysconfig/network-scripts/ifcfg-eth0

# 장치명, 첫번째 이더넷카드
DEVICE=eth0

# IP 부여 방식 결정, static 은 고정IP
BOOTPROTO=static

# 이더넷카드의 MAC 주소
HWADDR=XX:XX:XX:XX:XX:X

# GUI 모드에서의 편리한 네트워크설정 허용, TUI에선 필요없음
NM_CONTROLLED=no

# 시스템 시작시 자동으로 활성화
ONBOOT=yes

# Ethernet 에 대한 설정
TYPE=Ethernet

# 고유ID를 부여하는 것으로 자동으로 부여됨
UUID=XXXXXXX-XXX-XXX-XXX-XXXXXXX

# 브로드캐스트 지정
BROADCAST=192.168.0.255

# IP 주소 지정
IPADDR=192.168.0.5

# 서브넷마스크 지정
NETMASK=255.255.255.0

# 네트워크 지정
NETWORK=192.168.0.0

# Wake On Lan 기능 활성화, Ethtool 이 필요한데 CentOS 기본 설치되어 있음
ETHTOOL_OPTS=wol g

# 일반사용자의 eth0 제어 가능여부
USERCTL=no

# IPV6 사용여부
IPV6INIT=no

SSH 고정IP

vim /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=static
IPADDR=192.168.56.102
NETMASK=255.255.255.0
GATEWAY=192.168.56.1

네트워크 재시작
/etc/rc.d/init.d/network restart

2.1.2 날짜 & 시간 설정(수동)

현재 날짜 & 시간 확인

date

시간 바꾸기

date -s ::

날짜 바꾸기

date -s '년-월-일 시:분:초'

date -s --
 경우 시간이 00:00:00

2.1.3 날짜 & 시간 설정(ntp)

ntp 설정

vim /etc/ntp.conf

server kr.pool.ntp.org
server time.bora.net
server time.kornet.net
server  10.0.4.23 local

서비스 등록

chkconfig ntpd on

확인
chkconfig --list | grep ntpd
ntpd   0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

서비스 시작

service ntpd start

동기화 확인

ntpq -p

* : 현재 sync  받고 있음을 의미
+ : ntp 알고리즘에 의해 접속은 가능하지만 sync  하고 있지는 않음을 의미
- : ntp 알고리즘에 의해 접속은 가능하지만 sync 가능 리스트에서 제외
blank : 접속이 불가능함을 의미

2.1.3 시스템 경로 설정

경로 확인

env

경로 삭제

unset JAVA_HOME

2.1.4 SCP

scp 사용

윈도우 접속 상태에서 파일 전송
scp -옵션 [옮길파일] [서버계정@서버아이피:/저장공간]
-r : 폴더 복사
-v : 복사 과정
-P : 포트 번호

윈도우 접속 상태에서 파일 수신
scp -옵션 [서버계정@서버아이피:/옮길파일] [옮길경로]

scp -P 25109 root@180.182.63.23:/home/mysql/ ./
scp nbsf2_20170524 -P 10420 root@110.93.129.14:/home/mysql/
scp root@10.10.131.138:/drives/e/nbsf2_20170524 /root/mariadb_backup

2.1.5 시스템 정보 확인

시스템 정보보기

dmidecode |more

리눅스 커널 종류 보기

uname -a

리눅스 OS 버전 확인

cat /etc/issue.net

리눅스 CPU 정보 확인

cat /proc/cpuinfo |grep model

리눅스 메모리 정보ㄴㄷㄱ퍛

cat /proc/meminfo

리눅스 메모리 사용량

free -m

리눅스 배포버전 확인

cat /proc/sys/kernel/osrelease

리눅스 디스크 정보 확인 :: ㅇㅁㅅㄷ

cat /proc/diskstats

리눅스 하드디스크 파티션 용량 확인

cat /proc/partitions

리눅스 모듈확인

lsmod

부팅할때 읽어들인 하드웨어 정보확인

dmesg

사용자 정보보기

cat /etc/passwd

설정 보기

하드 설정 전체 보기
ulimit -Ha

소프트 설정 전체 보기
ulimit -Sa

=>하드는 해당쉘의 최대값을 뜻한다 하면 되고,  소프트는 현재 설정을 말한다 생각하면 된다.

2.1.6 시간(ntp)

2.1.7 기타

UTF8 확인

locale

로그 확인

tail -f catalina.out

SELinux

vi /etc/selinux/config

SELINUX=disabled

실행중인 서비스 확인(방화벽 확인)

service iptables status

방화벽 서비스 끄기

/etc/rc.d/init.d/iptables stop
/etc/rc.d/init.d/ip6tables stop

포트 확인

netstat -an |grep 8080

프로세스 확인

ps -ef |grep java

검색

find 경로 -옵션 옵션에따른검색어
-name  파일이름
-user  소유자
-type  타입
    d : directory
    f : regular file
    b: block device file
    c : character device fine,
    n: network sepecial file
    p: named pipe
    s: socket
-size  파일사이즈 이상(100c, c는 Byte를 의미함)
-mtime n일 이상 변경되지 않은 파일
-atime n일 이상 엑세스되지 않은 파일

권한 설정

chown 사용자.그룹 -R 폴더
chmod 755 -R 폴더

2.2 MariaDB

2.2.1 MariaDB 쿼리

chapter 3 : MariaDB

3.1 기본 설정

3.1.1 UTF8 설정

MariaDB :: show variables like 'c%';

vim /etc/my.cnf.d/server.cnf

[mysqld]
init_connect = SET collation_connection = utf8_general_ci
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = SET NAMES utf8

vim /etc/my.cnf.d/mysql-clients.cnf

[client]
default-character-set = utf8

3.1.2 대소문자 구분 설정

데이터베이스 대소문자 구분 안함 설정

vim /etc/my.cnf.d/server.cnf

[mysqld]
lower_case_table_names = 1

3.2 사용자 추가/삭제 & 권한

3.2.1 패스워드 재설정

데몬 종료 및 기동

service mysqld stop

mysqld --skip-grant-table  데몬을 기동한다.
암호 없이 접속
mysql -u root mysql
use mysql;
새로운 암호 설정
update user set password=password('암호') where user='root';
flush privileges;

데몬 재기동

service mysqld stop
service mysqld start

3.2.2 mysql 패스워드 복잡성 해지

validate_password 파일 변경

cd /usr/lib64/mysql/plugin/
mv validate_password.so validate_password.so1

서비스 재시작
service mysqld restart

패스워드 변경

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '패스워드';
flush privileges;

3.3 사용자 추가/삭제 & 권한

3.3.1 사용자 추가/삭제

사용자 확인

root 계정으로 접속
mysql -uroot -p

use mysql;
select host, user, password from user;

host는 사용자 아이디 뒤에 @localhost, '%' 따라서 외부 접근이 허용되는 권한을   있다.
localhost는 내부접근, '%' 외부접근

사용자 추가

create user 사용자아이디@localhost identified by 'password';
                           '%'

사용자 삭제

delete from user where user ='사용자아이디';

3.3.2 데이터베이스 사용권한

데이터베이스 사용권한 부여

grant all privileges on 데이터베이스.테이블 to 사용자아이디@호스트 identified by '패스워드';
모든 테이블 *, 모든 호스트'%'

변경된 권한 적용
flush privileges;

데이터베이스 사용권한 삭제

revoke all on 데이터베이스.테이블 from 사용자이름@호스트

권한 확인

show grants for 사용자아이디@'%';

3.4 MySQL/MariaDB 백업 & 복원

3.4.1 Windows

MariaDB 설치 폴더에서 bin폴더 cmd 실행 후 작업

백업

mysqldump -uroot -p 데이터베이스이름 > D:\원하는폴더경로\원하는파일명

복원

mysql -uroot -p123 --default-character-set="utf8" nbsf_dev < D:\Algorithm\nbsf20170215

3.4.2 Linux

mysqldump -u[아이디] -p[패스워드] > [저장파일명].sql

MySQL/MariaDB 전체 데이터베이스를 백업

mysqldump -uroot -p -A > backup_full.sql

생성된 덤프를 이용한 복원

mysql -uroot -p < backup_full.sql

sw_test 라는 데이터베이스만 백업

mysqldump -uroot -p sw_test > backup_sw_test.sql

sw_test 데이터베이스의 tbl_a라는 테이블만 백업

mysqldump -uroot -p sw_test tbl_a > backup_sw_test_tbl_a.sql

sw_test 데이터베이스의 tbl_a테이블의 emp_no가 100 이상 200이하의 데이터만 백업

mysqldump -uroot -p sw_test tbl_a -w'emp_no >= 100 and emp_no <= 200' > backup_sw_test_tbl_a.sql

실제 데이터백업은 받지 않고 테이블 definition만 백업

mysqldump -uroot -p sw_test --no-data > backup_sw_test_definition.sql

3.4.3 시스템 백업

root 계정으로 백업

mysqldump --default-character-set=utf8 --set-charset -unbsf -pnbsf nbsf_dev > nbsf_dev.dump

분할시
mysqldump --default-character-set=utf8 --set-charset -uroot -p nbsf_dev | split -b 700m - nbsf_dev.dump
cat nbsf_dev.dump* > nbsf_dev.dump

Database 생성

mysql 진입
mysql -uroot -p
삭제
drop database nbsf_dev;
생성
CREATE DATABASE nbsf_dev DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

유저생성 및 권한 부여

use mysql;
생성
create user 'nbsf'@'%' identified by 'nbsf';
권한
grant all privileges on nbsf_dev.* to 'nbsf'@'%' WITH GRANT OPTION;
적용
flush privileges;
확인
SHOW GRANTS FOR 'nbsf'@'%';

Database 복구

mysql 리눅스 백업db 폴더 진입 

mysql -uroot -pnbsf --default-character-set="utf8" nbsf_dev < nbsf_dev.dump

Databases 용량확인

SELECT table_schema, SUM((data_length+index_length)/1024/1024) MB FROM information_schema.tables GROUP BY 1;
6.2    11:15 2568.54983045
       11:49 2569.54983045 30 1MB
       12:54 2570.54983045 60 1MB
       14:15 2570.54983045 80 0MB
       17:08 2573.54983045 180 3MB
6.7    09:00 2625.56545545 112시간 52MB
       10:31 2625.56545545 90 0MB
       11:44 2626.56545545 70 1MB
       12:47 2627.56545545 60 1MB
       15:10 2627.56545545 130 0MB
       16:55 2629.56545545 100 2MB
6.8    09:40 2638.56545545 17시간 9MB
6.19   18:00 2770.62795545 11.5 132MB

3.5 HeidiSQL

3.5.1 테이블 복사

테이블 컬럼 복사

show create table 테이블명
Create Table 쿼리를 복사하여 실행

테이블 데이터 복사

INSERT ignore INTO 복제테이블 SELECT * FROM 원본테이블

3.5.2 테이블 데이터 삭제

삭제할 데이터 확인

select * from ta_eval_health_index2
where REG_DTM < '2017-05-21'

삭제할 데이터가 맞으면 삭제

delete from ta_eval_health_index2
where REG_DTM < '2017-05-21'

chapter 4 : 알고리즘

4.1 알고리즘 설정

4.1.1 알고리즘

export DAEMON_NAME=ams-algorithm
export DAEMON_HOME=/home/algorithm/ams
export MAIN=ams-algorithm.jar

export JAVA=/home/algorithm/ams/jre1.8.0_111/bin/java
export XMS=-Xms1024m
export XMX=-Xmx2048m
export JVM_OPTION="-Dfile.encoding=UTF-8 -Dserver.port=24119"

4.1.2 dev 알고리즘

개발서버 알고리즘

vim /etc/init.d/algosvc

#!/bin/bash
# description: ITX
# chkconfig: 2345 20 80
# processname: java

export DAEMON_NAME=ams-algorithm
export DAEMON_HOME=/home/algorithm
export MAIN=ams-algorithm.jar

export JAVA=/home/algorithm/jre1.8.0_111/bin/java
export XMS=-Xms1024m
export XMX=-Xmx2048m
export JVM_OPTION="-Dfile.encoding=UTF-8 -Dserver.port=24119"

do_start()
{
        DAEMON_PID=`ps -ef | grep $DAEMON_NAME | grep java | awk '{print $2}'`
        if [ "${DAEMON_PID}" = "" ]
        then
                                for jar in `find $DAEMON_HOME/lib -type d`
                                do
                                     #echo $jar
                                     CLP=$CLP:$jar/*
                                done

                echo "$JAVA $XMS $XMX $JVM_OPTION -DNAME=$DAEMON_NAME -jar $MAIN &"
                cd $DAEMON_HOME

                nohup $JAVA $XMS $XMX $JVM_OPTION -DNAME=$DAEMON_NAME -jar $MAIN 1> /dev/null 2>&1 &
                #nohup $JAVA $XMS $XMX $JVM_OPTION -DNAME=$DAEMON_NAME -jar $MAIN &
                echo "$SYSDP_NAME has been successfully started."
        else
                echo "$DAEMON_NAME already running."
        fi
}

do_stop()
{
        DAEMON_PID=`ps -ef | grep $DAEMON_NAME | grep java | awk '{print $2}'`
        if [ "$DAEMON_PID" != "" ]
        then
                kill $DAEMON_PID
                echo "$DAEMON_NAME has been successfully stop. PID=$DAEMON_PID"
        else
                echo "$DAEMON_NAME is not running."
        fi
}

case "$1" in
        start)
                echo "$DAEMON_NAME start..."
                do_start
;;
        stop)
                echo "$DAEMON_NAME stopping..."
                do_stop
;;
        restart)
                $0 stop
                $0 start
;;
        *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
;;
esac

exit 0

chapter 5 : Scouter의 구성

5.1 Scouter의 구성

https://www.slideshare.net/ienvyou/scouter-jboss

Server(Collector)

Agent가 전송한 데이터 수집/처리

Host Agent

OS의 CPU, Memory, Disk등의 성능 정보 전송

Java Agent

실시간 서비스 성능 정보, Heap Memory, Thread  Java 성능 정보

Client(Viewer)

수집된 성능 정보를 확인하기 위한 Client 프로그램

5.2 Scouter 설치

5.2.1 Windows

Scouter Server(Collector) 실행

start-scouter-server.bat

Client(Viewer) 실행

scouter.exe
127.0.0.1:6100
admin/admin

Host Agent 실행(Optional)

start-scouter-host.bat

데모 시스템 실행(Tomcat with WAR)

start-tomcat.bat

jmeter를 통한 가상의 부하 발생

start-jmeter.bat

5.2.2 Linux

권한 설정

chmod -fR 755 *

Scouter 서버 설정

/usr/local/scouter/demo-env1/scouter/server/conf/scouter.conf

net_tcp_listen_port=6100
net_udp_listen_port=6100
db_dir=./database
log_dir=./logs

/usr/local/scouter/demo-env1/scouter/server/startup.sh

-Xms2048m -Xmx2048m

Scouter Server(Collector) 실행

./start-scouter-server.sh

Client(Viewer) 실행

scouter.exe
192.168.56.1:6100
admin/admin

Host Agent 설정

/usr/local/scouter/demo-env1/scouter/agent.host/conf/scouter.conf

# Scouter Server IP Address (Default : 127.0.0.1)
net_collector_ip=192.168.0.147

# Scouter Server Port (Default : 6100)
net_collector_udp_port=6100
net_collector_tcp_port=6100

# Log directory(Default : ./logs)
log_dir=./logs

-Xmx512m 해당 하는 부분을 장비 성능등에 맞게 설정
Ex) -Xms512m -Xmx512m

에이전트 호스트는 운영체제의 CPU, 메모리 정보를 수집하는 역할

Host Agent 실행(Optional)

./start-scouter-host.sh

모니터링 대상 WAS 설정

/usr/local/scouter/demo-env1/scouter/agent.java/conf/jboss_standalone_ha_11_143.conf
# Scouter Server IP Address (Default : 127.0.0.1)
# Data 수집 ( Collector & Server ) 서버
net_collector_ip=192.168.0.147

# Scouter Server Port (Default : 6100)
net_collector_udp_port=6100
net_collector_tcp_port=6100

# Scouter Name(Default : tomcat1)
# agent name 설정
obj_name=jboss_standalone_ha_11_143

trace_interservice_enabled=true
# Hooking 하여 기록할 method의 pattern 정의
# 여러개인 경우 comma(,)로 구분
# format : package.Class.method,package.Class2.method2
hook_method_patterns=org.mybatis.jpetstore.*.*

# jdbc leak profile 설정
# ibatis 와 같은 framework 을 사용하는 경우 hook_connection_open_patterns 을 설정
# format : hook_connection_open_patterns=org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection
profile_connection_open_enabled=true

# 서비스 연계 추적으로 HTTP로 요청하는 서비스 간 연결 추적이 활성화
trace_interservice_enabled=false

JBoss 실행 파일 scouter agent.java 설정 적용

/usr/local/scouter/demo-env1/scouter/server/env.sh
/opt/was/servers/standalone_ha_11/bin/env.sh 설정

# Byte Code Instrumentation 기법으로 실제 실행 환경의 동작 모니터링을 위한 agent Library loading 위한 설정
-javaagent

# agent.java 의 설정 파일의 위치를 지정
-Dscouter.config

JBoss의 경우에는 OSGI 클래스로더 구조로 인하여standalone.conf 혹은 domain.conf 파일 등과 같은 config 설정 파일 혹은 실행 파일 부분에 다음과 같이 적용
-Djboss.modules.system.pkgs=org.jboss.byteman,scouter
export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,scouter" JBoss 기동 스크립트에 Scouter에 대한 설정을 통해 BCI 작업이 이루어지도록 

데모 시스템 실행(Tomcat with WAR)

./start-tomcat.sh

chapter 6 : 프로젝트 지원

6.1 레드마인 설정

플러그인

export PATH=/opt/redmine-3.2.3-1/ruby/bin

cd /opt/redmine-3.2.3-1/apps/redmine/htdocs
bundle install --without development test postgresql sqlite
ruby bin/rake redmine:plugins RAILS_ENV=production

cd /opt/redmine-3.2.3-1/apps/redmine/htdocs
bundle install --without development test postgresql sqlite --no-deployment
bundle install --without development test postgresql sqlite --deployment
ruby bin/rake redmine:plugins RAILS_ENV=production

6.1.1 메일 설정

메일 설정

/opt/redmine-3.3.3-0/apps/redmine/htdocs/config/configuration.yml
띄어쓰기 주의!!

default:
  # Outgoing emails configuration
  # See the examples below and the Rails guide for more configuration options:
  # http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration
  email_delivery:
    delivery_method: :smtp
    smtp_settings:

      address: smtp.gmail.com
      port: 587
      domain: example.net
      authentication: :login
      user_name: 아이디@gmail.com
      password: 비밀번호

재시작
cd /opt/redmine-3.2.3-1
./ctlscript.sh restart apache

6.1.2 HTTPS 강제 리다이렉션

레드마인 설정

vim /opt/redmine-3.2.3-1/apps/redmine/conf/httpd-prefix.conf

맨 위에
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

재시작
cd /opt/redmine-3.2.3-1
./ctlscript.sh restart apache

멘티스 설정

vim /opt/mantis-2.3.1-0/apps/mantis/conf/httpd-prefix.conf

맨 위에
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

재시작
cd /opt/mantis-2.3.1-0
./ctlscript.sh restart apache

6.1.3 SSL 인증서(도메인 주소 필요)

비공개 키 만들기

openssl genrsa -out /opt/redmine-3.2.3-1/apache2/conf/server.key 2048

인증서 만들기

openssl req -new -key /opt/redmine-3.2.3-1/apache2/conf/server.key -out installdir/apache2/conf/cert.csr

설치

cd /usr/local
yum install epel-release
rpm -ivh https://rhel6.iuscommunity.org/ius-release.rpm
yum install git python27 python27-devel python27-pip python27-setuptools python27-virtualenv python27-libs
git clone https://github.com/letsencrypt/letsencrypt

실행

chattr -i /usr/bin/gcc /usr/bin/g++ (실행 x)
cd /usr/local/letsencrypt
/usr/local/letsencrypt/letsencrypt-auto certonly
chmod 700 /usr/bin/gcc /usr/bin/g++;chattr +i /usr/bin/gcc /usr/bin/g++

6.2 gitlab

6.2.1 설치

https://about.gitlab.com/downloads/#centos6

설치파일 실행

rpm -ivh gitlab-ce-9.2.1-ce.0.el6.x86_64.rpm

재구성

gitlab-ctl reconfigure

6.2.2 설정

실행

# Start all GitLab components
/opt/gitlab/bin/gitlab-ctl start

# Stop all GitLab components
/opt/gitlab/bin/gitlab-ctl stop

# Restart all GitLab components
/opt/gitlab/bin/gitlab-ctl restart

6.3 Jenkins

6.3.1 설치

플러그인 설치

Ant Plugin
GitHub plugin
GitLab Plugin
Gradle Plugin
Publish Over FTP
Publish Over SSH

6.3.2 SSH

시스템 설정

SSH Servers
Name       :   192.168.56.106
Hostname   :   192.168.56.106
Username   :   root
Remote Directory : /usr/local/tomcat/webapps/
Passphrase / Password : 비밀번호

프로젝트 설정

Source files   target/AMS-1.0.war
Remove prefix  target/
Exec command   /usr/local/tomcat/copy.sh

copy.sh 스크립트 생성

#!/bin/sh

backup="`date '+%m%d_%H%M'`"

service tomcat stop

sleep 2

rm -rf /usr/local/tomcat/webapps/AMS-1.0
mv /usr/local/tomcat/webapps/AMS-1.0.war "/usr/local/tomcat/oldwebapps/AMS-1.0.war_$backup"
mv /usr/local/tomcat/AMS-1.0.war /usr/local/tomcat/webapps/

sleep 10

service tomcat start

sleep 120

/etc/init.d/tomcat stop

sleep 2

/etc/init.d/tomcat start

6.3.3 메이븐 설정

프로젝트 설정

Maven Version : MAVEN_HOME
Goals : clean install
POM : pom.xml

chapter 7 : 설정

7.1 tomcat

vim /etc/init.d/tomcat

export JAVA_HOME=/usr/local/src/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH

export JAVA_OPTS="-Djava.awt.headless=true -server -Xms2048m -Xmx4096m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+DisableExplicitGC"

export CATALINA_OPTS="-Denv=product -Denv.servername=projectTomcat"

export CATALINA_HOME=/usr/local/src/tomcat7

#. /etc/profile

case "$1" in

    start)

        echo "Starting tomcat: "

        #su - tomcat -c $CATALINA_HOME/bin/startup.sh
        $CATALINA_HOME/bin/startup.sh

        ;;

    stop)

        echo "Shutting down tomcat: "

        #su - tomcat -c $CATALINA_HOME/bin/shutdown.sh
        $CATALINA_HOME/bin/shutdown.sh

        ;;

    restart)

        echo "Restarting tomcat: "

        #su - tomcat -c $CATALINA_HOME/bin/shutdown.sh; su - tomcat -c $CATALINA_HOME/bin/startup.sh
        $CATALINA_HOME/bin/shutdown.sh; su - tomcat -c $CATALINA_HOME/bin/startup.sh

        ;;

    *)

        echo "Usage: service tomcat {start|stop|restart}"

        exit 1

esac

exit 0

7.2 HTTPS(톰캣 사설 인증서)

7.2.1 톰캣 사설 인증서 올리기

Windows에서 cmd 실행

keytool.exe(JDK_HOME/bin)  실행되는지 확인(실행안되면 환경변수에 path 추가)
keytool.exe

인증서를 생성할 디렉토리로 이동
cd C:\privateCert

서버키 생성(이름은 변경가능:TestServer)

keytool -genkey -keyalg RSA -sigalg SHA1withRSA -alias TestServer -keysize 2048 -keystore TestServer.key
비밀번호  입력(국가 코드 : KR)
TestServer.key 파일 생성 여부 확인

인증서 생성(이름은 변경가능:TestServer)

C:\privateCert>keytool -certreq -alias TestServer -keyalg RSA -sigalg SHA1withRSA -file TestServer.csr -keystore TestServer.key
TestServer.csr 파일 생성 여부 확인

서버에서 설정

server.xml 위치로 이동(톰캣:TOMCAT_HOME/conf, 이클립스:Server/해당WAS)
SSL 설정 주석 풀기(8443 으로 검색하면 나옴)
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="/root/privateCert/TestServer.key" keystorePass="tmddhks" />

톰캣 restart

7.2.2 톰캣 시작페이지 설정

8080 시작페이지 설정

</Host> 앞에
<Context path="/" docBase="/usr/local/apache-tomcat-7.0.78/webapps/AMS-1.0" debug="0" reloadable="true" />

7.2.3 톰캣 매니저 권한

매니저 권한 설정

vim $CATALINA_HOME/conf/tomcat-users.xml
<tomcat-users>
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="이름" password="패스워드" roles=" admin-gui ,manager-gui"/>
</tomcat-users>

7.3 vboxvmservice(VirtualBox 자동실행)

7.3.1 설정

http://blog.djjproject.com/184

서비스 설정

C:\vms\VBoxVmService.ini

ShutdownMethod=
savestate(윈도우 종료시 상태를 저장하고 부팅시 저장된 상태로 다시 시작)
acpipowerbutton(VM에 종료명령을 보내 종료  윈도우 종료)

chapter 8 : 소스코드

8.1 페이지 복사

페이지 복사

1. 페이지 URL 함수
   1.1 ServiceImpl(service.~~~) 함수이름 변경 or 구현
       1.2 Service 함수이름 변경 or 구현
2. Controller @RequestMapping 함수이름 변경 or 구현
3. Mapper 이름변경 or 똑같이 구현
4. 페이지 URL에 필요한 JSP 데이터 가져오는 부분 있으면 변경 or 구현
5. Mapper.xml 쿼리문 변경 or 구현(DB)