最近一次從Github上更新Keystone的代碼后,發現原來bin/keystone-all和bin/keystone-manage都不見了,取而代之的是keystone/cmd/目錄下的all.py和manage.py兩個python腳本.雖然在測試的virtualenv環境下仍然可以執行原來的命令,但是想試著在Apache中運行Keystone,畢竟這已經是社區力推的啟動方式了.
我的系統是Ubuntu,安裝了sysv-rc-conf來管理開機時啟動的服務,包括Apache2, MySQL, RabbitMQ等:
# apt-get install -y sysv-rc-conf
?
要管理系統啟動時加載的服務時只要輸入?# sysv-rc-conf即可, 移動光標到對應運行級的括號內按空格就可以選擇或者反選.
想要Apache加載Python服務器腳本,需要為Apache添加mod_wsgi模塊,我比較喜歡簡潔的方式,沒有自己一步步配置,直接將其安裝到Apache2中:
# apt-get install libapache2-mod-wsgi
接下來要告訴Apache每次啟動的時候加載Keystone,先將Keystone源碼repo中httpd/wsgi-keystone.conf復制到/etc/apache2/conf-available/
# cp /home/openstack/keystone/httpd/wsgi-keystone.conf /etc/apache2/conf-available
這里/home/openstack/keystone是我克隆Keystone源碼的位置,需要根據實際情況改動. Ubuntu上Apache2的配置目錄為/etc/apache2/,CentOS等系統上為/etc/httpd/,需要根據情況改動.
接著在/etc/apache2/conf-enabled/目錄中創建一個指向/etc/apache2/conf-available/wsgi-keystone.conf的同名軟鏈接:
# cd /etc/apache2/conf-enabled/ # ln -s /etc/apache2/conf-available/wsgi-keystone.conf wsgi-keystone.conf
?
然后根據需要修改/etc/apache2/conf-available/wsgi-keystone.conf文件
Listen 5000 Listen 35357<VirtualHost *:5000>WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone display-name=%{GROUP}WSGIProcessGroup keystone-publicWSGIScriptAlias / /var/www/cgi-bin/keystone/mainWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization On<IfVersion >= 2.4>ErrorLogFormat "%{cu}t %M"</IfVersion>ErrorLog /var/log/apache2/keystone.logCustomLog /var/log/apache2/keystone_access.log combined </VirtualHost><VirtualHost *:35357>WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone display-name=%{GROUP}WSGIProcessGroup keystone-adminWSGIScriptAlias / /var/www/cgi-bin/keystone/adminWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization On<IfVersion >= 2.4>ErrorLogFormat "%{cu}t %M"</IfVersion>ErrorLog /var/log/apache2/keystone.logCustomLog /var/log/apache2/keystone_access.log combined </VirtualHost>
在WSGIDaemonProcess中設置啟動Keystone服務器的進程數,線程數,啟動服務器的用戶等, 這些值需要根據具體的環境進行修改;\
在WSGIScriptAlias處設置啟動腳本的位置, 如果指定/var/www/cgi-bin/keystone/main,那么這個文件(鏈接)必須存在;
在ErrorLog 處設置Keystone錯誤日志的路徑,這個日志是由HTTPD根據Keystone的運行結果維護的,Ubuntu和紅帽系的OS在Apache2的目 錄名稱上可能不同,比如Ubuntu中Apache2的日志維護在/var/log/apache2/, 而CentOS等系統中Apache2的日志維護在/var/log/httpd/;
在CustomLog處設置Keystone訪問日志的路徑,注意事項同ErrorLog.
conf文件配置完成后,創建目錄/var/www/cgi-bin/keystone/, 為其中添加兩個軟鏈接main和admin,他們都指向keystone/httpd/keystone.py
# mkdir /var/www/cgi-bin/keystone; cd /var/www/cgi-bin/keystone # ln -s /home/openstack/keystone/httpd/keystone.py main # ln -s /home/openstack/keystone/httpd/keystone.py admin
然后重啟Apache2服務即可,如果希望開機時Keystone就加載運行,使用sysv-rc-conf將Apache2設置為開機啟動即可.
查看Keystone服務器進程,發現現在它已經在HTTPD中運行了,注意如果keystone.conf文件中也配置了日志文件log_file, 那么Keystone的錯誤日志將會輸出兩份,一份由HTTPD維護,一份由Keystone維護,但是二者的內容是一樣的.
# ps aux | grep keystone darren 2582 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-pu -k start darren 2583 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-pu -k start darren 2584 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-pu -k start darren 2585 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-pu -k start darren 2586 0.0 0.1 176316 5692 ? Sl 12:29 0:00 (wsgi:keystone-pu -k start darren 2587 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-ad -k start darren 2588 0.0 0.1 176316 5692 ? Sl 12:29 0:00 (wsgi:keystone-ad -k start darren 2589 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-ad -k start darren 2590 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-ad -k start darren 2591 0.0 0.1 176308 5692 ? Sl 12:29 0:00 (wsgi:keystone-ad -k start
?