Home » Установка Java на CentOS и Fedora
Установка Java на CentOS и Fedora

Установка Java на CentOS и Fedora

Как же часто заходишь на новый сервер и понимаешь, что Java нет, а нужна прямо сейчас? Знакомо? Особенно если ты работаешь с Enterprise-проектами, где без JVM никуда. Сегодня разберём, как правильно и быстро поставить Java на CentOS и Fedora — две самые популярные RHEL-based дистрибутивы в серверном мире. Покажу не только стандартные способы, но и парочку хитростей, которые сэкономят тебе время и нервы.

Зачем вообще нужна Java на сервере

Java — это не просто язык программирования, это целая экосистема. На серверах она нужна для:

  • Веб-приложений (Tomcat, Jetty, Spring Boot)
  • Микросервисов и контейнеризации
  • Big Data решений (Elasticsearch, Kafka, Hadoop)
  • CI/CD инструментов (Jenkins, Maven, Gradle)
  • Мониторинга (некоторые версии Prometheus exporters)

Без Java многие современные Enterprise-решения просто не запустятся. Поэтому важно знать, как её правильно установить и настроить.

Различия между дистрибутивами Java

Перед установкой стоит понимать, что Java бывает разная. Вот основные варианты:

Дистрибутив Лицензия Поддержка Рекомендации
OpenJDK GPL v2 Сообщество Идеально для большинства задач
Oracle JDK Коммерческая Oracle Только для продакшена с лицензией
Amazon Corretto GPL v2 Amazon Отличный выбор для AWS
Azul Zulu GPL v2 Azul Systems Хорошо оптимизирован

Для серверов я рекомендую OpenJDK — она бесплатная, стабильная и входит в репозитории дистрибутивов.

Установка OpenJDK на CentOS/RHEL

Начнём с самого распространённого случая — установки на CentOS или RHEL. Тут есть несколько способов, и каждый имеет свои плюсы.

Способ 1: Через dnf/yum (рекомендуется)

Самый простой и правильный способ — использовать стандартный пакетный менеджер:

# Обновляем систему
sudo dnf update -y

# Смотрим доступные версии Java
sudo dnf search openjdk

# Устанавливаем Java 11 (LTS версия)
sudo dnf install java-11-openjdk java-11-openjdk-devel -y

# Или Java 17 (новая LTS)
sudo dnf install java-17-openjdk java-17-openjdk-devel -y

# Проверяем установку
java -version
javac -version

Пакет java-11-openjdk-devel нужен для компиляции — в нём есть javac и другие инструменты разработки.

Способ 2: Установка конкретной версии

Если нужна определённая версия Java, можно быть более конкретным:

# Посмотреть все доступные версии
sudo dnf list available | grep openjdk

# Установить Java 8
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

# Установить Java 21
sudo dnf install java-21-openjdk java-21-openjdk-devel -y

Управление версиями с alternatives

Когда установлено несколько версий Java, используй alternatives для переключения:

# Настроить альтернативы для java
sudo alternatives --config java

# Настроить альтернативы для javac
sudo alternatives --config javac

# Посмотреть текущие альтернативы
sudo alternatives --display java

Установка OpenJDK на Fedora

На Fedora процесс почти идентичен, но есть нюансы:

# Обновляем систему
sudo dnf update -y

# Ищем доступные пакеты Java
sudo dnf search java-*-openjdk

# Устанавливаем последнюю стабильную версию
sudo dnf install java-latest-openjdk java-latest-openjdk-devel -y

# Или конкретную версию
sudo dnf install java-17-openjdk java-17-openjdk-devel -y

# Проверяем
java -version
which java

На Fedora обычно доступны более свежие версии Java, чем на CentOS.

Установка Oracle JDK (если очень нужно)

Иногда требуется именно Oracle JDK. Вот как его поставить:

# Скачиваем Oracle JDK (пример для версии 17)
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_rpm.rpm

# Устанавливаем
sudo rpm -ivh jdk-17_linux-x64_rpm.rpm

# Настраиваем alternatives
sudo alternatives --install /usr/bin/java java /usr/java/latest/bin/java 1
sudo alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 1

# Выбираем Oracle JDK
sudo alternatives --config java

