Lundi 30 décembre 2019 (Modifié le Mercredi 1er janvier 2020)

Site statique avec ruby/jekyll

ruby jekyll vhost xoyize.xyz

Ruby

Installer Ruby sur Debian en utilisant Rbenv

Rbenv est un outil léger de gestion des versions de Ruby qui vous permet de changer facilement de version de Ruby.

Par défaut, Rbenv ne gère pas l’installation des versions de Ruby. ruby-build est un outil qui vous aide à installer n’importe quelle version de Ruby dont vous pourriez avoir besoin. Il est disponible en tant que programme autonome et en tant que plugin pour rbenv.

Installez les dépendances nécessaires à l’outil ruby-build pour construire Ruby à partir des sources :

sudo apt update
sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

Ensuite, lancez la commande curl suivante pour installer les scripts rbenv et ruby-build :

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

Si l’installation est réussie, le script imprimera quelque chose comme ceci :

Running doctor script to verify installation...
Checking for `rbenv' in PATH: not found
  You seem to have rbenv installed in `/home/dbsuser/.rbenv/bin', but that
  directory is not present in PATH. Please add it to PATH by configuring
  your `~/.bashrc', `~/.zshrc', or `~/.config/fish/config.fish'.

Avant de commencer à utiliser rbenv, nous devons ajouter $HOME/.rbenv/bin à notre PATH.

Si vous utilisez Bash, tapez :

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

Si vous utilisez le type Zsh :

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

Maintenant que rbenv est installé sur notre système, nous pouvons facilement installer la dernière version stable de Ruby et la définir comme version par défaut avec :

rbenv install 2.6.5
rbenv global 2.6.5

Vérifiez que Ruby a été correctement installé en imprimant le numéro de version :

ruby -v

ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

Désinstaller ruby

Désinstallation complète de ruby

rbenv uninstall 2.6.5

Dans le fichier ~/.bashrc , supprimer les 2 lignes suivantes

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Supprimer les dossiers

sudo rm -r blog.dbs .bundle .gem .jekyll-cache .rbenv yanblog

Jekyll

Installer jekyll

On va utiliser gem pour installer Jekyll et Bundler qui est un outil utilisé pour gérer les dépendances de Gem.

gem install bundler

Installer jekyl

gem install jekyll

Réduire le temps de génération d’un site

Benchmarking de votre site Internet Jekyll

Tout d’abord, nous devons évaluer l’état actuel de la construction. Nous pouvons y parvenir en utilisant le drapeau intégré du Liquid profiler de Jekyll pour repérer toute opportunité d’amélioration des performances.

bundle exec jekyll build --profile
Configuration file: /srv/wikistatic/_config.yml
            Source: /srv/wikistatic
       Destination: /srv/wikistatic/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 

Filename                                            | Count |    Bytes |   Time
----------------------------------------------------+-------+----------+-------
_layouts/post.html                                  |   219 | 7867.60K | 16.396
_includes/post.html                                 |   219 | 7867.17K | 16.305
[...]
                    done in 31.691 seconds.
 Auto-regeneration: disabled. Use --watch to enable.

1- Passez à la dernière branche maître Jekyll

Avant de poursuivre, il est important de noter qu’il s’agit d’une version de développement inédite de Jekyll et qu’elle doit être utilisée avec prudence sur un site de production.

Pour utiliser la dernière branche maître de Jekyll, mettez à jour votre Gemfile avec la ligne suivante.

- gem "jekyll", "3.8.5"
+ gem "jekyll", github: "jekyll/jekyll"

group :jekyll_plugins do
  gem "jekyll-archives"
  gem "jekyll-feed"
  gem "jekyll-remote-theme"
  gem "jekyll-seo-tag"
  gem "jekyll-sitemap"
end

Jekyll 4 a une nouvelle API de cache, nous devons donc exclure le cache .jekyll dans notre fichier _config.yml pour le moment en utilisant l’option exclude

exclude:

  - .jekyll-cache

Nous pouvons également ajouter un cache .jekyll à notre fichier .gitignore

Ensuite, mettez à jour Jekyll

bundle update  # patienter quelques minutes...
Post-install message from i18n:

HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

Post-install message from jekyll:
-------------------------------------------------------------------------------------
Jekyll 4.0 comes with some major changes, notably:

  * Our `link` tag now comes with the `relative_url` filter incorporated into it.
    You should no longer prepend `{{ site.baseurl }}` to `{% link foo.md %}`
    For further details: https://github.com/jekyll/jekyll/pull/6727

  * Our `post_url` tag now comes with the `relative_url` filter incorporated into it.
    You shouldn't prepend `{{ site.baseurl }}` to `{% post_url 2019-03-27-hello %}`
    For further details: https://github.com/jekyll/jekyll/pull/7589

  * Support for deprecated configuration options has been removed. We will no longer
    output a warning and gracefully assign their values to the newer counterparts
    internally.
