diff --git a/doc/source/apache_deployment_guide.rst b/doc/source/apache_deployment_guide.rst index 2e6ef9dcc7..e0b3ed4924 100644 --- a/doc/source/apache_deployment_guide.rst +++ b/doc/source/apache_deployment_guide.rst @@ -48,125 +48,144 @@ with Apache2 installed. Install mod-wsgi using:: sudo apt-get install libapache2-mod-wsgi -First, change the User and Group IDs of Apache2 to be those used by Swift. For -example in /etc/apache2/envvars use:: - - export APACHE_RUN_USER=swift - export APACHE_RUN_GROUP=swift - Create a directory for the Apache2 wsgi files:: sudo mkdir /srv/www/swift -Create a file for each service under /srv/www/swift. +Create a working directory for the wsgi processes:: -For a proxy service create /srv/www/swift/proxy-server.wsgi:: + sudo mkdir -m 2770 /var/lib/swift + sudo chown swift:swift /var/lib/swift + +Create a file for each service under ``/srv/www/swift``. + +For a proxy service create ``/srv/www/swift/proxy-server.wsgi``:: from swift.common.wsgi import init_request_processor application, conf, logger, log_name = \ init_request_processor('/etc/swift/proxy-server.conf','proxy-server') -For an account service create /srv/www/swift/account-server.wsgi:: +For an account service create ``/srv/www/swift/account-server.wsgi``:: from swift.common.wsgi import init_request_processor application, conf, logger, log_name = \ init_request_processor('/etc/swift/account-server.conf', 'account-server') -For an container service create /srv/www/swift/container-server.wsgi:: +For an container service create ``/srv/www/swift/container-server.wsgi``:: from swift.common.wsgi import init_request_processor application, conf, logger, log_name = \ init_request_processor('/etc/swift/container-server.conf', 'container-server') -For an object service create /srv/www/swift/object-server.wsgi:: +For an object service create ``/srv/www/swift/object-server.wsgi``:: from swift.common.wsgi import init_request_processor application, conf, logger, log_name = \ init_request_processor('/etc/swift/object-server.conf', 'object-server') -Create a /etc/apache2/conf.d/swift_wsgi.conf configuration file that will define -a port and Virtual Host per each local service. For example an Apache2 serving -as a web front end of a proxy service:: +Create a ``/etc/apache2/conf.d/swift_wsgi.conf`` configuration file that will +define a port and Virtual Host per each local service. For example an Apache2 +serving as a web front end of a proxy service:: - #Proxy - NameVirtualHost *:8080 + # Proxy Listen 8080 + ServerName proxy-server + LimitRequestBody 5368709122 - WSGIDaemonProcess proxy-server processes=5 threads=1 + LimitRequestFields 200 + + WSGIDaemonProcess proxy-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP} WSGIProcessGroup proxy-server WSGIScriptAlias / /srv/www/swift/proxy-server.wsgi - LimitRequestFields 200 - ErrorLog /var/log/apache2/proxy-server LogLevel debug CustomLog /var/log/apache2/proxy.log combined + ErrorLog /var/log/apache2/proxy-server Notice that when using Apache the limit on the maximal object size should be -imposed by Apache using the LimitRequestBody rather by the swift proxy. Note -also that the LimitRequestBody should indicate the same value as indicated by -max_file_size located in both /etc/swift/swift.conf and in /etc/swift/test.conf. -The Swift default value for max_file_size (when not present) is 5368709122. For -example an Apache2 serving as a web front end of a storage node:: +imposed by Apache using the `LimitRequestBody` rather by the swift proxy. Note +also that the `LimitRequestBody` should indicate the same value as indicated by +`max_file_size` located in both ``/etc/swift/swift.conf`` and in +``/etc/swift/test.conf``. The Swift default value for `max_file_size` (when not +present) is `5368709122`. For example an Apache2 serving as a web front end of a +storage node:: - #Object Service - NameVirtualHost *:6200 + # Object Service Listen 6200 + ServerName object-server - WSGIDaemonProcess object-server processes=5 threads=1 + + LimitRequestFields 200 + + WSGIDaemonProcess object-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP} WSGIProcessGroup object-server WSGIScriptAlias / /srv/www/swift/object-server.wsgi - LimitRequestFields 200 - ErrorLog /var/log/apache2/object-server LogLevel debug CustomLog /var/log/apache2/access.log combined + ErrorLog /var/log/apache2/object-server - #Container Service - NameVirtualHost *:6201 + # Container Service Listen 6201 + ServerName container-server - WSGIDaemonProcess container-server processes=5 threads=1 + + LimitRequestFields 200 + + WSGIDaemonProcess container-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP} WSGIProcessGroup container-server WSGIScriptAlias / /srv/www/swift/container-server.wsgi - LimitRequestFields 200 - ErrorLog /var/log/apache2/container-server LogLevel debug CustomLog /var/log/apache2/access.log combined + ErrorLog /var/log/apache2/container-server - #Account Service - NameVirtualHost *:6202 + # Account Service Listen 6202 + ServerName account-server - WSGIDaemonProcess account-server processes=5 threads=1 + + LimitRequestFields 200 + + WSGIDaemonProcess account-server processes=5 threads=1 user=swift group=swift display-name=%{GROUP} WSGIProcessGroup account-server WSGIScriptAlias / /srv/www/swift/account-server.wsgi - LimitRequestFields 200 - ErrorLog /var/log/apache2/account-server LogLevel debug CustomLog /var/log/apache2/access.log combined + ErrorLog /var/log/apache2/account-server -Next stop the Apache2 and start it again (apache2ctl restart is not enough):: +Enable the newly configured Virtual Hosts:: + + a2ensite swift_wsgi.conf + +Next, stop, test and start Apache2 again:: + + # stop it + systemctl stop apache2.service + + # test the configuration + apache2ctl -t + + # start it if the test succeeds + systemctl start apache2.service - apache2ctl stop - apache2ctl start Edit the tests config file and add:: web_front_end = apache2 normalized_urls = True -Also check to see that the file includes max_file_size of the same value as used -for the LimitRequestBody in the apache config file above. +Also check to see that the file includes `max_file_size` of the same value as +used for the `LimitRequestBody` in the apache config file above. We are done. You may run functional tests to test - e.g.::