diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..252df93 --- /dev/null +++ b/Makefile @@ -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 \ No newline at end of file diff --git a/__pycache__/pelicanconf.cpython-311.pyc b/__pycache__/pelicanconf.cpython-311.pyc new file mode 100644 index 0000000..3a6bee7 Binary files /dev/null and b/__pycache__/pelicanconf.cpython-311.pyc differ diff --git a/content/debian-12-uefi-raid-1.md b/content/debian-12-uefi-raid-1.md new file mode 100644 index 0000000..eab903a --- /dev/null +++ b/content/debian-12-uefi-raid-1.md @@ -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 l’installation 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 d’autres versions. +Nous allons ici couvrir uniquement la partie “partitionnement” des disques. Ce n’est pas un tutoriel pour apprendre à installer Debian depuis le début, même si, de nos jours, l’installation est plutôt claire et simple. + +Tout d’abord, assurez-vous d’avoir sélectionné **UEFI** (et non **Legacy**) pour le mode de boot dans votre bios (l’accè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 d’un 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 d’exploitation 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 d’abord *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 l’espace 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 l’inclure 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 l’adresse email qui se trouve en bas de ce post. +A bientôt ! + + diff --git a/content/pages/aboutme.md b/content/pages/aboutme.md new file mode 100644 index 0000000..9e3dec9 --- /dev/null +++ b/content/pages/aboutme.md @@ -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 diff --git a/content/pages/cv.md b/content/pages/cv.md new file mode 100644 index 0000000..8629522 --- /dev/null +++ b/content/pages/cv.md @@ -0,0 +1,7 @@ +title: CV +date: 2024-01-07 +slug: cv + +## Photos les plus recentes : + +Voici mes photos les plus recentes \ No newline at end of file diff --git a/content/pages/galerie.md b/content/pages/galerie.md new file mode 100644 index 0000000..c73da15 --- /dev/null +++ b/content/pages/galerie.md @@ -0,0 +1,7 @@ +title: Galerie photo +date: 2024-01-07 +slug: galerie + +## Photos les plus recentes : + +Voici mes photos les plus recentes \ No newline at end of file diff --git a/content/une-nouvelle-aventure.md b/content/une-nouvelle-aventure.md new file mode 100644 index 0000000..d0144f7 --- /dev/null +++ b/content/une-nouvelle-aventure.md @@ -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. J’y 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. J’ai beau réfléchir, mais je ne sais pas comment aborder le début de ce texte qui marque peut-être celui d’une longue lignée (on peut toujours espérer). +En effet, j’ai toujours voulu, d’une manière ou d’une autre, être présent sur internet. J’ai 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 j’arrive même à perdre les disques dur eux-mêmes. De ce fait, je n’ai jamais embrassé ne serait-ce que le soupçon d'un succès. +J’ai 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 n’ai jamais vraiment publié de contenu dessus et il s’est perdu dans les milliers d’autres octets de projet abandonnés composés de 0 et 1. +J’ai 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 d’arrêter de faire des vidéos, j’ai aussi laissé tomber. +Enfin, pour prendre un dernier exemple, j’ai lancé ma capsule Gemini grâce à l’aide mon ami Vinishor, mais j’y ai publié seulement 2 articles. Même si j’ai des raisons qui m’ont 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 c’est 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 d’un site personnel + +### Le petit collégien + +Le site sur lequel vous êtes actuellement, et qui est, pour le moment plus un blog personnel qu’un site web, a été créé de mes mains à partir d’une 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 aujourd’hui, je n’avais pas forcément les mêmes centres d’inté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 d’entre vous, cela m’a pris beaucoup de temps. Tout d’abord, j’ai dû m’immerger dans le monde de l’informatique pour y apprendre la programmation web. Mais je ne voulais pas juste un blog personnel, je voulais aussi l’héberger chez moi, avoir le contrôle de ma machine et de mes données. Donc, j’ai dû découvrir Linux, le tester puis l’installer. Apprendre la ligne de commande, les services, le fonctionnement d’internet et des réseaux, acheter du matériel…. Pour finalement, aimer ça et même commencer à travailler dans ce domaine. +J’ai aujourd’hui le plaisir de pouvoir dire que j’ai un blog personnel que j’héberge à la maison ! + +### La capsule Gemini + +Je pense que je n’ai pas publié beaucoup d’articles sur ma capsule Gemini pour plusieurs raisons, la plus grosse étant mon installation au Japon. Mais aussi plus indirectement parce que je n’avais pas le matériel et le contrôle total pour gérer mes données. Même si ce service m’est proposé gratuitement par Vinishor (je l’en remercie grandement) il ne m’apporte pas une attache émotionnelle comme je l’ai avec mon blog. C’est plus simple pour moi de me livrer, de savoir que je contrôle le contenant et le contenu. + +### Cette fois-ci, c’est la bonne + +Je pense que c’est le fait que j’ai dû piocher dans de nombreux domaines, apprendre de nouvelles compétences et surtout de l’avoir fait moi-même qui me permet d’avoir une certaine attache à ce bout de code. J’ai certes été conseillé et aiguillé maintes et maintes fois pour mener à bien ce projet, j’ai la véritable sensation d’avoir fourni un réel effort pour y arriver. + +Voilà donc pourquoi j’ai la conviction que cette fois-ci c’est la bonne et que ce projet va traverser le temps. + +## Mes passions et pourquoi l’informatique ? + +Pour vous parler rapidement de moi, j’ai 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 m’intéresser un peu plus à l’informatique. + +### La redécouverte d’une passion + +En effet, ce grand ami que j’ai rencontré à mon entrée à l’université était un peu mystérieux pour moi au début. Alors que tout le monde ne parlait que de Japon, de manga et d’anime, 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 à n’en 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, j’ai 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 à l’autre bout du monde en échange universitaire. + +Puis, les circonstances ont fait que nous nous sommes éloignés, et pas dans les meilleurs termes. +J’ai longtemps nourri l’envie de lui parler, mais j’avais trop de fierté, j'avais le sentiment de me rabaisser. Puis, les mois défilent, l’envie de renouer avec ses amis s’est fait plus forte et j’ai 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 l’avoir fait, d’autant plus que lui-même a répondu à l’appel. + +Puis, notre amitié renouant et voulant découvrir de nouvelles choses, j'ai pris un peu de temps pour découvrir sa passion. Il m’a aidé et guidé dans ce monde de l’informatique, a été là pour répondre à mes questions et mes craintes. Nous avons donc pu installer Linux sur ma machine et j’ai 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). J’ai 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 m’en rendre compte j’étais devenu ce mystérieux personnage au premier rang de l’amphithéâ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, j’aimais vraiment ça ! J’apprenais et j’apprends 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, j’y prends du plaisir. + +Alors, merci à cet ami, merci à internet pour me permettre de développer mes compétences et merci à tous ceux qui m’ont 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. +J’y parle de moi, d’informatique, de livre, du Japon, de nourriture…. +J’y posterai des tutoriels, des tests. Je mettrai à l’écrit ce qui se passe dans ma tête. + +Je n’ai en réalité pas d’autre but que celui de parler de ce que j’ai 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 l’esprit (en toute bienveillance bien évidemment). + +Concernant les articles en eux-mêmes, je m’engage à 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. C’est juste celui d’un homme qui aime l’informatique et qui souhaite partager sa passion avec tous ceux qui veulent l’entendre. + +Pour finir avec ce premier article, j’aimerais vous partager quelques blogs que je lis et fréquente de temps en temps. Je pense que beaucoup d’entre vous les connaissent déjà, mais on ne sait jamais. + +### Blogs à suivre + +* Tout d’abord, celui d’un pionnier de GNU/Linux sur l’internet 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 s’est 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 j’ai réussi à le commencer ce premier article ; et même à le finir. Si c’est pas beau ça ! +C’est 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 j’aime l’informatique, ç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 ! diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..b4772dd --- /dev/null +++ b/pelicanconf.py @@ -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 diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..16a0503 --- /dev/null +++ b/publishconf.py @@ -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 = "" \ No newline at end of file diff --git a/script.sh b/script.sh new file mode 100644 index 0000000..a070921 --- /dev/null +++ b/script.sh @@ -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/ diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..16ba5e9 --- /dev/null +++ b/tasks.py @@ -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)) \ No newline at end of file