magicboris commited on
Commit
e4f115e
·
verified ·
1 Parent(s): 7015058

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +57 -27
Dockerfile CHANGED
@@ -1,41 +1,71 @@
1
- # Используем базовый образ с OpenJDK (Java Development Kit)
2
- FROM openjdk:17-jdk-slim
3
- # Устанавливаем рабочую директорию для скачивания и промежуточных файлов
 
 
4
  WORKDIR /app
 
5
  # Версия LanguageTool, которую будем использовать
6
  ARG LANGTOOL_VERSION="6.3"
7
  # --- Переменные для новой FastText модели compress-fasttext ---
8
  ARG FASTTEXT_MODEL_NAME="ft_freqprune_400K_100K_pq_300.bin"
9
  ARG FASTTEXT_MODEL_URL="https://github.com/avidale/compress-fasttext/releases/download/v0.0.1/${FASTTEXT_MODEL_NAME}"
10
- # -------------------------------------------------------------
11
  # Ожидаемое имя директории после распаковки LanguageTool zip
12
  ARG LANGTOOL_DIR_NAME="LanguageTool-${LANGTOOL_VERSION}"
13
- # --- Преобразование ARGs в ENVs для использования в CMD ---
14
- ENV LANGTOOL_VERSION=${LANGTOOL_VERSION}
15
- ENV FASTTEXT_MODEL_NAME=${FASTTEXT_MODEL_NAME}
16
- ENV LANGTOOL_DIR_NAME=${LANGTOOL_DIR_NAME}
17
- # --- Конец преобразования ---
18
- # Устанавливаем пакеты для скачивания и распаковки (wget, unzip) и удаляем кэш
19
  RUN apt-get update && \