-------------------------------------------------------------------------------------

puis lancez à nouveau une nouvelle commande de compilation avec le drapeau Liquid --profile

bundle exec jekyll build --profile

La régénération progressive (Incremental regeneration)

WARNING : Incremental regeneration is still an experimental feature
While incremental regeneration will work for the most common cases, it will not work correctly in every scenario. Please be extremely cautious when using the feature, and report any problems not listed below by opening an issue on GitHub.

La régénération incrémentale permet de réduire le temps de construction en ne générant que les documents et les pages qui ont été mis à jour depuis la construction précédente. Pour ce faire, elle garde une trace des temps de modification des fichiers et des dépendances inter-documents dans le fichier de métadonnées .jekyll-metadata

Dans l’implémentation actuelle, la régénération incrémentielle ne génère un document ou une page que si celui-ci, ou l’une de ses dépendances, est modifié. Actuellement, les seuls types de dépendances suivis sont les includes (en utilisant la balise {% include %}) et les layouts. Cela signifie que les références simples à d’autres documents (par exemple, le cas courant d’itération sur site.posts dans une page de liste de messages) ne seront pas détectées comme une dépendance.

Pour remédier à certaines de ces lacunes, mettre regenerate : true dans le front-matter d’un document forcera Jekyll à le régénérer, qu’il ait été modifié ou non. Notez que cela ne générera que le document spécifié ; les références au contenu d’autres documents ne fonctionneront pas puisqu’ils ne seront pas re-rendus.

La régénération incrémentale peut être activée par le drapeau --incremental (-I en abrégé) depuis la ligne de commande ou en mettant incremental: true dans votre fichier de configuration.

Exemple de regénération non progressive

bundle exec jekyll build
Configuration file: /srv/basicblog/_config.yml
            Source: /srv/basicblog
       Destination: /srv/basicblog/_site
 Incremental build: enabled
      Generating... 
                    done in 23.422 seconds.

Exemple de regénération progressive

bundle exec jekyll build --incremental
Configuration file: /srv/basicblog/_config.yml
            Source: /srv/basicblog
       Destination: /srv/basicblog/_site
 Incremental build: enabled
      Generating... 
                    done in 0.861 seconds.

Site statique

Création d’un simple site

Maintenant que tout est en place, nous allons ajouter un site pour Jekyll. Pour cela, nous allons utiliser la commande jekyll new site qui va lancer l’installation des dépendances nécessaires avec un thème Jekyll par défaut. Après une installation réussie, vous devriez voir une sortie comme :

jekyll new blog.dbs
Running bundle install in /home/dbsuser/blog.dbs... 
  Bundler: Fetching gem metadata from https://rubygems.org/...........
  Bundler: Fetching gem metadata from https://rubygems.org/.
  Bundler: Resolving dependencies....
  Bundler: Using public_suffix 4.0.1
  Bundler: Using addressable 2.7.0
  Bundler: Using bundler 2.1.2
  Bundler: Using colorator 1.1.0
  Bundler: Using concurrent-ruby 1.1.5
  Bundler: Using eventmachine 1.2.7
  Bundler: Using http_parser.rb 0.6.0
  Bundler: Using em-websocket 0.5.1
  Bundler: Using ffi 1.11.3
  Bundler: Using forwardable-extended 2.6.0
  Bundler: Using i18n 1.7.0
  Bundler: Using sassc 2.2.1
  Bundler: Using jekyll-sass-converter 2.0.1
  Bundler: Using rb-fsevent 0.10.3
  Bundler: Using rb-inotify 0.10.0
  Bundler: Using listen 3.2.1
  Bundler: Using jekyll-watch 2.2.1
  Bundler: Using kramdown 2.1.0
  Bundler: Using kramdown-parser-gfm 1.1.0
  Bundler: Using liquid 4.0.3
  Bundler: Using mercenary 0.3.6
  Bundler: Using pathutil 0.16.2
  Bundler: Using rouge 3.14.0
  Bundler: Using safe_yaml 1.0.5
  Bundler: Using unicode-display_width 1.6.0
  Bundler: Using terminal-table 1.8.0
  Bundler: Using jekyll 4.0.0
  Bundler: Using jekyll-feed 0.13.0
  Bundler: Using jekyll-seo-tag 2.6.1
  Bundler: Using minima 2.5.1
  Bundler: Bundle complete! 6 Gemfile dependencies, 30 gems now installed.
  Bundler: Use `bundle info [gemname]` to see where a bundled gem is installed.
