Pastebin-like application in Python/Django
Switch branches/tags
Nothing to show
Clone or download

README.md

Pasteque

About

Pasteque is a free and open source (MIT License) Pastebin like application written in Python/Django.

Demo

A demo instance of Pasteque is running at http://paste.henriet.eu.

Features

  • Support any database supported by Django (Sqlite3, MySQL, PostgreSQL, Oracle, ...)
  • Available in english, french .. and easily translatable into another languages.
  • Syntax highlighting for a bunch of languages using Pygments.
  • Public/private pastes (don't appear in the pastes history).
  • Time-based or "page loads"-based pastes expiration.
  • Password protection.
  • Possibility to enable/disable renderers and to choose the default one.
  • Limit pastes size.
  • Pastes history.

Upcoming releases features

  • Duplicate paste
  • Locale selector
  • Search engine
  • Disable pastes via link submitted by email
  • Copy to clipboard JS
  • Google Analytics easy-integration

Deployment with Sqlite3, nginx and UWSGI

This procedure will guide you step-by-step through the setup of your own instance of Pasteque using nginx et UWSGI. In this tutorial, app files and servers processes are owned by unprivilegied web user.

Pre-required system packages

It is assumed that some system packages are installed on the server where you plan to setup Pasteque.

On Debian

sudo apt-get install python python-pip python-dev nginx git

Application deployment

The application is deployed into /opt/app/webtools which is owner by user web.

sudo mkdir -p /opt/app/webtools/
sudo chown -R web: /opt/app/webtools/
cd /opt/app/webtools/
git clone https://github.com/setsuna-/pasteque .
mkdir -p var/logs var/db var/pygments-static

Install required python packages

Even if python packages are installed system-wide in this tutorial, virtualenv is of course the way to go.

sudo -s
export CFLAGS="-march=native -O2 -fomit-frame-pointer -pipe" && export CXXFLAGS="-march=native -O2 -fomit-frame-pointer -pipe"
pip install -r /opt/app/webtools/share/requirements.pip

Pasteque configuration and customization

vim /opt/app/webtools/webtools/settings.py
DISPLAY_NAME = 'YourCompany-Paste'
COMPRESS_ENABLED = True
SECRET_KEY = 'fill_a_secret_key_here'
ALLOWED_HOSTS = ['localhost','127.0.0.1','paste.henriet.eu']

Sqlite3 database creation

cd /opt/app/webtools/
./manage.py syncdb
Creating tables ...
Creating table paste_language
Creating table paste_paste
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
sqlite3 var/db/webtools.sqlite3
sqlite> .read share/language-dml.sql
sqlite> .quit

Deploy static assets

./manage.py collectstatic
ls static/
css  font  img  js

Test application

Validate application setup using the development web server.

./manage.py runserver paste.henriet.eu:16000

Configure UWSGI

cp /opt/app/webtools/share/uwsgi.ini /opt/app/webtools/uwsgi.ini
vim /opt/app/webtools/uwsgi.ini
[uwsgi]
chdir=/opt/app/webtools
module=webtools.wsgi:application
master=True
env=DJANGO_SETTINGS_MODULE=webtools.settings
pidfile=/opt/app/webtools/var/uwsgid-pasteque.pid
socket=/opt/app/webtools/var/uwsgid-pasteque.sock
processes=5
uid=1002
gid=1002
harakiri=20
limit-as=128
max-requests=5000
vacuum=True
daemonize=/opt/app/webtools/var/uwsgid-pasteque.log

Run UWSGI

uwsgi --ini /opt/app/webtools/uwsgi.ini
[uWSGI] getting INI configuration from /opt/app/webtools/uwsgi.ini
ps -ef |grep uwsgi
web     2269     1  0 11:32 ?        00:00:00 uwsgi --ini /opt/app/webtools/uwsgi.ini
web     2271  2269  0 11:32 ?        00:00:00 uwsgi --ini /opt/app/webtools/uwsgi.ini
web     2272  2269  0 11:32 ?        00:00:00 uwsgi --ini /opt/app/webtools/uwsgi.ini
web     2273  2269  0 11:32 ?        00:00:00 uwsgi --ini /opt/app/webtools/uwsgi.ini
web     2274  2269  0 11:32 ?        00:00:00 uwsgi --ini /opt/app/webtools/uwsgi.ini
web     2275  2269  0 11:32 ?        00:00:00 uwsgi --ini /opt/app/webtools/uwsgi.ini
cat /opt/app/webtools/var/uwsgid-pasteque.log to check if everything is ok.

Configure NGINX

sudo vim /etc/nginx/nginx.conf
user web;
sudo vim /etc/nginx/sites-available/webtools-pasteque
upstream uwsgi {
  server unix:///opt/app/webtools/var/uwsgid-pasteque.sock;
}
server {
  listen               80;
  server_name          paste.henriet.eu;
  charset              utf-8;
  error_log            /opt/app/webtools/var/nginx-error.log;
  access_log           /opt/app/webtools/var/nginx-access.log;
  client_max_body_size 8M;
  
  location /static {
    alias /opt/app/webtools/static;
    expires 30d;
  }

  location / {
    uwsgi_pass uwsgi;
    include    /etc/nginx/uwsgi_params;
  }
}
cd /etc/nginx/sites-enabled/
sudo ln -s ../sites-available/webtools-pasteque

Run nginx

sudo /etc/init.d/nginx restart
Restarting nginx: nginx.