Mercurial > wikked
annotate docs/pages/05_deployment.md @ 385:003316f77d3a
docs: Add JQuery as a bower package.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 04 Oct 2015 09:51:50 -0700 |
parents | 3a61f45702cb |
children | dcaa41b39c23 |
rev | line source |
---|---|
382
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 --- |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 title: Deployment |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 icon: server |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 --- |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 Wikked runs by default with an "easy" configuration, _i.e._ something that will |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 "just work" when you play around locally. In this default setup, it uses |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 [SQLite][] for the cache, and [Whoosh][] for the full-text search, all running |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 in Flask's built-in server. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 [whoosh]: https://bitbucket.org/mchaput/whoosh/wiki/Home |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 [sqlite]: https://sqlite.org/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 This technology stack works very well for running your wiki locally, or for |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 private websites. It has some limitations, however: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 * The `wk runserver` command runs the Flask development server, which you |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 [shouldn't use in production][flaskdeploy]. You'll probably need to run Wikked |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 inside a proper server instead. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 * When a page has been edited, Wikked will immediately evaluate and reformat all |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 pages that have a dependency on it. You probably want to have this done in the |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 background instead. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 In this chapter we'll therefore look at deployment options, and follow-up with |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 some more advanced configurations for those with special requirements. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 [flaskdeploy]: http://flask.pocoo.org/docs/deploying/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 ## Apache and WSGI |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 A simple way to run Wikked on a production server is to use [Apache][] with |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 [`mod_wsgi`][wsgi]. For a proper introduction to the matter, you can see |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 [Flask's documentation on the subject][flask_wsgi]. Otherwise, you can probably |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 reuse the following examples. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 [apache]: https://httpd.apache.org/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 [wsgi]: http://code.google.com/p/modwsgi/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 [flask_wsgi]: http://flask.pocoo.org/docs/deploying/mod_wsgi/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 The first thing is to create a `.wsgi` file somewhere on your server. You only |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 need to create the Wikked WSGI app in it, and optionally activate your |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 `virtualenv` if you're using that: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 # Activate your virtualenv |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 activate_this = '/path/to/venv/bin/activate_this.py' |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 execfile(activate_this, dict(__file__=activate_this)) |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 # Get the Wikked WSGI app |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 from wikked.wsgiutil import get_wsgi_app |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 application = get_wsgi_app('/path/to/your/wiki/root') |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 The second thing to do is to add a new virtual host to your Apache |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 configuration. The [Flask documentation][flask_wsgi] shows an example that you |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 should be able to use directly, although you'll also need to tell Apache where |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 to serve some static files: Wikked's static files (Javascript, CSS, icons, |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 etc.), and your own wiki's files (your pictures and other attachments). This |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 means your Apache configuration will look like this in the end: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 <VirtualHost *:80> |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 ServerName yourwikidomain.com |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 WSGIDaemonProcess yourwiki user=user1 group=group1 threads=5 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 WSGIScriptAlias / /path/to/your/wsgi/file.wsgi |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 DocumentRoot /path/to/your/wiki/_files |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
67 Alias /static/ /path/to/wikked/static/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 <Directory /path/to/your/wiki> |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 WSGIProcessGroup yourwiki |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 WSGIApplicationGroup %{GLOBAL} |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 Order deny,allow |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 Allow from all |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 </Directory> |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 </VirtualHost> |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
76 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 > You will have to create the `_files` directory in your wiki before |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 > reloading Apache, otherwise it may complain about it. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 > |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 > Also, the path to Wikked's `static` directory is going to point directly into |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 > your installed Wikked package. So if you installed it with `virtualenv`, it |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 > would be something like: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 > `/path/to/your/wiki/venv/lib/python/site-packages/wikked/static`. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 ## Background updates |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 The second thing to do is to enable background wiki updates. Good news: they're |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 already enabled if you used the `get_wsgi_app` function from the previous |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 section (you can disable it by passing `async_update=False` if you really need |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 to). |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 > If you want to use background updates locally, you can do `wk runserver |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
94 > --usetasks`. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
95 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
96 However, you'll still need to run a separate process that, well, runs those |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 updates in the background. To do this: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
98 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
99 cd /path/to/my/wiki |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
100 wk runtasks |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
101 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
102 > The background task handling is done with [Celery][]. By default, Wikked will |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
103 > use the [SQLAlchemy transport][celerysqlite]. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
104 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
105 [celery]: http://www.celeryproject.org/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
106 [celerysqlite]: http://docs.celeryproject.org/en/latest/getting-started/brokers/sqlalchemy.html |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
107 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
109 ## Backend options |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 **This is for advanced use only** |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
112 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
113 If you want to use a different storage than SQLite, set the `database_url` |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
114 setting in your `wikirc` to an [SQLAlchemy-supported database URL][SQLAlchemy]. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
115 For instance, if you're using MySQL with `pymsql` installed: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
116 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
117 [wiki] |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
118 database_url=mysql+pymysql://username:password123@localhost/db_name |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
119 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
120 [sqlalchemy]: http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#database-urls |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
121 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
122 > Note that you'll have to install the appropriate SQL layer. For instance: `pip |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
123 > install pymsql`. You will also obviously need to setup and configure your SQL |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
124 > server. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
125 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
126 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
127 If Whoosh is also not suited to your needs, you can use [Elastic |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
128 Search][elastic] instead: |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
130 [wiki] |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
131 indexer=elastic |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
132 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
133 You'll obviously have to install and run Elastic Search. |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
134 |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
135 [elastic]: http://www.elasticsearch.org/ |
3a61f45702cb
docs: Add documentation site.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
136 |