JBoss AS(重命名为WildFly)已被使用多年,是最有名的高效和免费的Java社区应用服务器之一。当Red Hat开始为其企业版JBoss EAP的对内部部署,虚拟或云提供商业支持时,吸引了更多关注。红帽还为红帽企业Linux提供商业支持,并为客户提供多种产品的庞大生态系统。
许多使用Java技术的软件公司都瞄准CentOS上的WildFly堆栈,因为它支持预算有限的客户,并且还为RedHat Enterprise Linux上的JBoss EAP客户提供商业支持,从而确保他们的软件满足各种客户群。
本文介绍了一种Java应用程序托管堆栈中最常见的架构,它包括:
在完全安装上面的堆栈之后,运行一个非常小的示例应用程序消耗了大约650 MB的内存,因此您可以考虑用于小型应用程序的1GB Linode计划1或者基于您的应用程序选择更大的计划。
注意 Oracle正在为Java生成许多更新,以下步骤可确保您获得最新的Java版本。
jdk1.8.0_45
以包含正确的版本:
cd /opt/jdk1.8.0_45/
sudo alternatives --install /usr/bin/java java /opt/jdk1.8.0_45/bin/java 2
sudo alternatives --config java
它将输出:
There is 1 program that provides 'java'.
Selection Command
*+ 1 /opt/jdk1.8.0_45/bin/java
Enter to keep the current selection[+], or type selection number: 1
选择1
。jdk1.8.0_45替换为
适当的版本:
sudo alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_45/bin/jar 2
sudo alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_45/bin/javac 2
sudo alternatives --set jar /opt/jdk1.8.0_45/bin/jar
sudo alternatives --set javac /opt/jdk1.8.0_45/bin/javac
java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)jdk1.8.0_45
为正确的版本:
export JAVA_HOME=/opt/jdk1.8.0_45
export JRE_HOME=/opt/jdk1.8.0_45/jre
export PATH=$PATH:/opt/jdk1.8.0_45/bin:/opt/jdk1.8.0_45/jre/bin/etc/profile.d/java.sh
,并替换文件中的jdk1.8.0_45
为相应的版本:
/etc/profile.d/java.sh
if ! echo ${PATH} | grep -q /opt/jdk1.8.0_45/bin ; then
export PATH=/opt/jdk1.8.0_45/bin:${PATH}
fi if ! echo ${PATH} | grep -q /opt/jdk1.8.0_45/jre/bin ; then
export PATH=/opt/jdk1.8.0_45/jre/bin:${PATH}
fi
export JAVA_HOME=/opt/jdk1.8.0_45
export JRE_HOME=/opt/jdk1.8.0_45/jre
export CLASSPATH=.:/opt/jdk1.8.0_45/lib/tools.jar:/opt/jdk1.8.0_45/jre/lib/rt.jar/etc/profile.d/java.csh
,并替换文件中的jdk1.8.0_45为相应的版本:
/etc/profile.d/java.csh
if ( "${path}" !~ */opt/jdk1.8.0_45/bin* ) then
set path = ( /opt/jdk1.8.0_45/bin $path )
endif
if ( "${path}" !~ */opt/jdk1.8.0_45/jre/bin* ) then
set path = ( /opt/jdk1.8.0_45/jre/bin $path )
endif
setenv JAVA_HOME /opt/jdk1.8.0_45
setenv JRE_HOME /opt/jdk1.8.0_45/jre
setenv CLASSPATH .:/opt/jdk1.8.0_45/lib/tools.jar:/opt/jdk1.8.0_45/jre/lib/rt.jar1. 此脚本基于“Dmitriy Sukharev. IT Blog”中提到的精彩文章和代码。原始文章和原始脚本可以在这里找到。我做了一些修改,以执行以下操作:
创建wildfly安装文件,并使用root用户执行: /opt/wildfly-install.sh
#!/bin/bash
#Title : wildfly-install.sh
#Description : The script to install Wildfly 8.x
#Original script: http://sukharevd.net/wildfly-8-installation.html
# This version is the only variable to change when running the script
WILDFLY_VERSION=8.2.0.Final
WILDFLY_FILENAME=wildfly-$WILDFLY_VERSION
WILDFLY_ARCHIVE_NAME=$WILDFLY_FILENAME.tar.gz
WILDFLY_DOWNLOAD_ADDRESS=http://download.jboss.org/wildfly/$WILDFLY_VERSION/$WILDFLY_ARCHIVE_NAME
# Specify the destination location
INSTALL_DIR=/opt
WILDFLY_FULL_DIR=$INSTALL_DIR/$WILDFLY_FILENAME
WILDFLY_DIR=$INSTALL_DIR/wildfly
WILDFLY_USER="wildfly"
WILDFLY_SERVICE="wildfly"
WILDFLY_STARTUP_TIMEOUT=240
WILDFLY_SHUTDOWN_TIMEOUT=30
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root."
exit 1
fi
echo "Downloading: $WILDFLY_DOWNLOAD_ADDRESS..."
[ -e "$WILDFLY_ARCHIVE_NAME" ] && echo 'Wildfly archive already exists.'
if [ ! -e "$WILDFLY_ARCHIVE_NAME" ]; then
wget $WILDFLY_DOWNLOAD_ADDRESS
if [ $? -ne 0 ]; then
echo "Not possible to download Wildfly."
exit 1
fi
fi
echo "Cleaning up..."
rm -f "$WILDFLY_DIR"
rm -rf "$WILDFLY_FULL_DIR"
rm -rf "/var/run/$WILDFLY_SERVICE/"
rm -f "/etc/init.d/$WILDFLY_SERVICE"
echo "Installation..."
mkdir $WILDFLY_FULL_DIR
tar -xzf $WILDFLY_ARCHIVE_NAME -C $INSTALL_DIR
ln -s $WILDFLY_FULL_DIR/ $WILDFLY_DIR
useradd -s /sbin/nologin $WILDFLY_USER
chown -R $WILDFLY_USER:$WILDFLY_USER $WILDFLY_DIR
chown -R $WILDFLY_USER:$WILDFLY_USER $WILDFLY_DIR/
echo "Registering Wildfly as service..."
cp $WILDFLY_DIR/bin/init.d/wildfly-init-redhat.sh /etc/init.d/$WILDFLY_SERVICE
WILDFLY_SERVICE_CONF=/etc/default/wildfly.conf
chmod 755 /etc/init.d/$WILDFLY_SERVICE
if [ ! -z "$WILDFLY_SERVICE_CONF" ]; then
echo "Configuring service..."
echo JBOSS_HOME=\"$WILDFLY_DIR\" > $WILDFLY_SERVICE_CONF
echo JBOSS_USER=$WILDFLY_USER >> $WILDFLY_SERVICE_CONF
echo JBOSS_MODE=standalone >> $WILDFLY_SERVICE_CONF
echo JBOSS_CONFIG=standalone.xml >> $WILDFLY_SERVICE_CONF
echo STARTUP_WAIT=$WILDFLY_STARTUP_TIMEOUT >> $WILDFLY_SERVICE_CONF
echo SHUTDOWN_WAIT=$WILDFLY_SHUTDOWN_TIMEOUT >> $WILDFLY_SERVICE_CONF
fi
echo "Configuration backup"
cp $WILDFLY_DIR/standalone/configuration/standalone.xml $WILDFLY_DIR/standalone/configuration/standalone-org.xml
cp $WILDFLY_DIR/bin/standalone.conf $WILDFLY_DIR/bin/standalone-org.conf
echo "Configuring application server..."
sed -i -e 's,<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"/>,<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" deployment-timeout="'$WILDFLY_STARTUP_TIMEOUT'"/>,g' $WILDFLY_DIR/standalone/configuration/standalone.xml
# Enable access from any server
sed -i -e 's,<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>,<any-address/>,g' $WILDFLY_DIR/standalone/configuration/standalone.xml
sed -i -e 's,<inet-address value="${jboss.bind.address:127.0.0.1}"/>,<any-address/>,g' $WILDFLY_DIR/standalone/configuration/standalone.xml
# The below line is added to avoid warning when starting WildFly with jdk 8 SE, as the JVM memory parameter changed
sed -i -e 's,MaxPermSize,MaxMetaspaceSize,g' $WILDFLY_DIR/bin/standalone.conf
echo "Configuring Firewalld for WildFly ports"
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=8443/tcp
firewall-cmd --permanent --add-port=9990/tcp
firewall-cmd --permanent --add-port=9993/tcp
firewall-cmd --reload
echo "Backup management user"
cp $WILDFLY_DIR/standalone/configuration/mgmt-users.properties $WILDFLY_DIR/standalone/configuration/mgmt-users-org.properties
cp $WILDFLY_DIR/standalone/configuration/application-users.properties $WILDFLY_DIR/standalone/configuration/application-users-org.properties
cp $WILDFLY_DIR/domain/configuration/mgmt-users.properties $WILDFLY_DIR/domain/configuration/mgmt-users-org.properties
cp $WILDFLY_DIR/domain/configuration/application-users.properties $WILDFLY_DIR/domain/configuration/application-users-org.properties
chown -R $WILDFLY_USER:$WILDFLY_USER $WILDFLY_DIR/standalone/configuration/mgmt-users-org.properties
chown -R $WILDFLY_USER:$WILDFLY_USER $WILDFLY_DIR/standalone/configuration/application-users-org.properties
chown -R $WILDFLY_USER:$WILDFLY_USER $WILDFLY_DIR/domain/configuration/mgmt-users-org.properties
chown -R $WILDFLY_USER:$WILDFLY_USER $WILDFLY_DIR/domain/configuration/application-users-org.properties
echo "Starting Wildfly"
service $WILDFLY_SERVICE start
chkconfig --add wildfly
chkconfig --level 2345 wildfly on
echo "Done."
2. 使脚本可执行: sudo chmod +x /opt/wildfly-install.sh
3. 运行脚本: cd /opt sudo ./wildfly-install.sh
4. 您需要添加管理用户(Web和/或CLI)以便能够访问管理控制台,这可以通过运行命令简单完成,只需运行shell脚本/opt/wildfly/bin/add-user.sh
:
您应该能够使用URLhttp://123.45.67.89:8080
测试wildfly,使用URLhttp://123.45.67.89:9990/console
测试WildFly管理控制台,注意替换123.45.67.89
为您的Linode的IP地址。
5. 我更喜欢你安装任何示例应用程序(使用你自己的,或者只是从Tomcat获取默认示例) 并确保它使用端口8080,因为它将在添加Apache HTTP后进行测试时使用。示例应用程序可以通过WildFly管理控制台来部署。
请按照以下步骤在WildFly中将MySQL驱动程序安装为“模块”
/opt/wildfly/modules/com/mysql/main
。/opt/wildfly/modules/com/mysql/main
创建一个模块模块文件module.xml,
文件内容如下,替换mysql-connector-java-5.1.34-bin.jar
为正确的版本:
/opt/wildfly/modules/com/mysql/main/module.xml
<module xmlns="urn:jboss:module:1.3" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.34-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>/opt/wildfly/standalone/configuration/standalone.xml
中的drivers标签添加内容来定义MySQL驱动程序,默认情况下,文件中只有h2的定义:
/opt/wildfly/standalone/configuration/standalone.xml
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="mysqlDriver" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
</drivers>http://123.45.67.89:9990/console
。jdbc:mysql://localhost:3066/type_db_name
作为您的Connection URL,替换type_db_name
为您的数据库名称,并将用户名和密码设置为您的MySQL用户名和密码。将Security Domain留空。
单击“ Test Connectivity”,然后单击“Done”。WildFly现在连接到MySQL。
您可以通过打开浏览器并键入服务器链接http://123.45.67.89
,用您自己的IP地址替换前面的IP地址来测试您的安装。成功的话您应该看到默认提供的测试页面123。
有多种方法可以将Apache HTTP设置为直接调用WildFly(mod_jk,mod_proxy,mod_cluster),选择mod_jk主要是基于这篇文章,其内容分布在多个站点,你会发现详细的利弊。
mod_jk
由Tomcat提供需要在服务器上构建,这就是为什么你需要使用以下命令为你的Linode安装构建和制作工具:
sudo yum install httpd-devel gcc gcc-c++ make libtool
sudo ln -s /usr/bin/apxs /usr/sbin/apxsmod_jk
到临时目录,然后构建:
cd /tmp
wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
tar -xf tomcat-connectors-1.2.40-src.tar.gz
cd /tmp/tomcat-connectors-1.2.40-src/native
./buildconf.sh
./configure --with-apxs=/usr/sbin/apxs
make/tmp/tomcat-connectors-1.2.40-src/native/apache-2.0/
目录创建一个名为mod_jk.so
的文件。将文件复制到Apache http模块:
sudo cp /tmp/tomcat-connectors-1.2.40-src/native/apache-2.0/mod_jk.so /usr/lib64/httpd/modules/etc/httpd/conf/httpd.conf
中检查IncludeOptional conf.d/*.conf
:
/etc/httpd/conf.d/modjk.conf
# To avoid error AH00558: httpd: Could not reliably
# determine the server's fully qualified domain name
# replace 1.2.3.4 with your server IP
ServerName 1.2.3.4
# Load mod_jk
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkLogFile /var/log/httpd/mod_jk_log
# To be changed to warn in production, the mount point should match your application sample pathes
JkLogLevel info
JKMount /sample jboss1
JkMount /sample/* jboss1
JKMount /jkstatus jkstatus
# To avoid write access error in mod_jk
# https://bugzilla.redhat.com/show_bug.cgi?id=912730
JKShmFile /var/tmp/jk-runtime-statushttp://123.45.67.89/jkstatu
,替换123.45.67.89为
您的Linode IP。它应该显示“JK Status Manager”的页面。转到您的Linode的IP地址,它应该显示Apache正常测试页面。要查看示例应用程序是否有效,请转到http://123.45.67.89/sample
,替换123.45.67.89
为您的Linode IP,它应该显示在JBoss中部署的示例应用程序。
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。