Installation tutorial with Debian, NGinx and gunicorn

preliminary packages:

apt-get install build-essential nginx supervisor python-dev git-core python-pip python-virtualenv

commands to run

# add user bepasty to system
adduser bepasty
# change to user bepasty
sudo su - bepasty
# clone repository from github
git clone https://github.com/bepasty/bepasty-server.git repo
# create folder for storage
mkdir storage
# create folder for logs
mkdir logs
# create virtualenv
virtualenv .
# activate virtualenv
. bin/activate
cd repo
# install bepasty and requirements
pip install -e .
# add gunicorn and gevent for hosting
pip install gunicorn gevent

config file for bepasty – /home/bepasty/bepasty.conf:

Copy src/bepasty/config.py to /home/bepasty/bepasty.conf first, remove the class Config and remove all indents in the file. The comments can be removed too, if you feel the need to. At last modify these two configs variables:

STORAGE = 'filesystem'
STORAGE_FILESYSTEM_DIRECTORY = '/home/bepasty/storage/'

add this content to /home/bepasty/bin/gunicorn_bepasty:

#!/bin/bash

NAME="bepasty"
HOME=/home/bepasty
SOCKFILE=$HOME/gunicorn.sock  # we will communicate using this unix socket
PIDFILE=$HOME/gunicorn.pid
NUM_WORKERS=3                 # how many worker processes should Gunicorn spawn
export BEPASTY_CONFIG=$HOME/bepasty.conf

source $HOME/bin/activate

cd $HOME/repo

exec gunicorn bepasty.wsgi \
  --name $NAME \
  --workers $NUM_WORKERS \
  --log-level=info \
  --bind=unix:$SOCKFILE \
  --pid $PIDFILE \
  -k gevent

Make it executable: chmod +x ~/bin/gunicorn_bepasty

A nginx configuration i.e. in /etc/nginx/conf.d/bepasty.conf:

upstream pasty_server {
  server unix:/home/bepasty/gunicorn.sock fail_timeout=0;
}

server {
  listen 80;
  #listen [::]:80; #uncomment this if your server supports IPv6
  server_name paste.example.org;  # <-- add your domainname here

  access_log /home/bepasty/logs/nginx-access.log;
  error_log /home/bepasty/logs/nginx-error.log;

  client_max_body_size 32M;

  location / {
      proxy_set_header Host $http_host;
      proxy_pass http://pasty_server;
  }

  location /static/ {
      alias /home/bepasty/repo/src/bepasty/static/;
  }
}

Now reload your nginx configuration: service nginx reload.

Supervisord config i.e. in /etc/supervisor/conf.d/bepasty.conf:

[program:bepasty]
command = /home/bepasty/bin/gunicorn_bepasty                  ; Command to start app
user = bepasty                                                ; User to run as
stdout_logfile = /home/bepasty/logs/gunicorn_supervisor.log   ; Where to write log messages
redirect_stderr = true                                        ; Save stderr in the same log

Finally reload supervisor: service supervisor reload