diff options
Diffstat (limited to '_i18n/en/_posts/2023-08-31-host_jekyll_apache.md')
-rw-r--r-- | _i18n/en/_posts/2023-08-31-host_jekyll_apache.md | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/_i18n/en/_posts/2023-08-31-host_jekyll_apache.md b/_i18n/en/_posts/2023-08-31-host_jekyll_apache.md deleted file mode 100644 index 1890386..0000000 --- a/_i18n/en/_posts/2023-08-31-host_jekyll_apache.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -layout: post -title: "HOWTO: Host your jekyll site using apache web server" -date: 2023-08-31 18:27:00 +0000 -tag: Tutorials ---- - -I finally have a personal blog just how I like it. I wouldn't say it took a long time (just a couple of days) or that I'd rather have used -an overkill alternative, like WordPress. But I should recognize that it wasn't as easy as I thought it'd be. Besides the customizations -I made to the theme I use, I think the main responsible of my suffering hosting this blog was apache. - -And so I think that a guide of what to do to host a static site made in jekyll on a VPS with apache2 it's a good idea for a first post, -so let's get to it. A heads up: I already assume that you have your jekyll site ready and you're just looking on how to deploy it -to your server, so I'll omit the steps regarding a site's generation. - -# Requirements -- A VPS, whether using a hosting provider like vultr or a PC turned on 24/7 in your home. Just be sure that it is accessible to the public - internet (that it has a static public IP), which is the most important aspect of a web server. -- Some linux distro installed in your server. I personally use Debian, but the instructions presented here are distro-agnostic. -- Apache2 -- Ruby; I recommend [rbenv][rbenv] - -# Apache2 -If you wish to host your site in the apache's main directory (in the case of debian, it's /var/www/html/), and, as a consequence, in your main domain -(not a subdomain) then there's no extra configuration besides the one I'll show. If instead you'll host your blog on a subdomain, just beware that -there're certain things to have in mind, like your server's name and the directory that's going to store your blog files. - -I was looking for two things when setting up my server: **internationalization** and **pretty URLs**. The configuration I'll show takes into consideration -these two points, and it achieves them through [mod_rewrite][mod_rewrite]: - -{% highlight apache %} -<VirtualHost _default_:443> - ServerName example.com - - DocumentRoot /var/www/html/ - DirectoryIndex index.html - - RewriteEngine On - RewriteRule ^/(page[1-9]+)$ %{DOCUMENT_ROOT}/$1/index.html - RewriteRule ^/en/(page[1-9]+)$ %{DOCUMENT_ROOT}/en/$1/index.html - RewriteRule ^/en/$ %{DOCUMENT_ROOT}/en/index.html - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^([^\.]+)$ $1.html [NC,L] - - ErrorDocument 404 "/not-found" - - ErrorLog ${APACHE_LOG_DIR}/error.log - CustomLog ${APACHE_LOG_DIR}/access.log combined -</VirtualHost> -{% endhighlight %} - -The first two rules relate to pagination, using the jekyl-paginate rubygem. If you won't use pagination, -you can omit it. Although I recommend you use it. - -The second one is a doozy, for now I'll only host the blog in english and spanish, although if I wish to, -in the future, add a third language, like french, I could change the regex to: - -`^/(en|fr)/(page[1-9]+)$` - -The same for the next one, which only takes care of serving the index of every internationalized index version. -The last three rules take care of pretty URLs (URLs without the file extension, e.g. about-me instead of about-me.html) - -The last configuration (ErrorDocument) is the page the server'll show every time there is a 404 status response. Chances -are the theme you're using for your blog already has one, and if not, it's worth it to create one because the apache's -default "Not found" page isn't particularly pleasing. - -# User permissions - -The /var/www/html directory usually belongs to the group (and user) www-data (in other distros this user is called apache), -but if you like you can add yourself to this group or even better, become the owner. Be mindful of security though, this directory -usually belongs to the root or www-data user, so it's probably worth it to create an user just for this and nothing else, and to not -have anything sensible in your /var/www/html directory, besides your blog's files: - -{% highlight shell %} -sudo chown -R $(whoami) /var/www/html -{% endhighlight %} - -I did this because it's useful if you wish to use git hooks, so that with every change you push, the site will update automatically, -so it behaves like a dynamic site, like a WordPress instance for example. - -# Deploy hook - -If you use a special user as the owner of your git repos, like me (my git user in my VPS doesn't have access to an interactive -shell for example) then you can add another remote repo and point towards it: - -## Server - -{% highlight shell %} -git --bare init your_blog.git -cd your_blog.git -touch hooks/post-receive -{% endhighlight %} - -## Client (where you write your posts) - -{% highlight shell %} -git remote add deploy your_user@example.com:/home/your_user/your_blog.git -git push deploy -{% endhighlight %} - -## Post-receive script - -Now, the script that'll be executed everytime you push any changes is the following, courtesy of [the jekyll docs][jekyll_docs]. -I modified it as I use rbenv, it'll be the same for you if you use it as well, but if you installed ruby and bundler with, for example, -your package manager, then you won't have to add your rubygems' directory to your PATH, but if you installed ruby in any other way, it'll -be required. - -{% highlight shell %} -#!/bin/bash -l - -export GEM_HOME=$HOME/.rbenv/shims/ -export PATH=$GEM_HOME:$PATH - -GIT_DIR=$HOME/blog.git -TMP_GIT_CLONE=$HOME/tmp -GEMFILE=$TMP_GIT_CLONE/Gemfile -PUBLIC_WWW=/var/www/html # Use the directory apache uses for serving your blog. - -git clone $GIT_DIR $TMP_GIT_CLONE -BUNDLE_GEMFILE=$GEMFILE bundle install -BUNDLE_GEMFILE=$GEMFILE bundle exec jekyll build -s $TMP_GIT_CLONE -d $PUBLIC_WWW -rm -Rf $TMP_GIT_CLONE -exit -{% endhighlight %} - -# Conclusions - -Well, that was the _setup_ of my website. I personally think there is a technical barrier to using jekyll, and it's a shame -because it covers a lot of use cases pretty well, but us technical users sometimes forget that what could be easy for us, -like a git push, it's kind of black magic to others, and let's just not talk about that giant apache config file or having -to write a git hook. Nevertheless, I enjoy jekyll, I enjoyed this process and I hope you do, too. - -[rbenv]: https://github.com/rbenv/rbenv -[mod_rewrite]: https://httpd.apache.org/docs/2.4/rewrite/intro.html -[jekyll_docs]: https://jekyllrb.com/docs/deployment/automated/ |