首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在CentOS 7上使用WildFly进行Java开发

在CentOS 7上使用WildFly进行Java开发

作者头像
用户1196457
发布2018-09-06 09:26:26
4.1K1
发布2018-09-06 09:26:26

JBoss AS(重命名为WildFly)已被使用多年,是最有名的高效和免费的Java社区应用服务器之一。当Red Hat开始为其企业版JBoss EAP的对内部部署,虚拟或云提供商业支持时,吸引了更多关注。红帽还为红帽企业Linux提供商业支持,并为客户提供多种产品的庞大生态系统。

许多使用Java技术的软件公司都瞄准CentOS上的WildFly堆栈,因为它支持预算有限的客户,并且还为RedHat Enterprise Linux上的JBoss EAP客户提供商业支持,从而确保他们的软件满足各种客户群。

本文介绍了一种Java应用程序托管堆栈中最常见的架构,它包括:

  1. CentOS 7:作为操作系统。
  2. MySQL 5.6.24社区服务器:作为关系数据库。
  3. WildFly 8.2 Final:作为Java应用服务器。
  4. Apache HTTP 2.4.6:作为HTTP服务器,用于提供静态内容并使用mod_jk 1.2.40引导对WildFly的调用(Apache作为反向代理)。

在完全安装上面的堆栈之后,运行一个非常小的示例应用程序消耗了大约650 MB的内存,因此您可以考虑用于小型应用程序的1GB Linode计划1或者基于您的应用程序选择更大的计划。

目标受众

  • 为他们的项目构建开发服务器的开发人员。
  • 希望开始切换到WildFly并在其独立设置中需要一些指导的应用服务器管理员。

开始之前

  • 请按照Linode:保护您的服务器中提到的步骤进行操作,但跳过创建防火墙部分,因为在CentOS 7中使用firewalld替换了iptables 。
  • 启动并启用Firewalld sudo systemctl start firewalld sudo systemctl enable firewalld
  • 请参照Linode:托管网站指南中提到的步骤进行,“安装MySQL”,“为Linode 2GB优化MySQL”,“创建数据库”。

Oracle Java 8 SE安装

注意 Oracle正在为Java生成许多更新,以下步骤可确保您获得最新的Java版本。

  1. 在任何浏览器中转到Oracle Java SE下载页面
  2. 选择Java JDK 8下载。
  3. 接受许可协议。
  4. 复制Linux x64 bit产品的下载链接,确认其扩展名为tar.gz而不是RPM下载。
  5. 切换到目标文件夹: cd /opt
  6. 下载Java,记得使用第4步中获得的内容替换URL: sudo wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz"
  7. 提取压缩文件,请记住确切的名称会因您的版本而异 sudo tar xzf jdk-*.tar.gz
  8. 使用Alternatives安装Java(我更喜欢这种方法,因为将来你很可能会在同一台服务器上运行多个版本的Java,因此最好使用替代方法以确保您知道操作系统的默认版本并能够轻松更改它)。在新的Linode的以下选项中,您只能找到1个选项,请务必更改所有实例中的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
  9. 使用替代方法设置javacjar命令路径,然后检查安装的java版本。将所有实例中的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)
  10. 配置环境变量,替换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
  11. 以上命令仅适用于此会话,但您需要将其添加到所有系统用户,尤其是在服务器重新启动时,因此对于Bourne shell,请创建一个新文件/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
  12. 对于C shell,创建一个新文件/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.jar
  13. 通过执行以下操作,确保配置文件的所有者和ACL: sudo chown root:root /etc/profile.d/java.sh sudo chmod 755 /etc/profile.d/java.sh sudo chown root:root /etc/profile.d/java.csh sudo chmod 755 /etc/profile.d/java.csh
  14. 现在Java可供系统中的所有人使用。

WildFly 8.2安装

1. 此脚本基于“Dmitriy Sukharev. IT Blog”中提到的精彩文章和代码。原始文章和原始脚本可以在这里找到。我做了一些修改,以执行以下操作:

  1. 在修改之前将备份一些重要文件。
  2. 添加了修改以解决WildFly使用JDK 8的警告消息(默认为JDK 7)。
  3. 为firewalld添加了脚本,使WildFly在Linode实例上运行。
  4. 从管理控制台的任何位置启用访问(仅适用于开发环境)。
  5. 删除其他Linux发行版,只有CentOS可用。
  6. 将WildFly添加到引导后自动启动。
  7. 为某些命令在屏幕上显示进度。
  8. 为像我这样的只有基本的CentOS和Linux知识的人添加了更多备注:)

