diff --git a/.gitignore b/.gitignore index 3367433..d5ac497 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .venv __pycache__/ +output diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dbfd58f --- /dev/null +++ b/Makefile @@ -0,0 +1,75 @@ +PY?=python3 +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 + +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 ssh_upload upload the web site via SSH ' + @echo ' make rsync_upload upload the web site via rsync+ssh ' + @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: +ifdef PORT + $(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) +else + $(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) +endif + +serve-global: +ifdef SERVER + $(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER) +else + $(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0 +endif + + +devserver: +ifdef PORT + $(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) +else + $(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) +endif + +publish: + $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS) + + +.PHONY: html help clean regenerate serve serve-global devserver stopserver publish \ No newline at end of file diff --git a/content/pelican-installation.md b/content/pelican-installation.md new file mode 100644 index 0000000..3f3922d --- /dev/null +++ b/content/pelican-installation.md @@ -0,0 +1,73 @@ +Title: Installer Pelican +Date: 2019-01-09 15:29 +Category: tuto +Lang: fr +Slug: installer-pelican +Tags: web, python, pelican +Summary: Installation rapide de _Pelican_ + +# Démarrage rapide + +_C'est une traduction basique du [démarrage rapide](https://docs.getpelican.com/en/4.0.1/quickstart.html) officiel_ + +--- + +## Créez le répertoire + +```python +mkdir -p ~/projects/yoursite +cd ~/projects/yoursite +``` + +## Créez un environnement virtuel + +```python +virtualenv .venv -p /usr/bin/python3.6 +source .venv/bin/activate +``` + +## Installez _Pelican_ et markdown (si besoin, optionnel) + +```python +pip install pelican markdown +``` + +## Créez le squelette de l'arborescence + +```python +pelican-quickstart +``` + +Pour les questions avec une réponse entre crochet, appuyez sur `Entrée` pour acceptez cette valeur. Quand il vous sera demandé le préfixe de votre URL, entrez votre nom de domaine comme indiqué (`http://example.com`). + +## Créez un article + +Vous ne pourrez lancer _Pelican_ tant qu'il n'y a pas d'article. Utilisez votre éditeur préféré pour créez votre premier article avec le contenu suivant : + +```python +Title: My First Review +Date: 2010-12-03 10:20 +Category: Review + +Following is a review of my favorite mechanical keyboard. +``` + +Considerant que cet article est au format Markdown, enregistrez le en temps que `~/projects/yoursite/content/keyboard-review.md.` + +## Générez le site + +Toujours depuis le répertoire, lancez la commande _Pelican_ pour générez votre site + +```python +pelican content +``` +Votre site à été généré dans le répertoire `output`. Peut-être aurez vous un message d'alerte relatif aux _flux_, c'est normal en développement et vous pouvez l'ignorer + +# Prévisualisation du site + +Ouvrez une session de terminal depuis le répertoire d'installation et lancez la commande suivante : +```python +pelican --listen +``` + +Rendez vous à l'adresse [http://localhost:8000/](http://localhost:8000/) à l'aide de votre navigateur, c'est parfait ! diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..170418e --- /dev/null +++ b/pelicanconf.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # +from __future__ import unicode_literals + +AUTHOR = 'Fred' +DEFAULT_LANG = 'fr' +DEFAULT_PAGINATION = False +PATH = 'content' +RELATIVE_URLS = True +SITENAME = 'freezed' +SITESUBTITLE = 'Mon super slogan' +SITEURL = 'https://free_zed.gitlab.io/mypelican' +TIMEZONE = 'Europe/Paris' + +# 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 = (('Archives', '/archives.html'), + ('Tags', '/tags.html'), + ('Mentions légales', '/pages/mentions-legales.html'),) + +LINKS_WIDGET_NAME = 'Liens' + +# Social widget +SOCIAL = (('Gitlab', 'https://gitlab.com/free_zed'), + ('Stack Overflow', 'https://stackoverflow.com/users/6709630/freezed'), + ('Github', 'https://github.com/freezed/'),) +SOCIAL_WIDGET_NAME = 'Partage de code' + +# my configuration +DELETE_OUTPUT_DIRECTORY = True +OUTPUT_PATH = 'public/' diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..e2ad476 --- /dev/null +++ b/publishconf.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # +from __future__ import unicode_literals + +# 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 = 'https://free_zed.gitlab.io' +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/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2564f9b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pelican==4.0.1 +Markdown==3.0.1 diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..6a6ca23 --- /dev/null +++ b/tasks.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- + +import os +import shutil +import sys +import datetime + +from invoke import task +from invoke.util import cd +from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer + +CONFIG = { + # Local path configuration (can be absolute or relative to tasks.py) + 'deploy_path': 'output', + # Port for `serve` + '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""" + c.run('pelican -s pelicanconf.py') + +@task +def rebuild(c): + """`build` with the delete switch""" + c.run('pelican -d -s pelicanconf.py') + +@task +def regenerate(c): + """Automatically regenerate site upon file modification""" + c.run('pelican -r -s pelicanconf.py') + +@task +def serve(c): + """Serve site at http://localhost:8000/""" + + class AddressReuseTCPServer(RootedHTTPServer): + allow_reuse_address = True + + server = AddressReuseTCPServer( + CONFIG['deploy_path'], + ('', CONFIG['port']), + ComplexHTTPRequestHandler) + + sys.stderr.write('Serving on port {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""" + c.run('pelican -s publishconf.py') + + +@task +def publish(c): + """Publish to production via rsync""" + c.run('pelican -s publishconf.py') + c.run( + 'rsync --delete --exclude ".DS_Store" -pthrvz -c ' + '{} {production}:{dest_path}'.format( + CONFIG['deploy_path'].rstrip('/') + '/', + **CONFIG)) +