fix: logo wiki servi depuis docs/assets/ (hors git, généré par build-assets.py)
overrides/partials/logo.html : remplace l'URL static.alpinux.org par
{{ base_url }}/assets/alpinux-logo.png — le logo est inclus dans le
build MkDocs, pas servi depuis le CDN.
scripts/build-assets.py : sépare les deux destinations :
- docs/assets/alpinux-logo.png (200×200, pour le wiki)
- /tmp/alpinux-static-assets/ (512px + favicons → static.alpinux.org/logo/)
Plus d'argument --out ; les chemins sont fixes et documentés.
docs/technique/deploiement-wiki.md :
- schéma mis à jour (SVG → build-assets.py → PNG → mkdocs build)
- ajout de l'étape 3 "Générer le logo" dans la procédure manuelle
- script deploy-wiki.sh inclut python3 scripts/build-assets.py
- tableau résumé mis à jour
- prérequis : ajout pillow et chromium
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
096edc378e
commit
14cb68c4c5
3 changed files with 79 additions and 34 deletions
|
|
@ -15,13 +15,19 @@ Cette page décrit comment mettre en ligne une nouvelle version du wiki après a
|
||||||
## Vue d'ensemble
|
## Vue d'ensemble
|
||||||
|
|
||||||
```
|
```
|
||||||
|
docs/assets/alpinux-logo.svg (source, dans git)
|
||||||
|
│
|
||||||
|
│ build-assets.py (à faire si le SVG a changé)
|
||||||
|
▼
|
||||||
|
docs/assets/alpinux-logo.png (généré, hors git) + /tmp/ → static.alpinux.org
|
||||||
|
│
|
||||||
Gitea (origin/main)
|
Gitea (origin/main)
|
||||||
│
|
│
|
||||||
│ git pull (sur le serveur)
|
│ git pull (sur le serveur)
|
||||||
▼
|
▼
|
||||||
Dépôt local serveur
|
Dépôt local serveur
|
||||||
│
|
│
|
||||||
│ mkdocs build
|
│ mkdocs build --strict
|
||||||
▼
|
▼
|
||||||
/var/www/clients/client1/web2/web/wiki-static/
|
/var/www/clients/client1/web2/web/wiki-static/
|
||||||
│
|
│
|
||||||
|
|
@ -30,15 +36,26 @@ Dépôt local serveur
|
||||||
https://wiki.alpinux.org
|
https://wiki.alpinux.org
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! info "Images et logo"
|
||||||
|
Les fichiers PNG ne sont **pas stockés dans git**. Le logo (`docs/assets/alpinux-logo.png`)
|
||||||
|
est généré par `build-assets.py` avant le build MkDocs. Les autres images des articles
|
||||||
|
sont hébergées sur **static.alpinux.org**.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Prérequis côté serveur
|
## Prérequis côté serveur
|
||||||
|
|
||||||
- Python 3 et pip installés
|
- Python 3 et pip installés
|
||||||
- MkDocs et le thème Material installés :
|
- MkDocs, le thème Material et Pillow installés :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install mkdocs-material
|
pip install mkdocs-material pillow
|
||||||
|
```
|
||||||
|
|
||||||
|
- Chromium installé (pour `build-assets.py`) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install chromium
|
||||||
```
|
```
|
||||||
|
|
||||||
- Un clone du dépôt présent sur le serveur (à faire une seule fois) :
|
- Un clone du dépôt présent sur le serveur (à faire une seule fois) :
|
||||||
|
|
@ -73,7 +90,24 @@ git pull
|
||||||
|
|
||||||
Vérifiez que la commande affiche bien les fichiers modifiés. Si elle affiche `Already up to date`, le serveur est déjà à jour.
|
Vérifiez que la commande affiche bien les fichiers modifiés. Si elle affiche `Already up to date`, le serveur est déjà à jour.
|
||||||
|
|
||||||
### 3. Lancer le build MkDocs
|
### 3. Générer le logo (si le SVG a changé)
|
||||||
|
|
||||||
|
Le logo PNG n'est pas dans git — il est généré depuis le SVG source :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 scripts/build-assets.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Cette commande produit :
|
||||||
|
|
||||||
|
- `docs/assets/alpinux-logo.png` — logo 200×200 inclus dans le wiki
|
||||||
|
- `/tmp/alpinux-static-assets/` — logo 512px + favicons à uploader sur `static.alpinux.org/logo/`
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Si seul le contenu Markdown a changé (aucune modification du SVG), cette étape peut être ignorée.
|
||||||
|
Le `docs/assets/alpinux-logo.png` du précédent build est toujours présent sur le serveur.
|
||||||
|
|
||||||
|
### 4. Lancer le build MkDocs
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdocs build --strict
|
mkdocs build --strict
|
||||||
|
|
@ -91,7 +125,7 @@ INFO - Documentation built in X.XX seconds
|
||||||
|
|
||||||
Le dossier `site_dir` est maintenant mis à jour. Apache sert immédiatement les nouveaux fichiers — **pas besoin de redémarrer Apache**.
|
Le dossier `site_dir` est maintenant mis à jour. Apache sert immédiatement les nouveaux fichiers — **pas besoin de redémarrer Apache**.
|
||||||
|
|
||||||
### 4. Vérifier en ligne
|
### 5. Vérifier en ligne
|
||||||
|
|
||||||
Ouvrez [https://wiki.alpinux.org](https://wiki.alpinux.org) et vérifiez que la modification apparaît bien.
|
Ouvrez [https://wiki.alpinux.org](https://wiki.alpinux.org) et vérifiez que la modification apparaît bien.
|
||||||
|
|
||||||
|
|
@ -111,6 +145,9 @@ echo "==> Récupération des modifications..."
|
||||||
cd "$WIKI_DIR"
|
cd "$WIKI_DIR"
|
||||||
git pull
|
git pull
|
||||||
|
|
||||||
|
echo "==> Génération du logo..."
|
||||||
|
python3 scripts/build-assets.py
|
||||||
|
|
||||||
echo "==> Build MkDocs..."
|
echo "==> Build MkDocs..."
|
||||||
mkdocs build --strict
|
mkdocs build --strict
|
||||||
|
|
||||||
|
|
@ -205,6 +242,7 @@ Ouvrez [http://localhost:8000](http://localhost:8000) — MkDocs recharge automa
|
||||||
| Action | Commande |
|
| Action | Commande |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Mettre à jour le dépôt serveur | `git pull` |
|
| Mettre à jour le dépôt serveur | `git pull` |
|
||||||
|
| Générer le logo PNG (si SVG modifié) | `python3 scripts/build-assets.py` |
|
||||||
| Construire et déployer | `mkdocs build --strict` |
|
| Construire et déployer | `mkdocs build --strict` |
|
||||||
| Tester en local | `mkdocs serve` |
|
| Tester en local | `mkdocs serve` |
|
||||||
| Déployer via script | `/home/alpinux/deploy-wiki.sh` |
|
| Déployer via script (tout en un) | `/home/alpinux/deploy-wiki.sh` |
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
<img src="https://static.alpinux.org/logo/alpinux-logo.png"
|
<img src="{{ base_url }}/assets/alpinux-logo.png"
|
||||||
alt="Alpinux"
|
alt="Alpinux"
|
||||||
class="md-logo__image">
|
class="md-logo__image">
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,13 @@ Génère les assets binaires (logo PNG + favicons) depuis la source SVG.
|
||||||
Dépendances : Pillow, chromium
|
Dépendances : Pillow, chromium
|
||||||
|
|
||||||
Usage :
|
Usage :
|
||||||
python3 scripts/build-assets.py [--out /chemin/de/sortie]
|
python3 scripts/build-assets.py
|
||||||
|
|
||||||
Les fichiers générés sont ensuite uploadés sur static.alpinux.org/logo/
|
Sorties :
|
||||||
|
docs/assets/alpinux-logo.png → logo 200×200 inclus dans le wiki (MkDocs)
|
||||||
|
/tmp/alpinux-static-assets/ → favicons + logo 512px à uploader sur static.alpinux.org/logo/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
import os
|
import os
|
||||||
|
|
@ -19,6 +20,8 @@ from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
REPO = Path(__file__).resolve().parent.parent
|
REPO = Path(__file__).resolve().parent.parent
|
||||||
SVG = REPO / "docs/assets/alpinux-logo.svg"
|
SVG = REPO / "docs/assets/alpinux-logo.svg"
|
||||||
|
DOCS_OUT = REPO / "docs/assets"
|
||||||
|
CDN_OUT = Path("/tmp/alpinux-static-assets")
|
||||||
FONT_R = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf"
|
FONT_R = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf"
|
||||||
FONT_B = "/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf"
|
FONT_B = "/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf"
|
||||||
COLOR = (15, 78, 143) # #0f4e8f
|
COLOR = (15, 78, 143) # #0f4e8f
|
||||||
|
|
@ -74,21 +77,22 @@ def add_text(canvas: Image.Image) -> Image.Image:
|
||||||
return canvas
|
return canvas
|
||||||
|
|
||||||
|
|
||||||
def build_logo(out_dir: Path):
|
def build_logo_wiki(docs_out: Path):
|
||||||
"""Build 200×200 logo PNG."""
|
"""Build 200×200 logo PNG → docs/assets/ (servi par MkDocs, non commité)."""
|
||||||
shapes = render_shapes(SVG, 200, 164)
|
shapes = render_shapes(SVG, 200, 164)
|
||||||
canvas = Image.new("RGBA", (200, 200), (255, 255, 255, 255))
|
canvas = Image.new("RGBA", (200, 200), (255, 255, 255, 255))
|
||||||
canvas.paste(shapes, (0, 0))
|
canvas.paste(shapes, (0, 0))
|
||||||
canvas = add_text(canvas)
|
canvas = add_text(canvas)
|
||||||
path = out_dir / "alpinux-logo.png"
|
path = docs_out / "alpinux-logo.png"
|
||||||
canvas.convert("RGB").save(path)
|
canvas.convert("RGB").save(path)
|
||||||
print(f" {path} (200×200)")
|
print(f" {path} (200×200) → wiki MkDocs")
|
||||||
|
|
||||||
# 512px high-res version
|
|
||||||
|
def build_logo_cdn(cdn_out: Path):
|
||||||
|
"""Build 512×512 logo PNG → CDN (static.alpinux.org/logo/)."""
|
||||||
shapes512 = render_shapes(SVG, 512, 421)
|
shapes512 = render_shapes(SVG, 512, 421)
|
||||||
canvas512 = Image.new("RGBA", (512, 512), (255, 255, 255, 255))
|
canvas512 = Image.new("RGBA", (512, 512), (255, 255, 255, 255))
|
||||||
canvas512.paste(shapes512, (0, 0))
|
canvas512.paste(shapes512, (0, 0))
|
||||||
# Scale text proportionally
|
|
||||||
draw = ImageDraw.Draw(canvas512)
|
draw = ImageDraw.Draw(canvas512)
|
||||||
size = 77
|
size = 77
|
||||||
f_reg = ImageFont.truetype(FONT_R, size)
|
f_reg = ImageFont.truetype(FONT_R, size)
|
||||||
|
|
@ -103,13 +107,13 @@ def build_logo(out_dir: Path):
|
||||||
bb = f.getbbox(char)
|
bb = f.getbbox(char)
|
||||||
draw.text((x - bb[0], y - bb[1]), char, font=f, fill=COLOR)
|
draw.text((x - bb[0], y - bb[1]), char, font=f, fill=COLOR)
|
||||||
x += w
|
x += w
|
||||||
path512 = out_dir / "alpinux-logo-512.png"
|
path512 = cdn_out / "alpinux-logo-512.png"
|
||||||
canvas512.convert("RGB").save(path512)
|
canvas512.convert("RGB").save(path512)
|
||||||
print(f" {path512} (512×512)")
|
print(f" {path512} (512×512) → static.alpinux.org/logo/")
|
||||||
|
|
||||||
|
|
||||||
def build_favicons(out_dir: Path):
|
def build_favicons(cdn_out: Path):
|
||||||
"""Build favicon PNG set + .ico from the icon portion of the SVG."""
|
"""Build favicon PNG set + .ico → CDN (static.alpinux.org/logo/)."""
|
||||||
icon_src = render_shapes(SVG, 200, 164).crop((0, 0, 164, 164))
|
icon_src = render_shapes(SVG, 200, 164).crop((0, 0, 164, 164))
|
||||||
|
|
||||||
sizes = {
|
sizes = {
|
||||||
|
|
@ -124,31 +128,34 @@ def build_favicons(out_dir: Path):
|
||||||
img = icon_src.resize((sz, sz), Image.LANCZOS)
|
img = icon_src.resize((sz, sz), Image.LANCZOS)
|
||||||
bg = Image.new("RGBA", (sz, sz), (255, 255, 255, 255))
|
bg = Image.new("RGBA", (sz, sz), (255, 255, 255, 255))
|
||||||
bg.paste(img, (0, 0))
|
bg.paste(img, (0, 0))
|
||||||
p = out_dir / name
|
p = cdn_out / name
|
||||||
bg.save(p)
|
bg.save(p)
|
||||||
imgs[sz] = bg
|
imgs[sz] = bg
|
||||||
print(f" {p} ({sz}×{sz})")
|
print(f" {p} ({sz}×{sz}) → static.alpinux.org/logo/")
|
||||||
|
|
||||||
ico = out_dir / "favicon.ico"
|
ico = cdn_out / "favicon.ico"
|
||||||
imgs[16].save(ico, format="ICO", sizes=[(16,16),(32,32),(48,48)],
|
imgs[16].save(ico, format="ICO", sizes=[(16,16),(32,32),(48,48)],
|
||||||
append_images=[imgs[32], imgs[48]])
|
append_images=[imgs[32], imgs[48]])
|
||||||
print(f" {ico} (multi-size: 16+32+48)")
|
print(f" {ico} (multi-size: 16+32+48) → static.alpinux.org/logo/")
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
DOCS_OUT.mkdir(parents=True, exist_ok=True)
|
||||||
parser.add_argument("--out", default="/tmp/alpinux-static-assets",
|
CDN_OUT.mkdir(parents=True, exist_ok=True)
|
||||||
help="Répertoire de sortie (défaut: /tmp/alpinux-static-assets)")
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
out_dir = Path(args.out)
|
|
||||||
out_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
print("Génération des assets Alpinux...")
|
print("Génération des assets Alpinux...")
|
||||||
build_logo(out_dir)
|
print()
|
||||||
build_favicons(out_dir)
|
print("── Logo wiki (docs/assets/) ──")
|
||||||
print(f"\nFichiers dans : {out_dir}")
|
build_logo_wiki(DOCS_OUT)
|
||||||
|
print()
|
||||||
|
print("── CDN static.alpinux.org/logo/ ──")
|
||||||
|
build_logo_cdn(CDN_OUT)
|
||||||
|
build_favicons(CDN_OUT)
|
||||||
|
print()
|
||||||
|
print(f"Fichiers CDN dans : {CDN_OUT}")
|
||||||
print("À uploader sur : static.alpinux.org/logo/")
|
print("À uploader sur : static.alpinux.org/logo/")
|
||||||
|
print()
|
||||||
|
print("Ensuite : mkdocs build")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue