This is my new blog with Octopress and a theme of Octogray.
The site is published in GitHub Pages.
In this first post, I would introduce how to make the site with Octopress + Octogray + GitHub Pages.
- Install Ruby
- Prepare Repository
- Install Octopress and apply the theme
- Setup _config.yml
- Make post and generate the site, deploy
- Manage source in Bitbucket
Install Ruby
Mac user
For the recent OS X users, Ruby 2.0 or later is already installed and normally you should not install ruby.
In case of necessity, you can install by RVM, like:
$ \curl -sSL https://get.rvm.io | bash -s stable --ruby=2.0.0
It setup your environmental variable, too.
But for the next session, you need to add the following lines in your .bashrc (or your login script) to setup the ruby environment:
1 2 3 |
|
Windows user
For Windows user, the easiest way is to use Cygwin. At setup, you need at least:
- Devel: git
- Ruby: All
There are also several alternatives to use Ruby on Windows:
- RubyInstaller: Command prompt with Ruby.
- scottmuc/yari: Yet Another Ruby Installe, inspired by RVM1.
- MinGW: A contraction of “Minimalist GNU for Windows.
- Gow: Gnu On Windows: the lightweight alternative to Cygwin.
Prepare Repository
First, you need a repository in GitHub for GitHub Pages.
You can use either User site or Project site.
User site is based on master branch of user.github.io repository in your GitHub repositories (user must be your user account).
On the other hand, Project site is based on gh-pages branch of any of your repositories in GitHub.
I have another Japanese blog at User site, therefore this is Project site in en repository.
You can make repository from GitHub website, or from command line:
$ repo=<"user.github.io" or "what you want">
$ user=<username>
$ read -s # Enter your password
$ twofac=XXXXXX # if necessary, otherwise remove following '-H "...twofac"' section.
$ curl -u ${user}:${pass} -H "X-GitHub-OTP: $twofac" https://api.github.com/user/repos -d "{\"name\":\"$repo\"}"
Install Octopress and apply the theme
In the below, I make octopress_en directory as a root directory of Octopress, and use en repository as a project repository for GitHub Pages.
First, clone octopress to where what you want to install.
$ cd /path/to/install/dir
$ git clone git://github.com/imathis/octopress.git octopress_en
$ cd octopress_en
For User site, Octopress makes source branch automatically, while it doesn’t for Project site.
I would like to keep master branch to following up Octopress updates, then made source branch as a working branch. It is not necessary for User site case.
$ git checkout -b source
Next, a theme: Octogray, is installed.
And setup with it.
$ git submodule add [email protected]:rcmdnk/octogray.git .themes/octogray
$ .themes/octogray/setup.sh -y
$ rake setup_github_pages["[email protected]:rcmdnk/en"]
Do you want to use 'md' extension instead of 'markdown'? [y/n]: y
Do you want to push_ex (renew remote repository evry time)? [y/n]: y
Enter where you want to put _deploy (current: /path/to/install/dir/): ~/tmp/octopress/en
rm -rf ~/tmp/octopress/en/public/en
## Site's root directory is now '/en' ##
Octogray’s setup.sh executes such bundle install
, rake install['octogray']
,
which are nominal setup commands for Octopress,
so that everything is ready after setup.
After setup, the repository is set.
In addition, Octogray can set the suffix of the post made by new_post
command as md
instead of markdown
.
It also has a function of push_ex
, in which deploy_dir
is always temporary,
and it pushes clean history to the repository,
i.e., makes empty repository and commits only the last update,
and forces pushing.
This is useful or even necessary when you did any critical mistake
(gave password or critical word in the post, and pushed),
or did ashamed mistake which you want to hide permanently
Setup _config.yml
Although some variables are automatically updated by setup_github_pages
,
you may want to set something more in _config.yml, so do as you like.
Here are some notes for Project site case, w/o custom domain 2.
If you don’t set custom domain, the site root URL becomes like: https://rcmdnk.github.io/en.
Then, if you use absolute path w/o a domain, it becomes https://rcmdnk.github.io/ instead of https://rcmdnk.github.io/en.
But Octopress(Jekyll) does more complex things:
it complements root
in _config.yml before such absolute pathes in some places.
This expansion is done by plugins/octopress_filters.rb: expand_urls
,
in source/_layouts/default.html.
As you can see in default.html, it is not applied to such haad.html, header.html or footer.html.
When you edit paths, be careful about above, and set correct path.
For example, in Octogray’s theme, if you want to use images in source/images/ of en repository:
- favicon: in head.html: need to be /en/images/…
- titlelogo: in custom/header.html: need to be /en/images/…
- aboutme_logo: in custom/asides/about.html: need to be /images/…
Another problem is custom 404 page. You can make your own 404 page by making 404.md (or 404.html) in /source/ 3
But it redirects to the top directory, therefore 404 page in Project site isn’t effectual.
GitHub pages doesn’t support such .htaccess configuration 4, therefore there is no way to assign special 404 page for Project site w/o custom domain.
Even if you go the wrong URL under https://rcmdnk.github.io/en/, it redirects to 404 page under https://rcmdnk.github.io/.
So, you need to prepare proper 404 page in User site.
Make post and generate the site, deploy
Now it becomes ready, then make a test page:
$ rake new_post['test']
then edit source/_posts/20XX-XX-XX-test.md, or
$ post=$(rake new_post["test"]|grep "Creating new post"|cut -d: -f2)
$ sedi 's/published: *false/published: true/' $post
$ sedi 's/categories:/categories: cat/' $post
$ sedi 's/tags:/tags: tag/' $post
$ sedi "s/<\!-- *more *-->/This is test post."\\$'\n'"<\!-- more -->/" $post
$ sedi "s/{%include after_excerpt.html%}/{%include after_excerpt.html%}"\\$'\n'"# Test Sectiontest"\\$'\n'"test test./" $post
If it is ready, generate the site:
$ rake gen
gen
is a shortened command of generate
, introduced by Octogray.
(Try rake -T
to see all commands.)
Now you have a public directory in ~/tmp/octopress/en. The directories in it is like: ~/tmp/octopress/en/public/en/.
To check it, execute rake preview
and open http://localhost:4000/
from the browser.
On Mac, you can use Pow. To see above page from pow, link like:
$ cd ~/.pow && ln -s ~/tmp/octopress/en ./octopress_en
and open http://octopress_en.dev/en/.
If it is ok and you want to publish, deploy the site:
$ rake deploy
Now you should see the page like: https://rcmdnk.com/en/ (It could take ~10min after deploying).
Manage source in Bitbucket
The site is published then they should be in the public repository, but you may want to hide sources before generating site, which could include drafts.
While GitHub provide only public repository for the free usage, Bitbucket provides it in free.
So, I put the sources to Bitbucket.
To make it, make Bitbucket account and make a repository in which sources will be stored (here, account is rcmdnk, and repository is octopress_en). Then, set remote site:
$ git remote add bitbucket [email protected]:rcmdnk/octopress_en
$ git push -u bitbucket source
Now source branch is connected to bitbucket/source.
You can store your sources whenever you want like:
$ git add -A
$ git commit -m "comment"
$ git push
Ref in Japanese: GitHub pages + Octopressの導入