https://wfreud.tistory.com/226 이전 정리글
목차
이클립스에서 maven을 이용하여 war파일을 배포하는 방법
참조
단계
1.
# cp -R /usr/local/server/tomcat/webapps /var
# cd /var/
# rm -rf ROOT docs examples
# mkdir posting
/usr/local/server/tomcat/conf/server.xml 변경
이 부분 찾아서
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
이렇게 변경한다
<Host name="localhost" appBase="/var/webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="posting" reloadable="true"/>
나는 지우지않고 주석처리로 이렇게 작성함
<!-- <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> -->
<Host name="localhost" appBase="/var/webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="posting" reloadable="true"/>
/usr/local/server/tomcat/conf/tomcat-users.xml 추가
맨아래 추가했음
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="유저이름" password="비밀번호" roles="manager-status, manager-script"/>
참고
Tomcat 설정
Maven을 연동시키기 위해서는 Tomcat 또한 설정을 해야 합니다.
이전에 설치한 Tomcat 위치 기억 하시나요.
Spring 게시판 개발 이야기 #3 :: Tomcat 9.0.0.M4 설치
저는 /usr/local/에 설치했네요. Tomcat의 디렉토리로 이동합니다.
# cd /usr/local/apache-tomcat
여기서 배포에 대한 설정을 하기 전에 우선 웹 root 디렉토리를 변경할 것 입니다.
Tomcat의 기본 root 디렉토리는 [tomcat 디렉토리]/webapps 입니다.
이 디렉토리를 /var 디렉토리로 복사해 주세요.
# cp -R /usr/local/apache-tomcat/webapps/ /var/
그 후, webapps 디렉토리에서 ROOT, docs, examples를 삭제하고,
Web Project가 저장될 디렉토리를 생성합니다.
저는 Web Project 디렉토리의 이름을 posting으로 했습니다.
# rm -rf ROOT docs examples
# mkdir posting
이제, tomcat 디렉토리로 돌아와서 conf/server.xml 의 내용을 수정합니다.
# vi /usr/local/apache-tomcat/conf/server.xml
이 파일에서 appBase 를 찾아 아래와 같이 변경해주세요.
변경 전,
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
변경 후,
<Host name="localhost" appBase="/var/webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="posting" reloadable="true"/>
appBase는 Tomcat의 Root 디렉토리가 되며,
그 아래 docBase는 앞에서 생성한 Web Project의 디렉토리가 됩니다.
Tomcat의 Root 디렉토리 설정이 끝났습니다.
지금 부터는 Maven과 관련된 설정입니다.
우선, conf/tomcat-user.xml 파일의 끝에 접근 권한을 추가합니다.
추가할 내용은 다음과 같습니다.
<role rolename="manager-script" /> <role rolename="manager-gui" /> <role rolename="manager-jmx" /> <role rolename="manager-status" /> <user username="tomcat" password="tomcat" roles="manager-script"/>
설정한 role과 roles에 따라 Tomcat으로 접근할 수 있는 방법이 바뀌며,
하단의 username과 password에 적힌 내용으로 원격지에서 배포가 가능해집니다.
후에 Maven 설정할 때 위에 적힌 내용을 그대로 적어주면 됩니다.
저는 편의상 "tomcat"으로 통일했지만, 실제 적용할 때는 좀더 강력하게 설정해주세요.
파일을 저장한 후에 tomcat을 재 시작해주시면 됩니다.
# service tomcat restart
마지막으로 Maven에서 배포지 설정을 하기 위해 서버의 IP를 미리 확인해주세요.
# ifconfig
Maven 설정(STS or Eclipse)
Maven은 프로젝트에 있는 pom.xml 파일을 수정하면 됩니다.
프로젝트의 제일 밑에 있어요.
Target 폴더 안에 있는 건 아닙니다.
pom.xml 파일에서 plugins 부분의 하단에 아래 내용을 추가합니다.
org.apache.tomcat.maven tomcat7-maven-plugin 2.2 /${project.artifactId} http://192.168.23.123:8080/manager/text tomcat tomcat
여기서 설정은 다음과 같이 합니다.
Path의 경우
Tomcat의 Web Root 디렉토리를 기준으로 배포가 될 위치입니다.
저기에 적힌 이름으로 배포가 이루어지며, 현재 설정인
${project.artifactId} 는 현재 패키지의 마지막 이름입니다.
(이 포스팅의 경우, com.posting.board 이기 때문에 board 로 배포가 됨.
저는 posting 디렉토리로 배포하기 때문에 posting으로 변경하였습니다.)
url의 구성은
http://[서버_IP]:[Tomcat_PORT]/manager/text
이며, username과 password는
tomcat-user.xml에 설정한 내용과 동일하게 적습니다.
파일을 저장한 후, Build 에 대한 설정을 합니다.
프로젝트 명 우 클릭 -> Run As -> Maven Build
Name에는 Build 이름을, Goals에는 tomcat7: redeploy 라고 적은 후 Apply와 Run을 클릭합니다.
Maven 배포 완료 화면
페이지 화면
현재 Tomcat Web Root 디렉토리 상태
posting.war 파일이 배포된 파일이며 Tomcat이 자동으로 posting 디렉토리로 프로젝트를 저장합니다.
그와 동시에 ROOT 디렉토리로 프로젝트를 저장하기 때문에 posting 디렉토리로 접근하지 않아도 됩니다.
보기 싫으면 지워도 무방합니다.
--- 에러발생
이 설치작업을 기존에 2번정도 했었다. 근데.. 똑같은 작업을 하는데 에러가 나오네 ;;
4일을 고생한것같다.. 뭐가안되는지 지웠다 깔았다가 ..
maven 에서 war파일 업로드 하는데 에러메시지다
[INFO] Deploying war to http://localhost:8080/policy-service
Uploading: http://localhost:8080/manager/text/deploy?path=%2Fpolicy-service&update=true
2244/52241 KB
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
[INFO] Retrying request
Uploading: http://localhost:8080/manager/text/deploy?path=%2Fpolicy-service&update=true
2242/52241 KB
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
[INFO] Retrying request
Uploading: http://localhost:8080/manager/text/deploy?path=%2Fpolicy-service&update=true
2242/52241 KB
[INFO] I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error
[INFO] Retrying request
Uploading: http://localhost:8080/manager/text/deploy?path=%2Fpolicy-service&update=true
2242/52241 KB
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
이런 에러메시지를 구글에 치면... 대부분 tomcat 에서 maven 접근 권한이 설정을 잘못했다고 한다 ;;
스택오버플로우같은데
https://stackoverflow.com/questions/14602744/tomcat-deployement-issue-in-a-maven-project
근데 내 문제는 이게 아니었음
권한이 잘들어갔는지 확인하려면 manager-gui 로 맞추고, /manager/text 페이지 들어가보면 브라우저에서 id,pw 로그인하는 알럿이 나온다.
이게 안나오고 403 에러가 나온다면, 권한문제가 아니다.
해결방법
https://hongku.tistory.com/196
아래의 step2 가 중요하다 ..
이부분을 내가 예전에 작업했떤거같은데 .. 적어두질 않았따 ..
Tomcat8 manager 들어가는 방법
Tomcat8에서 WAR파일을 배포하기위해 /manager 페이지로 이동할 필요가 있다. 근데 그냥 들어가려고 하면 403 ERROR 때문에 접근할 수 없다. 이 문제의 해결방법은 2가지 파일을 수정해주면 된다.
Step 1. conf 디렉토리의 tomcat-users.xml 권한 설정
$ sudo vi /usr/share/tomcat8/conf/tomcat-users.xml
위 파일을 열어보면 맨 아래에 주석처리가 된 부분이 있다. 주석을 없애준다.
<tomcat-users>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />
</tomcat-users>
사실 manager 기능만 사용할거라서 manager와 관련된 role만 주석을 없애주면 된다. 그리고 마지막 부분에 <user> 태그에 로그인을 하기위한 아이디와 비밀번호를 입력한다. 예를들어,
<user username="유저명" password="비밀번호" roles="접근가능한 role" />
Step 2. manager 디렉토리의 context.xml 수정
$ sudo vi /usr/share/tomcat8/webapps/manager/META-INF/context.xml
위 파일을 수정 해주면 된다.
중요!!!!!!!!
위 위치가 아니라.. 새로 만든.. posting위치에 에 해야한다.
/var/webbapps/manager/META-INF 의 context.xml 을 수정해야한다.
즉 실행될 위치의 context.xml 이다
<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
<Valve> 부분을 주석 처리 해준다.
결과 확인
그리고 http://ip주소:8080/manager 를 입력해서 제대로 들어가지는지 확인 한다.
댓글