##// END OF EJS Templates
install-iis: use logging.config.fileConfig instead of paste.script copy...
Thomas De Schampheleire -
r7417:5e7eb3df default
parent child Browse files
Show More
@@ -1,587 +1,587 b''
1 1 .. _setup:
2 2
3 3 =====
4 4 Setup
5 5 =====
6 6
7 7
8 8 Setting up Kallithea
9 9 --------------------
10 10
11 11 First, you will need to create a Kallithea configuration file. Run the
12 12 following command to do so::
13 13
14 14 kallithea-cli config-create my.ini
15 15
16 16 This will create the file ``my.ini`` in the current directory. This
17 17 configuration file contains the various settings for Kallithea, e.g.
18 18 proxy port, email settings, usage of static files, cache, Celery
19 19 settings, and logging. Extra settings can be specified like::
20 20
21 21 kallithea-cli config-create my.ini host=8.8.8.8 "[handler_console]" formatter=color_formatter
22 22
23 23 Next, you need to create the databases used by Kallithea. It is recommended to
24 24 use PostgreSQL or SQLite (default). If you choose a database other than the
25 25 default, ensure you properly adjust the database URL in your ``my.ini``
26 26 configuration file to use this other database. Kallithea currently supports
27 27 PostgreSQL, SQLite and MySQL databases. Create the database by running
28 28 the following command::
29 29
30 30 kallithea-cli db-create -c my.ini
31 31
32 32 This will prompt you for a "root" path. This "root" path is the location where
33 33 Kallithea will store all of its repositories on the current machine. After
34 34 entering this "root" path ``db-create`` will also prompt you for a username
35 35 and password for the initial admin account which ``db-create`` sets
36 36 up for you.
37 37
38 38 The ``db-create`` values can also be given on the command line.
39 39 Example::
40 40
41 41 kallithea-cli db-create -c my.ini --user=nn --password=secret --email=nn@example.com --repos=/srv/repos
42 42
43 43 The ``db-create`` command will create all needed tables and an
44 44 admin account. When choosing a root path you can either use a new
45 45 empty location, or a location which already contains existing
46 46 repositories. If you choose a location which contains existing
47 47 repositories Kallithea will add all of the repositories at the chosen
48 48 location to its database. (Note: make sure you specify the correct
49 49 path to the root).
50 50
51 51 .. note:: the given path for Mercurial_ repositories **must** be write
52 52 accessible for the application. It's very important since
53 53 the Kallithea web interface will work without write access,
54 54 but when trying to do a push it will fail with permission
55 55 denied errors unless it has write access.
56 56
57 57 Finally, prepare the front-end by running::
58 58
59 59 kallithea-cli front-end-build
60 60
61 61 You are now ready to use Kallithea. To run it simply execute::
62 62
63 63 gearbox serve -c my.ini
64 64
65 65 - This command runs the Kallithea server. The web app should be available at
66 66 http://127.0.0.1:5000. The IP address and port is configurable via the
67 67 configuration file created in the previous step.
68 68 - Log in to Kallithea using the admin account created when running ``db-create``.
69 69 - The default permissions on each repository is read, and the owner is admin.
70 70 Remember to update these if needed.
71 71 - In the admin panel you can toggle LDAP, anonymous, and permissions
72 72 settings, as well as edit more advanced options on users and
73 73 repositories.
74 74
75 75
76 76 Internationalization (i18n support)
77 77 -----------------------------------
78 78
79 79 The Kallithea web interface is automatically displayed in the user's preferred
80 80 language, as indicated by the browser. Thus, different users may see the
81 81 application in different languages. If the requested language is not available
82 82 (because the translation file for that language does not yet exist or is
83 83 incomplete), the language specified in setting ``i18n.lang`` in the Kallithea
84 84 configuration file is used as fallback. If no fallback language is explicitly
85 85 specified, English is used.
86 86
87 87 If you want to disable automatic language detection and instead configure a
88 88 fixed language regardless of user preference, set ``i18n.enabled = false`` and
89 89 set ``i18n.lang`` to the desired language (or leave empty for English).
90 90
91 91
92 92 Using Kallithea with SSH
93 93 ------------------------
94 94
95 95 Kallithea currently only hosts repositories using http and https. (The addition
96 96 of ssh hosting is a planned future feature.) However you can easily use ssh in
97 97 parallel with Kallithea. (Repository access via ssh is a standard "out of
98 98 the box" feature of Mercurial_ and you can use this to access any of the
99 99 repositories that Kallithea is hosting. See PublishingRepositories_)
100 100
101 101 Kallithea repository structures are kept in directories with the same name
102 102 as the project. When using repository groups, each group is a subdirectory.
103 103 This allows you to easily use ssh for accessing repositories.
104 104
105 105 In order to use ssh you need to make sure that your web server and the users'
106 106 login accounts have the correct permissions set on the appropriate directories.
107 107
108 108 .. note:: These permissions are independent of any permissions you
109 109 have set up using the Kallithea web interface.
110 110
111 111 If your main directory (the same as set in Kallithea settings) is for
112 112 example set to ``/srv/repos`` and the repository you are using is
113 113 named ``kallithea``, then to clone via ssh you should run::
114 114
115 115 hg clone ssh://user@kallithea.example.com/srv/repos/kallithea
116 116
117 117 Using other external tools such as mercurial-server_ or using ssh key-based
118 118 authentication is fully supported.
119 119
120 120 .. note:: In an advanced setup, in order for your ssh access to use
121 121 the same permissions as set up via the Kallithea web
122 122 interface, you can create an authentication hook to connect
123 123 to the Kallithea db and run check functions for permissions
124 124 against that.
125 125
126 126
127 127 Setting up Whoosh full text search
128 128 ----------------------------------
129 129
130 130 Kallithea provides full text search of repositories using `Whoosh`__.
131 131
132 132 .. __: https://whoosh.readthedocs.io/en/latest/
133 133
134 134 For an incremental index build, run::
135 135
136 136 kallithea-cli index-create -c my.ini
137 137
138 138 For a full index rebuild, run::
139 139
140 140 kallithea-cli index-create -c my.ini --full
141 141
142 142 The ``--repo-location`` option allows the location of the repositories to be overridden;
143 143 usually, the location is retrieved from the Kallithea database.
144 144
145 145 The ``--index-only`` option can be used to limit the indexed repositories to a comma-separated list::
146 146
147 147 kallithea-cli index-create -c my.ini --index-only=vcs,kallithea
148 148
149 149 To keep your index up-to-date it is necessary to do periodic index builds;
150 150 for this, it is recommended to use a crontab entry. Example::
151 151
152 152 0 3 * * * /path/to/virtualenv/bin/kallithea-cli index-create -c /path/to/kallithea/my.ini
153 153
154 154 When using incremental mode (the default), Whoosh will check the last
155 155 modification date of each file and add it to be reindexed if a newer file is
156 156 available. The indexing daemon checks for any removed files and removes them
157 157 from index.
158 158
159 159 If you want to rebuild the index from scratch, you can use the ``-f`` flag as above,
160 160 or in the admin panel you can check the "build from scratch" checkbox.
161 161
162 162
163 163 Integration with issue trackers
164 164 -------------------------------
165 165
166 166 Kallithea provides a simple integration with issue trackers. It's possible
167 167 to define a regular expression that will match an issue ID in commit messages,
168 168 and have that replaced with a URL to the issue.
169 169
170 170 This is achieved with following three variables in the ini file::
171 171
172 172 issue_pat = #(\d+)
173 173 issue_server_link = https://issues.example.com/{repo}/issue/\1
174 174 issue_sub =
175 175
176 176 ``issue_pat`` is the regular expression describing which strings in
177 177 commit messages will be treated as issue references. The expression can/should
178 178 have one or more parenthesized groups that can later be referred to in
179 179 ``issue_server_link`` and ``issue_sub`` (see below). If you prefer, named groups
180 180 can be used instead of simple parenthesized groups.
181 181
182 182 If the pattern should only match if it is preceded by whitespace, add the
183 183 following string before the actual pattern: ``(?:^|(?<=\s))``.
184 184 If the pattern should only match if it is followed by whitespace, add the
185 185 following string after the actual pattern: ``(?:$|(?=\s))``.
186 186 These expressions use lookbehind and lookahead assertions of the Python regular
187 187 expression module to avoid the whitespace to be part of the actual pattern,
188 188 otherwise the link text will also contain that whitespace.
189 189
190 190 Matched issue references are replaced with the link specified in
191 191 ``issue_server_link``, in which any backreferences are resolved. Backreferences
192 192 can be ``\1``, ``\2``, ... or for named groups ``\g<groupname>``.
193 193 The special token ``{repo}`` is replaced with the full repository path
194 194 (including repository groups), while token ``{repo_name}`` is replaced with the
195 195 repository name (without repository groups).
196 196
197 197 The link text is determined by ``issue_sub``, which can be a string containing
198 198 backreferences to the groups specified in ``issue_pat``. If ``issue_sub`` is
199 199 empty, then the text matched by ``issue_pat`` is used verbatim.
200 200
201 201 The example settings shown above match issues in the format ``#<number>``.
202 202 This will cause the text ``#300`` to be transformed into a link:
203 203
204 204 .. code-block:: html
205 205
206 206 <a href="https://issues.example.com/example_repo/issue/300">#300</a>
207 207
208 208 The following example transforms a text starting with either of 'pullrequest',
209 209 'pull request' or 'PR', followed by an optional space, then a pound character
210 210 (#) and one or more digits, into a link with the text 'PR #' followed by the
211 211 digits::
212 212
213 213 issue_pat = (pullrequest|pull request|PR) ?#(\d+)
214 214 issue_server_link = https://issues.example.com/\2
215 215 issue_sub = PR #\2
216 216
217 217 The following example demonstrates how to require whitespace before the issue
218 218 reference in order for it to be recognized, such that the text ``issue#123`` will
219 219 not cause a match, but ``issue #123`` will::
220 220
221 221 issue_pat = (?:^|(?<=\s))#(\d+)
222 222 issue_server_link = https://issues.example.com/\1
223 223 issue_sub =
224 224
225 225 If needed, more than one pattern can be specified by appending a unique suffix to
226 226 the variables. For example, also demonstrating the use of named groups::
227 227
228 228 issue_pat_wiki = wiki-(?P<pagename>\S+)
229 229 issue_server_link_wiki = https://wiki.example.com/\g<pagename>
230 230 issue_sub_wiki = WIKI-\g<pagename>
231 231
232 232 With these settings, wiki pages can be referenced as wiki-some-id, and every
233 233 such reference will be transformed into:
234 234
235 235 .. code-block:: html
236 236
237 237 <a href="https://wiki.example.com/some-id">WIKI-some-id</a>
238 238
239 239 Refer to the `Python regular expression documentation`_ for more details about
240 240 the supported syntax in ``issue_pat``, ``issue_server_link`` and ``issue_sub``.
241 241
242 242
243 243 Hook management
244 244 ---------------
245 245
246 246 Hooks can be managed in similar way to that used in ``.hgrc`` files.
247 247 To manage hooks, choose *Admin > Settings > Hooks*.
248 248
249 249 The built-in hooks cannot be modified, though they can be enabled or disabled in the *VCS* section.
250 250
251 251 To add another custom hook simply fill in the first textbox with
252 252 ``<name>.<hook_type>`` and the second with the hook path. Example hooks
253 253 can be found in ``kallithea.lib.hooks``.
254 254
255 255
256 256 Changing default encoding
257 257 -------------------------
258 258
259 259 By default, Kallithea uses UTF-8 encoding.
260 260 This is configurable as ``default_encoding`` in the .ini file.
261 261 This affects many parts in Kallithea including user names, filenames, and
262 262 encoding of commit messages. In addition Kallithea can detect if the ``chardet``
263 263 library is installed. If ``chardet`` is detected Kallithea will fallback to it
264 264 when there are encode/decode errors.
265 265
266 266 The Mercurial encoding is configurable as ``hgencoding``. It is similar to
267 267 setting the ``HGENCODING`` environment variable, but will override it.
268 268
269 269
270 270 Celery configuration
271 271 --------------------
272 272
273 273 Kallithea can use the distributed task queue system Celery_ to run tasks like
274 274 cloning repositories or sending emails.
275 275
276 276 Kallithea will in most setups work perfectly fine out of the box (without
277 277 Celery), executing all tasks in the web server process. Some tasks can however
278 278 take some time to run and it can be better to run such tasks asynchronously in
279 279 a separate process so the web server can focus on serving web requests.
280 280
281 281 For installation and configuration of Celery, see the `Celery documentation`_.
282 282 Note that Celery requires a message broker service like RabbitMQ_ (recommended)
283 283 or Redis_.
284 284
285 285 The use of Celery is configured in the Kallithea ini configuration file.
286 286 To enable it, simply set::
287 287
288 288 use_celery = true
289 289
290 290 and add or change the ``celery.*`` and ``broker.*`` configuration variables.
291 291
292 292 Remember that the ini files use the format with '.' and not with '_' like
293 293 Celery. So for example setting `BROKER_HOST` in Celery means setting
294 294 `broker.host` in the configuration file.
295 295
296 296 To start the Celery process, run::
297 297
298 298 kallithea-cli celery-run -c my.ini
299 299
300 300 Extra options to the Celery worker can be passed after ``--`` - see ``-- -h``
301 301 for more info.
302 302
303 303 .. note::
304 304 Make sure you run this command from the same virtualenv, and with the same
305 305 user that Kallithea runs.
306 306
307 307
308 308 HTTPS support
309 309 -------------
310 310
311 311 Kallithea will by default generate URLs based on the WSGI environment.
312 312
313 313 Alternatively, you can use some special configuration settings to control
314 314 directly which scheme/protocol Kallithea will use when generating URLs:
315 315
316 316 - With ``https_fixup = true``, the scheme will be taken from the
317 317 ``X-Url-Scheme``, ``X-Forwarded-Scheme`` or ``X-Forwarded-Proto`` HTTP header
318 318 (default ``http``).
319 319 - With ``force_https = true`` the default will be ``https``.
320 320 - With ``use_htsts = true``, Kallithea will set ``Strict-Transport-Security`` when using https.
321 321
322 322 .. _nginx_virtual_host:
323 323
324 324
325 325 Nginx virtual host example
326 326 --------------------------
327 327
328 328 Sample config for Nginx using proxy:
329 329
330 330 .. code-block:: nginx
331 331
332 332 upstream kallithea {
333 333 server 127.0.0.1:5000;
334 334 # add more instances for load balancing
335 335 #server 127.0.0.1:5001;
336 336 #server 127.0.0.1:5002;
337 337 }
338 338
339 339 ## gist alias
340 340 server {
341 341 listen 443;
342 342 server_name gist.example.com;
343 343 access_log /var/log/nginx/gist.access.log;
344 344 error_log /var/log/nginx/gist.error.log;
345 345
346 346 ssl on;
347 347 ssl_certificate gist.your.kallithea.server.crt;
348 348 ssl_certificate_key gist.your.kallithea.server.key;
349 349
350 350 ssl_session_timeout 5m;
351 351
352 352 ssl_protocols SSLv3 TLSv1;
353 353 ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
354 354 ssl_prefer_server_ciphers on;
355 355
356 356 rewrite ^/(.+)$ https://kallithea.example.com/_admin/gists/$1;
357 357 rewrite (.*) https://kallithea.example.com/_admin/gists;
358 358 }
359 359
360 360 server {
361 361 listen 443;
362 362 server_name kallithea.example.com
363 363 access_log /var/log/nginx/kallithea.access.log;
364 364 error_log /var/log/nginx/kallithea.error.log;
365 365
366 366 ssl on;
367 367 ssl_certificate your.kallithea.server.crt;
368 368 ssl_certificate_key your.kallithea.server.key;
369 369
370 370 ssl_session_timeout 5m;
371 371
372 372 ssl_protocols SSLv3 TLSv1;
373 373 ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
374 374 ssl_prefer_server_ciphers on;
375 375
376 376 ## uncomment root directive if you want to serve static files by nginx
377 377 ## requires static_files = false in .ini file
378 378 #root /srv/kallithea/kallithea/kallithea/public;
379 379 include /etc/nginx/proxy.conf;
380 380 location / {
381 381 try_files $uri @kallithea;
382 382 }
383 383
384 384 location @kallithea {
385 385 proxy_pass http://127.0.0.1:5000;
386 386 }
387 387
388 388 }
389 389
390 390 Here's the proxy.conf. It's tuned so it will not timeout on long
391 391 pushes or large pushes::
392 392
393 393 proxy_redirect off;
394 394 proxy_set_header Host $host;
395 395 ## needed for container auth
396 396 #proxy_set_header REMOTE_USER $remote_user;
397 397 #proxy_set_header X-Forwarded-User $remote_user;
398 398 proxy_set_header X-Url-Scheme $scheme;
399 399 proxy_set_header X-Host $http_host;
400 400 proxy_set_header X-Real-IP $remote_addr;
401 401 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
402 402 proxy_set_header Proxy-host $proxy_host;
403 403 proxy_buffering off;
404 404 proxy_connect_timeout 7200;
405 405 proxy_send_timeout 7200;
406 406 proxy_read_timeout 7200;
407 407 proxy_buffers 8 32k;
408 408 client_max_body_size 1024m;
409 409 client_body_buffer_size 128k;
410 410 large_client_header_buffers 8 64k;
411 411
412 412 .. _apache_virtual_host_reverse_proxy:
413 413
414 414
415 415 Apache virtual host reverse proxy example
416 416 -----------------------------------------
417 417
418 418 Here is a sample configuration file for Apache using proxy:
419 419
420 420 .. code-block:: apache
421 421
422 422 <VirtualHost *:80>
423 423 ServerName kallithea.example.com
424 424
425 425 <Proxy *>
426 426 # For Apache 2.4 and later:
427 427 Require all granted
428 428
429 429 # For Apache 2.2 and earlier, instead use:
430 430 # Order allow,deny
431 431 # Allow from all
432 432 </Proxy>
433 433
434 434 #important !
435 435 #Directive to properly generate url (clone url) for Kallithea
436 436 ProxyPreserveHost On
437 437
438 438 #kallithea instance
439 439 ProxyPass / http://127.0.0.1:5000/
440 440 ProxyPassReverse / http://127.0.0.1:5000/
441 441
442 442 #to enable https use line below
443 443 #SetEnvIf X-Url-Scheme https HTTPS=1
444 444 </VirtualHost>
445 445
446 446 Additional tutorial
447 447 http://pylonsbook.com/en/1.1/deployment.html#using-apache-to-proxy-requests-to-pylons
448 448
449 449 .. _apache_subdirectory:
450 450
451 451
452 452 Apache as subdirectory
453 453 ----------------------
454 454
455 455 Apache subdirectory part:
456 456
457 457 .. code-block:: apache
458 458
459 459 <Location /PREFIX >
460 460 ProxyPass http://127.0.0.1:5000/PREFIX
461 461 ProxyPassReverse http://127.0.0.1:5000/PREFIX
462 462 SetEnvIf X-Url-Scheme https HTTPS=1
463 463 </Location>
464 464
465 465 Besides the regular apache setup you will need to add the following line
466 466 into ``[app:main]`` section of your .ini file::
467 467
468 468 filter-with = proxy-prefix
469 469
470 470 Add the following at the end of the .ini file::
471 471
472 472 [filter:proxy-prefix]
473 473 use = egg:PasteDeploy#prefix
474 474 prefix = /PREFIX
475 475
476 476 then change ``PREFIX`` into your chosen prefix
477 477
478 478 .. _apache_mod_wsgi:
479 479
480 480
481 481 Apache with mod_wsgi
482 482 --------------------
483 483
484 484 Alternatively, Kallithea can be set up with Apache under mod_wsgi. For
485 485 that, you'll need to:
486 486
487 487 - Install mod_wsgi. If using a Debian-based distro, you can install
488 488 the package libapache2-mod-wsgi::
489 489
490 490 aptitude install libapache2-mod-wsgi
491 491
492 492 - Enable mod_wsgi::
493 493
494 494 a2enmod wsgi
495 495
496 496 - Add global Apache configuration to tell mod_wsgi that Python only will be
497 497 used in the WSGI processes and shouldn't be initialized in the Apache
498 498 processes::
499 499
500 500 WSGIRestrictEmbedded On
501 501
502 502 - Create a wsgi dispatch script, like the one below. Make sure you
503 503 check that the paths correctly point to where you installed Kallithea
504 504 and its Python Virtual Environment.
505 505 - Enable the ``WSGIScriptAlias`` directive for the WSGI dispatch script,
506 506 as in the following example. Once again, check the paths are
507 507 correctly specified.
508 508
509 509 Here is a sample excerpt from an Apache Virtual Host configuration file:
510 510
511 511 .. code-block:: apache
512 512
513 513 WSGIDaemonProcess kallithea processes=5 threads=1 maximum-requests=100 \
514 514 python-home=/srv/kallithea/venv
515 515 WSGIProcessGroup kallithea
516 516 WSGIScriptAlias / /srv/kallithea/dispatch.wsgi
517 517 WSGIPassAuthorization On
518 518
519 519 Or if using a dispatcher WSGI script with proper virtualenv activation:
520 520
521 521 .. code-block:: apache
522 522
523 523 WSGIDaemonProcess kallithea processes=5 threads=1 maximum-requests=100
524 524 WSGIProcessGroup kallithea
525 525 WSGIScriptAlias / /srv/kallithea/dispatch.wsgi
526 526 WSGIPassAuthorization On
527 527
528 528 Apache will by default run as a special Apache user, on Linux systems
529 529 usually ``www-data`` or ``apache``. If you need to have the repositories
530 530 directory owned by a different user, use the user and group options to
531 531 WSGIDaemonProcess to set the name of the user and group.
532 532
533 533 Example WSGI dispatch script:
534 534
535 535 .. code-block:: python
536 536
537 537 import os
538 538 os.environ['PYTHON_EGG_CACHE'] = '/srv/kallithea/.egg-cache'
539 539
540 540 # sometimes it's needed to set the current dir
541 541 os.chdir('/srv/kallithea/')
542 542
543 543 import site
544 544 site.addsitedir("/srv/kallithea/venv/lib/python2.7/site-packages")
545 545
546 546 ini = '/srv/kallithea/my.ini'
547 from paste.script.util.logging_config import fileConfig
547 from logging.config import fileConfig
548 548 fileConfig(ini)
549 549 from paste.deploy import loadapp
550 550 application = loadapp('config:' + ini)
551 551
552 552 Or using proper virtualenv activation:
553 553
554 554 .. code-block:: python
555 555
556 556 activate_this = '/srv/kallithea/venv/bin/activate_this.py'
557 557 execfile(activate_this, dict(__file__=activate_this))
558 558
559 559 import os
560 560 os.environ['HOME'] = '/srv/kallithea'
561 561
562 562 ini = '/srv/kallithea/kallithea.ini'
563 from paste.script.util.logging_config import fileConfig
563 from logging.config import fileConfig
564 564 fileConfig(ini)
565 565 from paste.deploy import loadapp
566 566 application = loadapp('config:' + ini)
567 567
568 568
569 569 Other configuration files
570 570 -------------------------
571 571
572 572 A number of `example init.d scripts`__ can be found in
573 573 the ``init.d`` directory of the Kallithea source.
574 574
575 575 .. __: https://kallithea-scm.org/repos/kallithea/files/tip/init.d/ .
576 576
577 577
578 578 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
579 579 .. _python: http://www.python.org/
580 580 .. _Python regular expression documentation: https://docs.python.org/2/library/re.html
581 581 .. _Mercurial: https://www.mercurial-scm.org/
582 582 .. _Celery: http://celeryproject.org/
583 583 .. _Celery documentation: http://docs.celeryproject.org/en/latest/getting-started/index.html
584 584 .. _RabbitMQ: http://www.rabbitmq.com/
585 585 .. _Redis: http://redis.io/
586 586 .. _mercurial-server: http://www.lshift.net/mercurial-server.html
587 587 .. _PublishingRepositories: https://www.mercurial-scm.org/wiki/PublishingRepositories
@@ -1,81 +1,81 b''
1 1 # -*- coding: utf-8 -*-
2 2 # This program is free software: you can redistribute it and/or modify
3 3 # it under the terms of the GNU General Public License as published by
4 4 # the Free Software Foundation, either version 3 of the License, or
5 5 # (at your option) any later version.
6 6 #
7 7 # This program is distributed in the hope that it will be useful,
8 8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 10 # GNU General Public License for more details.
11 11 #
12 12 # You should have received a copy of the GNU General Public License
13 13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14 import click
15 15 import kallithea
16 16 import kallithea.bin.kallithea_cli_base as cli_base
17 17
18 18 import os
19 19 import sys
20 20
21 21 dispath_py_template = '''\
22 22 # Created by Kallithea 'kallithea-cli iis-install'
23 23 import sys
24 24
25 25 if hasattr(sys, "isapidllhandle"):
26 26 import win32traceutil
27 27
28 28 import isapi_wsgi
29 29 import os
30 30
31 31 def __ExtensionFactory__():
32 32 from paste.deploy import loadapp
33 from paste.script.util.logging_config import fileConfig
33 from logging.config import fileConfig
34 34 fileConfig('%(inifile)s')
35 35 application = loadapp('config:%(inifile)s')
36 36
37 37 def app(environ, start_response):
38 38 user = environ.get('REMOTE_USER', None)
39 39 if user is not None:
40 40 os.environ['REMOTE_USER'] = user
41 41 return application(environ, start_response)
42 42
43 43 return isapi_wsgi.ISAPIThreadPoolHandler(app)
44 44
45 45 if __name__=='__main__':
46 46 from isapi.install import *
47 47 params = ISAPIParameters()
48 48 sm = [ScriptMapParams(Extension="*", Flags=0)]
49 49 vd = VirtualDirParameters(Name="%(virtualdir)s",
50 50 Description = "Kallithea",
51 51 ScriptMaps = sm,
52 52 ScriptMapUpdate = "replace")
53 53 params.VirtualDirs = [vd]
54 54 HandleCommandLine(params)
55 55 '''
56 56
57 57 @cli_base.register_command(config_file=True)
58 58 @click.option('--virtualdir', default='/',
59 59 help='The virtual folder to install into on IIS.')
60 60 def iis_install(virtualdir):
61 61 """Install into IIS using isapi-wsgi."""
62 62
63 63 config_file_abs = kallithea.CONFIG['__file__']
64 64
65 65 try:
66 66 import isapi_wsgi
67 67 except ImportError:
68 68 sys.stderr.write('missing requirement: isapi-wsgi not installed\n')
69 69 sys.exit(1)
70 70
71 71 dispatchfile = os.path.join(os.getcwd(), 'dispatch.py')
72 72 click.echo('Writing %s' % dispatchfile)
73 73 with open(dispatchfile, 'w') as f:
74 74 f.write(dispath_py_template % {
75 75 'inifile': config_file_abs.replace('\\', '\\\\'),
76 76 'virtualdir': virtualdir,
77 77 })
78 78
79 79 click.echo('Run \'python "%s" install\' with administrative privileges '
80 80 'to generate the _dispatch.dll file and install it into the '
81 81 'default web site' % dispatchfile)
General Comments 0
You need to be logged in to leave comments. Login now