view README.md @ 350:dbf1289bd721

coffee: init.
author edogawaconan <me@myconan.net>
date Thu, 03 Jul 2014 15:03:52 +0900
parents a0166874e31e
children 26545fe719ca
line wrap: on
line source

[![Code Climate](https://codeclimate.com/github/edogawaconan/zeropaste.png)](https://codeclimate.com/github/edogawaconan/zeropaste)
[![Build Status](https://drone.io/bitbucket.org/edogawaconan/zeropaste/status.png)](https://drone.io/bitbucket.org/edogawaconan/zeropaste/latest)

Zeropaste
=========

A pastebin with some features: create and destroy (with key) pastes.
The one running on [0paste.com](http://0paste.com).

Requirements:

* Ruby 1.9 or up (JRuby and Rubinius should also work)
* PostgreSQL
  (nothing PostgreSQL specific - can be easily changed if you know what you're doing.
  May or may not work with MySQL)
* Ruby Bundler

Optional:

* Newrelic account
* memcached

Suggested:

* nginx

Installation
------------

Left as an exercise.

nginx configuration
-------------------

Here's nginx configuration snippet which use memcached to completely bypass Rails.

    server {
      server_name 0paste.com;
      listen 80; listen [::]:80;
      root /var/www/0paste.com/public;
      error_page 445 = @zp;
      error_page 404 /404.html;

      if ($request_method = POST) {
        return 445;
      }

      location / {
        expires max;
        try_files $uri @zp;
      }

      location ~ /(\d+(?:-\x+)?)(?:(\.txt)|\.html)?$ {
        expires max;
        charset utf-8;
        set $memcached_key "zeropaste:pastes:$1$2";
        memcached_pass localhost:11211;

        default_type text/html;
        error_page 404 502 = @zp;
      }

      location @zp {
        proxy_pass http://localhost:9200;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_intercept_errors on;
      }
    }

Misc
----

Pasting from CLI:

    ...some commands... | curl 'http://0paste.com/pastes.txt' -F 'paste[paste]=<-'

Or with gzip to save bandwidth:

    ...some commands... | gzip | curl 'http://0paste.com/pastes.txt' -F 'paste[paste_gzip]=<-'

Privately:

    ...some commands... | gzip | curl 'http://0paste.com/pastes.txt' -F 'paste[is_private]=1' -F 'paste[paste_gzip]=<-'

Design
------

Current design is a bit crap. Suggestions and actual designs are welcome.