Spip
Principe
Spip est un CMS qui a la particularité de fonctionner avec des squelettes.
Il n’y a donc pas besoin de se prendre la tête quand on écrit des articles, et il est relativement facile d’ajouter des fonctionnalités et de modifier des thèmes.
Installation
https://github.com/ashledombos/docker-spip
https://github.com/ipeos-and-co/docker-spip/blob/master/docker-compose.yml
https://hub.docker.com/r/ipeos/spip/
https://github.com/nbc/spip-compose
Docker compose
J’utilise la distribution d’ispeos, qui n’est pas la plus optimisée (car tourne via Ubuntu), mais qui fonctionne sans trop se casser la tête. Il y a également besoin d’une bdd mysql, ici créée via mariadb.
Volumes
* core :
* data :
* IMG :
* plugins : Avoir un accès aux plugins installés
* config/mes_options.php : Permettre la compatibilité forcée. Attention : ne pas monter tout le répertoire, car config existe déjà
* squelettes : pour personnaliser les squelles
Fichier
docker-compose.yml
version: '3'
services:
db_spip:
container_name: db_spip
image: mariadb:10
restart: always
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 1
MYSQL_DATABASE: spip
MYSQL_USER: spip
MYSQL_PASSWORD: ${SPIP_DB_PASS}
volumes:
- ./volumes/mysql:/var/lib/mysql
spip:
container_name: spip
image: ipeos/spip:4.2
depends_on:
- db_spip
volumes:
- ./volumes/spip-core:/var/www/html/core
- ./volumes/spip-data:/var/www/html/data
- ./volumes/spip-img:/var/www/html/IMG
- ./volumes/plugins:/var/www/html/plugins/
- ./volumes/plugins-dist/:/var/www/html/plugins-dist
- ./volumes/config-monter-fichiers-dedans/mes_options.php:/var/www/html/config/mes_options.php
- ./volumes/squelettes:/var/www/html/squelettes
- type: bind
source: ./volume_bind/data
target: /mnt/data/
restart: always
environment:
SPIP_AUTO_INSTALL: 1
SPIP_DB_SERVER: mysql
SPIP_DB_HOST: db_spip
SPIP_DB_NAME: spip
SPIP_DB_LOGIN: spip
SPIP_DB_PASS: ${SPIP_DB_PASS}
SPIP_ADMIN_NAME: ${SPIP_ADMIN_NAME}
SPIP_ADMIN_LOGIN: ${SPIP_ADMIN_LOGIN}
SPIP_ADMIN_EMAIL: ${SPIP_ADMIN_EMAIL}
SPIP_ADMIN_PASS: ${SPIP_ADMIN_PASS}
SPIP_SITE_ADDRESS: ${SPIP_SITE_ADDRESS}
PHP_MEMORY_LIMIT: 256M
PHP_POST_MAX_SIZE: 40M
PHP_UPLOAD_MAX_FILESIZE: 32M
PHP_TIMEZONE: ${PHP_TIMEZONE}
ports:
- '8090:80'
networks:
default:
ipv4_address: 172.19.1.12
networks:
default:
name: nginx-docker
external: true
/etc/nginx/conf.d/sub.domain.ext.conf
server {
server_name sub.domain.ext;
location / {
proxy_pass http://this.is.local.ip:port;
proxy_buffering off;
proxy_set_header Host $host; # ajout pour bonne redirection pages privees
proxy_set_header X-Real-IP $remote_addr; # idem
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # idem
}
listen 443 ssl; # managed by Certbot
listen [::]:443 ssl; # ajout
ssl_certificate /etc/letsencrypt/live/sub.domain.ext/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sub.domain.ext/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = sub.domain.ext) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80; # Ajout
server_name sub.domain.ext;
return 404; # managed by Certbot
}
Attention
SPIP_DB_SERVER : ne pas utiliser l’ip ni l’ip:port de la db pour s’y connecter, mais conserver mysql
Problème avec Nginx
J’ai une erreur 502, et n’ai pas encore trouvé ce qui n’allait pas...
Plugins
Thème
* Penser à désactiver les autres plugin thème pour que ça fonctionne...
Hyperspace
* https://contrib.spip.net/HTML5UP-Hyperspace-V3-5240
* Problème de version pour Adaptive Images. Il y a surement en plus des soucis cachés à cause de l’utilisation de php8, mais en ajoutant le mode rétrocomptabilité forcée via le fichier mes_options.php avant d’essayer d’installer le plugin, il est possible de l’installer tout de même.
* Il n’est visiblement possible de n’avoir qu’une seule grille
Photon
Photon est un thème un peu différent, car il permet d’inclure 3 pages complètes à l’intérieur de la page d’accueil. Bien évidemment, il y a des choses à modifier.
Catégorie
Les catégories ne sont pas disponibles avec ce thème nativement. Pour créer des pages de catégorie, il faut créer le fichier
<!DOCTYPE HTML>
<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
<html>
<head>
<title>[(#TITRE) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF{150}|attribut_html)" />]
[<link rel="canonical" href="(#URL_RUBRIQUE|url_absolue)" />]
<INCLURE{fond=inclure/head} />
</head>
<body class="is-preload">
<!-- Header -->
<INCLURE{fond=inclure/header_categorie,id_rubrique} />
<!-- Main -->
<section id="one" class="main style1">
<div class="rubrique">
<div class="row gtr-150">
<div class="container">
[<div class="image fit">(#LOGO_RUBRIQUE|image_recadre{1200,600})</div>]
<h1 class="titre #EDIT{titre}">Les articles</h1>
<B_articles><ul class="actions">
<BOUCLE_articles(ARTICLES){id_rubrique}><li><a href="#URL_ARTICLE" class="button small">#TITRE</a></li></BOUCLE_articles>
</ul></B_mots>
[<div class="texte #EDIT{texte}">(#DESCRIPTIF|image_reduire{1400})</div>]
</div>
<div >
<INCLURE{fond=inclure/documents,id_article,id_rubrique,ajax,env} />
</div>
</div>
</div>
</section>
<!-- Footer -->
<INCLURE{fond=inclure/footer,self=#SELF} />
</body>
</html>
</BOUCLE_rubrique>
Ainsi que
./inclure/header_categorie.html
<section id="header">
<div class="inner">
<span>[(#LOGO_SITE_SPIP|non)#FA_ICON{img/fa/solid/cloud.svg}]</span>
<a href="#URL_SITE_SPIP/" class="logo">
[<div>(#LOGO_SITE_SPIP|image_reduire{150,150})</div>][<h1 class="title">(#NOM_SITE_SPIP)</h1>]
</a>
<BOUCLE_rubriqueheader(RUBRIQUES){id_rubrique}>
<h2>#TITRE</h2>
</BOUCLE_rubriqueheader>
</div>
</section>
https://contrib.spip.net/Html5up-Photon#comment513293
Squelette
* Il est possible de personnaliser les pages en copiant les squelettes accueil_one.html (1 à 4) présents dans ./plugins/auto/html5up_photo/vXXXX/include/ en le mettant dans ./squelettes/include/. Ces derniers seront alors prioritairement pris en compte.
* Pour utiliser le squelette ./squelettes/coucou.html, il faut appeler l’article avec le lien (url propre ici : monsite.fr/monarticle ?page=coucou .
** L’idéal serait de trouver comment forcer cela via le htaccess
###
# PERSO !!!
RewriteRule ^cheveux_environnement(\.html)?$ spip.php?page=graphes&id_article=13 [QSA,L]
#
###
Modèles
Cela permet d’inclure des boucles spips et autres éléments de squelette dans un article (cela est impossible directement)
* Créer le dossier ./modeles (ajouté aux volumes)
* Créer article_xxx.html et y mettre le squelette souhaité
* Appeler, dans l’article le module <article|xxx|param=value|param2=value>
Classes
A faire
Autres
Personnaliser un peu plus via des plugins : le couteau suisse est très utile, par exemple, en activant l’option "des menus déroulants" comme ici.
Attention
* Faire des sauvegardes régulières !
* Ne pas ajouter d’images (ou toute autre donnée) manuellement via le volume IMG : ça casse la base de donnée ou de modifier le répertoire de base de spip avec qqc imprévu !!!
** Possibilité de monter des trucs à la racine du container (ex : /mnt/data)
** Visiblement, ajouter des données au répertoire data ne casse pas tout
* En cas de base de donnée cassée, je fais (non optimal) une nouvelle instance :
** Conserver uniquement les volumes : plugins, plugins_dist, sql_export, config_..., squelettes (-> renommer les autres par exemple)
** Reimporter la dernière sauvegarde. Ça risque de casse le login/passwd admin, dans ce cas, le reset avec :
** (docker)# mv config/connect.php config/connect.php_
** (docker)# mv config/chmod.php config/chmod.php_
** https://site.ext/ecrire
*** Base de donnée : valeur de SPIP_DB_HOST
*** Ensuite, il n’y a plus qu’à suivre suivre le reste.
** Réactiver les plugins et remettre leur configuration (c’est le plus embêtant)
* Autre proposition de réinstallation : passer par le CLI (via docker)
* spip sql:repair
* spip core:maj:bdd
* spip core:installer