GlassFish — открытая реализация Jakarta EE (бывшая Java EE): домен приложения,
веб-консоль администрирования и CLI asadmin из коробки. В роли сервера
приложений подходит как для разработки, так и для прод-эксплуатации.
Все команды ниже — ./asadmin из каталога /opt/glassfish7/bin.
Установка#
GlassFish 7 — Jakarta EE 10, нужен JDK 17+. Дистрибутив — zip с Maven Central; свежую версию проверяйте на glassfish.org:
# Зависимости
sudo apt update
sudo apt install openjdk-17-jdk unzip
# Скачивание и распаковка (GlassFish 7.0.20)
wget https://repo1.maven.org/maven2/org/glassfish/main/distributions/glassfish/7.0.20/glassfish-7.0.20.zip
unzip glassfish-7.0.20.zip
sudo mv glassfish7 /opt/glassfish7
Первый запуск#
cd /opt/glassfish7/bin
# Запустить дефолтный домен (domain1)
./asadmin start-domain
# Задать пароль стандартному админу (спросит старый — пустой — и новый)
./asadmin change-admin-password
# Включить шифрование админ-интерфейса (кроме самого первого запроса пароля)
./asadmin enable-secure-admin
После
enable-secure-adminдомен надо перезапустить (./asadmin restart-domain), и админ-трафик пойдёт по TLS.
Ещё одного админа добавляют в группу asadmin той же admin-realm:
./asadmin create-user --authrealmname admin-realm --groups asadmin backupadmin
Веб-консоль —
http://localhost:4848, вход — учётка из admin-realm. Наружу этот порт лучше не открывать (см. брандмауэр в конце).
Управление доменом#
# Запуск / остановка / перезапуск
./asadmin start-domain
./asadmin stop-domain
./asadmin restart-domain
# Список доменов и их статус
./asadmin list-domains
start-domain --verbose— это передний план с логами в консоль (удобно для отладки), а не фоновый режим. Для автозапуска на сервере заведите systemd-юнит с/opt/glassfish7/bin/asadmin start-domainвExecStart.
Развёртывание приложений#
# WAR-приложение
./asadmin deploy /path/to/orders-app.war
# EAR-корпоративное приложение
./asadmin deploy /path/to/orders-app.ear
# Своя контекст-строка вместо имени файла
./asadmin deploy --contextroot=/orders /path/to/orders-app.war
# Что уже развернуто
./asadmin list-applications
# Снять приложение
./asadmin undeploy orders-app
deployпо умолчанию кладёт приложение под контекстом по имени файла (orders-app.warдоступно на/orders-app); при повторном развёртывании того же имени старая версия заменяется — «горячий» деплой работает.
Источники данных (JDBC)#
Драйвер БД — просто jar в lib/ext домена; после этого — пул соединений
и JDBC-ресурс (JNDI) поверх него:
cp /path/to/postgresql.jar /opt/glassfish7/glassfish/domains/domain1/lib/ext/
./asadmin restart-domain
# Пул соединений к PostgreSQL
./asadmin create-jdbc-connection-pool \
--datasourceclassname=org.postgresql.ds.PGSimpleDataSource \
--restype=javax.sql.DataSource \
--property user=app:password=secret:serverName=10.0.0.14:portNumber=5432:databaseName=ordersdb \
jdbc/ordersPool
# JDBC-ресурс (JNDI-имя jdbc/ordersDS) — его уже ищут приложения
./asadmin create-jdbc-resource --connectionpoolid jdbc/ordersPool jdbc/ordersDS
# Проверка живости пула
./asadmin ping-connection-pool jdbc/ordersPool
Свойства (property) разделяются
:, именаserverName,databaseName,portNumber— для драйвера PostgreSQL; для другого провайдера набор свойств свой. Тот же ресурс приложения видят черезjava:comp/env/jdbc/ordersDS.
Брандмауэр#
# HTTP / HTTPS слушатели приложений — клиентам
sudo ufw allow from 10.0.0.0/24 to any port 8080
sudo ufw allow from 10.0.0.0/24 to any port 8181
# 4848 (админ-консоль) — только из доверенной админ-подсети
sudo ufw allow from 10.0.0.5 to any port 4848
Порт 4848 наружу не открывайте: консоль позволяет менять домен целиком.