20
  apt-get install -y --no-install-recommends wget unzip && \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  rm -rf /var/lib/apt/lists/*
22
- # Скачиваем LanguageTool server zip
23
- RUN wget https://languagetool.org/download/LanguageTool-${LANGTOOL_VERSION}.zip -O languagetool.zip
24
- # Скачиваем FastText модель (.bin файл напрямую)
25
- RUN wget "${FASTTEXT_MODEL_URL}" -O "/app/${FASTTEXT_MODEL_NAME}"
26
- # Распаковываем LanguageTool zip и удаляем архив
27
- RUN unzip languagetool.zip -d /app/ && \
28
- rm languagetool.zip
29
- # Перемещаем скачанную FastText модель (.bin) внутрь директории LanguageTool
30
- RUN mv "/app/${FASTTEXT_MODEL_NAME}" "/app/${LANGTOOL_DIR_NAME}/"
31
- # Устанавливаем рабочую директорию внутри контейнера на директорию LanguageTool
32
- WORKDIR "/app/${LANGTOOL_DIR_NAME}"
33
- # Создаем файл конфигурации server.properties. Это лучший способ.
34
- RUN echo "fasttextModel=${FASTTEXT_MODEL_NAME}" > server.properties && \
35
- echo "motherTongue=ru" >> server.properties
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  # Открываем порт, на котором будет работать сервер
37
  EXPOSE 8010
 
38
  # Рекомендованная и правильная команда для запуска LanguageTool server
39
- CMD java -Xmx8g -cp "*:libs/*" org.languagetool.server.HTTPS \
40
- -config server.properties \
41
- --allow-origin '*' \
 
1
+ # --- STAGE 1: Builder ---
2
+ # Используем полный JDK для сборки, установки зависимостей и подготовки файлов
3
+ FROM openjdk:17-jdk-slim AS builder
4
+
5
+ # Устанавливаем рабочую директорию
6
  WORKDIR /app
7
+
8
  # Версия LanguageTool, которую будем использовать
9
  ARG LANGTOOL_VERSION="6.3"
10
  # --- Переменные для новой FastText модели compress-fasttext ---
11
  ARG FASTTEXT_MODEL_NAME="ft_freqprune_400K_100K_pq_300.bin"
12
  ARG FASTTEXT_MODEL_URL="https://github.com/avidale/compress-fasttext/releases/download/v0.0.1/${FASTTEXT_MODEL_NAME}"
13
+
14
  # Ожидаемое имя директории после распаковки LanguageTool zip
15
  ARG LANGTOOL_DIR_NAME="LanguageTool-${LANGTOOL_VERSION}"
16
+
17
+ # Объединяем установку, скачивание и распаковку в один слой (RUN)
18
+ # Это уменьшает размер итогового образа и оптимизирует кэширование
 
 
 
19
  RUN apt-get update && \
20
  apt-get install -y --no-install-recommends wget unzip && \
21
+ # Скачиваем LanguageTool server zip
22
+ wget "https://languagetool.org/download/LanguageTool-${LANGTOOL_VERSION}.zip" -O languagetool.zip && \
23
+ # Распаковываем LanguageTool
24
+ unzip languagetool.zip && \
25
+ # Скачиваем FastText модель сразу в нужную директорию
26
+ wget "${FASTTEXT_MODEL_URL}" -O "/app/${LANGTOOL_DIR_NAME}/${FASTTEXT_MODEL_NAME}" && \
27
+ # Создаем файл конфигурации server.properties с помощью heredoc для читаемости
28
+ # shellcheck disable=SC2016
29
+ cd "${LANGTOOL_DIR_NAME}" && \
30
+ echo "fasttextModel=${FASTTEXT_MODEL_NAME}" > server.properties && \
31
+ echo "motherTongue=ru" >> server.properties && \
32
+ # Очистка: удаляем ненужные архивы и пакеты
33
+ cd /app && rm languagetool.zip && \
34
+ apt-get purge -y --auto-remove wget unzip && \
35
  rm -rf /var/lib/apt/lists/*
36
+
37
+ # --- STAGE 2: Final Image ---
38
+ # Используем только JRE (Java Runtime Environment), так как для запуска не нужен JDK.
39
+ # Это значительно уменьшает размер образа.
40
+ FROM openjdk:17-jre-slim
41
+
42
+ # Аргументы, которые нужны в финальном образе
43
+ ARG LANGTOOL_VERSION="6.3"
44
+ ARG LANGTOOL_DIR_NAME="LanguageTool-${LANGTOOL_VERSION}"
45
+ ARG FASTTEXT_MODEL_NAME="ft_freqprune_400K_100K_pq_300.bin"
46
+
47
+ # Преобразуем ARGs в ENVs для использования в CMD и внутри контейнера
48
+ ENV LANGTOOL_VERSION=${LANGTOOL_VERSION} \
49
+ LANGTOOL_DIR_NAME=${LANGTOOL_DIR_NAME} \
50
+ FASTTEXT_MODEL_NAME=${FASTTEXT_MODEL_NAME}
51
+
52
+ # Устанавливаем рабочую директорию
53
+ WORKDIR /app
54
+
55
+ # Создаем непривилегированного пользователя для запуска приложения (лучшая практика безопасности)
56
+ RUN groupadd --system --gid 1001 languagetool && \
57
+ useradd --system --uid 1001 --gid 1001 languagetool
58
+
59
+ # Копируем только необходимые артефакты из стадии 'builder'
60
+ # --chown устанавливает правильного владельца файла, чтобы избежать проблем с правами
61
+ COPY --from=builder --chown=languagetool:languagetool /app/${LANGTOOL_DIR_NAME}/ .
62
+
63
+ # Переключаемся на непривилегированного пользователя
64
+ USER languagetool
65
+
66
  # Открываем порт, на котором будет работать сервер
67
  EXPOSE 8010
68
+
69
  # Рекомендованная и правильная команда для запуска LanguageTool server
70
+ # Используем относительные пути, так как мы находимся в WORKDIR /app
71
+ CMD ["java", "-Xmx8g", "-cp", "*:libs/*", "org.languagetool.server.HttpS", "--config", "server.properties", "--allow-origin", "*"]