반응형

tomcat 8 설치. 서비스 등록 스크립트

  • OS 는 데비안
  • openjdk 8 은 검색하면 쉽게 구할 수 있다.
  • openjdk 8 로 tomcat 구동
  • tomcat8 계정을 생성한다. (tomcat8 계정 권한으로 프로세스 구동)

- JDK 설치

cp openlogic-openjdk-8u342-b07-linux-x64.tar.gz /usr/lib/jvm/
cd /usr/lib/jvm
tar xvfz openlogic-openjdk-8u342-b07-linux-x64.tar.gz
mv openlogic-openjdk-8u342-b07-linux-x64 openjdk-8
rm openlogic-openjdk-8u342-b07-linux-x64.tar.gz

JAVA_HOME은 아래와 같다. 
/usr/lib/jvm/openjdk-8

- tomcat 설치

; tomcat 계정 생성
루트 계정으로 아래 작업!
useradd -d /home/tomcat8 -M tomcat8  ; 계정 생성. (홈디렉터리 생성하려면 -M 대신 -m)
(참고) userdel -r tomcat8  ; tomcat8 계정 및 폴더 삭제.

; apache-tomcat-8.5.84.tar.gz 을 설치할 위치로 복사. 
mv apache-tomcat-8.5.84.tar.gz /home
cd /home
tar xvfz apache-tomcat-8.5.84.tar.gz
mv apache-tomcat-8.5.84 tomcat8
; 이름을 간단하게 tomcat8로 변경. 위 tomcat8 계정의 home 디렉터리가 됨.

- 권한 설정
chown -R tomcat8:tomcat8 /home/tomcat8

- 기본적인 설정 작업
$ cd /home/tomcat8/conf
$ vi server.xml

; 예를 들어서 포트 변경을 다음과 같이 할 수 있다.  WAS 포트는 58080, 58443 으로 한다.
<Connector port="58080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="58443" />

AJP 포트는 58009 로 설정한다.
<Connector protocol="AJP/1.3"
               address="0.0.0.0"
               secretRequired="false"
               port="58009"
               redirectPort="58443" />
  • 서비스 구동 스크립트
    (아래 내용을 그대로 붙여 넣으면 파일이 생성됨.)
    (직접 편집하려면 [Unit] 부터 EOF 이전까지 복사해서 붙여넣기 사용)
    경로명을 잘 확인한다.

cat << EOF > /etc/systemd/system/tomcat8.service
[Unit]
Description=Apache Tomcat Service
After=syslog.target network.target

[Service]
Type=forking

Environment="JAVA_HOME=/usr/lib/jvm/openjdk-8"
Environment="CATALINA_HOME=/home/tomcat8"
Environment="CATALINA_BASE=/home/tomcat8"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

ExecStart=/home/tomcat8/bin/startup.sh
ExecStop=/home/tomcat8/bin/shutdown.sh

User=tomcat8
Group=tomcat8

[Install]
WantedBy=multi-user.target
EOF

  • 서비스 자동 시작 등록 및 구동 테스트

systemctl enable tomcat8
systemctl start tomcat8
systemctl stop tomcat8
반응형

Openssl SSL 인증서 만들기 / 웹서버(apache2) SSL 설정

- pem, key 파일 생성

; 서버 개인키 발급
openssl genrsa -des3 -out server.key 2048

; 인증요청서 생성 (csr)
openssl req -new -key server.key -out server.csr
!!!! CN 입력(Common Name)시에 맵핑할 도메인을 적는다. www.abc.com !!!
; kr seoul seoul mycompany myteam www.abc.com 나머지는계속엔터.

; 개인키에서 패스워드 제거 (키에 패스워드가 있으면 아파치 구동시마다 물어보니
; 패스워드 지우면 편리, 기존 암호화 파일은 org로 백업.)
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

; 인증서 생성
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
; 이제 key와 crt 파일로 SSL 설정시 사용하면 된다. 또는 pem으로 변경하여 사용. 
; 형식변환
openssl x509 -outform pem -in server.crt -out servercert.pem

아래 두 파일을 사용하면 된다.
server.key
servercert.pem

 

- Apache2 웹서버에 SSL 설정


* 인증서 등록
$vi /etc/apache2/sites-available/default-ssl.conf
; 기존 SSLCertificateFile, SSLCertificateKeyFile 두 줄을 아래와 같이 수정한다. 
; (인증서 파일 경로 확인)

SSLCertificateFile /etc/apache2/servercert.pem
SSLCertificateKeyFile /etc/apache2/server.key
# AJP tomcat 연동을 할 경우에는 JkMount 설정으로 worker 연결한다. 
# JkMount /* myworker

* SSL 활성화
; 아래 커맨드들을 실행한다.

a2enmod ssl
cd /etc/apache2/sites-available
a2ensite default-ssl.conf

