Corrected git version
[phorkie.git] / README.rst
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.
6
7 Project page: http://sourceforge.net/p/phorkie/
8
9 .. contents:: Table of Contents
10
11 ========
12 Features
13 ========
14   - every paste is a git repository
15   - repositories can be cloned
16   - clone url can be displayed
17   - openid authentication
18   - paste editing
19   - add new files
20   - delete existing files
21   - replace file with upload
22   - multiple files in one paste
23   - syntax highlighting with GeSHi
24   - rST and Markdown rendering
25   - image upload + display
26   - external tool support
27   - xmllint
28   - php syntax check
29   - history in the sidebar
30   - old files can be downloaded easily
31   - search across pastes: description, file names and file content
32   - options: quoting, logical and, or, not, partial words
33
34
35 ============
36 Installation
37 ============
38 1. Unzip the phorkie release file::
39
40    $ tar xjvf phorkie-0.2.0.tar.bz2
41
42 2. Create the git directories::
43
44    $ mkdir -p repos/git repos/work
45    $ chmod og+w repos/git repos/work
46
47 3. Install dependencies_
48
49 4. Copy ``data/config.php.dist`` to ``data/config.php`` and adjust it
50    to your needs::
51
52    $ cp data/config.php.dist data/config.php
53    $ $EDITOR data/config.php
54
55    Look at ``config.default.php`` for values that you may adjust.
56
57 5. Set your web server's document root to ``/path/to/phorkie/www/``
58
59 6. Open phorkie in your web browser
60
61
62 Dependencies
63 ============
64 phorkie stands on the shoulders of giants.  Git will need to be a
65 minimum version of v1.7.5.
66
67 ::
68   $ pear install versioncontrol_git-alpha
69   $ pear install services_libravatar-alpha
70   $ pear install http_request2
71   $ pear install pager
72   $ pear install date_humandiff-alpha
73
74   $ pear channel-discover pear.twig-project.org
75   $ pear install twig/Twig
76
77   $ pear channel-discover mediawiki.googlecode.com/svn
78   $ pear install mediawiki/geshi
79
80   $ pear channel-discover zustellzentrum.cweiske.de
81   $ pear install zz/mime_type_plaindetect-alpha
82
83   $ pear channel-discover pear.michelf.ca
84   $ pear install michelf/Markdown
85   
86 Note that this version of GeSHi is a bit outdated, but it's the fastest
87 way to install it.  If you install it manually be sure to update the
88 path in ``data/config.default.php``.
89
90 ======
91 Search
92 ======
93
94 phorkie makes use of an Elasticsearch__ installation, if you have one.
95
96 It is used to provide search capabilities and the list of recent pastes.
97
98 __ http://www.elasticsearch.org/
99
100 Setup
101 =====
102 Edit ``config.php``, setting the ``elasticsearch`` property to the HTTP URL
103 of the index, e.g. ::
104
105   http://localhost:9200/phorkie/
106
107 Run the index script to import all existing pastes into the index::
108
109   php scripts/index.php
110
111 That's all. Open phorkie in your browser, and you'll notice the search box
112 in the top menu.
113
114
115 Reset
116 =====
117 In case something really went wrong and you need to reset the search
118 index, run the following command::
119
120   $ curl -XDELETE http://localhost:9200/phorkie/
121   {"ok":true,"acknowledged"}
122
123 Phorkie will automatically re-index everything when ``setupcheck`` is enabled
124 in the configuration file.
125
126
127 =====
128 HowTo
129 =====
130
131 Make git repositories clonable
132 ==============================
133 To make git repositories clonable, you need to install ``git-daemon``
134 (``git-daemon-run`` package on Debian/Ubuntu).
135
136 Now make the repositories available by symlinking the paste repository
137 directory (``$GLOBALS['phorkie']['cfg']['repos']`` setting) into
138 ``/var/cache/git``, e.g.::
139
140   $ ln -s /home/user/www/paste/repos/git /var/cache/git/paste
141
142 Edit your ``config.php`` and set the ``$GLOBALS['phorkie']['cfg']['git']['public']``
143 setting to ``git://$yourhostname/git/paste/``.
144 The rest will be appended automatically.
145
146 You're on your own to setup writable repositories.
147
148 Protect your site with OpenID
149 =============================
150 You have the option of enabling OpenID authentication to help secure your
151 pastes on phorkie.  Set the ``$GLOBALS['phorkie']['auth']`` values in the
152 ``data/config.php`` file as desired.  
153
154 There are two different types of security you can apply.  First, you can
155 restrict to one of three ``securityLevels``; completely open (0), protection
156 of write-enabled functions such as add, edit, etc. (1), and full site
157 protection.  Additionally, you can restrict your site to ``listedUsersOnly``.
158 You will need to add the individual OpenIDs identity urls to the
159 ``$GLOBALS['phorkie']['auth']['users']`` variable.
160
161
162 =================
163 Technical details
164 =================
165
166 TODO
167 ====
168 - filters (``xmllint --format``, ``rapper``)
169 - document how to keep disk usage low (block size)
170 - comments
171 - when 2 people edit, merge changes
172 - diff changes
173 - configurable highlights
174 - Atom feed for new pastes
175 - Atom feed for paste changes
176
177
178 URLs
179 ====
180
181 ``/``
182   Index page.
183 ``/[0-9]+``
184   Display page for paste
185 ``/[0-9]/edit``
186   Edit the paste
187 ``/[0-9]+/raw/(.+)``
188   Display raw file contents
189 ``/[0-9]/tool/[a-zA-Z]+/(.+)``
190   Run a tool on the given file
191 ``/[0-9]/rev/[a-z0-9]+``
192   Show specific revision of the paste
193 ``/[0-9]/delete``
194   Delete the paste
195 ``/[0-9]/doap``
196   Show DOAP document for paste
197 ``/[0-9]/fork``
198   Create a fork of the paste
199 ``/search?q=..(&page=[0-9]+)?``
200   Search for term, with optional page
201 ``/list(/[0-9])?``
202   List all pastes, with optional page
203 ``/new``
204   Shows form for new paste
205 ``/login``
206   Login page for protecting site
207 ``/user``
208   Edit logged-in user information
209
210
211 Internal directory layout
212 =========================
213 ::
214
215   repos/
216     work/
217       1/ - work directory for paste #1
218       2/ - work directory for paste #2
219     git/
220       1.git/ - git repository for paste #1
221         description - Description for the repository
222       2.git/ - git repository for paste #2
223
224 nginx rewrites
225 ==============
226 If you use nginx, place the following lines into your ``server`` block:
227
228 ::
229
230   if (!-e $request_uri) {
231     rewrite ^/([0-9]+)$ /display.php?id=$1;
232     rewrite ^/([0-9]+)/delete$ /delete.php?id=$1;
233     rewrite ^/([0-9]+)/delete/confirm$ /delete.php?id=$1&confirm=1;
234     rewrite ^/([0-9]+)/doap$ /doap.php?id=$1;
235     rewrite ^/([0-9]+)/edit$ /edit.php?id=$1;
236     rewrite ^/([0-9]+)/fork$ /fork.php?id=$1;
237     rewrite ^/([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2;
238     rewrite ^/([0-9]+)/rev/(.+)$ /revision.php?id=$1&rev=$2;
239     rewrite ^/([0-9]+)/rev-raw/(.+)$ /raw.php?id=$1&rev=$2&file=$3;
240     rewrite ^/([0-9]+)/tool/([^/]+)/(.+)$ /tool.php?id=$1&tool=$2&file=$3;
241
242     rewrite ^/new$ /new.php;
243     rewrite ^/list$ /list.php;
244     rewrite ^/list/([0-9]+)$ /list.php?page=$1;
245
246     rewrite ^/search$ /search.php;
247     rewrite ^/search/([0-9]+)$ /search.php?page=$1;
248
249     rewrite ^/login$ /login.php;
250     rewrite ^/user$ /user.php;
251   }