인프라/Web Server & WAS 2018. 9. 12. 21:21

tomcat WAS에 spring(spring boot) 여러개의 war파일 배포(여러개 context)




Mac OS 기준에서 작성되었습니다.(tomcat이 설치되었다는 가정)


하나의 웹사이트가 여러개의 war파일로 되어있고, 그러한 war파일들의 통신으로 이루어지는 웹사이트일 경우의 was 배포입니다.(각 war의 was 포트를 다르게 가져갈 경우)


만약 배포할 프로젝트가 spring boot project라면 pom.xml에서 embbed was를 사용하지 않는 설정을 넣어주어야합니다.


<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            <exclusions>

                <exclusion>

                    <groupId>org.springframework.boot</groupId>

                    <artifactId>spring-boot-starter-tomcat</artifactId>

                </exclusion>

            </exclusions>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-tomcat</artifactId>

            <scope>provided</scope>

        </dependency>


->임베디드 WAS를 사용하지 않는다.





tomcat이 깔린 디렉토리에 가면 webapps라는 폴더가 있습니다. 그 폴더 밑에 배포할 war 파일들을 넣어줍니다. 그리고 tomcat 디렉토리에 conf 폴더에 server.xml을 수정해줍니다.


<Service name="Catalina">

  <Connector port="8038” protocol="HTTP/1.1" 

   maxThreads="150" connectionTimeout="20000" 

   redirectPort="8443" />

  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

  <Engine name="Catalina" defaultHost="localhost">
   <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    resourceName="UserDatabase"/>

   <Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">

   <Context path=“/context1” docBase=“ contextName1” />
   </Host>

  </Engine>
 </Service>



<Service name="Catalina2">

  <Connector port=“8028” protocol="HTTP/1.1" 

     maxThreads="150" connectionTimeout="20000" 

     redirectPort="8443" />

  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

  

  <Engine name="Catalina" defaultHost="localhost">

   <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

     resourceName="UserDatabase"/>

 

   <Host name="localhost"  appBase=“webapps

    unpackWARs="true" autoDeploy="true"

    xmlValidation="false" xmlNamespaceAware="false">

   <Context path=“/context2” docBase=“contextName2” />

   </Host>

  </Engine>

 </Service>


<Service name="Catalina3”>

  <Connector port=“8018” protocol="HTTP/1.1" 

     maxThreads="150" connectionTimeout="20000" 

     redirectPort="8443" />

  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

  

  <Engine name="Catalina" defaultHost="localhost">

   <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

     resourceName="UserDatabase"/>

 

   <Host name="localhost"  appBase=“webapps

    unpackWARs="true" autoDeploy="true"

    xmlValidation="false" xmlNamespaceAware="false">

   <Context path=“/context3” docBase=“ contextName3” />

   </Host>

  </Engine>

 </Service>


이렇게 서비스를 3개를 등록해주고 각 서비스마다 WAS가 넘겨주는 포트를 다르게줍니다. 이러면 하나의 WAS에 서비스가 3개가 올라가게 됩니다.


그리고 tomcat의 bin 폴더의 ./startUp.sh를 실행하면 war파일이 풀리면서 was에 배포가 되게 됩니다. 만약 하나의 war를 배포한다면? 해당 프로젝트의 서비스를 하나만 등록하면 됩니다.


posted by 여성게
:
인프라/AWS 2018. 9. 7. 00:19

mac os x 에서 진행하였습니다.


*이클립스에서 help>Eclipse Marketplace 에서 svn을 검색하여 "subversive"를 install 해줍니다.


*설치가 끝난 후에 restart된 후에 Marketplace 같은 창이 떠서 svn kit을 설치하라는 창이 뜬다면 kit을 받아주고

만약 그러한 창이 뜨지 않는다면 preference>Team>SVN 에서 SVN Connector tab을 눌러줘서 설치를 해줍니다(select 창 밑에 Get ..어쩌고 떴던 기억이)


설치가 된후에 Open perspective(우측상단) 에서 svn 창을 하나 열어줍니다.

그리고 SVN Repository view 에서 새로운 connection을 생성해줍니다.


*url-> svn://server_ip를 입력한 후에 등록한 사용자 아이디와 패스워드를 입력한 후에 엔터를 탁 쳐줍니다.