; apache2 재시작
systemctl restart apache2
반응형

docker debian apache2 tomcat 연동

도커 환경으로 apache 웹 서버와 뒤에 tomcat WAS를 1개 띄우는 형식. 두 개의 분리된 서버(Web, WAS)
웹 서버는 80포트로 받아서 WAS1에 8010 포트로 연결한다.

데비안으로 할 거라서 먼저 준비 과정이 필요함. 이미지를 만들기 위해 모든 설치과정 커맨드들을 준비해야 한다. 설정 파일들에서 어디를 고칠지 확인.

여기서는 foreground 로 실행할 예정.

test. 준비 과정.

docker run -it -p 80:80 -p 18080:8080 -p 443:443 -p 18443:8443 debian

docker run -it -p 80:80 -p 443:443 -p 18443:8443 myweb

$

apt update
apt install -y curl wget net-tools systemd vim
curl -sSL https://packages.sury.org/apache2/README.txt | bash -x
apt install apache2 libapache2-mod-jk openjdk-11-jre -y

mkdir -p /usr/local
cd /usr/local
wget --no-check-certificate https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz
tar xvfz apache-tomcat-8.5.51.tar.gz
mv apache-tomcat-8.5.51 tomcat8
rm apache-tomcat-8.5.51.tar.gz

-----------------------------

# 도커라 systemctl 커맨드가 안됨. service 커맨드는 작동하네.
service apache2 start
service apache2 status

# 이렇게 실행하면 종료되지 않는다. 
환경변수 세팅 필요.
source /etc/apache2/envars

apachectl -D FOREGROUND
또는
/usr/sbin/apache2 -D FOREGROUND

바로 foreground로 돌리면 경로 없어서 실패가 발생함. 
mkdir -p /var/run/apache2

tomcat docker
http://IP:18080/

apache2
http://IP/

-- 설정 변경 스크립트를 만들기 위해... 
cat -n 000-default.conf ; 줄번호가 출력됨. 오호.. 이런 기능이!

설정파일에서 스트링 변경
worker 설정 경로를 따로 만들어 주었다. 
sed -i 's/libapache2-mod-jk\/workers.properties/apache2\/workers.properties/g' /etc/apache2/mods-available/jk.conf

13번 라인에 insert 하고 싶은데. 아래 baclash 사이에 내용을 쓴다. 
sed -i '줄번호i\내용\' 파일명  ; 줄번호라인 위에 한줄이 삽입됨. 
즉, 추가한 줄이 입력한 줄번호가 된다.

sed -i '13i\ JkMount /* myworker\' 000-default.conf



-- workers.properties
# cat workers.properties
#
workers.tomcat_home = /usr/local/tomcat8
workers.java_home = /usr/lib/jvm/java-11-openjdk-amd64

worker.list = myworker
worker.myworker.port = 8009
worker.myworker.host = mywas1c
worker.myworker.type = ajp13

 


web1 apache2 : myweb1 (HTTP)

root@mobiledeep:/home/psychic/docker/docker_gpms/web# cat Dockerfile
FROM debian

RUN apt update
RUN apt install -y curl wget net-tools systemd vim
RUN curl -sSL https://packages.sury.org/apache2/README.txt | bash -x
RUN apt install apache2 libapache2-mod-jk openjdk-11-jre -y

COPY workers.properties /etc/apache2/workers.properties
RUN sed -i 's/libapache2-mod-jk\/workers.properties/apache2\/workers.properties/g' /etc/apache2/mods-available/jk.conf
RUN sed -i '13i\ JkMount /* myworker\' /etc/apache2/sites-available/000-default.conf

#RUN mkdir -p /usr/local && cd /usr/local && wget --no-check-certificate https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz && tar xvfz apache-tomcat-8.5.51.tar.gz && mv apache-tomcat-8.5.51 tomcat8
#RUN rm /usr/local/apache-tomcat-8.5.51.tar.gz

RUN mkdir -p /var/run/apache2
ENV APACHE_RUN_USER=www-data
ENV APACHE_RUN_GROUP=www-data
ENV APACHE_PID_FILE=/var/run/apache2/apache2.pid
ENV APACHE_RUN_DIR=/var/run/apache2
ENV APACHE_LOCK_DIR=/var/lock/apache2
ENV APACHE_LOG_DIR=/var/log/apache2
ENV export LANG=C

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
#CMD ["/bin/bash"]

EXPOSE 80
EXPOSE 443

구동 스크립트

root@mobiledeep:/home/psychic/docker/docker_gpms/web# cat startup.sh
# docker build -t myweb1 .
docker rm -f myweb1c
docker run --rm --name myweb1c -it -p 80:80 -p 443:443 --link mywas1c:mywas1c myweb1
  • link 옵션 때문에 tomcat이 먼저 떠 있어서 작동한다.

