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 Run the index script to import all existing pastes into the index::
125 php scripts/index.php
127 That's all. Open phorkie in your browser, and you'll notice the search box
133 In case something really went wrong and you need to reset the search
134 index, run the following command::
136 $ curl -XDELETE http://localhost:9200/phorkie/
137 {"ok":true,"acknowledged"}
139 Phorkie will automatically re-index everything when ``setupcheck`` is enabled
140 in the configuration file.
142 You may also manually run the reindexing script with::
144 $ php scripts/index.php
151 Make git repositories clonable
152 ==============================
153 To make git repositories clonable, you need to install ``git-daemon``
154 (``git-daemon-run`` package on Debian/Ubuntu).
156 Make the repositories available by symlinking the paste repository
157 directory (``$GLOBALS['phorkie']['cfg']['repos']`` setting) into
158 ``/var/cache/git``, e.g.::
160 $ ln -s /home/user/www/paste/repos/git /var/cache/git/paste
162 Edit your ``config.php`` and set the ``$GLOBALS['phorkie']['cfg']['git']['public']``
163 setting to ``git://$yourhostname/git/paste/``.
164 The rest will be appended automatically.
167 You're on your own to setup writable repositories.
170 Protect your site with OpenID
171 =============================
172 You have the option of enabling OpenID authentication to help secure your
174 Set the ``$GLOBALS['phorkie']['auth']`` values in the
175 ``data/config.php`` file as desired.
177 There are two different types of security you can apply.
178 First, you can restrict to one of three ``securityLevels``:
180 - completely open (``0``)
181 - protection of write-enabled functions such as add, edit, etc. (``1``)
182 - full site protection (``2``)
184 Additionally, you can restrict your site to ``listedUsersOnly``.
185 You will need to add the individual OpenID urls to the
186 ``$GLOBALS['phorkie']['auth']['users']`` variable.
189 Get information about paste editors
190 ===================================
191 Phorkie stores the user's OpenID or IP address (when not logged in) when
193 It is possible to get this information for each single commit::
195 // IP / OpenID for the latest commit
196 $ git notes --ref=identity show
199 // show IP / OpenID for a given commit
200 $ git notes --ref=identity show 29f82a
210 - filters (``xmllint --format``, ``rapper``)
211 - document how to keep disk usage low (block size)
213 - when 2 people edit, merge changes
215 - configurable highlights
216 - Atom feed for new pastes
217 - Atom feed for paste changes
226 Display page for paste
230 Display raw file contents
231 ``/[0-9]/tool/[a-zA-Z]+/(.+)``
232 Run a tool on the given file
233 ``/[0-9]/rev/[a-z0-9]+``
234 Show specific revision of the paste
238 Show DOAP document for paste
240 Create a fork of the paste
241 ``/search?q=..(&page=[0-9]+)?``
242 Search for term, with optional page
244 List all pastes, with optional page
246 Shows form for new paste
248 Login page for protecting site
250 Edit logged-in user information
253 Internal directory layout
254 =========================
259 1/ - work directory for paste #1
260 2/ - work directory for paste #2
262 1.git/ - git repository for paste #1
263 description - Description for the repository
264 2.git/ - git repository for paste #2
268 If you use nginx, place the following lines into your ``server`` block:
272 if (!-e $request_uri) {
273 rewrite ^/([0-9]+)$ /display.php?id=$1;
274 rewrite ^/([0-9]+)/delete$ /delete.php?id=$1;
275 rewrite ^/([0-9]+)/delete/confirm$ /delete.php?id=$1&confirm=1;
276 rewrite ^/([0-9]+)/doap$ /doap.php?id=$1;
277 rewrite ^/([0-9]+)/edit$ /edit.php?id=$1;
278 rewrite ^/([0-9]+)/fork$ /fork.php?id=$1;
279 rewrite ^/([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2;
280 rewrite ^/([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2;
281 rewrite ^/([0-9]+)/rev-raw/(.+)$ /raw.php?id=$1&rev=$2&file=$3;
282 rewrite ^/([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3;
284 rewrite ^/new$ /new.php;
285 rewrite ^/list$ /list.php;
286 rewrite ^/list/([0-9]+)$ /list.php?page=$1;
288 rewrite ^/search$ /search.php;
289 rewrite ^/search/([0-9]+)$ /search.php?page=$1;
291 rewrite ^/login$ /login.php;
292 rewrite ^/user$ /user.php;