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``.
109 phorkie makes use of an Elasticsearch__ installation, if you have one.
111 It is used to provide search capabilities and the list of recent pastes.
113 __ http://www.elasticsearch.org/
118 Edit ``config.php``, setting the ``elasticsearch`` property to the HTTP URL
119 of the index, e.g. ::
121 http://localhost:9200/phorkie/
123 You must use a search namespace with Elasticsearch such as ``phorkie/``.
124 Run the index script to import all existing pastes into the index::
126 php scripts/index.php
128 That's all. Open phorkie in your browser, and you'll notice the search box
134 In case something really went wrong and you need to reset the search
135 index, run the following command::
137 $ curl -XDELETE http://localhost:9200/phorkie/
138 {"ok":true,"acknowledged"}
140 Phorkie will automatically re-index everything when ``setupcheck`` is enabled
141 in the configuration file.
143 You may also manually run the reindexing script with::
145 $ php scripts/index.php
152 Make git repositories clonable
153 ==============================
154 To make git repositories clonable, you need to install ``git-daemon``
155 (``git-daemon-run`` package on Debian/Ubuntu).
157 Make the repositories available by symlinking the paste repository
158 directory (``$GLOBALS['phorkie']['cfg']['repos']`` setting) into
159 ``/var/cache/git``, e.g.::
161 $ ln -s /home/user/www/paste/repos/git /var/cache/git/paste
163 Edit your ``config.php`` and set the ``$GLOBALS['phorkie']['cfg']['git']['public']``
164 setting to ``git://$yourhostname/git/paste/``.
165 The rest will be appended automatically.
168 You're on your own to setup writable repositories.
171 Protect your site with OpenID
172 =============================
173 You have the option of enabling OpenID authentication to help secure your
175 Set the ``$GLOBALS['phorkie']['auth']`` values in the
176 ``data/config.php`` file as desired.
178 There are two different types of security you can apply.
179 First, you can restrict to one of three ``securityLevels``:
181 - completely open (``0``)
182 - protection of write-enabled functions such as add, edit, etc. (``1``)
183 - full site protection (``2``)
185 Additionally, you can restrict your site to ``listedUsersOnly``.
186 You will need to add the individual OpenID urls to the
187 ``$GLOBALS['phorkie']['auth']['users']`` variable.
190 Get information about paste editors
191 ===================================
192 Phorkie stores the user's OpenID or IP address (when not logged in) when
194 It is possible to get this information for each single commit::
196 // IP / OpenID for the latest commit
197 $ git notes --ref=identity show
200 // show IP / OpenID for a given commit
201 $ git notes --ref=identity show 29f82a
211 - filters (``xmllint --format``, ``rapper``)
212 - document how to keep disk usage low (block size)
214 - when 2 people edit, merge changes
216 - configurable highlights
217 - Atom feed for new pastes
218 - Atom feed for paste changes
227 Display page for paste
231 Display raw file contents
232 ``/[0-9]/tool/[a-zA-Z]+/(.+)``
233 Run a tool on the given file
234 ``/[0-9]/rev/[a-z0-9]+``
235 Show specific revision of the paste
239 Show DOAP document for paste
241 Create a fork of the paste
242 ``/search?q=..(&page=[0-9]+)?``
243 Search for term, with optional page
245 List all pastes, with optional page
247 Shows form for new paste
249 Login page for protecting site
251 Edit logged-in user information
254 Internal directory layout
255 =========================
260 1/ - work directory for paste #1
261 2/ - work directory for paste #2
263 1.git/ - git repository for paste #1
264 description - Description for the repository
265 2.git/ - git repository for paste #2
269 If you use nginx, place the following lines into your ``server`` block:
273 if (!-e $request_uri) {
274 rewrite ^/([0-9]+)$ /display.php?id=$1;
275 rewrite ^/([0-9]+)/delete$ /delete.php?id=$1;
276 rewrite ^/([0-9]+)/delete/confirm$ /delete.php?id=$1&confirm=1;
277 rewrite ^/([0-9]+)/doap$ /doap.php?id=$1;
278 rewrite ^/([0-9]+)/edit$ /edit.php?id=$1;
279 rewrite ^/([0-9]+)/fork$ /fork.php?id=$1;
280 rewrite ^/([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2;
281 rewrite ^/([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2;
282 rewrite ^/([0-9]+)/rev-raw/(.+)$ /raw.php?id=$1&rev=$2&file=$3;
283 rewrite ^/([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3;
285 rewrite ^/new$ /new.php;
286 rewrite ^/feed/new$ /feed-new.php;
287 rewrite ^/feed/updated$ /feed-updated.php;
288 rewrite ^/list$ /list.php;
289 rewrite ^/list/([0-9]+)$ /list.php?page=$1;
291 rewrite ^/search$ /search.php;
292 rewrite ^/search/([0-9]+)$ /search.php?page=$1;
294 rewrite ^/login$ /login.php;
295 rewrite ^/user$ /user.php;