Plan of Jekyll Blog - Episode 2: Ruby-3, Jekyll-4, Git, Ubuntu and Nginx
19 Feb 2021This tutorial you will learn how to configure Jekyll-4 on Ubuntu 16.04/18.04.
Catalogue
- Jekyll-4 Installation Ubuntu 16.04
- Nginx Setup
- GitHub Local Repository Setup
- Git roll back to some commit
- Jekyll Maintaining Tutorial
- Jekyll Code Block for Liquid-Like
- Finally…
- My Second Jekyll Blog
- Git Dual Repository Setup
Here is the blog repository: blog.old/blog.old3
Jekyll-4 Installation Ubuntu 16.04
First, we should install Ruby3.0.0 for Ubuntu 16.04/18.04:
sudo apt-get install ruby-full build-essential zlib1g-dev nginx
sudo apt-get install gcc g++ make
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
sudo apt install curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install git-core zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev nodejs yarn
Then, we can use one of these methods to install Ruby-3:
- Install
rbenv
cd ~
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
rbenv install 3.0.0
rbenv global 3.0.0
ruby -v
- Install
RVM
sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install 3.0.0
rvm use 3.0.0 --default
ruby -v
- Ruby Source Codes Installation
cd
wget http://ftp.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.gz
tar -xzvf ruby-3.0.0.tar.gz
cd ruby-3.0.0/
./configure
make
sudo make install
ruby -v
Caution: In some area, it’s difficult to visit RubyGems, so you might be change a Ruby Source.
gem source -r https://rubygems.org/
gem source --add https://gems.ruby-china.com/
gem source -u
Finally, install Bundler
gem install bundler jekyll github-pages jekyll-paginate webrick
After installation, you can clone your repository from GitHub
or GitLab
.
git clone https://github.com/IcingTomato/blog.old.git
Nginx Setup
Well, you can also use Apache
which use sudo apt-get install apache2
on Debian/Ubuntu or sudo yum install httpd
on CentOS/RHEL/Fedora.
First, install Nginx:
sudo apt-get isntall nginx
Then, configure nginx profile:
root@blog:~# sudo nano /etc/nginx/sites-enabled/default
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# Disable SSL, because when it enabled, it blocked 80.
#ssl on;
ssl_certificate path/to/your_key.pem;
ssl_certificate_key path/to/your_key.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html;
server_name your.domain;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# Rewrited the 404 page to 200
error_page 404 =200 /404.html;
location /404.html {
root /var/www/html/;
internal;
}
# Rewrited the 403 page to 200
error_page 403 =200 /403.html;
location /403.html {
root /var/www/html/;
internal;
}
}
Ctrl+O
and Ctrl+X
to save and exit.
Finally, restart nginx.service
sudo systemctl restart nginx
# On AWS, you must use systemctl to start, stop, enable, disable, restart a service.
GitHub Local Repository Setup
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin repo_address
git push -u origin master
Git roll back to some commit
git reset --hard 某个commit id
git push -f -u origin master
Jekyll Maintaining Tutorial
You can make a quick start for surfing the Jekyll blog:
git clone -b blank https://github.com/IcingTomato/blog.old.git
cd blog.old
jekyll serve # jekyll s
# => Now browse to http://localhost:4000
Setup _config.yml
# Site settings
title: Your Blog # Your blog title
SEOTitle: Jekyll | Ruby # SEO title
description: "Hello from Seattle" # Your blog description
# SNS settings
github_username: John Doe # GitHub account
RSS: true # RSS On
weibo_username: # Weibo
zhihu_username: # Zhihu
facebook_username: # Facebook
bilibili_username: # Bilibili
twitter_username: # Twitter
# Build settings
paginate: 100 # Contents in a page
You can visit Jekyll-Docs/Jekyll中文网-文档 for more support.
Sidebar
On PCs, tablet devices or ultra-wide scale screen there is a sidebar to display your personal profile.
# Sidebar settings
sidebar: true # Add Sidebar
sidebar-about-description: "describe yourself" # Description
sidebar-avatar: /img/avatar.jpg # Your Avatar
Sidebar is a Responsive Layout*, when the display size is below 992px, the sidebar will move to the page bottom. You can visit Bootstrap3 for global CSS settings/Bootstrap 设置全局 CSS 样式
Mini About Me
This module is under your avatar. It will display all your social media account. It is also a Responsive Layout. When the screen size become small, it will move to the bottom of the page. But there is a litte change when it move to the bottom.
Featured Tags
# Featured Tags
featured-tags: true
featured-condition-size: 15
# A tag will be featured if the size of it is more than this condition value
featured-condition-size
means if the tags’ count over 15(or the number you set), it will display on home page.
Friends
# Friends
friends: [
{
title: "John Doe",
href: "http://john.doe/"
},{
title: "村財 師内",
href: "https://sonzai.shinai/"
},{
title: "鵜祖田 陽",
href: "https://usoda.you/"
}
]
Comment
This Jekyll Blog supports both Disqus and Gitalk, it also supports Markdown Grammar.
Disqus
# Disqus(https://disqus.com/)
disqus_username:
Gitalk
First, we should create a new repository for saving our comments:
And then open Issues
option:
Besides, register a new OAuth application:
Google Analytics
# Google Analytics
ga_track_id: 'UA-'
ga_domain: # Default as 'auto', you can use your domain
Write your first blog
We must put the article, which named as YYYY-MM-DD-your_first_article.markdown
, in _post
folder. And you can change parameter in the front of the article:
---
layout: post
title: Your First Blog
subtitle: Jekyll is Хорошо
date: 1900-01-01
author: John Doe
header-img: img/title.jpg
catalog: true
tags:
- Jekyll
---
Jekyll Code Block for Liquid-Like
In Jekyll, some Ruby code block can’t generate perfectly.
So, we can use raw tag to avoid execute liquid or liquid-like code block:
{% raw %}
You can use {% highlight ruby %}{% endhighlight %}
for code highlight.
Finally…
cd your.folder
git clone repo.address
git pull origin master
jekyll build -d /var/www/html/
My Second Jekyll Blog
Here is the blog repository: blog.old2
You can use these command line for configuring the blog:
cd <the folder>
git clone https://github.com/IcingTomato/blog.old2.git
bundle add webrick rake
bundle install --path vendor/cache
git pull origin master
bundle exec jekyll build -d /var/www/html/
First, you need to install some Dependence like webrick rake jekyll.
And then, in my case, I had a PATH problem.
Bundler::GemNotFound: Could not find rake-10.3.2 in any of the sources
~/.rvm/gems/ruby-2.0.0-p451/gems/bundler-1.6.2/lib/bundler/spec_set.rb:92:in `block in materialize'
~/.rvm/gems/ruby-2.0.0-p451/gems/bundler-1.6.2/lib/bundler/spec_set.rb:85:in `map!'
~/.rvm/gems/ruby-2.0.0-p451/gems/bundler-1.6.2/lib/bundler/spec_set.rb:85:in `materialize'
~/.rvm/gems/ruby-2.0.0-p451/gems/bundler-1.6.2/lib/bundler/definition.rb:133:in `specs'
~/.rvm/gems/ruby-2.0.0-p451/gems/bundler-1.6.2/lib/bundler/definition.rb:178:in `specs_for'
Show 28 more lines
I used gem install rake
but it was no use fixing the matter.
SO, bundle install --path vendor/cache
can help you fix the problem.
This command line generally fixes it as that is the more common problem. Basically, my bundler path configuration is messed up. See their documentation (first paragraph) for where to find those configurations and change them manually if needed.
Git Dual Repository Setup
Everytime I finish my blog, I have to push to two different platform: GitHub and Gitee.
Gitee is a collaboration platform for software development & code hosting in China Mainland.
Because I use Ali ECS Area Hangzhou, it’s hard to visit GitHub, so I have to use Gitee.
So
cd 'your-repository-path'
git remote add gitee 'your-gitee-repository-address'
git push gitee master # Push to 'gitee'
git push origin master # Push to 'github'
You can also change your-repository/.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = 'your-github-repository-address'
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "gitee"]
url = 'your-gitee-repository-address'
fetch = +refs/heads/*:refs/remotes/gitee/*