_
~ DAMOLAB - Les tambouilles textes, teks et hacks ~
"Pain défendu réveille l'appétit." - proverbe
DAMOLAB (#TAGS) _./._ XBNF blog _./._ Blog _./._

Damo Web Blog (DWB) : créer un blog simple, léger et sécurisé


| FR | par DAMO | | 17/07/2022 17h00 | (last update 21/12/2025 18h09) | Commentaires |
#DWB #DAMOLAB #LINUX #APACHE
système de blog : articles ou commentaires généré avec XBNF et scripts Ruby pour CGI & conversion
|


1) Introduction



Le projet Damo-web-blog est un moteur de blog réalisé en Ruby.

Ce système de blog se base sur le serveur Web Apache :
  • pages HTML statiques sont générées (sans javascript)
  • les pages s'appuient sur une feuille de styles en CSS
  • intéractions Web avec des scripts CGI en Ruby
  • plusieurs sites peuvent être gérés sur le même server apache


Eléments nécessaires au fonctionnement du DWB :
  • Serveur local : distribution Linux Mint
  • Serveur distant : distribution Linux Raspbian pour Raspberry PI
  • SSH
  • rsync pour la synchronisation entre le serveur local et distant
  • un bon éditeur de text Xemacs (rédaction d'articles, en-tête, configuration, ...)
  • convertisseur grammatical (DWB->HTML) : XBNF



       
1.0.1) Avantages de la solution Damo Web Blog

  • simple : toutes les pages sont statiques : HTML généré avec peu de code (SSI coté serveur, sans javascript coté client)
  • estétique : un seul CSS customisable
  • économique : la simplicité des pages, des indexes (pour les tags) sont statiquement générés avant transfer coté serveur
  • écologique : la navigation et actions utilisateur requière peu de CPU & RAM, de sorte que le serveur apache peut tourner sur un RaspberryPI
  • souplesse : possibilité de gérer plusieurs sites. Les tags permettent de catégoriser les articles.
  • sécurisé : de part le structure des pages, sans code ni base de donnée ; les opportunités d'attaques sont quasi-inexistantes
  • transportable : les scripts Ruby fonctionnent sur toutes les distribution Linux rescentes. Il en va de même pour Apache.
  • évolutif : le mécanisme de convertion du format DWB est basé sur la technologie XBNF, une grammaire à la fois puissante et simple.


       
1.0.2) Fonctionnalités

  • syntax épuré de gestion des articles ou commentaire (format DWB)
  • CGI pour poster des commentaires associé à un article
  • CGI pour transférer des fichiers volumineux sur le serveur Apache
  • utilisation de Hash-tag permet de générer une indexation thématique simple (simples pages statiques coté serveur)


       
1.0.3) Architecture


	poste designer		<=>	Rapsberry PI		<=>	 client web
	\
	 Design du blog			Blog en production	
	  \ apache de test			 	adresse publique


Le PC de management :
  • concentre toute l'intelligence en charge de la génération du blog.
  • contient et gère le site : syntax des articles et commentaires au format DWB
  • héberge le site de test en cours de construction avec Apache et CGI/BIN
  • gère la synchronisation avec le serveur en production
  • avec un serveur apache permettant de tester le site avant de le déployer sur le raspberry PI.
  • gère les posts/commentaires que le modérateur choisit d'accépter ou pas


Le serveur de production :
  • héberge le serveur Apache de production
  • le contenu provient des pages générés depuis le PC de management
  • les interactions CGI-BIN
  • les posts (commentaires) sont synchronisé vers le PC de management


       
1.0.4) Notes et recommandations


/!\\ Pensez à bien sauvegarder vos fichiers avant modification (en .orig ou .bak-20230429),
/!\\ Dans la suite de cet article les différences indiquent le résultat après modification par vos soins.

2) Mise en place et structure du blog




2.1) Elements du blog



