yona-projects / yona-help

0 stars 0 forks source link

repo.yona.io 서버 구성 #13

Open doortts opened 7 years ago

doortts commented 7 years ago

@doortts (doortts) 님이 작성한 게시글입니다. ---

repo.yona.io 서버 구성

현재 데모 서버로 운영중인 repo.yona.io 는 2개의 서버로 운영중입니다.

각각을 Yona1 Yona2로 부르고 있고 Yona2는 Yona1의 Fail Over(접속 실패시 서비스 이전) 기능을 수행하고 있습니다. 이 부분은 Apache의 Proxy Load Balancer를 이용해서 헬스체크 후 서비스가 넘어가게 구성했습니다. 하단의 ssl.conf 설정 부분에서 확인할 수 있습니다.

Yona1

Yona2

Apache HTTP Server 주요 구성

http.conf

<VirtualHost *:80>
  ProxyPreserveHost On
  ServerName yona.io
  DocumentRoot "/data/html"
</VirtualHost>
<VirtualHost *:80>
  ServerName repo.yona.io
  Redirect permanent / https://repo.yona.io/
  ErrorDocument 503 503.html
</VirtualHost>

repo.yona.io의 경우 http로 들어오는 요청은 모두 https로 redirect 하도록 구성해 놓았습니다. 그 외는 특별한 건 없습니다.

ssl.conf (https 서비스용)

<Proxy balancer://myset>
    BalancerMember http://127.0.0.1:9000
    BalancerMember http://yona2:9000 status=+H
    ProxySet lbmethod=byrequests
</Proxy>

<VirtualHost _default_:443>
ProxyPreserveHost On
ServerName repo.yona.io:443
ProxyPass  /excluded !
ProxyPass  /robots.txt !
ProxyPass / "balancer://myset/"
ProxyPassReverse / "balancer://myset/"
DocumentRoot "/data/html"
ErrorDocument 503 http://yona.io/503.html

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

<Proxy "https://repo.yona.io">
  ProxySet connectiontimeout=3 timeout=5
</Proxy>

SSLEngine on

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on

SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

이렇게 구성하면 대략 테스트 점수가 이렇게 나옵니다.

62092177716.png 출처: https://www.ssllabs.com/ssltest

Yona 구성

yona-run.sh

PORT=9000
YONA_DATA=/data/yona;export YONA_DATA
PLAY2_HOME=/home/doortts/apps/play2

pid=`ps -ef | grep java | grep Dhttp.port=$PORT | awk '{print $2}'`
kill $pid
_JAVA_OPTIONS="-Xmx4096m -Xms4096m -Dyona.data=$YONA_DATA" $PLAY2_HOME/activator "start -DapplyEvolutions.default=true -Dhttp.port=$PORT"

참고: https://github.com/yona-projects/yona/blob/master/restart.sh

sync-to-yona1.sh

yona2 서버랑 yona1 서버는 rsync를 이용해 서로 상호 파일 sync 하도록 만들어 놓았습니다.

date >> /home/doortts/sync.log
rsync -aP doortts@yona1:/data/yona/uploads/ /home/doortts/yona/uploads >> /home/doortts/sync.log
rsync -aP --delete doortts@yona1:/data/yona/repo/ /home/doortts/yona/repo >> /home/doortts/sync.log

is-alive-bot.sh

서버 상태에 대한 알람은 Telegram Bot을 통해서 알람을 받게 만들어 놓았습니다.

참고:

예를 들어 업데이트시에 메인서버인 Yona1을 잠시 죽이면 아래처럼 메시지가 옵니다. 1290636349781.png

그 외는 보통 일반적인 서버 설정들을 해 놓았습니다. 이를테면 Dos 공격막기 위한 iptable 처리나 Ban처리(fail2ban), ssh 설정, id/pw를 통한 로그인 금지 등등 같은 것들요.

적고보니 별건 없네요 ㅎ

--- attachments --- 62092177716.png 1344702792288.png 1290636349781.png

doortts commented 7 years ago

@postimg (더미) 님이 작성한 코멘트입니다. ---

SSL 설정은 웹서버와 버전에따라서 약간씩 다를 수 있습니다.

ssl-config-generator를 참고 하시어 작성 하시면 좋습니다.

HSTS설정은 필요 여부에 따라 설정하세요.

설정한 시간동안은 http로 접속을 해도 https로 접속됩니다.

doortts commented 7 years ago

@doortts (doortts) 님이 작성한 코멘트입니다. ---

@postimg +1 저런 좋은 사이트가 있었는지 몰랐네요. 고맙습니다!!