My Jekyll site is hosted on a shared web hosting service, provided by OVH. It’s the most basic service, which consists of a PHP server, a MySql database, and that’s about it. The only way to change the files on the server is to access it via FTP, as there is no SSH connection available.
So, with the concept of Jekyll, which is to generate static HTML files and use them for the final web site, the only option I had was to manually upload the
_site folder each time I made some changes in the source code. And this after pushing my changes to GitHub (the sources and generated files are stored in a public GitHub repository).
But I’ve actually found another way to automate the process. For this I need my personnal server, which is an old eeePc running Debian I have at home (but can’t use as a web server, for basic QoS reasons).
Clone the git repository
I started by cloning the repository on my personnal server:
$ cd /home/username $ mkdir jekyll $ git clone https://github.com/RemyG/remyg.fr.git jekyll
This create a clone of the repository in
Create the FTP upload script
To automatically upload my files via FTP, I used
$ sudo apt-get install lftp
Then I’ve created the script used to upload my
_site folder to the shared server:
$ touch /usr/local/bin/ftp-upload-jekyll.sh $ chmod +x /usr/local/bin/ftp-upload-jekyll.sh $ vim /usr/local/bin/ftp-upload-jekyll.sh
The content of the script is a simple
#!/bin/sh lftp -u your_username,your_password your_host_url <<EOF cd /dest_folder/_site # The distant directory lcd /home/username/jekyll/_site # The local directory mirror -R quit 0 EOF
When this script is executed, it will upload the content of the local
_site folder on the host
Create the git pull script
Before uploading the website to the server, the repository has to be pulled. I’ve created a script for it:
$ touch /usr/local/bin/github-pull-jekyll.sh $ chmod +x /usr/local/bin/github-pull-jekyll.sh $ vim /usr/local/bin/github-pull-jekyll.sh
The content of the script is simply:
#!/bin/sh cd /home/username/jekyll git pull
When this script is executed, it will pull the repository.
Create a GitHub post-receive hook
On my personnal server
I’ve just created a PHP file, which is exposed on Internet.
$ cd /var/www $ vim github-hook.php
The content of this file is very simple: first it pulls the repository, then it calls the script
ftp-upload-jekyll.sh to upload the content of the
_site folder to the shared server.
<?php `sh /usr/local/bin/github-pull-jekyll.sh`; `sh /usr/local/bin/ftp-upload-jekyll.sh`; ?>
Then I just had to create the post-receive hook on GitHub, as described on the GitHub documentation. The WebHook URL is the URL of the PHP file on my personnal server.
Now, each time I push some changes to my GitHub repository, they are automatically uploaded to my web server, and instantly available to be browsed.