1 ************************************
2 phorkie - PHP and Git based pastebin
3 ************************************
4 Self-hosted pastebin software written in PHP.
5 Pastes are editable, may have multiple files and are stored in git repositories.
7 Project page: http://sourceforge.net/p/phorkie/
9 .. contents:: Table of Contents
14 - every paste is a git repository
16 - repositories can be cloned
17 - clone url can be displayed
18 - remote pastes can be forked (rel="vcs-git" and gist.github.com)
22 - delete existing files
23 - replace file with upload
24 - multiple files in one paste
25 - syntax highlighting with GeSHi
26 - rST and Markdown rendering
27 - image upload + display
28 - OpenID authentication
29 - external tool support
33 - history in the sidebar
35 - old files can be downloaded easily
36 - search across pastes: description, file names and file content
38 - options: quoting, logical and, or, not, partial words
44 1. Unzip the phorkie release file::
46 $ tar xjvf phorkie-0.3.0.tar.bz2
48 2. Create the git directories::
50 $ mkdir -p repos/git repos/work
51 $ chmod og+w repos/git repos/work
53 3. Install dependencies_
55 4. Copy ``data/config.php.dist`` to ``data/config.php`` and adjust it
58 $ cp data/config.php.dist data/config.php
59 $ $EDITOR data/config.php
61 Look at ``config.default.php`` for values that you may adjust.
63 5. Set your web server's document root to ``/path/to/phorkie/www/``
65 6. Open phorkie in your web browser
70 phorkie stands on the shoulders of giants.
72 It requires the following programs to be installed
77 - PEAR v1.9.2 or later
81 $ pear install versioncontrol_git-alpha
82 $ pear install services_libravatar-alpha
83 $ pear install http_request2
85 $ pear install date_humandiff-alpha
87 $ pear channel-discover pear.twig-project.org
88 $ pear install twig/Twig
90 $ pear channel-discover mediawiki.googlecode.com/svn
91 $ pear install mediawiki/geshi
93 $ pear channel-discover zustellzentrum.cweiske.de
94 $ pear install zz/mime_type_plaindetect-alpha
96 $ pear channel-discover pear.michelf.ca
97 $ pear install michelf/Markdown
99 Note that this version of GeSHi is a bit outdated, but it's the fastest
101 If you install it manually be sure to update the
102 path from ``data/config.default.php``.
108 phorkie makes use of an Elasticsearch__ installation, if you have one.
110 It is used to provide search capabilities and the list of recent pastes.
112 __ http://www.elasticsearch.org/
116 Edit ``config.php``, setting the ``elasticsearch`` property to the HTTP URL
117 of the index, e.g. ::
119 http://localhost:9200/phorkie/
121 Run the index script to import all existing pastes into the index::
123 php scripts/index.php
125 That's all. Open phorkie in your browser, and you'll notice the search box
131 In case something really went wrong and you need to reset the search
132 index, run the following command::
134 $ curl -XDELETE http://localhost:9200/phorkie/
135 {"ok":true,"acknowledged"}
137 Phorkie will automatically re-index everything when ``setupcheck`` is enabled
138 in the configuration file.
145 Make git repositories clonable
146 ==============================
147 To make git repositories clonable, you need to install ``git-daemon``
148 (``git-daemon-run`` package on Debian/Ubuntu).
150 Make the repositories available by symlinking the paste repository
151 directory (``$GLOBALS['phorkie']['cfg']['repos']`` setting) into
152 ``/var/cache/git``, e.g.::
154 $ ln -s /home/user/www/paste/repos/git /var/cache/git/paste
156 Edit your ``config.php`` and set the ``$GLOBALS['phorkie']['cfg']['git']['public']``
157 setting to ``git://$yourhostname/git/paste/``.
158 The rest will be appended automatically.
161 You're on your own to setup writable repositories.
164 Protect your site with OpenID
165 =============================
166 You have the option of enabling OpenID authentication to help secure your
168 Set the ``$GLOBALS['phorkie']['auth']`` values in the
169 ``data/config.php`` file as desired.
171 There are two different types of security you can apply.
172 First, you can restrict to one of three ``securityLevels``:
174 - completely open (``0``)
175 - protection of write-enabled functions such as add, edit, etc. (``1``)
176 - full site protection (``2``)
178 Additionally, you can restrict your site to ``listedUsersOnly``.
179 You will need to add the individual OpenID urls to the
180 ``$GLOBALS['phorkie']['auth']['users']`` variable.
183 Get information about paste editors
184 ===================================
185 Phorkie stores the user's OpenID or IP address (when not logged in) when
187 It is possible to get this information for each single commit::
189 // IP / OpenID for the latest commit
190 $ git notes --ref=identity show
193 // show IP / OpenID for a given commit
194 $ git notes --ref=identity show 29f82a
204 - filters (``xmllint --format``, ``rapper``)
205 - document how to keep disk usage low (block size)
207 - when 2 people edit, merge changes
209 - configurable highlights
210 - Atom feed for new pastes
211 - Atom feed for paste changes
220 Display page for paste
224 Display raw file contents
225 ``/[0-9]/tool/[a-zA-Z]+/(.+)``
226 Run a tool on the given file
227 ``/[0-9]/rev/[a-z0-9]+``
228 Show specific revision of the paste
232 Show DOAP document for paste
234 Create a fork of the paste
235 ``/search?q=..(&page=[0-9]+)?``
236 Search for term, with optional page
238 List all pastes, with optional page
240 Shows form for new paste
242 Login page for protecting site
244 Edit logged-in user information
247 Internal directory layout
248 =========================
253 1/ - work directory for paste #1
254 2/ - work directory for paste #2
256 1.git/ - git repository for paste #1
257 description - Description for the repository
258 2.git/ - git repository for paste #2
262 If you use nginx, place the following lines into your ``server`` block:
266 if (!-e $request_uri) {
267 rewrite ^/([0-9]+)$ /display.php?id=$1;
268 rewrite ^/([0-9]+)/delete$ /delete.php?id=$1;
269 rewrite ^/([0-9]+)/delete/confirm$ /delete.php?id=$1&confirm=1;
270 rewrite ^/([0-9]+)/doap$ /doap.php?id=$1;
271 rewrite ^/([0-9]+)/edit$ /edit.php?id=$1;
272 rewrite ^/([0-9]+)/fork$ /fork.php?id=$1;
273 rewrite ^/([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2;
274 rewrite ^/([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2;
275 rewrite ^/([0-9]+)/rev-raw/(.+)$ /raw.php?id=$1&rev=$2&file=$3;
276 rewrite ^/([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3;
278 rewrite ^/new$ /new.php;
279 rewrite ^/list$ /list.php;
280 rewrite ^/list/([0-9]+)$ /list.php?page=$1;
282 rewrite ^/search$ /search.php;
283 rewrite ^/search/([0-9]+)$ /search.php?page=$1;
285 rewrite ^/login$ /login.php;
286 rewrite ^/user$ /user.php;