Dans cet article nous allons voir comment installer Stirling-PDF via docker sur un serveur debian auto-herbergé et le rendre disponible avec un certificat signé let’s encrypt via apache2.
1- Prérequis
Les logiciels et packages ci-dessous déjà installées :
- Debian 12
- Apache2 installé
- IP fixe
- Ouvrir les ports 443 et 80 en NAT sur l’adresse IP privée du serveur stirling (dans mon cas 192.168.3.29)
- Déclarer une adresse IP publique fixe dans votre nom de domaine pour votre seveur (dans mon cas pdf.gabinhocity.eu pointe sur l’adresse IP publique de mon serveur de test)
1 – Installer docker
Débutons par la mise à jour du serveur debian
apt-get update && apt-get upgrade
Installer les prérequis dans votre système si ce n’est pas déjà fait
apt-get install ca-certificates curl sudo
Installer le package pour docker sur votre machine debian
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Tester le bon fonctionnement de docker avec les commandes
docker run hello-world

Ou avec la commande
sudo systemctl status docker

Activer le démarrage de docker en même temps que le système
systemctl enable docker
2 – Installer Stirling-PDF
Il faut créer le repertoire d’installation des fichiers necessaires au fonctionnement de Stirling-PDF
mkdir /var/www/PDF
cd /var/www/PDF
Lancer l’installation de l’application via docker
location=$(pwd)/gradlew
docker run -d \
--name stirling-pdf \
-p 8080:8080 \
-v "./StirlingPDF/trainingData:/usr/share/tessdata" \
-v "./StirlingPDF/extraConfigs:/configs" \
-v "./StirlingPDF/customFiles:/customFiles/" \
-v "./StirlingPDF/logs:/logs/" \
-v "./StirlingPDF/pipeline:/pipeline/" \
-e DOCKER_ENABLE_SECURITY=false \
-e LANGS=fr_FR \
docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest

3 – Personnaliser docker
créer le fichier docker-compose.yml
vi docker-compose.yml
version: '3.3'
services:
stirling-pdf:
image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
ports:
- '8080:8080' #Port d'écoute de l'application
volumes:
- ./StirlingPDF/trainingData:/usr/share/tessdata # Required for extra OCR languages
- ./StirlingPDF/extraConfigs:/configs
- ./StirlingPDF/customFiles:/customFiles/
- ./StirlingPDF/logs:/logs/
- ./StirlingPDF/pipeline:/pipeline/
environment:
- DOCKER_ENABLE_SECURITY=false #Désactive l'authentification pour l'accès à l'application
- LANGS=fr_FR # Langue de polices disponible pour la conversion de documents
restart: unless-stopped # Redemarre le contenaire en même temps que le serveur
Maintenant nous pouvons démarrer l’application en visualisant les logs
docker compose up -d && docker compose logs -f

Si vous obtenez le message d’erreur ci-dessus qui vous dit que le port 8080 est déjà utilisé, redemarrer le serveur et relancer la commande dans le repertoire du fichier docker-compose.yml que vous venez de créer

Vous pouvez vous rendre sur le lien suivant pour accéder au portail :
http://votre.adresse.ip:8080

4 – Configuration de l’accès en HTTP
Si ce n’est déjà fait, activer la fonctionnalité de reverse proxy du package apache2
a2enmod proxy_http headers
systemctl restart apache2
Créer le fichier de configuration apache de stirling PDF. Dans mon cas le nom de domaine sera pdf.gabinhocity.eu
cd /etc/apache2/sites-available/
vi pdf.gabinhocity.eu.conf
Ajouter les lignes ci-dessous :
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin mail@tonmail.fr
DocumentRoot /var/www/PDF/
ServerName pdf.gabinhocity.eu
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
Activer le virtualhost
a2ensite pdf.gabinhocity.eu.conf
systemctl reload apache2
5 – Configuration de l’accès en HTTPS
Si ce n’est pas encore fait, vous pouvons installer le certbot Let’s Encrypt en suivant les commandes ci-dessous :
sudo apt install python3 python3-venv libaugeas0
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-apache
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
Configurer la génération du certificat et du fichier de configuration ssl automatiquement pour le nom de domaine pdf.gabinhocity.eu
sudo certbot --apache

Pour configurer le renouvellement automatique du certificat ajouter la commande suivante :
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
Nous devons modifier le fichier généré automatiquement par le certbot lors de la création du certificat ssl. Dans mon cas le fichier créé se nomme pdf.gabinhocity.eu-le-ssl.conf
vi pdf.gabinhocity.eu-le-ssl.conf
Ajouter les lignes suivantes
ProxyPreserveHost On
ProxyRequests On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
Header always set Access-Control-Allow-Origin "*"
Header always set Content-Security-Policy "upgrade-insecure-requests;"

Redemarrer apache2
systemctl reload apache2
Votre site est désormais accèssible et fonctionnel en https avec un certificat reconnu par tous les navigateurs


Autodidacte dans la majeure partie de mes compétences et créateur du site gabinhocity.eu, je surf tant bien sur la vague Windows que Linux. Profondément passionné par la découverte, mes loisirs sont partagés entre la photographie et les voyages.