annotate docs/installation_puppet.rst @ 6532:33b71a130b16

templates: properly escape inline JavaScript values TLDR: Kallithea has issues with escaping values for use in inline JS. Despite judicious poking of the code, no actual security vulnerabilities have been found, just lots of corner-case bugs. This patch fixes those, and hardens the code against actual security issues. The long version: To embed a Python value (typically a 'unicode' plain-text value) in a larger file, it must be escaped in a context specific manner. Example: >>> s = u'<script>alert("It\'s a trap!");</script>' 1) Escaped for insertion into HTML element context >>> print cgi.escape(s) &lt;script&gt;alert("It's a trap!");&lt;/script&gt; 2) Escaped for insertion into HTML element or attribute context >>> print h.escape(s) &lt;script&gt;alert(&#34;It&#39;s a trap!&#34;);&lt;/script&gt; This is the default Mako escaping, as usually used by Kallithea. 3) Encoded as JSON >>> print json.dumps(s) "<script>alert(\"It's a trap!\");</script>" 4) Escaped for insertion into a JavaScript file >>> print '(' + json.dumps(s) + ')' ("<script>alert(\"It's a trap!\");</script>") The parentheses are not actually required for strings, but may be needed to avoid syntax errors if the value is a number or dict (object). 5) Escaped for insertion into a HTML inline <script> element >>> print h.js(s) ("\x3cscript\x3ealert(\"It's a trap!\");\x3c/script\x3e") Here, we need to combine JS and HTML escaping, further complicated by the fact that "<script>" tag contents can either be parsed in XHTML mode (in which case '<', '>' and '&' must additionally be XML escaped) or HTML mode (in which case '</script>' must be escaped, but not using HTML escaping, which is not available in HTML "<script>" tags). Therefore, the XML special characters (which can only occur in string literals) are escaped using JavaScript string literal escape sequences. (This, incidentally, is why modern web security best practices ban all use of inline JavaScript...) Unsurprisingly, Kallithea does not do (5) correctly. In most cases, Kallithea might slap a pair of single quotes around the HTML escaped Python value. A typical benign example: $('#child_link').html('${_('No revisions')}'); This works in English, but if a localized version of the string contains an apostrophe, the result will be broken JavaScript. In the more severe cases, where the text is user controllable, it leaves the door open to injections. In this example, the script inserts the string as HTML, so Mako's implicit HTML escaping makes sense; but in many other cases, HTML escaping is actually an error, because the value is not used by the script in an HTML context. The good news is that the HTML escaping thwarts attempts at XSS, since it's impossible to inject syntactically valid JavaScript of any useful complexity. It does allow JavaScript errors and gibberish to appear on the page, though. In these cases, the escaping has been fixed to use either the new 'h.js' helper, which does JavaScript escaping (but not HTML escaping), OR the new 'h.jshtml' helper (which does both), in those cases where it was unclear if the value might be used (by the script) in an HTML context. Some of these can probably be "relaxed" from h.jshtml to h.js later, but for now, using h.jshtml fixes escaping and doesn't introduce new errors. In a few places, Kallithea JSON encodes values in the controller, then inserts the JSON (without any further escaping) into <script> tags. This is also wrong, and carries actual risk of XSS vulnerabilities. However, in all cases, security vulnerabilities were narrowly avoided due to other filtering in Kallithea. (E.g. many special characters are banned from appearing in usernames.) In these cases, the escaping has been fixed and moved to the template, making it immediately visible that proper escaping has been performed. Mini-FAQ (frequently anticipated questions): Q: Why do everything in one big, hard to review patch? Q: Why add escaping in specific case FOO, it doesn't seem needed? Because the goal here is to have "escape everywhere" as the default policy, rather than identifying individual bugs and fixing them one by one by adding escaping where needed. As such, this patch surely introduces a lot of needless escaping. This is no different from how Mako/Pylons HTML escape everything by default, even when not needed: it's errs on the side of needless work, to prevent erring on the side of skipping required (and security critical) work. As for reviewability, the most important thing to notice is not where escaping has been introduced, but any places where it might have been missed (or where h.jshtml is needed, but h.js is used). Q: The added escaping is kinda verbose/ugly. That is not a question, but yes, I agree. Hopefully it'll encourage us to move away from inline JavaScript altogether. That's a significantly larger job, though; with luck this patch will keep us safe and secure until such a time as we can implement the real fix. Q: Why not use Mako filter syntax ("${val|h.js}")? Because of long-standing Mako bug #140, preventing use of 'h' in filters. Q: Why not work around bug #140, or even use straight "${val|js}"? Because Mako still applies the default h.escape filter before the explicitly specified filters. Q: Where do we go from here? Longer term, we should stop doing variable expansions in script blocks, and instead pass data to JS via e.g. data attributes, or asynchronously using AJAX calls. Once we've done that, we can remove inline JavaScript altogether in favor of separate script files, and set a strict Content Security Policy explicitly blocking inline scripting, and thus also the most common kind of cross-site scripting attack.
author Søren Løvborg <sorenl@unity3d.com>
date Tue, 28 Feb 2017 17:19:00 +0100
parents f95725c5d450
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5494
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
1 .. _installation_puppet:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
2
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
3 ===================================
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
4 Installation and setup using Puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
5 ===================================
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
6
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
7 The whole installation and setup process of Kallithea can be simplified by
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
8 using Puppet and the `rauch/kallithea
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
9 <https://forge.puppetlabs.com/rauch/kallithea>`_ Puppet module. This is
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
10 especially useful for getting started quickly, without having to deal with all
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
11 the Python specialities.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
12
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
13 .. note:: The following instructions assume you are not familiar with Puppet at
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
14 all. If this is not the case, you should probably skip directly to the
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
15 `Kallithea Puppet module documentation
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
16 <https://forge.puppetlabs.com/rauch/kallithea#puppet-kallithea>`_.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
17
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
18
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
19 Installing Puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
20 -----------------
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
21
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
22 This installation variant requires a Unix/Linux type server with Puppet 3.0+
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
23 installed. Many major distributions have Puppet in their standard repositories.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
24 Thus, you will probably be ready to go by running, e.g. ``apt-get install
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
25 puppet`` or ``yum install puppet``, depending on your distro's favoured package
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
26 manager. Afterwards, check the Puppet version by running ``puppet --version``
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
27 and ensure you have at least 3.0.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
28
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
29 If your distribution does not provide Puppet packages or you need a
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
30 newer version, please see the `Puppet Reference Manual
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
31 <https://docs.puppetlabs.com/puppet/4.2/reference/install_linux.html>`_ for
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
32 instructions on how to install Puppet on your target platform.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
33
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
34
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
35 Installing the Puppet module
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
36 ----------------------------
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
37
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
38 To install the latest version of the Kallithea Puppet module from the Puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
39 Forge, run the following as ``root``:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
40
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
41 .. code-block:: bash
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
42
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
43 puppet module install rauch/kallithea
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
44
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
45 This will install both the Kallithea Puppet module and its dependency modules.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
46
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
47 .. warning:: Be aware that Puppet can do all kinds of things to your systems.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
48 Third-party modules (like the ``kallithea`` module) may run
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
49 arbitrary commands on your system (most of the time as the
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
50 ``root`` user), so do not apply them on production machines if
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
51 you don't know what you are doing. Instead, use a test system
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
52 (e.g. a virtual machine) for evaluation purposes.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
53
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
54
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
55 Applying the module
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
56 -------------------
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
57
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
58 To trigger the actual installation process, we have to *apply* the
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
59 ``kallithea`` Puppet class, which is provided by the module we have just
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
60 installed, to our system. For this, create a file named e.g. ``kallithea.pp``,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
61 a *Puppet manifest*, with the following content:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
62
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
63 .. _simple_manifest:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
64 .. code-block:: puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
65
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
66 class { 'kallithea':
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
67 seed_db => true,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
68 manage_git => true,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
69 }
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
70
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
71 To apply the manifest, simply run the following (preferably as root):
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
72
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
73 .. code-block:: bash
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
74
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
75 puppet apply kallithea.pp
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
76
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
77 This will basically run through the usual Kallithea :ref:`installation` and
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
78 :ref:`setup` steps, as documented. Consult the module documentation for details
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
79 on `what the module affects
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
80 <https://forge.puppetlabs.com/rauch/kallithea#what-kallithea-affects>`_. You
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
81 can also do a *dry run* by adding the ``--noop`` option to the command.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
82
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
83
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
84 Using parameters for customizing the setup process
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
85 --------------------------------------------------
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
86
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
87 The ``kallithea`` Puppet class provides a number of `parameters
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
88 <https://forge.puppetlabs.com/rauch/kallithea#class-kallithea>`_ for
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
89 customizing the setup process. You have seen the usage of the ``seed_db``
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
90 parameter in the :ref:`example above <simple_manifest>`, but there are more.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
91 For example, you can specify the installation directory, the name of the user
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
92 under which Kallithea gets installed, the initial admin password, etc.
5848
f95725c5d450 brand: Kallithea
timeless@gmail.com
parents: 5494
diff changeset
93 Notably, you can provide arbitrary modifications to Kallithea's configuration
5494
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
94 file by means of the ``config_hash`` parameter.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
95
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
96 Parameters, which have not been set explicitly, will be set to default values,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
97 which are defined inside the ``kallithea`` Puppet module. For example, if you
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
98 just stick to the defaults as in the :ref:`example above <simple_manifest>`,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
99 you will end up with a Kallithea instance, which
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
100
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
101 - is installed in ``/srv/kallithea``, owned by the user ``kallithea``
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
102 - uses the Kallithea default configuration
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
103 - uses the admin user ``admin`` with password ``adminpw``
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
104 - is started automatically and enabled on boot
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
105
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
106 As of Kallithea 0.3.0, this in particular means that Kallithea will use an
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
107 SQLite database and listen on ``http://localhost:5000``.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
108
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
109 See also the `full parameters list
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
110 <https://forge.puppetlabs.com/rauch/kallithea#class-kallithea>`_ for more
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
111 information.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
112
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
113
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
114 Making your Kallithea instance publicly available
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
115 -------------------------------------------------
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
116
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
117 If you followed the instructions above, the Kallithea instance will be
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
118 listening on ``http://localhost:5000`` and therefore not publicly available.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
119 There are several ways to change this.
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
120
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
121 The direct way
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
122 ^^^^^^^^^^^^^^
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
123
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
124 The simplest setup is to instruct Kallithea to listen on another IP address
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
125 and/or port by using the ``config_hash`` parameter of the Kallithea Puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
126 class. For example, assume we want to listen on all interfaces on port 80:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
127
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
128 .. code-block:: puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
129
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
130 class { 'kallithea':
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
131 seed_db => true,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
132 config_hash => {
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
133 "server:main" => {
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
134 'host' => '0.0.0.0',
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
135 'port' => '80',
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
136 }
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
137 }
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
138 }
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
139
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
140 Using Apache as reverse proxy
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
141 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
142
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
143 In a more advanced setup, you might instead want use a full-blown web server
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
144 like Apache HTTP Server as the public web server, configured such that requests
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
145 are internally forwarded to the local Kallithea instance (a so called *reverse
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
146 proxy setup*). This can be easily done with Puppet as well:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
147
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
148 First, install the `puppetlabs/apache
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
149 <https://forge.puppetlabs.com/puppetlabs/apache>`_ Puppet module as above by running the following as root:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
150
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
151 .. code-block:: bash
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
152
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
153 puppet module install puppetlabs/apache
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
154
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
155 Then, append the following to your manifest:
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
156
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
157 .. code-block:: puppet
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
158
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
159 include apache
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
160
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
161 apache::vhost { 'kallithea.example.com':
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
162 docroot => '/var/www/html',
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
163 manage_docroot => false,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
164 port => 80,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
165 proxy_preserve_host => true,
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
166 proxy_pass => [
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
167 {
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
168 path => '/',
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
169 url => 'http://localhost:5000/',
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
170 },
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
171 ],
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
172 }
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
173
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
174 Applying the resulting manifest will install the Apache web server and setup a
57caeb60c52b docs: add documentation for setup with puppet
Robert Rauch <mail@robertrauch.de>
parents:
diff changeset
175 virtual host acting as a reverse proxy for your local Kallithea instance.