Важно: Oracle JDK требует лицензию для использования в продакшене. Для тестов и разработки можно использовать бесплатно.

Настройка переменных окружения

Правильная настройка JAVA_HOME критически важна для многих приложений:

# Находим путь к Java
readlink -f $(which java)

# Создаём файл с переменными окружения
sudo tee /etc/profile.d/java.sh << 'EOF'
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
export PATH=$JAVA_HOME/bin:$PATH
EOF

# Применяем изменения
source /etc/profile.d/java.sh

# Проверяем
echo $JAVA_HOME

Альтернативный способ для OpenJDK:

# Для Java 11
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' | sudo tee -a /etc/environment

# Для Java 17
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' | sudo tee -a /etc/environment

# Перезагружаем окружение
source /etc/environment

Автоматизация установки

Для автоматизации можно создать простой скрипт:

#!/bin/bash

# Скрипт установки Java на RHEL-based системах
set -e

JAVA_VERSION=${1:-11}
INSTALL_DEVEL=${2:-yes}

echo "Устанавливаем Java $JAVA_VERSION..."

# Определяем пакетный менеджер
if command -v dnf &> /dev/null; then
    PKG_MGR="dnf"
elif command -v yum &> /dev/null; then
    PKG_MGR="yum"
else
    echo "Не найден пакетный менеджер"
    exit 1
fi

# Устанавливаем пакеты
PACKAGES="java-${JAVA_VERSION}-openjdk"
if [[ "$INSTALL_DEVEL" == "yes" ]]; then
    PACKAGES="$PACKAGES java-${JAVA_VERSION}-openjdk-devel"
fi

sudo $PKG_MGR install -y $PACKAGES

# Настраиваем JAVA_HOME
JAVA_HOME="/usr/lib/jvm/java-${JAVA_VERSION}-openjdk"
echo "export JAVA_HOME=$JAVA_HOME" | sudo tee /etc/profile.d/java.sh
echo "export PATH=\$JAVA_HOME/bin:\$PATH" | sudo tee -a /etc/profile.d/java.sh

# Применяем настройки
source /etc/profile.d/java.sh

echo "Java $JAVA_VERSION установлена успешно!"
java -version

Сохрани скрипт как install_java.sh и запускай:

chmod +x install_java.sh
./install_java.sh 17 yes

Тестирование установки

После установки важно проверить, что всё работает корректно:

# Проверяем версию Java
java -version

# Проверяем компилятор
javac -version

# Проверяем JAVA_HOME
echo $JAVA_HOME

# Создаём тестовый файл
cat > HelloWorld.java << 'EOF'
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
        System.out.println("Java Home: " + System.getProperty("java.home"));
        System.out.println("Java Version: " + System.getProperty("java.version"));
    }
}
EOF

# Компилируем и запускаем
javac HelloWorld.java
java HelloWorld

# Убираем тестовые файлы
rm HelloWorld.java HelloWorld.class

Оптимизация для серверных нагрузок

Для продакшен-серверов стоит настроить JVM параметры:

# Создаём файл с JVM опциями
sudo tee /etc/profile.d/jvm.sh << 'EOF'
# Оптимизация для серверных нагрузок
export JVM_OPTS="-server -Xms1g -Xmx4g -XX:+UseG1GC -XX:+UseStringDeduplication"
export JAVA_OPTS="$JVM_OPTS -Djava.awt.headless=true"
EOF

source /etc/profile.d/jvm.sh

Основные параметры:

  • -server — включает серверную JVM
  • -Xms/-Xmx — начальный и максимальный размер кучи
  • -XX:+UseG1GC — использует G1 сборщик мусора
  • -Djava.awt.headless=true — отключает GUI (важно для серверов)

Частые проблемы и их решения

Проблема: "Command not found"

Если после установки Java не найдена:

# Проверяем, действительно ли установлена Java
rpm -qa | grep openjdk

# Ищем исполняемые файлы
find /usr -name "java" -type f 2>/dev/null

# Добавляем в PATH
echo 'export PATH=/usr/lib/jvm/java-11-openjdk/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Проблема: Конфликт версий

При работе с несколькими версиями Java:

# Смотрим установленные версии
sudo alternatives --display java

# Удаляем ненужные версии
sudo dnf remove java-1.8.0-openjdk

