comparison doc/installation.txt @ 5908:c7ab00dd6502

First pass at updated wsgi documentation From Garth Jensen with variation from Thomas Arendsen Hein.
author John Rouillard <rouilj@ieee.org>
date Tue, 08 Oct 2019 21:28:21 -0400
parents 6e341009593b
children d57347ae6f25
comparison
equal deleted inserted replaced
5907:fe96015445e9 5908:c7ab00dd6502
374 374
375 1. `web server cgi-bin`_ 375 1. `web server cgi-bin`_
376 2. `cgi-bin for limited-access hosting`_ 376 2. `cgi-bin for limited-access hosting`_
377 3. `stand-alone web server`_ 377 3. `stand-alone web server`_
378 4. `Zope product - ZRoundup`_ 378 4. `Zope product - ZRoundup`_
379 5. `WSGI handler`_ (to be written `Apache HTTP Server with mod_wsgi`_) 379 5. `Apache HTTP Server with mod_wsgi`_
380 6. `Apache HTTP Server with mod_python`_ (deprecated) 380 6. `Apache HTTP Server with mod_python`_ (deprecated)
381 7. `WSGI Variations`_
381 382
382 You may need to give the web server user permission to access the tracker home 383 You may need to give the web server user permission to access the tracker home
383 - see the `UNIX environment steps`_ for information. You may also need to 384 - see the `UNIX environment steps`_ for information. You may also need to
384 configure your system in some way - see `platform-specific notes`_. 385 configure your system in some way - see `platform-specific notes`_.
385 386
506 that interfaces to your new tracker. 507 that interfaces to your new tracker.
507 508
508 Apache HTTP Server with mod_wsgi 509 Apache HTTP Server with mod_wsgi
509 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 510 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
510 511
511 This needs to be developed by somebody. See: 512 This is a work in progress thanks to Garth Jensen.
512 https://issues.roundup-tracker.org/issue2550566 to see if there has 513
513 been something developed. 514 See the main web site for `mod_wsgi`_ whcih include directions for
514 515 using mod_wsgi-express which is easier if you are not used to apache
515 See the main web site for `mod_wsgi`_. 516 configuration. Also there is the
517 `main mod_wsgi <https://modwsgi.readthedocs.io/en/develop/>`_ for more
518 detailed directions.
519
520 Background
521 ^^^^^^^^^^
522
523 These notes were developed on a Microsoft Azure VM running Ubuntu
524 18.04 LTS. The instructions below assume:
525
526 - python and roundup are already installed
527 - roundup is running in the system python instance (e.g. no virtual
528 environment)
529 - the tracker ``mytracker`` is installed in the ``trackers`` folder of
530 home directory of a user called ``admin``. Thus, the absolute path to
531 the tracker home directory is ``/home/admin/trackers/mytracker``.
532 - the server has a static public IP address of 11.11.11.101
533
534 Install mod-wsgi
535 ^^^^^^^^^^^^^^^^
536
537 You can install/build it using the python package manager pip, or
538 install using the OS package manager (apt).
539
540 Pip install of mod_wsgi
541 '''''''''''''''''''''''
542
543 This is the tested method, and offers an easier path to get started,
544 but it does mean that you will need to keep up to date with any
545 security or other issues. If you use the packages supplied by your OS
546 vendor, you may get more timely updates and notifications.
547
548 The mod_wsgi docs talk about two installation methods: (1) the
549 so-called CMMI method or (2) with pip. The pip method also provides an
550 admin script called ``mod_wsgi-express`` that can start up a
551 standalone instance of Apache directly from the command line with an
552 auto generated configuration. These instructions follow the pip
553 method.
554
555
556 1. The `mod_wsgi`_ PyPi page lists prerequisites for various types of
557 systems. For Ubuntu, they are apache2 and apache2-dev. To see
558 installed apache packages, you can use ``dpkg -l | grep apache``.
559 If apache2 or apache2-dev are not installed, they install them with:
560 - ``sudo apt update``
561 - ``sudo apt install apache2 apache2-dev``
562 2. If ``pip`` is not already installed, install it with
563 ``sudo apt install python-pip``
564
565 If you are using python 3, use ``sudo apt-install python3-pip`` and
566 change references to pip in the directions to pip3.
567 3. ``sudo pip install mod_wsgi``. In my case, I got warnings about
568 the user not owning directories, but it said it completed
569 "successfully."
570 4. For testing, open port 8000 for TCP on the server. For an Azure VM,
571 this is done with Azure Portal under ``Networking`` > ``Add inbound port``
572 rule.
573 5. Test with ``mod_wsgi-express start-server``. This should serve
574 up content on localhost port 8000. You can then direct a browser on
575 the server itself to http://localhost:8000/ or on another machine at
576 the server's domain name or ip address followed by colon then 8000
577 (e.g. http://11.11.11.101:8000/). If successful, you should see a
578 Malt Whiskey image.
579
580 Package manager install of mod_wsgi
581 '''''''''''''''''''''''''''''''''''
582
583 On debian (which should work for Ubuntu), install apache2 with
584 libapache2-mod-wsgi:
585
586 - ``sudo apt update``
587 - ``sudo apt install apache2 libapache2-mod-wsgi``
588
589 this is the less tested method for installing mod_wsgi and may not
590 install mod_wsgi-express, which is used below. However there is an
591 example apache config included as part of `WSGI Variations`_ that can
592 be used to hand craft an apache config.
593
594 You should make sure that the version you install is 3.5 or newer due
595 to security issues in older releases.
596
597 Configure web interface via wsgi_handler
598 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
599
600 1. In the tracker's home directory create a ``wsgi.py`` file with the
601 following content (substituting ``/home/admin/trackers/mytracker``
602 with the absolute path for your tracker's home directory):
603
604 .. code:: python
605
606 from roundup.cgi.wsgi_handler import RequestDispatcher
607 tracker_home = '/home/admin/trackers/mytracker'
608 application = RequestDispatcher(tracker_home)
609
610 To run the tracker on Port 8000 as a foreground process
611 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
612
613 1. Change the ``tracker.web`` url in ``config.ini`` to port 8000 at the
614 server domain name or ip address (e.g. http://11.11.11.101:8000/).
615 2. Open port 8000 for TCP on the server if you didn't already do so.
616 3. ``cd`` to your tracker home directory, then run
617 ``mod_wsgi-express start-server wsgi.py``.
618 4. Test by directing a browser on another machine to the url you set
619 ``tracker.web`` to in ``config.ini``.
620
621 Run tracker as background daemon
622 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
623
624 To run the tracker on Port 80 or as a background process, you'll need
625 to configure a UNIX group with appropriate privileges as described in
626 `UNIX environment steps`_. These steps are summarized here:
627
628 1. To add a group named "mytrackergrp" run: ``sudo groupadd mytrackergrp``.
629 2. Add the owner of the tracker home (admin in this example) run:
630 ``sudo usermod -a -G mytrackergrp admin``
631 3. Add user that runs Apache (the default on Ubuntu is www-data) run:
632 ``sudo usermod -a -G mytrackergrp www-data``
633 4. Add user mail service runs as (e.g. daemon) run:
634 ``sudo usermod -a -G mytrackergrp daemon``
635 5. Change group of the database in the tracker folder run:
636 ``sudo chgrp -R mytrackergrp ~/trackers/mytracker``.
637 6. Make sure group can write to the database, and any new files created
638 in the database will be owned by the group run:
639 ``sudo chmod -R g+sw ~/trackers/mytracker/db``
640
641 To run mod_wsgi on PORT 80
642 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
643
644 1. Change the ``tracker.web`` url in ``config.ini`` to the server url
645 with no port designator. E.g. http://11.11.11.101.
646 2. Open port 80 on the server for TCP traffic if it isn't open already.
647 3. Stop the system instance of Apache to make sure it isn't holding on
648 to port 80 run: ``sudo service apache2 stop``.
649
650 To run as a foreground process
651 ''''''''''''''''''''''''''''''
652
653 1. From the tracker home directory, run
654 ``sudo mod_wsgi-express start-server wsgi.py --port 80 --user admin --group mytrackergrp``
655
656 To run as a background process
657 ''''''''''''''''''''''''''''''
658
659 1. From the tracker home directory, bash
660 ``sudo mod_wsgi-express setup-server wsgi.py --port=80 --user admin --group mytrackergrp --server-root=/etc/mod_wsgi-express-80``
661 2. Then, run ``sudo /etc/mod_wsgi-express-80/apachectl start``
662 3. To stop, run ``sudo /etc/mod_wsgi-express-80/apachectl stop``
516 663
517 Apache HTTP Server with mod_python 664 Apache HTTP Server with mod_python
518 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 665 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
519 666
520 As of roundup 2.0, mod_python support is deprecated. The apache.py 667 As of roundup 2.0, mod_python support is deprecated. The apache.py
645 ``http://<roundupserver>/roundup/devel/`` 792 ``http://<roundupserver>/roundup/devel/``
646 793
647 Note that in order to use https connections you must set up Apache for secure 794 Note that in order to use https connections you must set up Apache for secure
648 serving with SSL. 795 serving with SSL.
649 796
650 WSGI Handler 797 WSGI Variations
651 ~~~~~~~~~~~~ 798 ~~~~~~~~~~~~~~~
652 799
653 The WSGI handler is quite simple. The following sample code shows how 800 This method from Thomas Arendsen Hein goes into a bit more detail and
654 to use it:: 801 is designed to allow you to run multiple roundup trackers each under
655 802 their own user.
656 from wsgiref.simple_server import make_server 803
657 804 The tracker instances are read-only to the tracker user and located
658 # obtain the WSGI request dispatcher 805 under /srv/roundup/. The (writable) data files are stored in the home
659 from roundup.cgi.wsgi_handler import RequestDispatcher 806 directory of the user running the tracker.
660 tracker_home = 'demo' 807
661 app = RequestDispatcher(tracker_home) 808 To install roundup, download and unpack a distribution tarball and run
662 809 the following as user "roundup"::
663 httpd = make_server('', 8917, app) 810
664 httpd.serve_forever() 811 python setup.py build_doc
665 812 python setup.py sdist --manifest-only
666 To test the above you should create a demo tracker with ``python demo.py``. 813 python setup.py install --home="/home/roundup/install" --force
667 Edit the ``config.ini`` to change the web URL to "http://localhost:8917/". 814
668 815 Create a user roundup-foo, group roundup-foo to run the tracker. Add
816 the following apache config to
817 /etc/apache2/sites-available/roundup-foo (under debian/Ubunutu, modify
818 as needed):
819
820 .. code:: xml
821
822 ServerAdmin webmaster@example.com
823 ErrorLog /var/log/apache2/error.log
824
825 LogLevel notice
826
827 DocumentRoot /var/www/
828
829 <VirtualHost *:80>
830 CustomLog /var/log/apache2/access.log vhost_combined
831
832 # allow access to roundup docs
833 Alias /doc/ /home/roundup/install/share/doc/roundup/html/
834
835 # make apache serve static assets like css rather than
836 # having roundup serve the files
837 Alias /foo/@@file/ /srv/roundup/foo/html/
838
839 # make /foo into /foo/
840 RedirectMatch permanent ^/(foo)$ /$1/
841
842 # start a wsgi daemon process running as user roundup-foo
843 # in group roundup-foo. This also changes directory to
844 # ~roundup-foo before it starts roundup.wsgi.
845 WSGIDaemonProcess roundup-foo display-name=roundup-foo user=roundup-foo group=roundup-foo threads=25
846
847 # make tracker available at /foo and tie it into the
848 # wsgi script below.
849 WSGIScriptAlias /foo /srv/roundup/foo/roundup.wsgi
850 <Location /foo>
851 WSGIProcessGroup roundup-foo
852 </Location>
853 </VirtualHost>
854
855 The directory ~roundup-foo should have:
856
857 * a ``db`` subdirectory where messages and files will be stored
858 * a symbolic link called ``instance`` to /srv/roundup/foo which has
859 been initialized using ``roundup-admin``.
860
861 The `Apache HTTP Server with mod_wsgi`_ section above has a simple
862 WSGI handler. This is a enhanced version to be put into
863 ``/srv/roundup/foo/roundup.wsgi``.
864
865 .. code:: python
866
867 import sys, os
868 sys.stdout = sys.stderr
869
870 enabled = True
871
872 if enabled:
873 # Add the directory with the roundup installation
874 # subdirectory to the python path.
875 sys.path.insert(0, '/home/roundup/install/lib/python')
876
877 # obtain the WSGI request dispatcher
878 from roundup.cgi.wsgi_handler import RequestDispatcher
879
880 tracker_home = os.path.join(os.getcwd(), 'instance')
881 application = RequestDispatcher(tracker_home)
882 else:
883 def application(environ, start_response):
884 status = '503 Service Unavailable'
885 output = 'service is down for maintenance'
886 response_headers = [('Content-type', 'text/plain'),
887 ('Content-Length', str(len(output)))]
888 start_response(status, response_headers)
889 return [output]
890
891 This handler allows you to temporarily disable the tracker by setting
892 "enabled = False", apache will automatically detect the changed
893 roundup.wsgi file and reload it.
894
895 One last change is needed. In the tracker's config.ini change the db
896 parameter in the [main] section to be /home/roundup-foo/db. This will
897 put the files and messages in the db directory for the user.
669 898
670 Configure an Email Interface 899 Configure an Email Interface
671 ---------------------------- 900 ----------------------------
672 901
673 If you don't want to use the email component of Roundup, then remove the 902 If you don't want to use the email component of Roundup, then remove the

Roundup Issue Tracker: http://roundup-tracker.org/