2015년 3월 27일 금요일

우분투 1404 server 위에 apache2 mysql tomcat7 설치 후 배포!!! mod-jk 사용



오랜시간 삽질끝에 간신히 우분투위에 배포완료. 원래 목적은 virtual box 에 apache2 , tomcat7, mysql5.5 server 를 각각 설치할 우분투를 3곳 만들어 서로 어떻게 통신하는 지를 알고 싶었지만 어려워 한곳에다 모두 설치했다. (꼭 해봐야지...)
우선 통신은 이렇게 된다.
웹 서버 apache2 에서는 정적 콘텐츠인 .html, .js , .css 파일만 처리하고 나머지는 WAS 인 tomcat7 에 넘긴다. 그리고 tomcat7은 db와 통신한다. 따라서 apache에 html, js, css 파일을 제외한 나머지를 tomcat에 넘기라는 설정을 어딘가에서 해줘야하는데.. 잘 모르겠다. 보통 인터넷에서 아파치와 톰캣을 연동시키는 libapache-mod-jk 를 설치해서 통신하는데, 팀장님은 필요없다고 하신다..... 따로 아파치에서 설정해주면 된다고...하시는데....... 점점점....ㅎㅎㅎㅎ
결론은 우분투 14.10 server 한곳에 아파치, 톰캣, mysql 을 설치하고 , spring mvc 를 이용한 웹 어플리케이션을 배포했다. 그 과정을 적고자 한다.
Edit

apache2 설치

#sudo apt-get install apache2
설치후
#sudo /etc/init.d/apache2 나 # sudo service apache2 start
로 실행 시킨후 http://[우분투IP] 로 접속하면 "Apache2 Ubuntu Default Page"가 나온다
Edit

apache2 설정

