This feature for Nikola was implemented by @amokleben,
and now, if you ask twitter your site can have
it too.
What are Twitter Cards? Did you notice that for some sites, when you click on tweets
that have links, you get a small preview of the content? Well, that's a twitter card.
This still needs a little improvement to support the richer "media" cards, but it does work:
You don't have to do anything in your site, but setting the "description" metadata to your
posts helps make this more accurate (and it also works for google+)
One of the most frequent questions I get about Nikola
is "but how do I create a site that's not a blog?". And of course, that's because the
documentation is heavily blog-oriented. This document will change that ;-)
Since it started, Nikola has had the capabilities to create generic sites. For example,
Nikola's own site is a fairly generic one. Let's go
step by step on how you can do something like that.
As usual when starting a nikola site, you start with nikola init which creates a
empty semi-configured site:
$ nikola init mysite
Created empty site at mysite.
Then we go into the new mysite folder, and make the needed changes in the conf.py
configuration file:
############################################### Configuration, please edit############################################### Data about this siteBLOG_AUTHOR="Roberto Alsina"BLOG_TITLE="Not a Blog"# This is the main URL for your site. It will be used# in a prominent linkSITE_URL="http://notablog.ralsina.me"BLOG_EMAIL="ralsina@kde.org"BLOG_DESCRIPTION="This is a demo site (not a blog) for Nikola."## Some things in the middle you don't really need to change...#post_pages=(("pages/*.txt","","story.tmpl",False),)
And now we are ready to create our first page:
$ nikola new_post -p
Creating New Post
-----------------
Enter title: index
Your post's text is at: pages/index.txt
We can now build and preview our site:
$ nikola build
Scanning posts.done!
. render_site:output/categories/index.html
. render_sources:output/index.txt
. render_rss:output/rss.xml
:
:
: [Much more of the same]
$ nikola serve
Serving HTTP on 127.0.0.1 port 8000 ...
.. title: index.. slug: index.. date: 2013/03/01 10:26:17.. tags:.. link:.. description:Write your post here.
Title is the page title, slug is the name of the generated HTML file
(in this case it would be index.html) the date doesn't matter much in
not-blogs, same for tags and link. Description is useful for SEO purposes
if you care for that.
And below, the content. By default you are expected to use reStructured text but
Nikola supports a ton of formats, including Markdown, plain HTML, BBCode,
Wiki, and Textile.
So, let's give the page a nicer title, and some fake content. Since the default
Nikola theme (called "site") is based on bootstrap
you can use anything you like from it:
.. title: Welcome To The Fake Site.. slug: index.. date: 2013/03/01 10:26:17.. tags:.. link:.. description: Fake Site version 1, welcome page!..class:: hero-unit span6
..admonition:: This is a Fake Site
It pretends to be about things, but is really just an example.
So, don't click this button, it leads nowhere.
..class:: btn
Click Me!
..class:: span5
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non nunc turpis.
Phasellus a ullamcorper leo. Sed fringilla dapibus orci eu ornare. Quisque
gravida quam a mi dignissim consequat. Morbi sed iaculis mi. Vivamus ultrices
mattis euismod. Mauris aliquet magna eget mauris volutpat a egestas leo rhoncus.
In hac habitasse platea dictumst. Ut sed mi arcu. Nullam id massa eu orci
convallis accumsan. Nunc faucibus sodales justo ac ornare. In eu congue eros.
Pellentesque iaculis risus urna. Proin est lorem, scelerisque non elementum at,
semper vel velit. Phasellus consectetur orci vel tortor tempus imperdiet. Class
aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos.
[And more in the same vein]
And that's it. You will want to change the SIDEBAR_LINKS option to create a reasonable
"menu" for your site, you will want to hack the theme (check nikola help bootswatch_theme
for a quick & dirty solution), and you may want to add a blog later on, for company news
or whatever.
You can see the finished site in http://notablog.ralsina.me and its full configuration in
//ralsina.me/listings/notablog/conf.py.html
Nikola generates static sites, so load testing it is not very interesting, except
as a benchmark for the difference between static and dynamic sites.
Today I was told about blitz.io and since a quick test is free, I thought, why not?
The result is quite impressive: a cheap VPS, using gatling as a web server,
which is almost configuration-free and not meant for extremely high loads, can handle roughly 9 million daily hits.
Let me say that again: 9 million hits. On a unconfigured $5 server. Here's the report
How much tuning does it take for a wordpress instance to serve that? On what hardware?
And that's only half the picture. Not only are Nikola's static pages incredibly light on your server, we have
also spent a lot of effort trying to make individual pages load fast, for a better user experience.
Some of the techniques used for fast-loading sites are:
Using webassets to bundle CSS and JS into single files.
Automatic support for CDNs for the common JS libraries
Support for transparently using HTML/CSS/JS/Image compression tools
So, if you try something like YSlow! on a Nikola site, it will give you
a score of roughly 93 up to 98 (out of 100) depending on your webserver configuration.
BTW: I really want to get that up to 100. Really want it
So, remember, if your site can be served statically, it's going to be cheaper, faster, safer. And if you ever
get 9 million hits a day, it will be available.