.../site-test/			< point d'entré Apache / répertoire racine du site de test 
------------- dwb/*.dwb			< articles format DWB
------------- dwb/menu-right.dwb	< panneau droit format DWB
------------- index.html		< page d'accueil contenant des SSI
------------- dwb-header.html		< HTML header menu
------------- dwb-footer.html		< bas-de-page / 
------------- dwb-style.css		< mise en page / feuille de style CSS
------------- materials/		< icones, images ou éléments généraux du blog
------------- *				< données (images, videos, ...) à organiser

------------- dwb-gen/		> site, pages générées en HTML

/var/www/			> point d'entré apache
-------- site-test/		* lien symbolique vers le répertoire site-test à élaborer
-------- push-posts/		* fichiers de réception des commentaires (posts) au format DWB
-------- gci/			* lien symbolique des CGI-BIN vers le projet damo-blog-engine/gci/



2.2) Elements d'entrés : sources


Les éléments sources (<) vont servir à la génération des données HTML.

Les articles doivent être nommés <YYYYMMDD>_<Auteur>-<titre>.dwb

Le site-test est un exmple de site.

Les commentaires (ou posts) devront être validés après avoir été syncronisé du site en production vers le poste de design.
Les posts sont commun à tous les sites hébergés.
Les posts sont stockés et nommés <YYYYMMDD>_<Auteur>-<titre>.comment.dwb


2.3) Elements générés


Tous les éléments DWB seront générés vers le .../site-<site>/dwb-gen/ (ici <site> est test).
Le fichier menu-left-tags.html est le tableau de syntèse des tags.
Le fichier gen-index-tags.html sert pour l'index par tags ainsi que les résumés.
Le fichier fortune.FR.html est un listing des citations choisis au hazard.

2.4) Configuration Apache


/!\\ Il est important de bien configurer le répertoire contenant les CGI-BIN,
bien cloisoner entre les pages HTML en lecture et les CGI en execution.

Chaque répertoire doit faire l'objet d'une configuration bien spécifique,
un utilisateur malveillant pourrait profiter selon l'indexation, les CGI, ...

Sous Linux, vous pouvez restreindre les droits ouverts à apache pour chacun des répertoires du blog.

Sur la production (RPI), l'utilisateur "pi" peut avoir besoin des droits du groupe www-data.

root@pi-web# cd /var/www
root@pi-web# chown -R pi:www-data .
root@pi-web# chmod -R 770 .

root@pi-web# diff /etc/group.orig /etc/group
24c24
< www-data:x:33:
---
> www-data:x:33:pi



3) Configuration Apache initiale



3.5) serveur Apache distant


Suivre cet article pour installer et configurer Apache pour Rapberry PI.

3.6) serveur Apache local


Il est intérressant d'installer et configurer un serveur Apache sur le poste local depuis lequel les articles sont générés.

En effet, il est du coups possible de corriger des erreurs sur les articles, selectionner les commentaires et gérer la structure du site
sans devoir re-synchroniser à chaque modification le serveur distant (RPI) pour vérifier le résultat.

3.7) serveur Apache local & distant


       
3.7.5) Configuration apache


Dans les sources, le répertoire apache.conf/ contient les éléments modifiés.

# cd .../damo-blog-engine/apache.conf/

#  vi /etc/apache2/apache2.conf
...
Alias /test /var/www/site-test
<Directory /var/www/site-test/>
        Options Includes FollowSymLinks 
        AllowOverride None
        Require all granted
</Directory>
...
<Directory /var/www/site-damolab/>
        Options Includes FollowSymLinks 
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/site-damolab/datas/browse/>
             Options Indexes FollowSymLinks 
             AllowOverride None
             Require all granted
</Directory>

#### Butinable que pour ceux qui connaissent le nom du répertoire {secret}
> Alias /{secret} /var/www/site-{secret}
> <Directory /var/www/site-{secret}>
>         Options FollowSymLinks Includes Indexes
>         AllowOverride None
>         Require all granted
> </Directory>
...

#  vi /etc/apache2/sites-available/000-default.conf
...
 	DocumentRoot /var/www/site-test
...

#  vi /etc/apache2/sites-available/default-ssl.conf
...
 	DocumentRoot /var/www/site-test
...
<Directory /var/www/gci>
	SSLOptions +StdEnvVars
</Directory>
...
#  vi /etc/apache2/conf-available/serve-cgi-bin.conf
...
	<IfDefine ENABLE_USR_LIB_CGI_BIN>
		ScriptAlias /gci/ /var/www/gci/
		<Directory "/var/www/gci/">
			AllowOverride None
			Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
			Require all granted
		</Directory>
	</IfDefine>
...



       
3.7.6) Activation des CGI



Les CGI/BIN sont un mécanisme permettant de programmer sur le serveur des pages générées par du code.

Les scripts "CGI" permettent de gérer, depuis le répertoire CGI prévu à cet effet,
- une application web
- des interaction utilisateur (liens, formulaires, ...)
- intéragir avec une base de données ou d'autres composantes logiciel

DWB limite ces intéractions au strict minimum afin d'éviter les failles.

Activation des modules CGI dans apache2 :

root@pi-web:/etc/apache2# a2enmod 
...
Which module(s) do you want to enable (wildcards ok) ?



Entrer les modules à activer :
cgi cgid

Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
Module cgid already enabled
To activate the new configuration, you need to run:
  systemctl restart apache2


Les scripts CGI sont écrit en Ruby, installons ce manifique langage.

# apt-get update
# apt-get install ruby
# ruby --version


       
3.7.7) Activation des SSI (Server Side Include)



# cd /etc/apache2/mods-available
# cat > include.conf
<IfModule mod_include.c>
	AddType text/html .html
	AddOutputFilter INCLUDES .html
</IfModule>
^D

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/include.load
# ln -s ../mods-available/include.conf


       
3.7.8) redémarrage apache



Un redémarrage du serveur apache2 est nécessaire pour prise en compte de toute modification impliquant la configuration d'Apache :

# /etc/init.d/apache2 restart
OU
# service apache2 restart



4) Génération du Blog



4.8) Génération du site


cd .../damo-blog-engine
./dwb-generate.rb


Ce script effectue les actions suivantes :
  • les articles au format DWB, si modifiés, vont être convertis en HTML (grammaire dwb-generate.xbnf)
  • les commentaires au format DWB vont être générés en HTML
  • les indexes par Tag vont être regénéré en HTML
  • l'index principal (point d'entré du blog) pointera vers les articles.html et le menu des tags.


Par exemple l'article que vous lisez en ce moment :
.../site-test/dwb/20220717_DAMO-WEB-BLOG.dwb


La conversion du .dwb en .html :
.../site-test/dwb-gen/20220717_DAMO-WEB-BLOG.html



4.9) Synchronization entre le site local et site de production


La synchronisation pour chaque domain liés au serveur (HTML et données)
./dwb-sync-site.rb .../site-test/


La synchronisation des éléments CGI, habillage, ...

./dwb-sync.rb


Ce script réalise les actions de synchronisation (commandes rsync) suivantes :
  • prod >> local : /var/www/push-posts/ => nouveaux commentaires
  • prod >> local : .../site-test/datas/ => fichiers uploadés
  • local >> prod : .../site-test/dwb-gen/ => données générées (articles en HTML, commentaires, données)
  • local >> prod : /var/www/gci => scripts CGI-BIN


4.10) Approbation des commentaires (posts)


./dwb-choose-comment.rb



Ce script permet d'approuver les nouveaux commentaires postés dans l'article :
  • lorsqu'un commentaire est refusé, il est supprimé définitivement /!\\.
  • lorsqu'ils sont approuvés, les nouveaux posts sont ajoutés au fichier [article]. comment.*.dwb
    • le fichier [article]. post.*.dwb est supprimé


Lors de la regénération du blog:
  • le fichier [article]. comment.*.dwb est supprimé du répertoire push-posts
  • un fichier [article]. comment.*.html conserve les anciens et nouveaux posts validés


5) Fonctionnement du blog



5.11) page d'accueil, affichage des derniers articles et tableau des tags


La page principale affiche les 10 articles les plus rescents, cela s'appuie sur le CGI dwb-last-ten-summary.rb.
Le tableau des tags est produit au moment de la re-génération du site ( menu-left-tags.html).
Le menu à droite présent les liens externes au Blog ( menu-right.html).

5.12) Indexation des tags

Les tags (#TAG) sont positionnés à la fin de chaque article DWB pour mieux les catégoriser.
La génération des articles en HTML s'accompagne par la création de l'index générale unique gen-index-tags.html.
La navigation s'appuit sur le CGI gci/dwb-index-tag.rb qui selectionne les articles taggés.

5.13) Formulaire de soumission d'un commentaire


Le formulaire pour poster un commentaire en fin d'article s'appuie le CGI dwb-post-comment.rb) qui poste le commentaire au format DWB.
/!\\ Les nouveaux commentaires doivent être synchronisé de la production vers le poste local pour être activable dwb-sync-site.rb.
/!\\ Les nouveaux commentaires seront activés qu'une fois approuvé par le modérateur/administrateur dwb-choose-comment.rb.
/!\\ Enfin, les nouveaux commentaires ne seront visibles sur l'article qu'une fois l'article regénéré dwb-generate.rb.
/!\\ Les commentaires approuvés et générés sont conservés uniquement dans fichier .../dwb-gen/[article].comment.html.

5.14) Formulaire général de communication


Le formulaire pour poster un message général s'appuie le CGI gci/dwb-contact.rb ) qui poste le message au format DWB.

5.15) Transfer de fichier


Cette fonctionnalité s'appuie le CGI gci/dwb-push-secure-file.rb, elle est utile pour transmètre des données volumineuses point à point.
Pour cela, sélectionner le fichier et conserver le lien unique permettant d'accéder à la donnée.
La sécurité repose sur ce lien qui est généré aléatoirement et doit rester connu des utilisateurs finaux seulement.


6) Mise en oeuvre de plusieurs sites




La mise en place de plusieurs sites peut se faire en autorisant coté Apache le répertoire site-autre qui sera accessible depuis
une URL http://.../autre/.

Le répertoire site-autre devra être accessible dans /var/www dans notre exemple, ce peut être un lien symbolique.

Les scripts CGI ainsi que les posts sont partagés entre tous les sites, pour que cela fonctionne une notion de domain est
intégrés dans les CGI afin que l'indexation reste cloisonné dans le site correspondant à l'URL courante.
(Si par exemple vous navigez au travers des tags, vous ne souhaitez voir que ceux liés au site-autre).

6.16) Configuration Apache



# vi /etc/apache2/apache2.conf
...
#### Autre blog
> Alias /autre /var/www/site-autre
> <Directory /var/www/site-autre>
>         Options FollowSymLinks Includes
>         AllowOverride None
>         Require all granted
> </Directory>


6.17) Utilisation des scripts DWB pour un site donné



Le chemin relatif du blog configuré par défaut est déterminé par la variable WEBSITE du fichier de configuration dwb-cfg.rb.

Pour travailler sur le blog "autre", les commandes DWB doivent être appelé avec le chemin du blog autre.

# cd damo-web-glob
# ./dwb-sync.rb
# ./dwb-sync-site.rb      .../site-autre/
# ./dwb-choose-comment.rb .../site-autre/
#  ./dwb-generate.rb      .../site-autre/


Merci de poster un message si vous avez des questions ou pour partager votre retour d'expérience.


0.1) DamoLab


DamoLab@Sourceforge
DamoLab@DockerHub

0.2) Calculette composants radio


Electro-slide

0.3) Technologies


-- IA --
Mistral IA (le chat) (i)

-- Cyber-securité --
Shodan (i)11
Have I been pwned ? (i)
personal-data-leak-check
Osint
Zataz actualités

-- Adresses IP --
Mes Infos (IP, UA, ...)
info IP: WHOIS,ping,...
info IP: WHOIS,ping,...
info IP: Locallisation
info IP: abus
DNS checker

-- Mails --
GMX
Hushmail - mail temporaire sécurisé

encode/decode email for defeating bots
 $_='mailto: matt@org';s/(.)/chr(ord($1)+5)/eg;$_ 


-- Linux --
News LinuxFr
Mind-map Linux
Tutorials
crontab

-- Blogs Teks --
@TechWorldwithNana
@Cookieconnect
@GoCloudArchitects
@grafikart
@Underscore_
@cybernewsenfrancais


-- Geek Code --

décoder un GC

GCS d>+(---) s- a+ C++$ UL+>$ UOS++$
P++++>$ L++ E W++(++) N(+) o-- K+ w>--- O- M>+ PS+>+++ PE-- Y+@ t-(+) >5 X+ R>+ !tv b+
D---- D+ G e+++ h---- r+++ z+++



Rescue NEO...
(JS by Rezmason)


Nom/surnom:
Message:


revenir sur l'article
#DWB #DAMOLAB #LINUX #APACHE

Aucun commentaire.

dans
une
galaxy
lointaine
Charte du site damolab.zapto.org est motorisé par

"La force est une sorte de fluide crée par tout être vivant, une énergie qui nous entoure et nous pénètre, et qui maintient la galaxie en un tout unique."
- Obi-Wan à Luke Yoda