commit 38ab4593f471c4e9d9b2fa086fcf4be29b432b14 Author: Renich Bon Ćirić Date: Wed Sep 2 19:12:37 2020 -0500 docs: Switching to /srv/www from /var/www to be more FHS 3.0 conformat It's more modern and well supported to use /srv/www now in place of /var/www. Change-Id: Icd09ed4d5fb4e2b9b84ddead21313ea1c0a87c91 ref: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s17.html diff --git a/doc/source/apache_deployment_guide.rst b/doc/source/apache_deployment_guide.rst index 1994468..2e6ef9d 100644 --- a/doc/source/apache_deployment_guide.rst +++ b/doc/source/apache_deployment_guide.rst @@ -6,92 +6,90 @@ Apache Deployment Guide Web Front End Considerations ---------------------------- -Swift can be configured to work both using an integral web front-end -and using a full-fledged Web Server such as the Apache2 (HTTPD) web server. -The integral web front-end is a wsgi mini "Web Server" which opens -up its own socket and serves http requests directly. -The incoming requests accepted by the integral web front-end are then forwarded -to a wsgi application (the core swift) for further handling, possibly -via wsgi middleware sub-components. +Swift can be configured to work both using an integral web front-end and using a +full-fledged Web Server such as the Apache2 (HTTPD) web server. The integral +web front-end is a wsgi mini "Web Server" which opens up its own socket and +serves http requests directly. The incoming requests accepted by the integral +web front-end are then forwarded to a wsgi application (the core swift) for +further handling, possibly via wsgi middleware sub-components. client<---->'integral web front-end'<---->middleware<---->'core swift' -To gain full advantage of Apache2, Swift can alternatively be -configured to work as a request processor of the Apache2 server. -This alternative deployment scenario uses mod_wsgi of Apache2 -to forward requests to the swift wsgi application and middleware. +To gain full advantage of Apache2, Swift can alternatively be configured to work +as a request processor of the Apache2 server. This alternative deployment +scenario uses mod_wsgi of Apache2 to forward requests to the swift wsgi +application and middleware. client<---->'Apache2 with mod_wsgi'<----->middleware<---->'core swift' -The integral web front-end offers simplicity and requires -minimal configuration. It is also the web front-end most commonly used -with Swift. -Additionally, the integral web front-end includes support for -receiving chunked transfer encoding from a client, -presently not supported by Apache2 in the operation mode described here. +The integral web front-end offers simplicity and requires minimal configuration. +It is also the web front-end most commonly used with Swift. Additionally, the +integral web front-end includes support for receiving chunked transfer encoding +from a client, presently not supported by Apache2 in the operation mode +described here. The use of Apache2 offers new ways to extend Swift and integrate it with -existing authentication, administration and control systems. -A single Apache2 server can serve as the web front end of any number of swift -servers residing on a swift node. -For example when a storage node offers account, container and object services, -a single Apache2 server can serve as the web front end of all three services. +existing authentication, administration and control systems. A single Apache2 +server can serve as the web front end of any number of swift servers residing on +a swift node. For example when a storage node offers account, container and +object services, a single Apache2 server can serve as the web front end of all +three services. The apache variant described here was tested as part of an IBM research work. It was found that following tuning, the Apache2 offer generally equivalent -performance to that offered by the integral web front-end. -Alternative to Apache2, other web servers may be used, but were never tested. +performance to that offered by the integral web front-end. Alternative to +Apache2, other web servers may be used, but were never tested. ------------- Apache2 Setup ------------- -Both Apache2 and mod-wsgi needs to be installed on the system. -Ubuntu comes with Apache2 installed. Install mod-wsgi using:: +Both Apache2 and mod-wsgi needs to be installed on the system. Ubuntu comes +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:: +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 /var/www/swift + sudo mkdir /srv/www/swift -Create a file for each service under /var/www/swift. +Create a file for each service under /srv/www/swift. -For a proxy service create /var/www/swift/proxy-server.wsgi:: +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 /var/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 /var/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 /var/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 @@ -101,20 +99,19 @@ For example an Apache2 serving as a web front end of a proxy service:: LimitRequestBody 5368709122 WSGIDaemonProcess proxy-server processes=5 threads=1 WSGIProcessGroup proxy-server - WSGIScriptAlias / /var/www/swift/proxy-server.wsgi + WSGIScriptAlias / /srv/www/swift/proxy-server.wsgi LimitRequestFields 200 ErrorLog /var/log/apache2/proxy-server LogLevel debug CustomLog /var/log/apache2/proxy.log combined -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:: +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:: #Object Service NameVirtualHost *:6200 @@ -123,7 +120,7 @@ For example an Apache2 serving as a web front end of a storage node:: ServerName object-server WSGIDaemonProcess object-server processes=5 threads=1 WSGIProcessGroup object-server - WSGIScriptAlias / /var/www/swift/object-server.wsgi + WSGIScriptAlias / /srv/www/swift/object-server.wsgi LimitRequestFields 200 ErrorLog /var/log/apache2/object-server LogLevel debug @@ -137,7 +134,7 @@ For example an Apache2 serving as a web front end of a storage node:: ServerName container-server WSGIDaemonProcess container-server processes=5 threads=1 WSGIProcessGroup container-server - WSGIScriptAlias / /var/www/swift/container-server.wsgi + WSGIScriptAlias / /srv/www/swift/container-server.wsgi LimitRequestFields 200 ErrorLog /var/log/apache2/container-server LogLevel debug @@ -151,7 +148,7 @@ For example an Apache2 serving as a web front end of a storage node:: ServerName account-server WSGIDaemonProcess account-server processes=5 threads=1 WSGIProcessGroup account-server - WSGIScriptAlias / /var/www/swift/account-server.wsgi + WSGIScriptAlias / /srv/www/swift/account-server.wsgi LimitRequestFields 200 ErrorLog /var/log/apache2/account-server LogLevel debug @@ -168,11 +165,10 @@ 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.:: +We are done. You may run functional tests to test - e.g.:: cd ~swift/swift ./.functests