A partir de Debian 12, Python 2 n'est plus supporté par Debian. Il va falloir l'installer manuellement avec pyenv :
Installation de Pyenv
a/ Installer les paquets systèmes requis :
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl
b/ Installer Pyenv en utilisant un script fourni par les mainteneurs du projet :
curl https://pyenv.run | bash
c/ Après l’installation, ajouter les lignes suivantes au fichier de configuration de shell (.bashrc) :
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
d/ vérifier que Pyenv est correctement installé en exécutant :
pyenv --version
Installer Python 2.7.15
pyenv install 2.7.15
Créer un dossier pour le projet Plone et définir la version de python à utiliser localement :
mkdir Plone
cd Plone
pyenv local 2.7.15
Cela crée un fichier .python-version dans le répertoire Plone, indiquant à Pyenv de basculer automatiquement vers la version spécifiée lorsque l'on travaille dans ce dossier.
Source : Installation instructions for Plone 4.3
Récupérer fichier d’install de la dernière version de Plone 4.3 sur https://launchpad.net/plone/+milestone/4.3.19 :
cd /home/zidol/download
wget --no-check-certificate https://launchpad.net/plone/4.3/4.3.19/+download/Plone-4.3.19-UnifiedInstaller.tgz
Extraire le fichier compressé :
tar -xf Plone-4.3.19-UnifiedInstaller.tgz
cd Plone-4.3.6-UnifiedInstaller
# utiliser python 2.7 en local dans ce répertoire
pyenv local 2.7.15
Lancer le script install :
./install.sh standalone --password=xxxxx --target=/home/ugvr/Plone --instance=ugvr
...
Plone successfully installed at /home/ugvr/Plone
See /home/ugvr/Plone/ugvr/README.html for startup instructions
Une fois Plone installé, déclarer python2.7 en local pour ce répertoire :
cd /Plone/ugvr
# utiliser python 2.7 en local dans ce répertoire
pyenv local 2.7.15
Tester Plone en le lançant :
bin/plonectl fg
instance: 2025-06-10 15:44:52 INFO ZServer HTTP server started at Tue Jun 10 15:44:52 2025
Hostname: 0.0.0.0
Port: 8090
...
2025-06-10 15:45:00 INFO Zope Ready to handle requests
Le dernier message "Zope ready to handle requests" annonce que l'instance Plone est opérationnel sur le port 8090.
Pour arrêter Plone, faire : CTRL-C
Créer, dans /etc/systemd/system, un fichier du service ayant comme nom ugvr.service :
[Unit]
Description=Plone website UGVR
After=network.target
[Service]
Type=forking
ExecStart=/home/ugvr/Plone/ugvr/bin/instance start
ExecStop=/home/ugvr/Plone/ugvr/bin/instance stop
ExecReload=/home/ugvr/plone/ugvr/bin/instance restart
[Install]
WantedBy=multi-user.target
Redémarrer systemd pour prendre en compte le nouveau fichier :
systemctl daemon-reload
Activer le service :
systemctl start ugvr.service
Pour démarrage de plone au boot du serveur :
systemctl enable ugvr.service
Changer le timezone de Plone en heure de Paris au lieu de GMT par défaut
cd ~/Plone/ugvr
nano base.cfg
...
environment-vars =
zope_i18n_compile_mo_files true
PYTHON_EGG_CACHE ${buildout:directory}/var/.python-eggs
TZ Europe/Paris
...
Déclarer les produits add-ons dans le buildout.cfg :
cd ~/Plone/ugvr
nano buildout.cfg
...
eggs =
Plone
Pillow
Products.Carousel
Products.PloneFormGen
Products.ContentWellPortlets
Products.Maps
Products.Collage
Products.Ploneboard
# Products.PloneGazette
collective.plonetruegallery
collective.ptg.picasa
# collective.flowplayer
# collective.blog.star
# collective.rtvideo.youtube
collective.exportimport
# redturtle.video
quintagroup.dropdownmenu
# Solgema.Fullcalendar
...
Copier les fichiers sources des add-ons dans le dossier buildout-cache/eggs :
cd /home/ugvr/Plone/buildout-cache/eggs
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.Carousel-2.2.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.PloneFormGen-1.7.16-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.ContentWellPortlets-4.2.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.Maps-3.3-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.Collage-1.3.11-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.Ploneboard-3.6-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Products.PloneGazette-3.2.5-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.plonetruegallery-3.4.9-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.ptg.picasa-0.1.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.flowplayer-4.2.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.blog.star-1.2.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.rtvideo.youtube-0.3.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.exportimport-1.11-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/redturtle.video-1.1.0-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/quintagroup.dropdownmenu-1.3.1-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Solgema.fullcalendar-2.3.4-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/Solgema.ContextualContentMenu-0.3-py2.7.egg/ .
cp -r ~/plone43/ugvr_plone/buildout-cache/eggs/collective.js.jqueryui-1.10.4-py2.7.egg/ .
Recompiler l’instance Plone
cd ~/Plone/ugvr
bin/buildout
si pas d’erreur, relancer et tester Plone
systemctl restart ugvr.service
Une sauvegarde du site UGVR du serveur de prod été copiée dans le dossier ~/ugvr/download puis dans le dossier /home/ugvr/plone43/ugvr_plone/var.
Il suffit juste de les recopier vers ~/Plone/ugvr/var:
cd .~/Plone/ugvr/var
cp -r ~/plone43/ugvr_plone/var/blobstorage/ .
cp -r ~/plone43/ugvr_plone/var/filestorage/ .
Si pas d’erreur, relancer et tester le nouveau site :
cd .~/Plone/ugvr
systemctl restart ugvr.service
Créer un fichier de conf /etc/nginx/sites-available/ugvr.conf contenant ces lignes :
# This adds security headers
add_header X-Frame-Options "SAMEORIGIN";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
# add_header Content-Security-Policy "default-src 'self'; img-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'";
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'";
# This specifies which IP and port Plone is running on.
# The default is 127.0.0.1:8080
upstream plone {
server 127.0.0.1:8090;
}
# Redirect all www-less traffic to the www.site.com domain
# (you could also do the opposite www -> non-www domain)
server {
listen 80;
server_name www.ugvr.org;
rewrite ^/(.*) http://ugvr.org/$1 permanent;
}
server {
listen 80;
server_name ugvr.org;
access_log /var/log/nginx/ugvr.org.access.log;
error_log /var/log/nginx/ugvr.org.error.log;
# Note that domain name spelling in VirtualHostBase URL matters
# -> this is what Plone sees as the "real" HTTP request URL.
# "Plone" in the URL is your site id (case sensitive)
location / {
proxy_pass http://plone/VirtualHostBase/http/ugvr.org:80/ugvr/VirtualHostRoot/;
}
}
Puis enable le site en creant un lien symbolique :
sudo -i
cd /etc/nginx/sites-enabled
ln -s ../sites-available/ugvr.conf .
Tester la validation de la configuration :
sudo nginx -t
Si la config est OK. redemarre nginx:
sudo systemctl restart nginx
sudo systemctl status nginx
Faire pointer le nom de domaine ugvr.org vers l'adresse IP du serveur puis tester en lancant dans un navigateur : http://uvrg.org
Nous allons utiliser Let's Encrypt, un Certificate Authority gratuit et facile à installer grace au script certbot:
sudo certbot --nginx
Puis suivre les instructions. Ce script modifie ugvr.conf de nginx pour prendre en compte le protocole https.
Redemarrer nginx pour prendre en compte la nouvelle config.
sudo systemctl restart nginx
Puis tester en lancant dans un navigateur : http://uvrg.org. La requête sera transformer automatiquement en https://uvrg.org
# installer POSTFIX
apt install postfix
# vérifier qu’il fonctionne
systemctl status postfix
Configurer Postfix pour servir de relai de mail en modifiant ces 2 lignes dans le fichier /etc/postfix/main.cf :
mydestination = $myhostname, vps-7cdacf07.vps.ovh.net, vps-seng, ugvr.org, localhost
relayhost = ugvr@laposte.net
Après avoir modifié main.cf, lancer 'systemctl reload postfix' pour prendre en compte les modifs.
Avec cette configuration, pas besoin de définir des boîtes mail en local, ni de définir les comptes POP, pas besoin de les gérer. Il y a laposte.net pour ça.
That's it
Publié le : 09-07-2025 - 06:50