Commit c8a348a5 authored by nimrod's avatar nimrod
Browse files

First commit. 1 article about setting up Pelican and an about me.

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+2 −0
Original line number Diff line number Diff line
output
cache

Makefile

0 → 100644
+108 −0
Original line number Diff line number Diff line
PY=python
PELICAN=pelican
PELICANOPTS=

BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py

FTP_HOST=localhost
FTP_USER=anonymous
FTP_TARGET_DIR=/

SSH_HOST=ns1.shore.co.il
SSH_PORT=22
SSH_USER=nimrod
SSH_TARGET_DIR=/var/www/htdocs/blog

S3_BUCKET=my_s3_bucket

CLOUDFILES_USERNAME=my_rackspace_username
CLOUDFILES_API_KEY=my_rackspace_api_key
CLOUDFILES_CONTAINER=my_cloudfiles_container

DROPBOX_DIR=~/Dropbox/Public/

DEBUG ?= 0
ifeq ($(DEBUG), 1)
	PELICANOPTS += -D
endif

help:
	@echo 'Makefile for a pelican Web site                                        '
	@echo '                                                                       '
	@echo 'Usage:                                                                 '
	@echo '   make html                        (re)generate the web site          '
	@echo '   make clean                       remove the generated files         '
	@echo '   make regenerate                  regenerate files upon modification '
	@echo '   make publish                     generate using production settings '
	@echo '   make serve [PORT=8000]           serve site at http://localhost:8000'
	@echo '   make devserver [PORT=8000]       start/restart develop_server.sh    '
	@echo '   make stopserver                  stop local server                  '
	@echo '   make ssh_upload                  upload the web site via SSH        '
	@echo '   make rsync_upload                upload the web site via rsync+ssh  '
	@echo '   make dropbox_upload              upload the web site via Dropbox    '
	@echo '   make ftp_upload                  upload the web site via FTP        '
	@echo '   make s3_upload                   upload the web site via S3         '
	@echo '   make cf_upload                   upload the web site via Cloud Files'
	@echo '   make github                      upload the web site via gh-pages   '
	@echo '                                                                       '
	@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html'
	@echo '                                                                       '

html:
	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)

clean:
	[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)

regenerate:
	$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)

serve:
ifdef PORT
	cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
else
	cd $(OUTPUTDIR) && $(PY) -m pelican.server
endif

devserver:
ifdef PORT
	$(BASEDIR)/develop_server.sh restart $(PORT)
else
	$(BASEDIR)/develop_server.sh restart
endif

stopserver:
	kill -9 `cat pelican.pid`
	kill -9 `cat srv.pid`
	@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'

publish:
	$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)

ssh_upload: publish
	scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)

rsync_upload: publish
	rsync -e "ssh -p $(SSH_PORT)" -P -rvz --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude

dropbox_upload: publish
	cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)

ftp_upload: publish
	lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"

s3_upload: publish
	s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed

cf_upload: publish
	cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) .

github: publish
	ghp-import $(OUTPUTDIR)
	git push origin gh-pages

.PHONY: html help clean regenerate serve devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github
+15 −0
Original line number Diff line number Diff line
About me
########

:date: 2014-04-19
:summary: All about Nimrod.
:slug: about-me

Hi.
I'm Nimrod Adar, a Linux and BSD sysadmin and as-needed developer from Haifa, Israel.

This is my blog about what I do and thus it serves 2 purposes. The 1st is to be my personal journal to document the how or why of some problem solving. The 2nd is more outward facing, for it be a resource for others (by no way complete) and for me to publish whenever I need to.

Also, I'm a part-time freelancer so you can contact me at `nimrod@shore.co.il <mailto: nimrod@shore.co.il>`_ or at 052-8713696 (+972-52-871-3696 outside of Israel).

Last thing, my public `GPG public key <https://www.shore.co.il/blog/static/nimrod.gpg>`_
 No newline at end of file

content/pelican.rst

0 → 100644
+96 −0
Original line number Diff line number Diff line
Blogging with Pelican
########################
:date: 2014-04-19
:slug: How-I-blog-with-Pelican
:author: Nimrod Adar
:summary: How I blog with Pelican

What is Pelican?
----------------

`Pelican <http://blog.getpelican.com/>`_ is a static site generator.
It's written in Python, focusing on blogs, using reStructedText, Jinja2 and Fabric (but you can use Markdown and makefiles and has provisions for normal web pages as well).
It's a pythonic tool that's easy to use and was a breeze to setup.

Installing Pelican
------------------
As Pelican is a static blog/ website generator, all we're doing is in your workstation. All you need to have server-wise is a bog-standard web server (like Apache or Nginx). Everything else is done on your local machine. I installed Pelican from Debian (it's currently available in testing) ::

	$ apt-get install python-pelican fabric

Alternatively, you can use pip ::

    $ pip install pelican fabric

