Pelican CMS

Jekyll

Originally, I had decided to locally host a Jekyll install instead of running through Github Pages. This was actually a pretty bad idea. Not only did I have the added complexity of patching the VPS, but I also had to maintain things like SSL certificates. I also had to run a reverse proxy from NGINX in order to serve SSL. This was pretty bonkers for a static content blog so I decided to go with another CMS.

Porting Jekyll content to Pelican

I love markdown. Content migration was a breeze. I realistically only needed to make a couple of small edits for how the content was classified.

Theme

I really like bootstrap. It’s fairly easy to use and allows for easier design. I used the “pelican-bootstrap3 theme.”

Images

I wanted to add colorbox to all my images. There was actually a guide online that was very helpful and I can guarantee that it does a better job of explaining the steps. You can find the link here.

pelicanconf.py

If you’re curious about what my pelicanconf.py looks like, it is as follows. I apologize for the lack of any order.

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals

AUTHOR = 'Colin Murray'
SITENAME = 'Web Security'
SITESUBTITLE = 'Web Security Blog by Colin Murray.'
BANNER_SUBTITLE = 'A blog by Colin Murray'
SITEURL = 'https://murraycolin.org'
DEFAULT_CATEGORY = 'Tech'
TWITTER_USERNAME = 'murraycolinc'
TYPOGRIFY = True
SLUGIFY_SOURCE = 'title'
DISPLAY_CATEGORIES_ON_SIDEBAR = True
DISPLAY_CATEGORIES_ON_MENU = None
GZIP_CACHE = True
SHOW_SERIES = True
DISPLAY_TAGS_ON_SIDEBAR = True
TAG_CLOUD_MAX_ITEMS = 5


DIRECT_TEMPLATES = ['index', 'categories', 'authors', 'archives']

MENUITEMS =  [
             ('About Me', 'https://murraycolin.com'),
             ('You\'re Being Reported', 'https://yourebeingreported.com'),
             ('Emulated Security', 'https://emulatedsecurity.com'),
             ('Thrifty Under Thirty', 'https://thriftyunderthirty.com'),
             ]

ABOUT_ME = ("Colin Murray is a cyber security analyst at Distil Networks.\n
He focuses on web application security,\n
 but has a tendency to dabble in programming\n 
 and networking. For fun,\n 
 he enjoys music, aviation, and breaking web apps.")

AVATAR = 'static/avatar.jpg'

PATH = 'content'

TIMEZONE = 'America/Los_Angeles'

DEFAULT_LANG = 'en'

# Feed generation is usually not desired when developing
FEED_DOMAIN = SITEURL
FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None

GOOGLE_ANALYTICS = N/A

# Blogroll
SOCIAL = (
         ('About Me', 'https://murraycolin.com', 'user'),
         ('Twitter', 'http://twitter.com/murraycolinc'),
         ('Github', 'https://github.com/murraycolin'),
         ('Linkedin', 'https://linkedin.com/in/murraycolinc='),
         ('Email', 'mailto:colin@murraycolin.com', 'envelope'),
         )

DEFAULT_PAGINATION = 10

# Uncomment following line if you want document-relative URLs when developing
RELATIVE_URLS = True

DISPLAY_TAGS_INLINE = None

BANNER = 'static/banner.jpg'
FAVICON = 'static/favicon.jpg'

# path-specific metadata
EXTRA_PATH_METADATA = {
        'static/robots.txt': {'path': 'static/robots.txt'},
        'static/favicon.jpg': {'path': 'static/favicon.jpg'},
            }

# static paths will be copied without parsing their contents
STATIC_PATHS = [
    'static',
    'static/robots.txt',
    'static/favicon.ico',
    'images',
    'pdfs',
     ]
           
THEME = 'pelican-themes/pelican-bootstrap3'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = ['pelican-plugins/']
PLUGINS = ['i18n_subsites', 'related_posts', 
'tipue_search', 'optimize_images', 'yuicompressor', 'series', 'tag_cloud']
BOOTSTRAP_THEME = 'flatly'
SHOW_ARTICLE_CATEGORY = True
DISPLAY_BREADCRUMBS = True

This configuration is still undergoing some major changes.

Colin Murray avatar
About Colin Murray
I am a solutions engineer at Cloudflare. All opinions are my own.
comments powered by Disqus