この記事のサマリ
この記事に掲載されたスクリプトをvagrantに食わせると、自動的にTomcatがインストールされ、javaのwebアプリの実験などができるようになります。
対象読者
tomcatがインストールされたsandboxで、Javaのwebアプリをアレコレと試してみたい人向け。
動作確認バージョン
vagrant version
の結果
Installed Version: 1.7.4
経緯
ローカル環境を汚さないで、JavaでWebなアプリの検証をしたかったので。
アプリケーションサーバとは
JavaでWebアプリを作成する場合、ほぼ必ずといってよいほどServletという言葉が出てきます。StrutsやSpring MVC、SeasorなどなどWeb向けのフレームワークを使った場合も、土台となっているのはServletの技術です。
このServletを利用するには、webコンテナとかServletコンテナと呼ばれるアプリケーションサーバが必要になってきます。具体的には、TomcatやJBoss、Jetty、WebLogic Server、WebSphere Application Serverといったものです。
本稿では、その中でも一番使われているであろうTomcatをVagrant上にセットアップするTipsを紹介致します。
Tomcat環境をセットアップする
それでは、実際のVagrantfileと、tomcatをセットアップするスクリプトを提示します。
Vagrant::Config.run do |config|
config.vm.box = "centos64_6_5"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box"
config.vm.define "web" do |web|
web.vm.network "hostonly", "192.168.55.10"
web.vm.provision "shell", path: "setup_jdk7.sh"
web.vm.provision "shell", path: "setup_tomcat7.sh"
end
end
★setup_jdk.shは、
Vagrant Tips#2 Oracleのjdkをインストールさせるに記載しておりますので、そちらをご参照ください。
tomcatをインストールさせるshellは、以下のように実装しました。tomcat7.0.54がダウンロード済みでなかったら、wgetで取得するような方式にしています。また、デフォルトではiptablesが有効になっており、ブラウザからアクセスできない状態であるためoffにしています。(host-onlyネットワークにしているので、セキュリティが特に下がるわけではないとの判断です。)
#!/bin/bash
BASE_DIR="/vagrant"
PACKAGE_DIR="${BASE_DIR}/package"
TOMCAT_MAJOR_VERSION=7
TOMCAT_VERSION=${TOMCAT_MAJOR_VERSION}.0.67
TOMCAT_FILE_NAME="apache-tomcat-${TOMCAT_VERSION}"
ARCHIVED_TOMCAT_FILE_NAME="apache-tomcat-${TOMCAT_VERSION}.tar.gz"
TOMCAT_URL="http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-${TOMCAT_MAJOR_VERSION}/v${TOMCAT_VERSION}/bin/${ARCHIVED_TOMCAT_FILE_NAME}"
USR_LOCAL_DIR="/usr/local/"
CATALINA_HOME="${USR_LOCAL_DIR}/tomcat${TOMCAT_MAJOR_VERSION}"
TOMCAT_REAL_PATH="${USR_LOCAL_DIR}/${TOMCAT_FILE_NAME}"
# create dir
if [ ! -d ${PACKAGE_DIR} ]
then
mkdir -p ${PACKAGE_DIR}
else
echo "${PACKAGE_DIR} Is Already Exists So Need Not Create"
fi
# if "archived tomcat file" is noting
if [ ! -f ${PACKAGE_DIR}/${ARCHIVED_TOMCAT_FILE_NAME} ]
then
wget ${TOMCAT_URL} -O ${PACKAGE_DIR}/${ARCHIVED_TOMCAT_FILE_NAME}
else
echo "${ARCHIVED_TOMCAT_FILE_NAME} Is Already Exists So Need Not wget"
fi
# gunzip "archived tomcat file"
if [ ! -d ${TOMCAT_REAL_PATH} ]
then
cp -p ${PACKAGE_DIR}/${ARCHIVED_TOMCAT_FILE_NAME} /tmp/${ARCHIVED_TOMCAT_FILE_NAME}
tar -xvzf /tmp/${ARCHIVED_TOMCAT_FILE_NAME} -C ${USR_LOCAL_DIR}
sudo ln -s ${TOMCAT_REAL_PATH} ${CATALINA_HOME}
sudo chown -R vagrant:vagrant ${CATALINA_HOME}
else
echo "${CATALINA_HOME} Is Already Exists"
fi
# copy setenv.sh
echo "copy setenv.sh"
sudo cp -p /vagrant/confs/tomcat/setenv.sh ${CATALINA_HOME}/bin
sudo chown -R vagrant:vagrant ${CATALINA_HOME}/
# setup tomcat init script
echo "copy /etc/init.d/tomcat"
sudo cp -p /vagrant/confs/tomcat/tomcat /etc/init.d/
sudo chown vagrant:vagrant /etc/init.d/tomcat
sudo /etc/init.d/tomcat start
sudo service iptables stop
#!/bin/sh
export CATALINA_OPTS="$CATALINA_OPTS -Xms64m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx512m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"
export CATALINA_OPTS="$CATALINA_OPTS -server"
#DATE=`date +'%Y%m%d-%H%M'`
#CATALINA_OPTS="-server -XX:MaxPermSize=256m -XX:PermSize=256m -XX:SurvivorRatio=2 -Xmn256 -Xmx256 -Xms256"
#CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDetails -Xloggc:${CATALINA_BASE}/logs/gc.log.${DATE}"
#CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
#CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.password.file=${CATALINA_BASE}/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=${CATALINA_BASE}/conf/jmxremote.access"
echo "Using CATALINA_BASE: ${CATALINA_OPTS}"
export CATALINA_OPTS
#!/bin/bash
#
# Startup script for the Tomcat Servlet Container
#
# chkconfig: 2345 35 65
# description: Tomcat is the servlet container that is used in the official \
# Reference Implementation for the Java Servlet and JavaServer \
# Pages technologies
TOMCAT_USER=vagrant
CATALINA_HOME=/usr/local/tomcat7
. /etc/rc.d/init.d/functions
prog=tomcat
start() {
echo -n $"Starting $prog: "
daemon --user $TOMCAT_USER $CATALINA_HOME/bin/startup.sh > /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo_success
else
echo_failure
fi
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
daemon --user $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh > /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo_success
else
echo_failure
fi
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
INSTANCES=`ps --columns 512 -aef|grep java|grep tomcat|grep org.apache.catalina.startup.Bootstrap|wc -l`
if [ $INSTANCES -eq 0 ]; then
echo $prog is stopped
RETVAL=3
else
if [ $INSTANCES -eq 1 ]; then
echo $prog is running 1 instance...
else
echo $prog is running $INSTANCES instances...
fi
RETVAL=0
fi
;;
*)
echo $"Usage: $prog {start|stop|restart|status|help}"
exit 1
esac
exit $RETVAL
上記を配置して、vagrant upした後、ブラウザから「http://192.168.55.10:8080/」にアクセスして、Tomcatのデフォルトのページが出てくればOKです。
あとは、適宜アプリを配置してあげれば、ちょっとした実験に使えます。