First commit on new repo

This commit is contained in:
Kevin Gonzalez 2024-08-18 17:16:35 +09:00
parent bd79bff804
commit 8d9a1348d3
12 changed files with 522 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.DS_Store

72
Makefile Normal file
View File

@ -0,0 +1,72 @@
PY?=
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
SERVER ?= "0.0.0.0"
PORT ?= 0
ifneq ($(PORT), 0)
PELICANOPTS += -p $(PORT)
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] serve and regenerate together '
@echo ' make devserver-global regenerate and serve on 0.0.0.0 '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
"$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
clean:
[ ! -d "$(OUTPUTDIR)" ] || rm -rf "$(OUTPUTDIR)"
regenerate:
"$(PELICAN)" -r "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
serve:
"$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
serve-global:
"$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b $(SERVER)
devserver:
"$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS)
devserver-global:
"$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b 0.0.0.0
publish:
"$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(PUBLISHCONF)" $(PELICANOPTS)
.PHONY: html help clean regenerate serve serve-global devserver devserver-global publish

Binary file not shown.

View File

@ -0,0 +1,104 @@
title: Partitionnement de Debian 12 en mode boot UEFI avec mise en place d'un Raid 1
date: 2024-08-18
slug: Partionnement-debian-12-UEFI-Raid-1
category: tutorial
author: Kevin Gonzalez
summary: Nous allons voir comment partitionner des disques durant linstallation de Debian 12 pour booter en mode UEFI et comment créer un Raid 1
Environnement de travail :
- Debian 12.6.0-amd64
- 2 disques SSD neuf de 1 To chacun
- Un mode de boot UEFI réglé dans le bios
# Avant-propos
Ce tutoriel a été réalisé avec la version **Debian 12.6.0** pour les architectures **Amd64**. Il devrait néanmoins fonctionner sans problèmes pour dautres versions.
Nous allons ici couvrir uniquement la partie “partitionnement” des disques. Ce nest pas un tutoriel pour apprendre à installer Debian depuis le début, même si, de nos jours, linstallation est plutôt claire et simple.
Tout dabord, assurez-vous davoir sélectionné **UEFI** (et non **Legacy**) pour le mode de boot dans votre bios (laccès au bios étant different pour chaque constructeurs, merci de rechercher comment accéder au vôtre en fonction du modele de votre machine).
Assurez-vous aussi que vos disques soient reconnu par le bios. Si jamais vous avez des disques dur ou des disques SSD classique, le mode **Sata** devrait convenir. Néanmoins, si vous avez des disques de type nvme, il pourrait être nécessaire de choisir **AHCI** pour avoir accès aux disques durant le partitionnement.
Il existe de nombreuses raisons qui pourraient vous pousser à installer Linux en mode *UEFI* et non *Legacy*, par exemple la présence dun Windows en dual boot sur votre machine ou bien tout simplement le fait que votre bios ne propose pas de boot en mode *Legacy*.
Si jamais vous souhaitez installer Linux comme seul système dexploitation de votre ordinateur, il peut être interessant de désactiver le **secure boot**.
Vous êtes prêt ?
## Préparation des différentes partitions
Une fois arrivé au moment du partitionnement, vous devriez vous retrouver avec 2 disques sans aucune partition.
Nous allons ici les appeler,
- *sda* pour le premier disque
- *sdb* pour le second disque
Sélectionnez tout dabord *sda* et appuyez sur *Entrée*. On va alors vous demander si vous souhaitez créer une table de partition vide. Sélectionner “oui” puis faite de même pour *sdb*.
Vous devriez alors avoir 2 espaces disponible de respectivement environ 1000 go.
Nous allons préparer sda. Inutile ici de sélectionner les points de montages.
Attention, il est très important que la partitions pour *UEFI* soit en premier
Créer comme suit:
- Une partition primaire de 512 mo en *FAT 32* pour */boot/efi*
- Une partition secondaire de 1 Go en *Ext4* pour */boot*
- Une partition secondaire de 5 Go pour le *swap*
- Une partition secondaire de 993.5 go (le reste de lespace disponible) en *Ext4* pour */*
Si vous aviez des disques de 500 go, la dernière partitions devrait faire environ 493.5 go
Faites de meme pour sdb mais dans la partition */boot/efi* (Nous ne pouvons pas linclure dans le RAID 1). Attention a bien avoir ici exactement les même tailles de partitions pour les 3 autres.
Vous devriez donc avoir
- *sda1* 512 mo *FAT 32* pour */boot/efi*
- *sda2* 1 go *Ext4* pour */boot*
- *sda3* 5 go *swap*
- *sda4* 993.5 go *Ext4* pour */*
- *sdb1* 1 go *Ext4* pour */boot*
- *sdb2* 5 go *swap*
- **sdb3** 993.5 go *Ext4* pour */*
## Preparation du Raid 1
Une fois terminé, rendez-vous tout en haut dans *Configure Software RAID*, puis sélectionnez *yes* pour formater les différentes partitions que vous avez créé.
Sélectionnez ensuite *Create MD device* puis *RAID 1*.
Ensuite, nous allons choisir *2* pour la “matrice Raid" (Raid1 array) car nous allons sélectionner 2 partitions pour créer une nouvelle partition Raid.
Sélectionnez ensuite les 2 partitions de 1 go (*sda2* et *sdb1* dans notre exemple) puis appuyez sur *continue*. Un message vous demande alors si vous souhaitez écrire les changements et configurer le RAID. Choisissez **oui**.
Puis, retournez sur *create MD device* et faite de même pour les 2 autres partitions (swap et /).
Si tout ce passe bien, vous devriez donc avoir un nouveau disque virtuel qui est apparu appelé RAID 1 et contenant 3 partitions, dans le même ordre que les disques précédents. Si jamais vous avez fait une erreur, vous pouvez toujours sélectionner *Delete MD Device* pour supprimer les partitions que vous souhaitez.
Une fois votre 3 partitions RAID créée, nous allons attaquer la dernière étape : Le système de fichier et le point de montage.
Faites comme suit:
- Partition de 1 go en Ext4 pour /boot (partition md0)
- Partition de 5 go en swap (partition md1)
- Partition de 993.5 go en Ext4 pour / (partition md2)
Attention, verifiez bien que vous possédez toujours votre partition en FAT 32 avec un point de montage /boot/efi dans votre premier disque !
Si tout correspond, vous pouvez valider et terminer votre installation.
Vous devriez pouvoir booter sans problème au redémarrage de votre machine.
## Vérifications après reboot
Une fois connecte, vous pouvez admirer vos partitions RAID avec la commande
lsblk'
Ou bien avec
cat /etc/mdadm/mdadm.conf'
Si vous souhaitez consulter létat de votre RAID
cat /proc/mdstat'
Verifiez bien que chacun partition est [2/2].
Enfin, si vous souhairez par la suite modifier votre RAID, la commande mdadm sera votre ami donc consultez son manuel plutôt bien fourni
Si vous rencontrer des problèmes, vous pouvez me contacter a ladresse email qui se trouve en bas de ce post.
A bientôt !

11
content/pages/aboutme.md Normal file
View File

@ -0,0 +1,11 @@
title: Qui est Supmagie ?
date: 2024-01-07
slug: aboutme
## Supmagie
Bonjour a toutes et a tous !
## Pourquoi ce blog ?
Petit blog personnel

7
content/pages/cv.md Normal file
View File

@ -0,0 +1,7 @@
title: CV
date: 2024-01-07
slug: cv
## Photos les plus recentes :
Voici mes photos les plus recentes

7
content/pages/galerie.md Normal file
View File

@ -0,0 +1,7 @@
title: Galerie photo
date: 2024-01-07
slug: galerie
## Photos les plus recentes :
Voici mes photos les plus recentes

View File

@ -0,0 +1,88 @@
title: Une nouvelle aventure
date: 2024-06-14
slug: Une-nouvelle-aventure
category: news
author: Kevin Gonzalez
summary: Ceci est le premier article que je publie sur mon blog personnel. Jy explique mes motivations sur la création de ce blog, je me présente à vous et je vous parle de mes passions.
Je vous avoue que je ne sais pas trop par quoi commencer. Jai beau réfléchir, mais je ne sais pas comment aborder le début de ce texte qui marque peut-être celui dune longue lignée (on peut toujours espérer).
En effet, jai toujours voulu, dune manière ou dune autre, être présent sur internet. Jai tenté de faire quelques vidéos dans mon coin, mais je n'ai jamais eu le courage de les publier sur internet. Elles sont restées dans des disques durs jusquà ce que jarrive même à perdre les disques dur eux-mêmes. De ce fait, je nai jamais embrassé ne serait-ce que le soupçon d'un succès.
Jai aussi tenté de créer un site web il y a de cela 15 ans grâce au tutoriel du Site du zéro (actuellement OpenClassrooms), mais je nai jamais vraiment publié de contenu dessus et il sest perdu dans les milliers dautres octets de projet abandonnés composés de 0 et 1.
Jai aussi géré un temps le site web de la chaîne YouTube de mon frère. Mais devant le succès peu relatif de sa chaîne et son envie progressive darrêter de faire des vidéos, jai aussi laissé tomber.
Enfin, pour prendre un dernier exemple, jai lancé ma capsule Gemini grâce à laide mon ami Vinishor, mais jy ai publié seulement 2 articles. Même si jai des raisons qui mont poussé à ne pas continuer, on pourrait croire que le tableau de ma vie ne se compose que déchecs. Mais non, car même quand je nétais pas devant les écrans, je me postais devant des livres et des manuels pour apprendre la langue japonaise et réaliser le rêve qui est devenu réalité de vivre au Japon. Je vous parlerai de cette aventure en temps voulu.
Mais alors, pourquoi croire que cette fois-ci cest la bonne ; que je me lance vraiment sur internet ; que je ne vais pas une énième fois ranger ce projet de blog dans les placards ?
## La création dun site personnel
### Le petit collégien
Le site sur lequel vous êtes actuellement, et qui est, pour le moment plus un blog personnel quun site web, a été créé de mes mains à partir dune page blanche en HTML5 et CSS3 puis adapté pour fonctionner avec le générateur de sites statiques Pelican, me permettant de publier facilement des articles.
Mes premiers projets de sites web remontant au collège, je nétais pas la même personne que je suis aujourdhui, je navais pas forcément les mêmes centres dintérêt, les mêmes compétences et surtout la même motivation.
Même si un blog personnel semble quelque chose de simple pour les plus doués dentre vous, cela ma pris beaucoup de temps. Tout dabord, jai dû mimmerger dans le monde de linformatique pour y apprendre la programmation web. Mais je ne voulais pas juste un blog personnel, je voulais aussi lhéberger chez moi, avoir le contrôle de ma machine et de mes données. Donc, jai dû découvrir Linux, le tester puis linstaller. Apprendre la ligne de commande, les services, le fonctionnement dinternet et des réseaux, acheter du matériel…. Pour finalement, aimer ça et même commencer à travailler dans ce domaine.
Jai aujourdhui le plaisir de pouvoir dire que jai un blog personnel que jhéberge à la maison !
### La capsule Gemini
Je pense que je nai pas publié beaucoup darticles sur ma capsule Gemini pour plusieurs raisons, la plus grosse étant mon installation au Japon. Mais aussi plus indirectement parce que je navais pas le matériel et le contrôle total pour gérer mes données. Même si ce service mest proposé gratuitement par Vinishor (je len remercie grandement) il ne mapporte pas une attache émotionnelle comme je lai avec mon blog. Cest plus simple pour moi de me livrer, de savoir que je contrôle le contenant et le contenu.
### Cette fois-ci, cest la bonne
Je pense que cest le fait que jai dû piocher dans de nombreux domaines, apprendre de nouvelles compétences et surtout de lavoir fait moi-même qui me permet davoir une certaine attache à ce bout de code. Jai certes été conseillé et aiguillé maintes et maintes fois pour mener à bien ce projet, jai la véritable sensation davoir fourni un réel effort pour y arriver.
Voilà donc pourquoi jai la conviction que cette fois-ci cest la bonne et que ce projet va traverser le temps.
## Mes passions et pourquoi linformatique ?
Pour vous parler rapidement de moi, jai actuellement 27 ans et après des études de langue japonaise entre 2015 et 2021 je décide finalement, pendant cette période difficile de la Covid 19, de me réconcilier avec mon grand ami et de mintéresser un peu plus à linformatique.
### La redécouverte dune passion
En effet, ce grand ami que jai rencontré à mon entrée à luniversité était un peu mystérieux pour moi au début. Alors que tout le monde ne parlait que de Japon, de manga et danime, ce curieux personnage étudiait comme nous la langue nippone, mais était aussi régulièrement la tête devant un écran, faisant défiler des lignes de texte blanches sur un fond noir (en train de pirater le réseau de la fac à nen pas douter). Il parlait aussi de Linux, d'Apache2 et autre TCP/IP. Une langue complique, me direz-vous.
Alors, même si sa passion était différente de celle de tous les autres, jai aussi appris à connaître cette personne et à apprécier qui il était vraiment, sans jamais me pencher plus que ça pour voir ce que pouvoir bien vouloir dire ces lignes de commande. Nous avons fait de nombreuses choses ensemble, parlé de nombreux sujets, parfois même eu des disputes. Nous avons même eu le plaisir de nous rendre 1 an ensemble à lautre bout du monde en échange universitaire.
Puis, les circonstances ont fait que nous nous sommes éloignés, et pas dans les meilleurs termes.
Jai longtemps nourri lenvie de lui parler, mais javais trop de fierté, j'avais le sentiment de me rabaisser. Puis, les mois défilent, lenvie de renouer avec ses amis sest fait plus forte et jai décidé de mettre de côté ma fierté mal placée pour reprendre contact. Ce ne fut pas facile, mais jétais content de lavoir fait, dautant plus que lui-même a répondu à lappel.
Puis, notre amitié renouant et voulant découvrir de nouvelles choses, j'ai pris un peu de temps pour découvrir sa passion. Il ma aidé et guidé dans ce monde de linformatique, a été là pour répondre à mes questions et mes craintes. Nous avons donc pu installer Linux sur ma machine et jai commencé à taper mes premières commandes grâce au tutoriel de OpenClassrooom [disponible ici](https://openclassrooms.com/fr/courses/6173491-apprenez-a-utiliser-la-ligne-de-commande-dans-un-terminal). Jai pris de plus en plus de plaisir à contrôler ma machine, à entrer des commandes dans le terminal, à lancer mes premiers services. Jétais piqué. Sans men rendre compte jétais devenu ce mystérieux personnage au premier rang de lamphithéâtre, tapant frénétiquement sur son clavier tout en prenant du plaisir à faire défiler du texte blanc sur un fond noir.
Et vous savez quoi, jaimais vraiment ça ! Japprenais et japprends encore chaque jour pour devenir meilleur. Alors je ne dis pas que maintenant, c'est facile, que je suis motivé tous les jours, loin de là. Mais quand je me mets devant mon ordinateur et que je commence à faire résonner le son mécanique de ma machine d'une pression de doigts, jy prends du plaisir.
Alors, merci à cet ami, merci à internet pour me permettre de développer mes compétences et merci à tous ceux qui mont motivé et me motive à continuer dans cette voie.
## Details sur le blog
### Mais que vais-je trouver ici ?
Avec ce blog, je souhaite avant tout me livrer, parler de mes pensées, mes idées, mes découvertes, mais aussi mes problèmes, mes craintes et mes doutes.
Jy parle de moi, dinformatique, de livre, du Japon, de nourriture….
Jy posterai des tutoriels, des tests. Je mettrai à lécrit ce qui se passe dans ma tête.
Je nai en réalité pas dautre but que celui de parler de ce que jai envie. Vous nêtes, bien entendu, pas obligé de tout lire, vous pouvez donner votre avis, répondre à mes prises de position et à mes craintes. Comme je suis libre décrire ce que je souhaite, vous êtes libre aussi de me partager avec moi et les autres, ce qui vous traverse lesprit (en toute bienveillance bien évidemment).
Concernant les articles en eux-mêmes, je mengage à respecter une certaine déontologie et à ne pas embellir la réalité, à être honnête le plus possible et à ne pas laisser acheter ma parole.
En fait, je ne révolutionne rien du tout avec ce blog. Cest juste celui dun homme qui aime linformatique et qui souhaite partager sa passion avec tous ceux qui veulent lentendre.
Pour finir avec ce premier article, jaimerais vous partager quelques blogs que je lis et fréquente de temps en temps. Je pense que beaucoup dentre vous les connaissent déjà, mais on ne sait jamais.
### Blogs à suivre
* Tout dabord, celui dun pionnier de GNU/Linux sur linternet français, Frederic Bézies. En plus, si vous aimez les jeux-vidéos rétro sur micro ordinateurs, cela pourrait aussi beaucoup vous intéresser puisque ces dernières années il sest plongé dans ce monde passionnant.
[Frederic Bézies](https://blog.fredericbezies-ep.fr/)
* Ensuite, le blog de Ploum. Aussi pionnier dans le domaine des logiciels libres et de la liberté sur internet. Il essaie de décrocher de son addiction à internet et il est aussi très bon écrivain.
[PLOUM](https://ploum.net/)
Pour mieux le connaître, je vous recommande cette conférence qu'il a tenue il y a de cela quelque temps et qui permet de mieux comprendre sa façon de penser.
[La conférence](https://www.youtube.com/watch?v=mXuPJtV07vE&pp=ygUTcGxvdW0gbGlvbmVsIGRyaWNvdA%3D%3D)
Enfin, celui de mon très cher ami et conseillé, Vinishor. Vous y trouverez aussi ses pensées et des tutoriels, mais aussi des poèmes et du Linux. Un must-have depuis 2015 !
[Vinishor](https://blog.vinishor.xyz/)
## Conclusion
Bon et bien finalement, on dirait que jai réussi à le commencer ce premier article ; et même à le finir. Si cest pas beau ça !
Cest vrai que le plus difficile, c'est toujours de commencer ! Alors si vous aussi vous voulez créer un blog ou que vous avez un projet qui vous tient à cœur, le mieux est de commencer maintenant.
Eloignez vous de votre PC, prenez un papier et un crayon et commencez à écrire des choses. Même si jaime linformatique, ça fait du bien de séloigner un peu des écrans de temps en temps.
On se retrouve dans un nouvel article prochainement. A bientôt !

50
pelicanconf.py Normal file
View File

@ -0,0 +1,50 @@
AUTHOR = 'Kevin Gonzalez'
SITENAME = 'microweb'
SITEURL = ""
PATH = "content"
TIMEZONE = 'Asia/Tokyo'
DEFAULT_LANG = 'fr'
# THEME
THEME = 'microtheme'
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Blogroll
LINKS = (
("Pelican", "https://getpelican.com/"),
("Python.org", "https://www.python.org/"),
("Jinja2", "https://palletsprojects.com/p/jinja/"),
("You can modify those links in your config file", "#"),
)
# Social widget
SOCIAL = (
("You can add links in your config file", "#"),
("Another social link", "#"),
)
# Directory for posts
ARTICLE_SAVE_AS = 'posts/{slug}.html'
ARTICLE_URL = 'posts/{slug}.html'
# Static folders
STATIC_PATHS = [
'fonts',
]
DEFAULT_PAGINATION = 10
# Uncomment following line if you want document-relative URLs when developing
# RELATIVE_URLS = True

22
publishconf.py Normal file
View File

@ -0,0 +1,22 @@
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
# If your site is available via HTTPS, make sure SITEURL begins with https://
SITEURL = ""
RELATIVE_URLS = False
FEED_ALL_ATOM = "feeds/all.atom.xml"
CATEGORY_FEED_ATOM = "feeds/{slug}.atom.xml"
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
# DISQUS_SITENAME = ""
# GOOGLE_ANALYTICS = ""

13
script.sh Normal file
View File

@ -0,0 +1,13 @@
#!/bin/bash
# Clean output folder
rm -r /root/pelican/output/*
# Generate the website
pelican
# Clean html folder
rm -r /usr/share/nginx/html/*
# Move the website from output folder to html folder
mv output/* /usr/share/nginx/html/

147
tasks.py Normal file
View File

@ -0,0 +1,147 @@
import os
import shlex
import shutil
import sys
import datetime
from invoke import task
from invoke.main import program
from invoke.util import cd
from pelican import main as pelican_main
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
from pelican.settings import DEFAULT_CONFIG, get_settings_from_file
OPEN_BROWSER_ON_SERVE = True
SETTINGS_FILE_BASE = "pelicanconf.py"
SETTINGS = {}
SETTINGS.update(DEFAULT_CONFIG)
LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE)
SETTINGS.update(LOCAL_SETTINGS)
CONFIG = {
"settings_base": SETTINGS_FILE_BASE,
"settings_publish": "publishconf.py",
# Output path. Can be absolute or relative to tasks.py. Default: 'output'
"deploy_path": SETTINGS["OUTPUT_PATH"],
# Host and port for `serve`
"host": "localhost",
"port": 8000,
}
@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG["deploy_path"]):
shutil.rmtree(CONFIG["deploy_path"])
os.makedirs(CONFIG["deploy_path"])
@task
def build(c):
"""Build local version of site"""
pelican_run("-s {settings_base}".format(**CONFIG))
@task
def rebuild(c):
"""`build` with the delete switch"""
pelican_run("-d -s {settings_base}".format(**CONFIG))
@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
pelican_run("-r -s {settings_base}".format(**CONFIG))
@task
def serve(c):
"""Serve site at http://$HOST:$PORT/ (default is localhost:8000)"""
class AddressReuseTCPServer(RootedHTTPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(
CONFIG["deploy_path"],
(CONFIG["host"], CONFIG["port"]),
ComplexHTTPRequestHandler,
)
if OPEN_BROWSER_ON_SERVE:
# Open site in default browser
import webbrowser
webbrowser.open("http://{host}:{port}".format(**CONFIG))
sys.stderr.write("Serving at {host}:{port} ...\n".format(**CONFIG))
server.serve_forever()
@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)
@task
def preview(c):
"""Build production version of site"""
pelican_run("-s {settings_publish}".format(**CONFIG))
@task
def livereload(c):
"""Automatically reload browser tab upon file modification."""
from livereload import Server
def cached_build():
cmd = "-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true"
pelican_run(cmd.format(**CONFIG))
cached_build()
server = Server()
theme_path = SETTINGS["THEME"]
watched_globs = [
CONFIG["settings_base"],
f"{theme_path}/templates/**/*.html",
]
content_file_extensions = [".md", ".rst"]
for extension in content_file_extensions:
content_glob = "{}/**/*{}".format(SETTINGS["PATH"], extension)
watched_globs.append(content_glob)
static_file_extensions = [".css", ".js"]
for extension in static_file_extensions:
static_file_glob = f"{theme_path}/static/**/*{extension}"
watched_globs.append(static_file_glob)
for glob in watched_globs:
server.watch(glob, cached_build)
if OPEN_BROWSER_ON_SERVE:
# Open site in default browser
import webbrowser
webbrowser.open("http://{host}:{port}".format(**CONFIG))
server.serve(host=CONFIG["host"], port=CONFIG["port"], root=CONFIG["deploy_path"])
@task
def publish(c):
"""Publish to production via rsync"""
pelican_run("-s {settings_publish}".format(**CONFIG))
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'-e "ssh -p {ssh_port}" '
"{} {ssh_user}@{ssh_host}:{ssh_path}".format(
CONFIG["deploy_path"].rstrip("/") + "/", **CONFIG
)
)
def pelican_run(cmd):
cmd += " " + program.core.remainder # allows to pass-through args to pelican
pelican_main(shlex.split(cmd))