创建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

  1. 为管理用户选择选项a。
  2. 用户名: type_the_username
  3. 密码: type_the_password
  4. 您希望此用户属于哪些组?:留空并单击Enter
  5. 即将添加用户......这是正确的吗?:是的
  6. 这个新用户是否会用于一个AS进程连接到另一个AS进程:是的(只是在此案例中,我们将来需要这个,即域设置)。
  7. 您将收到以下消息:要表示用户,请将以下内容添加到server-identityities定义中。这只是用于域安装。如果您以后需要切换到域安装,请保留它。**

您应该能够使用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驱动程序并添加数据源

请按照以下步骤在WildFly中将MySQL驱动程序安装为“模块”

  1. 以root身份登录,并在WildFly安装中为新模块创建一个文件夹: su mkdir -p /opt/wildfly/modules/com/mysql/main
  2. 下载mysqljdbc驱动程序(mysql-connector-java - * - bin.jar)到/opt/wildfly/modules/com/mysql/main
  3. 在相同文件夹中/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>
  4. 通过命令更改文件的用户wildfly的所有权: chown -R wildfly:wildfly /opt/wildfly/modules
  5. 我们需要在/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>
  6. 重新启动WildFly以使更改生效: systemctl restart wildfly
  7. 登录管理控制台http://123.45.67.89:9990/console
  8. 单击Configuration,然后依次点击左侧菜单SubSystems - > Connector - > DataSources。在DataSources 0选项卡上,单击“ ADD”
  9. 对于第1步设置: 名称: MySQLDS JNDI名称: java:/ datasource / MySQLDS 单击 Next。
  10. 在步骤2中,选择列出的mysqlDriver,然后单击“ Next”
  11. 在步骤3中插入jdbc:mysql://localhost:3066/type_db_name作为您的Connection URL,替换type_db_name为您的数据库名称,并将用户名和密码设置为您的MySQL用户名和密码。将Security Domain留空。 单击“ Test Connectivity”,然后单击“Done”
  12. 选择MySQLDS数据源,然后单击“ Enable”
  13. 在终端上,退出root用户会话: exit

WildFly现在连接到MySQL。

Apache HTTP Server安装

  1. 安装Apache: sudo yum install -y httpd
  2. 启动并启用Apache: sudo systemctl start httpd sudo systemctl enable httpd
  3. 为端口80添加防火墙例外: sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --reload
  4. 备份您的默认Apache配置: sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd-org.conf

您可以通过打开浏览器并键入服务器链接http://123.45.67.89,用您自己的IP地址替换前面的IP地址来测试您的安装。成功的话您应该看到默认提供的测试页面123。

使用mod_jk将Apache HTTP配置为WildFly的反向代理

有多种方法可以将Apache HTTP设置为直接调用WildFly(mod_jk,mod_proxy,mod_cluster),选择mod_jk主要是基于这篇文章,其内容分布在多个站点,你会发现详细的利弊。

  1. mod_jk 由Tomcat提供需要在服务器上构建,这就是为什么你需要使用以下命令为你的Linode安装构建和制作工具: sudo yum install httpd-devel gcc gcc-c++ make libtool sudo ln -s /usr/bin/apxs /usr/sbin/apxs
  2. 使用以下命令下载mod_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
  3. 成功构建库后,在/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
  4. 我们需要配置Apache HTTP服务器来使用这个模块,我们将为mod_jk创建worker文件,并添加其内容(Status worker在调试时也很有用): /etc/httpd/conf.d/workers.properties worker.list=jboss1,jkstatus worker.jkstatus.type=status worker.jboss1.type=ajp13 worker.jboss1.port=8009 # The host should be using IP not server name as reported bug # https://www.apachelounge.com/viewtopic.php?t=5883 worker.jboss1.host=127.0.0.1
  5. 创建额外的Apache HTTP配置文件,而不是修改Apache默认配置文件;默认情况下Apache将在文件/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-status
  6. 重启Apache: sudo systemctl restart httpd
  7. 尝试访问URL http://123.45.67.89/jkstatu,替换123.45.67.89为您的Linode IP。它应该显示“JK Status Manager”的页面。
  8. 我们需要配置WildFly以接受来自Apache HTTP的调用,打开管理控制台,然后选择Configuration菜单 - > Web - > HTTP。然后单击default-server旁边的View链接。
  9. 选择上面的AJP Listener,然后单击AddName: default.ajp Socket binding: ajp 单击“ Save”,然后确保“Enabled”属性设置为true

转到您的Linode的IP地址,它应该显示Apache正常测试页面。要查看示例应用程序是否有效,请转到http://123.45.67.89/sample,替换123.45.67.89为您的Linode IP,它应该显示在JBoss中部署的示例应用程序。

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目标受众
  • 开始之前
    • Oracle Java 8 SE安装
    • WildFly 8.2安装
      • 在WildFly中配置MySQL驱动程序并添加数据源
      • Apache HTTP Server安装
        • 使用mod_jk将Apache HTTP配置为WildFly的反向代理
        • 更多信息
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档