이경우는 웹서버에 따로 올리지 않았을 경우. (svn protocol을 사용)



*그런데 만약 커넥션이 되지 않는다면 몇가지 경우가 있는데, 

*1) kit이 제대로 받아지지 않은 경우(필자는 여기서 애먹음) 

*2) url이 틀려서 location 에러가 뜬경우(여기서도 많이 애먹음 다른 블로그에서는 svn://server_id/projectName(사용자지정)이었는데 필자는 /projectName을 빼고 넣으니 됬음. 아마 필자가 놓치고 있는 부분이 있는듯함) 

*3)사용자 계정정보가 틀린경우



*1)번 같은 경우는 수동으로 설치하는 방법이 있습니다.


*help>new install software 에 work with tab에 밑의 url을 넣고 plug-in을 수동으로 받아줍니다.


*http://community.polarion.com/projects/subversive/download/eclipse/6.0/update-site/




기타 사용법은 추후에 업로드하도록 하겠습니다...:)

posted by 여성게
:
인프라/AWS 2018. 9. 6. 21:38

aws ec2(ubuntu) 기준으로 진행하였습니다.


~$ svn

The program 'svn' is currently not installed. You can install it by typing: sudo apt-get install subversion


->설치가 되지 않은 것입니다. 설치를 해줍니다.


~$ sudo apt-get install subversion


->설치 후 잘 설치가 되었는지 버전을 확인해봅니다.


~$svn --version


->만약 문제 없이 버전이 잘나온다면 설치가 잘된 것이겠죠.


~$mkdir svn


->폴더를 하나 만들어줍니다.(원하는 위치에 하시면 되지만 저는 일단 $HOME에 생성했습니다.)


~$cd svn

~svn$svnadmin create --fs-type fsfs repos


->저장소를 생성해줍니다.


~$cd repos/conf

~$vi svnserve.conf


anon-access = none =>익명사용자 사용불가

auth-access = write =>인증사용자 읽기/쓰기

password-db = passwd =>아이디/패스워드가 담길 파일

authz-db = authz 


->요놈들을 바꿀것은 바꾸고 주석을 풀어줍니다.


~$vi passwd


[users]

yeoseong = 1234 =>아이디/패스워드를 저장해줍니다.


~$vi authz


[groups]


team = yeoseong

[/]

*=r

@team=rw

[repository:/]

@rnbchatbot=rw


->team이라는 그룹에 권한을 넣어주는 설정(나중에 사용자가 여러명이라면 "," 으로 사용자를 추가한다 ex. team=yeoseong,kiseok,wonhyeok)


~$cd /etc/init.d

~/etc/init.d/$vi svnserve


#! /bin/sh
### BEGIN INIT INFO
# Provides:          svnserve
# Required-Start:    $local_fs $syslog $remote_fs
# Required-Stop:     $local_fs $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start svnserve
### END INIT INFO

# Author: Michal Wojciechowski <odyniec@odyniec.net>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="svnserve"
NAME=svnserve
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d -r /home/svn/repos"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$DAEMON" ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS \
        || return 2
}

do_stop()
{
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    rm -f $PIDFILE
    return "$RETVAL"
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  restart|force-reload)
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
        # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    exit 3
    ;;
esac

exit 0

svnserve 를 서비스로 등록시켜주기 위해 이 파일을 작성해줍니다.(부팅시에 해당 서비스가 자동으로 시작됨. 관리자가 수동으로 실행시켜줄 필요없음)


위에서 

DAEMON_ARGS="-d -r /home/svn/repos"

이부분만 자신의 환경에 맞게 작성해주면 됩니다.


~$sudo chmod 755 /etc/init.d/svnserve


~$sudo update-rc.d svnserve defaults =>서비스로 등록해줍니다.


# service svnserve start
# service svnserve stop
# service svnserve restart


svn://server_ip/reposName 으로 접속해주면 됩니다.

svnserve -d -r /home/ubuntu/svn/repos/


posted by 여성게
:
인프라/AWS 2018. 9. 5. 15:53

mac os 기준입니다.