# Или управляем через alternatives
sudo alternatives --remove java /usr/lib/jvm/java-1.8.0-openjdk/bin/java

Проблема: Недостаточно памяти

Java приложения могут потреблять много памяти:

# Мониторинг использования памяти JVM
jstat -gc [PID]

# Настройка лимитов памяти
export JAVA_OPTS="-Xms512m -Xmx2048m"

# Для systemd сервисов
sudo systemctl edit myapp.service

Интеграция с другими инструментами

Java часто используется совместно с другими инструментами:

С Maven

# Устанавливаем Maven
sudo dnf install maven -y

# Проверяем интеграцию
mvn -version

С Gradle

# Устанавливаем Gradle через SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install gradle

С Docker

# Dockerfile для Java приложения
FROM centos:8

# Устанавливаем Java
RUN dnf install -y java-11-openjdk java-11-openjdk-devel

# Настраиваем JAVA_HOME
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk

# Копируем приложение
COPY app.jar /app/app.jar

# Запускаем
CMD ["java", "-jar", "/app/app.jar"]

Мониторинг и логирование

Для продакшена важно настроить мониторинг Java приложений:

# Включаем JMX мониторинг
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

# Настраиваем логирование GC
export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:gc.log:time,tags"

Безопасность

Несколько важных моментов по безопасности:

  • Обновляй Java регулярно — в ней часто находят уязвимости
  • Ограничивай сетевой доступ для Java приложений
  • Используй security manager для критичных приложений
  • Настраивай SSL/TLS правильно
# Обновление Java
sudo dnf update java-*-openjdk

# Проверка безопасности
java -version | grep -i security

Производительность на разных серверах

Если работаешь с разными типами серверов, учитывай особенности:

Тип сервера Рекомендуемая версия Java Настройки JVM
VPS Java 11/17 -Xms256m -Xmx1g
Выделенный сервер Java 17/21 -Xms2g -Xmx8g
Контейнер Java 17+ (лучше работает с cgroups) -XX:+UseContainerSupport

Альтернативные способы установки

Кроме стандартных репозиториев, есть другие варианты:

SDKMAN!

Отличный инструмент для управления версиями Java:

# Устанавливаем SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Смотрим доступные версии Java
sdk list java

# Устанавливаем конкретную версию
sdk install java 17.0.2-open

# Переключаемся между версиями
sdk use java 11.0.2-open

Через архивы

Для особых случаев можно установить из архива:

# Скачиваем архив OpenJDK
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz

# Распаковываем
sudo tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz -C /opt/

# Создаём символическую ссылку
sudo ln -s /opt/jdk-17.0.2 /opt/java

# Настраиваем окружение
echo 'export JAVA_HOME=/opt/java' | sudo tee /etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.sh

Интересные факты и хитрости

Несколько полезных фишек, которые пригодятся:

  • jshell — интерактивная консоль Java (доступна с Java 9+)
  • Flight Recorder — встроенный профайлер с низким overhead
  • Application Class-Data Sharing — ускоряет старт приложений
  • Graal VM — компилирует Java в native binaries
# Запуск jshell
jshell

# Включение Flight Recorder
java -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=recording.jfr MyApp

# Создание CDS архива
java -Xshare:dump -XX:SharedClassListFile=classes.lst -XX:SharedArchiveFile=app.jsa

# Использование CDS
java -Xshare:on -XX:SharedArchiveFile=app.jsa MyApp

Заключение и рекомендации

Установка Java на CentOS и Fedora — процесс несложный, но важно делать это правильно. Вот мои основные рекомендации:

  • Используй OpenJDK — она бесплатна и полностью совместима с Oracle JDK
  • Выбирай LTS версии (8, 11, 17, 21) для продакшена
  • Настраивай JAVA_HOME правильно — многие приложения на это полагаются
  • Используй alternatives для управления версиями
  • Оптимизируй JVM параметры под свои нагрузки
  • Регулярно обновляй Java для безопасности

Для большинства серверных задач достаточно стандартной установки через dnf/yum. Если нужно что-то особенное — есть SDKMAN! и ручная установка из архивов.

Java — это мощный инструмент, и правильная установка — первый шаг к стабильной работе твоих приложений. Удачи в настройке!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked