ITcompressor IT — сжато и по делу
← Назад к статьям

GlassFish

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 наружу не открывайте: консоль позволяет менять домен целиком.

← Назад к статьям