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
21 - delete existing files
22 - replace file with upload
23 - OpenID authentication
24 - multiple files in one paste
25 - syntax highlighting with GeSHi
26 - rST and Markdown rendering
27 - image upload + display
28 - external tool support
32 - history in the sidebar
34 - old files can be downloaded easily
35 - search across pastes: description, file names and file content
37 - options: quoting, logical and, or, not, partial words
43 1. Unzip the phorkie release file::
45 $ tar xjvf phorkie-0.3.0.tar.bz2
47 2. Create the git directories::
49 $ mkdir -p repos/git repos/work
50 $ chmod og+w repos/git repos/work
52 3. Install dependencies_
54 4. Copy ``data/config.php.dist`` to ``data/config.php`` and adjust it
57 $ cp data/config.php.dist data/config.php
58 $ $EDITOR data/config.php
60 Look at ``config.default.php`` for values that you may adjust.
62 5. Set your web server's document root to ``/path/to/phorkie/www/``
64 6. Open phorkie in your web browser
69 phorkie stands on the shoulders of giants.
71 It requires the following programs to be installed
76 - PEAR v1.9.2 or later
80 $ pear install versioncontrol_git-alpha
81 $ pear install services_libravatar-alpha
82 $ pear install http_request2
84 $ pear install date_humandiff-alpha
86 $ pear channel-discover pear.twig-project.org
87 $ pear install twig/Twig
89 $ pear channel-discover mediawiki.googlecode.com/svn
90 $ pear install mediawiki/geshi
92 $ pear channel-discover zustellzentrum.cweiske.de
93 $ pear install zz/mime_type_plaindetect-alpha
95 $ pear channel-discover pear.michelf.ca
96 $ pear install michelf/Markdown
98 Note that this version of GeSHi is a bit outdated, but it's the fastest
100 If you install it manually be sure to update the
101 path from ``data/config.default.php``.
107 phorkie makes use of an Elasticsearch__ installation, if you have one.
109 It is used to provide search capabilities and the list of recent pastes.
111 __ http://www.elasticsearch.org/
115 Edit ``config.php``, setting the ``elasticsearch`` property to the HTTP URL
116 of the index, e.g. ::
118 http://localhost:9200/phorkie/
120 Run the index script to import all existing pastes into the index::
122 php scripts/index.php
124 That's all. Open phorkie in your browser, and you'll notice the search box
130 In case something really went wrong and you need to reset the search
131 index, run the following command::
133 $ curl -XDELETE http://localhost:9200/phorkie/
134 {"ok":true,"acknowledged"}
136 Phorkie will automatically re-index everything when ``setupcheck`` is enabled
137 in the configuration file.
144 Make git repositories clonable
145 ==============================
146 To make git repositories clonable, you need to install ``git-daemon``
147 (``git-daemon-run`` package on Debian/Ubuntu).
149 Make the repositories available by symlinking the paste repository
150 directory (``$GLOBALS['phorkie']['cfg']['repos']`` setting) into
151 ``/var/cache/git``, e.g.::
153 $ ln -s /home/user/www/paste/repos/git /var/cache/git/paste
155 Edit your ``config.php`` and set the ``$GLOBALS['phorkie']['cfg']['git']['public']``
156 setting to ``git://$yourhostname/git/paste/``.
157 The rest will be appended automatically.
160 You're on your own to setup writable repositories.
163 Protect your site with OpenID
164 =============================
165 You have the option of enabling OpenID authentication to help secure your
167 Set the ``$GLOBALS['phorkie']['auth']`` values in the
168 ``data/config.php`` file as desired.
170 There are two different types of security you can apply.
171 First, you can restrict to one of three ``securityLevels``:
173 - completely open (``0``)
174 - protection of write-enabled functions such as add, edit, etc. (``1``)
175 - full site protection (``2``)
177 Additionally, you can restrict your site to ``listedUsersOnly``.
178 You will need to add the individual OpenID urls to the
179 ``$GLOBALS['phorkie']['auth']['users']`` variable.
188 - filters (``xmllint --format``, ``rapper``)
189 - document how to keep disk usage low (block size)
191 - when 2 people edit, merge changes
193 - configurable highlights
194 - Atom feed for new pastes
195 - Atom feed for paste changes
204 Display page for paste
208 Display raw file contents
209 ``/[0-9]/tool/[a-zA-Z]+/(.+)``
210 Run a tool on the given file
211 ``/[0-9]/rev/[a-z0-9]+``
212 Show specific revision of the paste
216 Show DOAP document for paste
218 Create a fork of the paste
219 ``/search?q=..(&page=[0-9]+)?``
220 Search for term, with optional page
222 List all pastes, with optional page
224 Shows form for new paste
226 Login page for protecting site
228 Edit logged-in user information
231 Internal directory layout
232 =========================
237 1/ - work directory for paste #1
238 2/ - work directory for paste #2
240 1.git/ - git repository for paste #1
241 description - Description for the repository
242 2.git/ - git repository for paste #2
246 If you use nginx, place the following lines into your ``server`` block:
250 if (!-e $request_uri) {
251 rewrite ^/([0-9]+)$ /display.php?id=$1;
252 rewrite ^/([0-9]+)/delete$ /delete.php?id=$1;
253 rewrite ^/([0-9]+)/delete/confirm$ /delete.php?id=$1&confirm=1;
254 rewrite ^/([0-9]+)/doap$ /doap.php?id=$1;
255 rewrite ^/([0-9]+)/edit$ /edit.php?id=$1;
256 rewrite ^/([0-9]+)/fork$ /fork.php?id=$1;
257 rewrite ^/([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2;
258 rewrite ^/([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2;
259 rewrite ^/([0-9]+)/rev-raw/(.+)$ /raw.php?id=$1&rev=$2&file=$3;
260 rewrite ^/([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3;
262 rewrite ^/new$ /new.php;
263 rewrite ^/list$ /list.php;
264 rewrite ^/list/([0-9]+)$ /list.php?page=$1;
266 rewrite ^/search$ /search.php;
267 rewrite ^/search/([0-9]+)$ /search.php?page=$1;
269 rewrite ^/login$ /login.php;
270 rewrite ^/user$ /user.php;