Create a blog directory and an empty blog ::

  $ mkdir blog
  $ cd blog
  $ pelican-quickstart
  Welcome to pelican-quickstart v3.4.0.

  This script will help you create a new Pelican-based website.
  Please answer the following questions so this script can generate the files
  needed by Pelican.
    
        
  > Where do you want to create your new web site? [.] 
  > What will be the title of this web site? My Blog
  > Who will be the author of this web site? <Insert you name here>
  > What will be the default language of this web site? [en] 
  > Do you want to specify a URL prefix? e.g., http://example.com   (Y/n) 
  > What is your URL prefix? (see above example; no trailing slash) <Insert blog URL without trailing slash>
  > Do you want to enable article pagination? (Y/n) 
  > How many articles per page do you want? [10] 
  > Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) 
  > Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) 
  > Do you want to upload your website using FTP? (y/N) 
  > Do you want to upload your website using SSH? (y/N) y
  > What is the hostname of your SSH server? [localhost] <Insert SSH server address>
  > What is the port of your SSH server? [22] 
  > What is your username on that server? [root] <Insert SSH username>
  > Where do you want to put your web site on that server? [/var/www] <Insert full path to your blog's directory>
  > Do you want to upload your website using Dropbox? (y/N) 
  > Do you want to upload your website using S3? (y/N) 
  > Do you want to upload your website using Rackspace Cloud Files? (y/N) 
  > Do you want to upload your website using GitHub Pages? (y/N) 
  Done. Your new project is available at blog

Since Pelican uses OpenSSH, you can use servers defined in your SSH preferences. Now, lets configure the blog to our liking. In the blog directory there are the 2 configuration files: pelicanconf.py for configuring Pelican and publishconf.py for configuration that are only for publishing using Make or Fabric. Pelican also creates standard Makefile and fabfile.py for you. I've made the following modifications to pelicanconf.py: ::

  TIMEZONE = 'Asia/Jerusalem'
  PATH = "content"
  DIRECT_TEMPLATES = ('index', 'archives')
  DISPLAY_CATEGORIES_ON_MENU = False
  DISPLAY_PAGES_ON_MENU = True
  TAGS_SAVE_AS = ''
  TAG_SAVE_AS = ''
  STATIC_PATH = ['static']

And to publishconf.py: ::

  CATEGORY_FEED_ATOM = None
  
I've set the timezone to mine (so that the time of published articles is correct), add everything under contents/static as static contents to be uploaded to the server, disabled showing of categories of articles and creating feeds for them, disabled saving of articles by tags and set pages (which are simple web pages unlike articles which are blog entries) to show on the menu. Next, themes. Pelican comes with a default theme (the same as used by Pelican's website) but I wanted something more understated so I took at look at `https://github.com/getpelican/pelican-themes <https://github.com/getpelican/pelican-themes>`_ and chose pelican-mockingbird. Cloned it ::

  $ git clone https://github.com/wrl/pelican-mockingbird.git

and set the theme to that by adding the following to pelicanconf.py: ::

    THEME = "./pelican-mockingbird"

I've also edited base.html and article.html inside of pelican-mockingbird/templates to suite me. Next, let us add a new entry by creating a ReStructedText file inside of contents. The filename is for personal use and not critical. The heading is the article name and you can add the following for Pelican to use: ::

    :date: 2014-04-19
    :slug:  this-will-the-filename
    :author: <Insert your name here>
    :summary: <Insert summary here>
    
After we added the content we want to upload it to our web server (I use fabric) ::

    $ fab publish
    
If you don't have keys set for the server it will ask you for your password to the server.
Last thing, you can create pages, create a pages directory inside contents and save the files there. Their format is the same as articles but they'll have a somewhat template applied and they will be shown in the menu. A good example will an 'About Me' page.

That's it, you now have Pelican installed, configured and published to your web site.
 No newline at end of file
+19 −0
Original line number Diff line number Diff line
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQENBFK1T/0BCADLC2iWmTQXFncaGjvg1NB2CiUcMujnw8aaNY6pIB2IoXKniwps
REBIQprVCGPKsm9umQp1VQV8X4ijWqgDFRK+w51TBAY3GCDREep1K3ZDUr7jCQXs
u0I8MFHOs6HhjNNI56Up7Kevt6YQ+XqLfrFhl0QpNs8Fx3iWjjmhX5N3dg5qpHss
xvalKGf3HIU3PU/VxQZscxXt0XEdDhYdRzFEMok/9X76uk2zTY8mcHa+1ZVx1vpJ
NFXS1hfHqJVNj/PZmKX9IM4O+a1HUJIm35Rw2mrAl0VqNVxEvzHNZBA2PqAIu+rS
NhFhwnb5t/19/AsmsgVUsgJNs0AMh6iABIh5ABEBAAG0IE5pbXJvZCBBZGFyIDxu
aW1yb2RAc2hvcmUuY28uaWw+iQE/BBMBAgApBQJStU/9AhsvBQkB4UojBwsJCAcD
AgEGFQgCCQoLBBYCAwECHgECF4AACgkQSby+NT/sLXfurQf+JpDDAIqufS8KfS8k
hA26oe+YA92W5xZRIOF/+tr66ZuRUUG6e+y5RAcQI6qENC6697v6ZF5lbqCJ2w7u
vo8reQB17cLMb7PKYScB8najPxHNcWfNHvtSNMCOyUaoNJmjqW7tpWcr6TaD39a/
s3Le0gZjXdaxKcXVzaUKTLKXlwr/7QyD7qxjwEwOmiTFvSjnCQDOCUXxghQv4FMM
HeN6Jqxdzb1Ua8xb74TyGkJOZndzUboLrPL6OlLUekQpQNFpUd6qB2/ZZezlLxfx
27qt/HPkoGmCX5EafRi6RSPnhDbLntca2sO4TDb5vBFBjS2UNYkGynEUb+NKZ84d
HCUeBA==
=zy5T
-----END PGP PUBLIC KEY BLOCK-----
Loading