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

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中部署的示例应用程序。

更多信息

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

本文的版权归 用户1196457 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SpringBoot 核心技术

SpringCloud组件:将服务提供者注册到Eureka集群

在之前章节SpringCloud组件:将微服务提供者注册到Eureka服务中心已经讲解了把服务注册到单个Eureka Server节点上,既然我们在Spring...

81850
来自专栏SpringBoot 核心技术

SpringCloud组件:将微服务提供者注册到Eureka服务中心

Eureka提供了Server当然也提供了Client,如果你对Eureka Server不了解,点击SpringCloud组件:搭建Eureka服务注册中心阅...

45440
来自专栏java闲聊

AvtiveMQ与SpringBoot结合

24170
来自专栏纯洁的微笑

Spring Boot 2.0(五):Docker Compose+Spring Boot+Nginx+Mysql 实践

我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your f...

54150
来自专栏用户2442861的专栏

linux GDB调试c++程序

  GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNI...

15520
来自专栏友弟技术工作室

IPFS星际文件系统之-- 环境配置

IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的...

25440
来自专栏编程

Spring Boot+Mybatis+Redis二级缓存开发指南

背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一。Mybatis是一个十分轻量好用的ORM框架。...

605100
来自专栏实用工具入门教程

如何部署 Bacula Server

Bacula是一种开源网络备份解决方案,允许您创建备份并执行计算机系统的数据恢复。它非常灵活和强大,这使得它在配置时稍微麻烦,适合在许多情况下进行备份。备份系统...

52930
来自专栏流柯技术学院

JMeter-java.lang.OutOfMemoryError: PermGen space错误

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta...

29230

在Debian 8上安装Java

Java是一种功能强大的编程语言。用Java编写的软件可以在任何系统上编译和运行。与Python或C不同,Java不会预先安装在Linode分发映像上。本指南在...

23630

扫码关注云+社区

领取腾讯云代金券