1. 서버 네임 등록
#sudo vi /ect/apache2/apache2.conf
#ServerName
ServerName localhost
를 적어준다.
2. 가상 호스트 설정
#sudo vi /etc/apache2/sites-enabled/000-default.conf
ServerName localhost
를 적어준다.
libapache-mod-jk 를 설치해 톰캣과 연동시 이곳에 설정해 줘야 할것이 더 있다.
우선
#DocumentRoot /var/www/html
이라고 되어있는 것에 #을 이용해 주석처리를 하고
DocumentRoot /var/lib/tomcat7/webapps/ROOT/
를 적는다. 그 다음
JkMount /* ajp13_worker
를 적어준다. 잘은 모르겠지만 아파치에서 처리하지 않는 모든 것들을 톰캣이 받아서 처리해 준다는 것 같다...(추측..)
Edit

tomcat7 설치

1. 설치하기 전에 java가 설치 되어있어야 함!!!!
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java9-installer
2. 톰캣 설치
#sudo apt-get install tomcat7
#sudo apt-get install tomcat7-admin
tomcat7-admin 은 톰캣 메니져로 톰캣을 관리하기 좀더 편한 툴이다. 웹에서 어떤것이 실행중인지 확인가능..ㅎㅎㅎ
3. 설치 확인 : 설치 후 http://[우분투ip]:8080 으로 접속하면 It works! 란 화면이 나온다.
톰캣 홈 디렉토리 : /var/lib/tomcat7/webapps/ROOT
CATALINA HOME 디렉토리 : /usr/share/tomcat7
CATALINA BASE 디렉토리 : /var/lib/tomcat7
로그 : /var/log/tomcat7/ 에 들어가면 여러 파일이 있는데 내가 주로 본 것은 catalina.out 파일 사용함
4. 로그를 보고 싶다면
#sudo tail -100 /vat/log/tomcat7/catalina.out
#sudo tail -f /vat/log/tomcat7/catalina.out
이렇게 봤음. 다른 파일을 봐도 상관없음!
Edit

Apache와 Tomcat 연동

1. 연동 이유
우선 참고. 아파치와 톰캣 연동하는 이유 -> http://hmgirl.tistory.com/67 참고
요약하면 앞에 말한 이유와 같다. apache2는 정적콘텐츠만 처리하기때문에 그 외 나머지는 톰캣이 처리하게 하기위해 넘겨줘야한다. 때문에 연동한다는 내용.
2. 연동을 하기 위한 모듈(mod-jk)를 설치 한다.
#sudo apt-get install libapache2-mod-jk
3. 설치후 workers.properties 파일 수정 설정 변경한다.
#sudo vi /etc/libapache2-mod-jk/workers.properties
에서
workers.tomcat_home = /usr/share/tomcat7
workers.java_home = /usr/lib/jvm/java-7-oracle
자신의 톰캣 홈과 자바 홈 수정 해준다.
그리고 여기서 쭉 읽다 보면
workers.list = ajp13_worker
worker.ajp13_worker.type = ajp13
라는게 나오는데 이게 default 값인듯하다. 이게 apache2 설정과 관련이 있는듯.뭔가..
4. 이후에 apache2에도 다시 설정! (이미 위에서 하고 왔다. 원래 순서는 지금 )
#sudo vi /etc/apache2/sites-enabled/000-default.conf 여기서 DocumentRoot /var/lib/tomcat7/webapps/ROOT/로 수정하고 JkMount /* ajp13_worker 라고 적어준것
5. tomcat7/server.xml 수정
#sudo vi /etc/tomcat7/server.xml
(주석제거)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
(주석제거)
이 부분 주석 제거.
하는김에 encoding 설정도 해주자
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
URIEncoding="UTF-8"
enableLookups="false"
useBodyEncodingForURI="true" />
여기도 URIEncoding="UTF-8" 적어준다
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443"
connectionTimeout = "20000"
URIEncoding="UTF-8" />
참고 : http://warmz.tistory.com/556
Edit

mysql 설치 및 설정

1. mysql 설치
#apt-get install mysql-server-5.5
설치할때 root의 비밀번호 설정하는데 이때 비밀번호를 잘 기억하자.
2. 외부에서 접속할수 있도록 권한 부여
1) mysql db 로그인!
mysql -u root -p
mysql -p 우분투ip -P 3306 -u root -p
2) db 변경
use mysql
3) 권한 부여
GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY 'root 비밀번호';
4) 즉시 반영
flus privileges;
3. mysql 설정 파일 변경
#sudo vi /etc/mysql/my.cnf
에서
bind-address = 127.0.0.1 이 부분 주석 처리
4. my.cof 에서 한글 설정 .
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect = set collation_connection = utf8_general_ci
init_connect = set names utf8
[mysql]
default-character-set=utf8
[mysqld_safe]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
  • 한글 설정 확인
1) mysql 로그인
2) mysql 문자셋 확인
show variables like 'char%';
에서 character set 이 모두 utf8 이것 확인 이 중에 latin1 이 있다면
set character utf8;
3) 테이블에서도 확인 >>> 난 이문제로 계속 안됐었음 ㅠㅠ
show create table 테이블명;
에서 CHARSET 곳 확인. 이곳이 잘못되어 있다면
alter table 테이블명 convert to charet utf8;
참조 : http://blog.naver.com/cjmzzang119/110114920197
Edit

배포

1. 이클립스에서 spring maven 프로젝트 war 파일 만들기
1) 프로젝트 pom.xml 우클릭
2) run as 에서 run configuration 클릭
3) Goals : _______ 빈칸에 , clean package 입력 (클린후 패키지 만든다는 뜻 )
4) run 한다.
--- maven-war-plugin:2.3:war (default-war) @ todoList ---
[INFO] Packaging webapp
[INFO] Assembling webapp [todoList] in [D:\workspace\todoList\target\todoList-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\workspace\todoList\WebContent]
[INFO] Webapp assembled in [501 msecs]
[INFO] Building war: D:\workspace\todoList\target\todoList-0.0.1-SNAPSHOT.war
5) 콘솔창에 위와 같이 뜨고, war 파일이 저장된 경로가 나타난다.
이때 주의!!!!!
maven packaging 시 src 안에 있는 properties, xml 파일은 빌드되지 않는다. 따라서 pom.xml 설정을 바꿔줘야 한다.
<build>
<resources>
<resource>
<!-- src/main/java 폴더의 xml파일들을 빌드에 포함 -->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<!-- src/main/resources 폴더의 xml, properties, setting파일들을 빌드에 포함 -->>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.setting</include>
</includes>
</resource>
</resources>
</build>
참조 http://blog.iotinfra.net/?cat=13&paged=3
2. .war 파일을 만들었으면
/var/lib/tomcat7/webapps 에 파일을 옮긴다.
나는 FileZilla 프로그램을 사용해서 옮김. 옮길때 권한이 문제되면 우선 되는 곳에 옮겨두고 우분투에서 mv 시킨다.
/ROOT 밑에 넣으면 파일이 올라오지도 않음. webapps위에!!!
3. 톰캣 재시작
#sudo service tomcat7 restart
4. 된다!!!!!
Edit

에러 상황

  • classNotFound로 WEB-INF/applicationContext.xml 에서 dataSource 를 찾을 수 없다는 에러 발생
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource">
basicDataSource 클래스가 tomcat.dbcp 패키지를 사용한것이었는데, pom.xml에 다운받은것은 tomcat.dbcp가 아니라, commons.dbcp 것..!!!
실제로 찾아보니까 tomcat.dbcp.basicDataSource 는 없다. 여튼 xml 저렇게 수정해주니 됐음!!!

댓글 없음:

댓글 쓰기