New jekyll site installed in /home/dbsuser/blog.dbs. 

Structure

tree blog.dbs/
blog.dbs/
├── 404.html
├── about.markdown
├── _config.yml
├── Gemfile
├── Gemfile.lock
├── index.markdown
└── _posts
    └── 2019-12-21-welcome-to-jekyll.markdown

Pour démarrer le service web intégré de Jekyll, naviguez jusqu’au répertoire du site et démarrez le serveur web Jekyll à l’aide de la commande jekyll serve suivie de l’adresse IP de l’hôte à laquelle se lier.

# Auto génération activée (--watch) + serveur
jekyll serve --host=0.0.0.0 --watch --source "/home/dbsuser/blog.dbs"
Configuration file: /home/dbsuser/blog.dbs/_config.yml
            Source: /home/dbsuser/blog.dbs
       Destination: /home/dbsuser/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
       Jekyll Feed: Generating feed for posts
                    done in 1.332 seconds.
 Auto-regeneration: enabled for '/home/dbsuser/blog.dbs'
    Server address: http://0.0.0.0:4000/
  Server running... press ctrl-c to stop.

Lorsque la commande jekyll serve est exécutée, Jekyll analyse la configuration et pousse les fichiers de contenu dans un répertoire appelé _site. Il sert alors le contenu de ce _site

Création site “yanblog”

Créer un blog statique https://github.com/agusmakmun/agusmakmun.github.io

cd ~
git clone https://github.com/agusmakmun/agusmakmun.github.io.git yanblog
cd yanblog
rm Gemfile.lock
bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies.........................
[...]
Bundle complete! 1 Gemfile dependency, 85 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

Pour démarrer le service web intégré de Jekyll, naviguez jusqu’au répertoire du site et démarrez le serveur web Jekyll à l’aide de la commande jekyll serve suivie de l’adresse IP de l’hôte à laquelle se lier.

# Auto génération activée (--watch) + serveur
bundle exec jekyll serve --host=0.0.0.0 --watch --source "/home/dbsuser/yanblog"
Configuration file: /home/dbsuser/yanblog/_config.yml
       Deprecation: The 'gems' configuration option has been renamed to 'plugins'. Please update your config file accordingly.
NOTE: Inheriting Faraday::Error::ClientError is deprecated; use Faraday::ClientError instead. It will be removed in or after version 1.0
Faraday::Error::ClientError.inherited called from /home/dbsuser/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
            Source: /home/dbsuser/yanblog
       Destination: /home/dbsuser/yanblog/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
                    done in 11.934 seconds.
 Auto-regeneration: enabled for '/home/dbsuser/yanblog'
    Server address: http://0.0.0.0:4000/
  Server running... press ctrl-c to stop.

Pour corriger l’erreur “Deprecation: The ‘gems’ configuration option has been renamed to ‘plugins’”

  1. Editer _config.yml
  2. Chercher la ligne contenant “gems:”
  3. Remplacer “gems:” par “plugins:”

Relancer le serveur

bundle exec jekyll serve --host=0.0.0.0 --watch --source "/home/dbsuser/yanblog"

Serveur nginx

Vhost sur xoyize.xyz

Pour atteindre le serveur sur la machine dbs, on va utiliser un proxy nginx
Le serveur sera joignable sur le lien blog.cinay.xyz

sudo nano /etc/nginx/conf.d/blog.xoyize.xyz.conf
# /etc/nginx/conf.d/blog.xoyize.xyz.conf
	##
	# Virtual Host blog.xoyize.xyz (OpenMediaVault)
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name blog.xoyize.xyz;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name blog.xoyize.xyz;
	
	    charset utf-8;
	    client_max_body_size 50M;
	
	    include ssl_dh_headers_ocsp;
	
	    location / {
	        proxy_set_header Host $http_host;
	        proxy_set_header X-Real-IP $remote_addr;
	        proxy_pass http://192.168.0.14:4000;
	        proxy_http_version 1.1;
	        proxy_set_header Upgrade $http_upgrade;
	        proxy_set_header Connection "upgrade";
	        proxy_next_upstream error timeout http_502 http_503 http_504;
	    }
	    
	    access_log /var/log/nginx/blogjs-access.log;
	    error_log /var/log/nginx/blogjs-error.log;
	}

Le site blog.cinay.xyz

blog.cinay.xyz