우선 아마존에 접속하여 회원가입을 한 후에 인스턴스 하나를 생성해줍니다.(이 과정에서 다운받은 key file을 원하는 위치에 저장해줍니다.)


우선 키 파일을 이용하여 ssh 접속을 하기위해서는 파일 권한을 400으로 설정해주어야 합니다.


$chmod 400 "key파일이 저장된 디렉토리"/key.pem


이렇게 권한을 변경해준 후에야 키파일을 사용할 수 있습니다. 만약 권한을 변경해주지 않고 사용하게 되면 어떠한 메시지가 콘솔에 떠서 접근할 수 없게 됩니다.


이렇게 권한을 설정해준 이후에 ssh 접속 명령을 쳐줍니다.


$ssh -i "keyfile저장디렉토리"/key.pem ubuntu@"ec2 접근 ip" 


작업을 모두 끝마친 후 접속을 종료하려면 "exit" 명령만 쳐주면 됩니다.


posted by 여성게
:
인프라/Docker&Kubernetes 2018. 8. 10. 00:07

mac os 환경에서 docker를 이용한 oracle 11g 설치 



우선 진행하기 전에 자신의 os에 맞는 docker를 다운로드 해줍니다.


  

1)docker pull wnameless/oracle-xe-11g

=>oracle 11g 도커이미지 다운로드, 여기서 이미지란 컨테이너에서 oracle를 실행시킬 수 있는 모든 파일이 포함된 것이라고 생각하면 됩니다.(변하지 않는 파일)

    즉, 이 이미지 파일을 이용하여 컨테이너에서 oracle을 실행시킬 수 있는 것입니다.



2)docker run --name oracle11g -d -p 59161:22 -p 59162:1521 -p 59163:8080 -v ~/my/oracle/data:/var/lib/oracle -e ORACLE_ALLOW_REMOTE=true --restart=always wnameless/oracle-xe-11g

=>1번 과정에서 이상없이 이미지를 다운로드 했다면 그 이미지를 이용하여 컨테이너에서 oracle을 할당/실행시키는 명령어 입니다.(적절한 컨테이너를 할당)

--name =>이름을 정해줍니다. 앞으로는 이 이름으로 oracle을 실행시킵니다.

-d =>백그라운드에서 실행시킨다는 의미

-p =>도커는 어떻게 보면 가상머신 위에서 돌아가는 것과 비슷한 의미입니다. 59162의 나의 로컬 port와 컨테이너에 할당된 가상환경의 1521 port를 연결시켜서 

나의 로컬과 컨테이너에 올라간 가상환경의 연결을 명시하는 것입니다.(실제로 sqldeveloper나 jdbc를 이용할때 1521이 아닌 59162으로 연결해줍니다.)

-v =>docker를 이용하여 데이터베이스를 이용할 때, 컨테이너를 실행시키고 데이터를 삽입하고, 수정하는 등의 작업을 진행한 후에 컨테이너를 종료했다가 다시

실행시키면 모든 데이터가 날라가게 됩니다. 즉, 이 옵션은 볼륨관련 설정인데 나의 local 디렉토리에 데이터를 유지해주는 역할을 합니다.(컨테이너를 종료

해도 데이터가 날라가지않음)

그 외 기타옵션





3)docker start oracle11g =>오라클 실행


4)docker logs oracle11g =>log를 볼 수 있는 명령어


5)docker stop oracle11g =>오라클 종료


6)docker rm oracle11g =>컨테이너 삭제


7)docker restart oracle11g =>오라클 재시작


이후에 만약 sqldeveloper로 오라클을 운영한다는 가정하에, locale관련 문제로 접속을 하지 못하는 일이 발생할수 있다.(port는 59162로 접속해야함)

이 문제는 맥에서 발생하는 문제인데,(다른 os에서 발생하는지는 모르지만 필자는 윈도우에서는 발생하지 않음) 맥 os 업그레이드 과정에서 locale이 

변경되어 반영되지 못하는 문제이다. 언어를 미국으로 바꾸었다가 다시 대한민국으로 바꾸면 locale 문제는 해결된다.


docker exec -it oracle11g bash


=>docker가 컨테이너를 할당 받아서 띄운 가상 OS 들어가는 명령



posted by 여성게
: