Grammalecte  View Ticket

UUID: 68c6b9a36f973c82773ffab17c67bf077cf097a2
Title/Titre: [FR] Grammalecte dans un container docker
Status: Closed Type: Installation
Severity/Gravité: Severe Priority/Priorité: Immediate
Module: Grammalecte_Core Resolution: Fixed
Modified/Modifié: 2020-10-10 06:56:25
Version(s): 1.12.1
Comments / Commentaires :
thelittlefireman // 2020-10-06 12:06:20 :
Bonjour,
J'essaie de créer un conteneur docker pour lancer Grammalecte en docker mais lorsque je démarre le serveur, celui-ci reste bloqué (attend un appui sur la touche entrée ???) et ne se lance que lorsque je quitte le docker. Le serveur ne semble pas lancé, j'ai testé un curl http://localhost:8080/ mais j'obtiens une erreur "connection reset"

Créer le conteneur :
docker build -t grammalecte:latest .

Démarrer le conteneur :
docker run --rm -p 8080:8080 --name gr grammalecte:latest

Dockerfile
```
FROM python:3-alpine AS src

ENV VERSION 1.12.2

RUN apk add --update --no-cache \
      unzip \
      wget \
 && wget http://www.dicollecte.org/grammalecte/zip/Grammalecte-fr-v${VERSION}.zip \
 && unzip Grammalecte-fr-v${VERSION}.zip -d /srv

FROM python:3-alpine

COPY --from=src /srv/ /srv

EXPOSE 8080

CMD python /srv/grammalecte-server.py -p 8080 -t -mp 1

```

olr // 2020-10-06 14:45:00 :
Bonjour,

Je ne connais Docker que de nom. Ce que je vais vous dire n’est donc que suppositions.

Attendu que le serveur utilise un ProcessPoolExecutor, même avec un seul processus dédié à la tâche du correcteur grammatical, j’imagine qu’il y a peut-être un réglage à effectuer pour le processus dédié.

L’autre possibilité, c’est que le serveur Bottle.py (https://bottlepy.org/docs/dev/) sur lequel se base Grammalecte a besoin (lui aussi) d’un configuration particulière.

À mon avis, c’est de l’un de ces points, voire des deux, que vient le problème.

olr // 2020-10-06 14:50:43 :
Par ailleurs, l’adresse http://www.dicollecte.org/ est obsolète, utilisez https://grammalecte.net

thelittlefireman // 2020-10-07 16:59:55 :
Merci pour vos retours. J'ai réussi à le faire tourner correctement.
Il faut ajouter l'argument "ENV PYTHONUNBUFFERED TRUE" pour éviter que les logs soient stocké dans un buffer et bloque le programme python.

Donc pour info, vous pouvez ajouter ces informations dans votre répo :

Dockerfile:
```
FROM python:3-alpine AS src

ENV VERSION 1.12.2

RUN apk add --update --no-cache \
      unzip \
      wget \
 && wget https://grammalecte.net/grammalecte/zip/Grammalecte-fr-v${VERSION}.zip \
 && unzip Grammalecte-fr-v${VERSION}.zip -d /srv

FROM python:3-alpine

COPY --from=src /srv/ /srv

ENV PYTHONUNBUFFERED TRUE

EXPOSE 8080

WORKDIR /srv

ENTRYPOINT ["python3"]

CMD ["grammalecte-server.py","-ht", "0.0.0.0","-p","8080","-t"]
```

Créer le conteneur :
`docker build -t grammalecte:latest .`

Lancer le conteneur :

`docker run --rm -p 8080:8080 --name gr grammalecte:latest`

thelittlefireman // 2020-10-07 17:07:49 :
Pour info :

https://github.com/thelittlefireman/docker-grammalecte

https://hub.docker.com/r/thelittlefireman/docker-grammalecte

olr // 2020-10-08 13:30:14 :
Merci.
J’ai ajouté votre fichier au dépôt.

thelittlefireman // 2020-10-09 13:43:57 :
merci :)

Vous devriez juste renommer votre fichier "Dockerfile.txt" en "Dockerfile" le nom est important pour la compilation rapide du conteneur.

Vous pouvez également (si vous le souhaitez) ajouter une routine pour créer le conteneur automatiquement et le distribuer sur https://hub.docker.com/

thelittlefireman // 2020-10-09 13:45:04 :
* "dockerfile.txt" ==> "Dockerfile"

olr // 2020-10-10 06:56:00 :
“dockerfile.txt” will become “Dockerfile” in the downloadable Grammalecte package.