1. 项目概述
Glassfish作为一款开源的Java EE应用服务器,在企业级应用开发中占据重要地位。不同于简单的开发测试环境,商业环境下的Glassfish部署需要考虑更多实际因素。本文将详细拆解从零开始搭建生产级Glassfish服务器的完整流程,包括环境配置、安全加固和外部访问实现方案。
我在金融行业IT部门工作期间,曾主导过多个Glassfish生产环境的部署项目。这些经验让我深刻认识到,一个稳定的商业服务器部署远不止是安装软件那么简单,更需要考虑性能调优、安全策略和访问控制等实际问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与安装
2.1 硬件与操作系统选择
对于商业部署,建议使用专用服务器而非开发机。最低配置要求:
- CPU:4核以上(Intel Xeon或AMD EPYC系列)
- 内存:16GB起步(JVM堆内存建议8-12GB)
- 存储:至少100GB SSD(日志和应用数据分离存储更佳)
操作系统选择:
- 生产环境推荐使用RHEL/CentOS 7+或Ubuntu LTS版本
- 避免使用Windows Server作为生产环境(性能开销较大)
提示:实际配置应根据预期并发用户数调整。每增加1000个并发用户,建议额外增加4GB内存和1个CPU核心。
2.2 JDK安装与配置
Glassfish 5+需要JDK 8或11。以下是Oracle JDK 11的安装示例(以CentOS为例):
bash复制# 下载JDK(需官网同意许可)
wget https://download.oracle.com/otn-pub/java/jdk/11.0.12+8/e51269e04165492b90fa15af5b4eb1a5/jdk-11.0.12_linux-x64_bin.rpm
# 安装
sudo rpm -ivh jdk-11.0.12_linux-x64_bin.rpm
# 设置环境变量
echo 'export JAVA_HOME=/usr/java/jdk-11.0.12' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
关键配置参数:
-Xms和-Xmx应设置为相同值(避免运行时调整)- 建议启用G1垃圾回收器:
-XX:+UseG1GC
2.3 Glassfish安装与初始化
下载并解压最新稳定版:
bash复制wget https://download.eclipse.org/glassfish/glassfish-6.2.5.zip
unzip glassfish-6.2.5.zip -d /opt
创建系统服务(使用systemd):
ini复制# /etc/systemd/system/glassfish.service
[Unit]
Description=GlassFish Server
After=syslog.target network.target
[Service]
User=glassfish
Group=glassfish
ExecStart=/opt/glassfish6/bin/asadmin start-domain domain1
ExecStop=/opt/glassfish6/bin/asadmin stop-domain domain1
Type=forking
[Install]
WantedBy=multi-user.target
初始化步骤:
- 创建专用用户:
useradd -r -s /bin/false glassfish - 设置目录权限:
chown -R glassfish:glassfish /opt/glassfish6 - 启动服务:
systemctl enable --now glassfish
3. 安全加固配置
3.1 管理员账户安全
默认安装后立即修改admin密码:
bash复制/opt/glassfish6/bin/asadmin change-admin-password
建议的安全实践:
- 禁用默认admin账户,创建新管理员
- 启用双因素认证(如与LDAP集成)
- 设置失败登录锁定策略
3.2 网络层防护
关键配置项:
bash复制# 限制管理控制台访问IP
asadmin set server-config.network-config.network-listeners.network-listener.admin-listener.address=127.0.0.1
# 启用HTTPS
asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.enabled=true
asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.security-enabled=true
3.3 应用部署安全
推荐策略:
- 为每个应用创建独立域(domain)
- 使用文件系统权限隔离不同应用
- 定期更新Glassfish补丁(通过
pkg update命令)
4. 外部访问实现方案
4.1 基础端口转发
最简单的Nginx反向代理配置:
nginx复制server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4.2 负载均衡配置
高可用架构示例:
nginx复制upstream glassfish_cluster {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
keepalive 32;
}
server {
listen 80;
server_name app.yourcompany.com;
location / {
proxy_pass http://glassfish_cluster;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
4.3 云环境特殊配置
AWS ALB配置要点:
- 需要启用HTTP/HTTPS监听器
- 健康检查路径设置为
/management/health - 会话保持(sticky session)建议持续时间为3600秒
5. 性能调优实战
5.1 JVM参数优化
生产环境推荐配置(8GB内存示例):
bash复制asadmin create-jvm-options "-Xms6144m"
asadmin create-jvm-options "-Xmx6144m"
asadmin create-jvm-options "-XX:MaxMetaspaceSize=512m"
asadmin create-jvm-options "-XX:+UseG1GC"
asadmin create-jvm-options "-XX:MaxGCPauseMillis=200"
5.2 线程池配置
Web容器线程池调整:
bash复制asadmin set server-config.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=200
asadmin set server-config.thread-pools.thread-pool.http-thread-pool.min-thread-pool-size=20
5.3 监控与日志
关键监控指标:
- 活动会话数
- JVM内存使用率
- 请求处理时间
日志收集建议:
bash复制# 配置JSON格式访问日志
asadmin set server-config.http-service.access-log.format="common"
asadmin set server-config.http-service.access-log.write-interval-seconds=300
6. 常见问题排查
6.1 启动失败诊断
检查顺序:
- 查看日志:
tail -f /opt/glassfish6/glassfish/domains/domain1/logs/server.log - 验证端口占用:
netstat -tulnp | grep java - 检查权限:
ls -la /opt/glassfish6/glassfish/domains
6.2 性能瓶颈分析
常用工具:
- Glassfish自带管理控制台的Monitor模块
- VisualVM连接JMX端口(默认8686)
- 线程转储分析:
jstack <pid>
6.3 外部访问故障
排查步骤:
- 测试本地访问:
curl http://localhost:8080 - 检查防火墙规则:
iptables -L -n - 验证DNS解析:
dig yourdomain.com
我在实际部署中发现,约70%的外部访问问题源于防火墙配置。建议使用以下命令开放必要端口:
bash复制firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=8181/tcp # HTTPS
firewall-cmd --reload
7. 备份与灾备方案
7.1 定期备份策略
关键数据备份:
bash复制# 完整域备份
asadmin backup-domain --backupdir /backups domain1
# 仅配置备份
asadmin export-sync-bundle --target server-config --bundlefile /backups/config.zip
建议备份频率:
- 每日增量备份(应用数据)
- 每周完整备份(整个domain)
- 配置变更后立即备份
7.2 恢复流程
从备份恢复:
bash复制asadmin restore-domain --backupfile /backups/domain1_20230801.zip --domain newdomain
验证步骤:
- 检查应用状态
- 验证数据库连接
- 测试关键业务接口
8. 进阶配置技巧
8.1 多域管理
创建新域:
bash复制asadmin create-domain --portbase 8000 domain2
域间资源隔离:
- 每个域独立JVM实例
- 可配置不同的系统用户运行
8.2 与CI/CD集成
自动化部署脚本示例:
bash复制#!/bin/bash
# 部署新版本
asadmin undeploy ${APP_NAME}
asadmin deploy --name ${APP_NAME} /path/to/new/artifact.war
# 健康检查
curl -s http://localhost:8080/${APP_NAME}/health | grep '"status":"UP"'
8.3 微服务架构支持
Glassfish 6+对MicroProfile的支持:
- 配置中心集成
- 健康检查端点
- 分布式跟踪
配置示例:
bash复制asadmin set-config-property --source=domain --property=mp.config.profile=prod
