diff options
| author | bnewbold <bnewbold@robocracy.org> | 2016-05-01 21:32:19 -0400 | 
|---|---|---|
| committer | bnewbold <bnewbold@robocracy.org> | 2016-05-01 21:32:19 -0400 | 
| commit | 42b75cdd3057900f0edb871d8f116525786e0567 (patch) | |
| tree | 2139d5d049249b67aedb6ff7970478208b1ee6e7 | |
| parent | 312beb2a690ddbcb70d33b369f0085f77e0a5b8a (diff) | |
| download | bnewnet-42b75cdd3057900f0edb871d8f116525786e0567.tar.gz bnewnet-42b75cdd3057900f0edb871d8f116525786e0567.zip | |
start pelican version of site
| -rw-r--r-- | Makefile | 124 | ||||
| -rwxr-xr-x | develop_server.sh | 103 | ||||
| -rw-r--r-- | fabfile.py | 94 | ||||
| -rw-r--r-- | pelicanconf.py | 35 | ||||
| -rw-r--r-- | publishconf.py | 24 | 
5 files changed, 380 insertions, 0 deletions
| diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bacb16a --- /dev/null +++ b/Makefile @@ -0,0 +1,124 @@ +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=adze.robocracy.org +SSH_PORT=22 +SSH_USER=bnewbold +SSH_TARGET_DIR=/srv/http/bnewbold.net/www + +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/ + +GITHUB_PAGES_BRANCH=gh-pages + +DEBUG ?= 0 +ifeq ($(DEBUG), 1) +	PELICANOPTS += -D +endif + +RELATIVE ?= 0 +ifeq ($(RELATIVE), 1) +	PELICANOPTS += --relative-urls +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 serve-global [SERVER=0.0.0.0]  serve (as root) to $(SERVER):80    ' +	@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 'Set the RELATIVE variable to 1 to enable relative urls                    ' +	@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 + +serve-global: +ifdef SERVER +	cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 $(SERVER) +else +	cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 0.0.0.0 +endif + + +devserver: +ifdef PORT +	$(BASEDIR)/develop_server.sh restart $(PORT) +else +	$(BASEDIR)/develop_server.sh restart +endif + +stopserver: +	$(BASEDIR)/develop_server.sh stop +	@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 -rvzc --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 --guess-mime-type + +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 -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR) +	git push origin $(GITHUB_PAGES_BRANCH) + +.PHONY: html help clean regenerate serve serve-global devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github diff --git a/develop_server.sh b/develop_server.sh new file mode 100755 index 0000000..8c2f27f --- /dev/null +++ b/develop_server.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash +## +# This section should match your Makefile +## +PY=${PY:-python} +PELICAN=${PELICAN:-pelican} +PELICANOPTS= + +BASEDIR=$(pwd) +INPUTDIR=$BASEDIR/content +OUTPUTDIR=$BASEDIR/output +CONFFILE=$BASEDIR/pelicanconf.py + +### +# Don't change stuff below here unless you are sure +### + +SRV_PID=$BASEDIR/srv.pid +PELICAN_PID=$BASEDIR/pelican.pid + +function usage(){ +  echo "usage: $0 (stop) (start) (restart) [port]" +  echo "This starts Pelican in debug and reload mode and then launches" +  echo "an HTTP server to help site development. It doesn't read" +  echo "your Pelican settings, so if you edit any paths in your Makefile" +  echo "you will need to edit your settings as well." +  exit 3 +} + +function alive() { +  kill -0 $1 >/dev/null 2>&1 +} + +function shut_down(){ +  PID=$(cat $SRV_PID) +  if [[ $? -eq 0 ]]; then +    if alive $PID; then +      echo "Stopping HTTP server" +      kill $PID +    else +      echo "Stale PID, deleting" +    fi +    rm $SRV_PID +  else +    echo "HTTP server PIDFile not found" +  fi + +  PID=$(cat $PELICAN_PID) +  if [[ $? -eq 0 ]]; then +    if alive $PID; then +      echo "Killing Pelican" +      kill $PID +    else +      echo "Stale PID, deleting" +    fi +    rm $PELICAN_PID +  else +    echo "Pelican PIDFile not found" +  fi +} + +function start_up(){ +  local port=$1 +  echo "Starting up Pelican and HTTP server" +  shift +  $PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS & +  pelican_pid=$! +  echo $pelican_pid > $PELICAN_PID +  cd $OUTPUTDIR +  $PY -m pelican.server $port & +  srv_pid=$! +  echo $srv_pid > $SRV_PID +  cd $BASEDIR +  sleep 1 +  if ! alive $pelican_pid ; then +    echo "Pelican didn't start. Is the Pelican package installed?" +    return 1 +  elif ! alive $srv_pid ; then +    echo "The HTTP server didn't start. Is there another service using port" $port "?" +    return 1 +  fi +  echo 'Pelican and HTTP server processes now running in background.' +} + +### +#  MAIN +### +[[ ($# -eq 0) || ($# -gt 2) ]] && usage +port='' +[[ $# -eq 2 ]] && port=$2 + +if [[ $1 == "stop" ]]; then +  shut_down +elif [[ $1 == "restart" ]]; then +  shut_down +  start_up $port +elif [[ $1 == "start" ]]; then +  if ! start_up $port; then +    shut_down +  fi +else +  usage +fi diff --git a/fabfile.py b/fabfile.py new file mode 100644 index 0000000..f3c0ce3 --- /dev/null +++ b/fabfile.py @@ -0,0 +1,94 @@ +from fabric.api import * +import fabric.contrib.project as project +import os +import shutil +import sys +import SocketServer + +from pelican.server import ComplexHTTPRequestHandler + +# Local path configuration (can be absolute or relative to fabfile) +env.deploy_path = 'output' +DEPLOY_PATH = env.deploy_path + +# Remote server configuration +production = 'bnewbold@adze.robocracy.org:22' +dest_path = '/srv/http/bnewbold.net/www' + +# Rackspace Cloud Files configuration settings +env.cloudfiles_username = 'my_rackspace_username' +env.cloudfiles_api_key = 'my_rackspace_api_key' +env.cloudfiles_container = 'my_cloudfiles_container' + +# Github Pages configuration +env.github_pages_branch = "gh-pages" + +# Port for `serve` +PORT = 8000 + +def clean(): +    """Remove generated files""" +    if os.path.isdir(DEPLOY_PATH): +        shutil.rmtree(DEPLOY_PATH) +        os.makedirs(DEPLOY_PATH) + +def build(): +    """Build local version of site""" +    local('pelican -s pelicanconf.py') + +def rebuild(): +    """`clean` then `build`""" +    clean() +    build() + +def regenerate(): +    """Automatically regenerate site upon file modification""" +    local('pelican -r -s pelicanconf.py') + +def serve(): +    """Serve site at http://localhost:8000/""" +    os.chdir(env.deploy_path) + +    class AddressReuseTCPServer(SocketServer.TCPServer): +        allow_reuse_address = True + +    server = AddressReuseTCPServer(('', PORT), ComplexHTTPRequestHandler) + +    sys.stderr.write('Serving on port {0} ...\n'.format(PORT)) +    server.serve_forever() + +def reserve(): +    """`build`, then `serve`""" +    build() +    serve() + +def preview(): +    """Build production version of site""" +    local('pelican -s publishconf.py') + +def cf_upload(): +    """Publish to Rackspace Cloud Files""" +    rebuild() +    with lcd(DEPLOY_PATH): +        local('swift -v -A https://auth.api.rackspacecloud.com/v1.0 ' +              '-U {cloudfiles_username} ' +              '-K {cloudfiles_api_key} ' +              'upload -c {cloudfiles_container} .'.format(**env)) + +@hosts(production) +def publish(): +    """Publish to production via rsync""" +    local('pelican -s publishconf.py') +    project.rsync_project( +        remote_dir=dest_path, +        exclude=".DS_Store", +        local_dir=DEPLOY_PATH.rstrip('/') + '/', +        delete=True, +        extra_opts='-c', +    ) + +def gh_pages(): +    """Publish to GitHub Pages""" +    rebuild() +    local("ghp-import -b {github_pages_branch} {deploy_path}".format(**env)) +    local("git push origin {github_pages_branch}".format(**env)) diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..b67f768 --- /dev/null +++ b/pelicanconf.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # +from __future__ import unicode_literals + +AUTHOR = u'bnewbold' +SITENAME = u'bnewbold.net' +SITEURL = '' + +PATH = 'content' + +TIMEZONE = 'America/New_York' + +DEFAULT_LANG = u'en' + +# Feed generation is usually not desired when developing +FEED_ALL_ATOM = None +CATEGORY_FEED_ATOM = None +TRANSLATION_FEED_ATOM = None +AUTHOR_FEED_ATOM = None +AUTHOR_FEED_RSS = None + +# Blogroll +LINKS = (('Pelican', 'http://getpelican.com/'), +         ('Python.org', 'http://python.org/'), +         ('Jinja2', 'http://jinja.pocoo.org/'), +         ('You can modify those links in your config file', '#'),) + +# Social widget +SOCIAL = (('You can add links in your config file', '#'), +          ('Another social link', '#'),) + +DEFAULT_PAGINATION = False + +# Uncomment following line if you want document-relative URLs when developing +#RELATIVE_URLS = True diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..85ff8ef --- /dev/null +++ b/publishconf.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # +from __future__ import unicode_literals + +# This file is only used if you use `make publish` or +# explicitly specify it as your config file. + +import os +import sys +sys.path.append(os.curdir) +from pelicanconf import * + +SITEURL = '' +RELATIVE_URLS = False + +FEED_ALL_ATOM = 'feeds/all.atom.xml' +CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml' + +DELETE_OUTPUT_DIRECTORY = True + +# Following items are often useful when publishing + +#DISQUS_SITENAME = "" +#GOOGLE_ANALYTICS = "" | 