tomcat 8.5 ; mywas1

root@mobiledeep:/home/psychic/docker/docker_gpms/was# cat Dockerfile
FROM debian

RUN apt update
RUN apt install -y curl wget net-tools systemd vim
RUN apt install openjdk-11-jre -y

RUN mkdir -p /usr/local && cd /usr/local && wget --no-check-certificate https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz && tar xvfz apache-tomcat-8.5.51.tar.gz && mv apache-tomcat-8.5.51 tomcat8 && perl -p -i -e '$.==114 and print " <Connector protocol=\"AJP/1.3\" secretRequired=\"false\" address=\"0.0.0.0\" port=\"8009\" redirectPort=\"8443\" />\n"' /usr/local/tomcat8/conf/server.xml
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh", "run"]

#COPY server.xml /etc/apache2/qauth.conf
#CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
#CMD ["/bin/bash"]

EXPOSE 8080
EXPOSE 8009
EXPOSE 8443

----
빌드
# docker build -t mywas1 .
  • 구동 스크립트. foreground.
root@mobiledeep:/home/psychic/docker/docker_gpms/was# cat startup.sh
# docker build -t mywas1 .
docker rm -f mywas1c
docker run --rm --name mywas1c  -it -p 8080:8080 -p 8443:8443 -p 8009:8009 mywas1

web2 : SSL 설정 (myweb2)

  • SSL 설정은 web 만 하면 된다.
  • SSL 인증서는 테스트용으로 self-sign 인증서를 만들면 된다. (openssl 커맨드로 쉽게 만들 수 있음.)
  • 필요한 커맨드 조사
기존에서 더 작업해야 할 것들.

sed -i '32,33d' /etc/apache2/sites-available/default-ssl.conf
sed -i '32i\SSLCertificateFile /etc/apache2/servercert.pem\' /etc/apache2/sites-available/default-ssl.conf
sed -i '33i\SSLCertificateKeyFile /etc/apache2/server.key\' /etc/apache2/sites-available/default-ssl.conf
sed -i '34i\JkMount /* myworker\' /etc/apache2/sites-available/default-ssl.conf

a2enmod ssl
cd /etc/apache2/sites-available
a2ensite default-ssl.conf

root@mobiledeep:/home/psychic/storage/docker/docker_gpms/web# cat Dockerfile
FROM debian

RUN apt update
RUN apt install -y curl wget net-tools systemd vim
RUN curl -sSL https://packages.sury.org/apache2/README.txt | bash -x
RUN apt install apache2 libapache2-mod-jk openjdk-11-jre -y

COPY workers.properties /etc/apache2/workers.properties

RUN sed -i 's/libapache2-mod-jk\/workers.properties/apache2\/workers.properties/g' /etc/apache2/mods-available/jk.conf
RUN sed -i '13i\ JkMount /* myworker\' /etc/apache2/sites-available/000-default.conf

# SSL
COPY server.key /etc/apache2/server.key
COPY servercert.pem /etc/apache2/servercert.pem
RUN sed -i '32,33d' /etc/apache2/sites-available/default-ssl.conf
RUN sed -i '32i\SSLCertificateFile /etc/apache2/servercert.pem\' /etc/apache2/sites-available/default-ssl.conf
RUN sed -i '33i\SSLCertificateKeyFile /etc/apache2/server.key\' /etc/apache2/sites-available/default-ssl.conf
RUN sed -i '34i\JkMount /* myworker\' /etc/apache2/sites-available/default-ssl.conf

#RUN mkdir -p /usr/local && cd /usr/local && wget --no-check-certificate https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz && tar xvfz apache-tomcat-8.5.51.tar.gz && mv apache-tomcat-8.5.51 tomcat8
#RUN rm /usr/local/apache-tomcat-8.5.51.tar.gz

RUN mkdir -p /var/run/apache2
ENV APACHE_RUN_USER=www-data
ENV APACHE_RUN_GROUP=www-data
ENV APACHE_PID_FILE=/var/run/apache2/apache2.pid
ENV APACHE_RUN_DIR=/var/run/apache2
ENV APACHE_LOCK_DIR=/var/lock/apache2
ENV APACHE_LOG_DIR=/var/log/apache2
ENV export LANG=C

# SSL
RUN a2enmod ssl && cd /etc/apache2/sites-available && a2ensite default-ssl.conf

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
#CMD ["/bin/bash"]

EXPOSE 80
EXPOSE 443

구동스크립트

root@mobiledeep:/home/psychic/storage/docker/docker_gpms/web# cat startup.sh
docker build -t myweb1 .
docker rm -f myweb1c
docker run --rm --name myweb1c -it -p 80:80 -p 443:443 --link mywas1c:mywas1c myweb1

+ Recent posts