| Version 10 (modified by , 7 years ago) ( diff ) |
|---|
UoL LAMP HowTo Install Python Flask Applications
Tags: HowTo Install Pain in the proverbial UoL LAMP Server
Python 2
Difficulties
This installations is made more difficult by 3 things:
- Suse Linux does not have mod_wsgi in its repositories, so you're going to have to compile it.
- mod_wsgi seems picky about where it picks python apps and libraries from
- The LAMP servers don't put things where you'd expect them to be.
- Some other stuff that I don't quite understand
Requirements
Before installation can start, the following packages will have to be installed by IT services:
- libmysqlclient-dev
- python-dev
Start Services
Start the Apache and MySQL and make sure that they are restarted when the server is rebooted.
sudo /sbin/chkconfig uol.apache2 on sudo /etc/init.d/uol.apache2 start sudo /sbin/chkconfig uol.mysql on sudo /etc/init.d/uol.mysql start
Proceduce
- Install
mod_wsgi.sointo the directory/local/apache2/etc/- Compile
mod_wsgi. See: HowTo Compile mod_wsgi for LAMP servers - Copy
mod_wsgi.sofrom the directory/local/apache2/etc/of an existing UoL LAMP python Flask application.
- Compile
- Clone the application from the
gitrepository into/local/directory. - Install virtualenv:
- First switch to python 2.7 by running the command
source /opt/python2/etc/python-env.sh
- First switch to python 2.7 by running the command
easy_install --install-dir=/local/python virtualenv
For some reason that I can't work out (point 4. above), it would only pick up some of the python libraries from a virtual env and not when they were installed in
/local/python/. Maybe this was because of the order that I installed things, but I couldn't get it to work without the virtual environment.
- Create a virtual environment in the application directory.
cd /local/{application directory}
/local/python/virtualenv --no-site-packages BASELINE
BASELINEis the name of the virtual environment. It could be called anything, but it's called that! Also note that you need to use the full path to thevirtualenvutility, since/local/pythonisn't in$PATH.
- Activate the environment, install the required packages, then deactivate. This example shows some common requirements:
source BASELINE/bin/activate easy_install flask easy_install flask-sqlalchemy easy_install mysql-python easy_install flask-wtf easy_install WTForms-Components deactivate
- Load the WSGI module into Apache, by editing the file
/local/apache2/etc/loadmodule.confby adding this line at the end.
LoadModule wsgi_module /local/apache2/etc/mod_wsgi.so
- Add the WSGI config to the Apache config file
/local/apache2/etc/httpd.conf:
<Directory /local/{application directory}>
WSGIProcessGroup {application name}
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
WSGIDaemonProcess {application name} user=wwwrun threads=5 python-path=/local/{application directory}/BASELINE/lib/python2.6/site-packages:/local/python:/usr/lib64/python2.6/site-packages:/usr/share/doc/packages/ home=/local/{application directory}/
WSGIScriptAlias / /local/{application directory}/{path to *.wsgi}
The two hard won things here are the values for the
python-pathandhomearguments. Thepython-pathmust contain every directory where python libraries are installed, including a sub-directory of the virtualenv directory you created earlier. Thehomemust point to your application directory, or you won't be able to pick up your own modules.
- Restart apache:
sudo /etc/init.d/uol.apache2 restart
- Create any databases that are required and given the appropriate user permissions.
- Update the application settings in
/local/{application directory}
- Pray.
Other Possible Stuff (Not required last time used**)
- You may need to give
wwwrunextra permissions to the/local/{application directory}directory. - You might need to pray a bit more.
setfacl -m u:wwwrun:rwx /local/{application directory}
setfacl -m d:u:wwwrun:rwx /local/telomere/{application directory}
Gotchas
Python 3
Create Environment
- Add python 3 to your path by adding the following line to
.profilefile in your home directory:
PATH=$PATH:/opt/python3/bin/
You will need to log off and log back in to add the above to your current environment.
- Change directory into
/local/and create a virtual environment:
cd /local/ && virtualenv --no-site-packages venv
- Activate the virtual environment:
source /local/venv/bin/activate
- Download the application repository from GitHub, cd into the application directory and install the requirements by running the command:
pip install -r requirements.txt
Apache Setup
- Edit the Apache config:
vi /local/apache2/etc/httpd.conf
- Amend the values below the comment
# List of resources to look for when the client requests a directoryto be:
# List of resources to look for when the client requests a directory
DirectoryIndex index.html
### 'Main' server configuration #############################################
<Directory {{{path to application folder}}}>
SetEnv FLASK_SECRET_KEY {{{Some Secret Key}}}
SetEnv ENV1 env1_value
SetEnv ENV2 env2_value
SetEnv ENV3 env3_value
WSGIProcessGroup application
WSGIApplicationGroup %{GLOBAL}
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess application user=wwwrun threads=5 python-path=/local/venv/lib/python3.5/site-packages home={{{path to application folder}}}
WSGIScriptAlias / {{{path to application}}}
Change the values of:
Some Secret Keyto be somethin' secretpath to application folderto be the application folderpath to applicationto be the path to the actual application
And changing ENV1, 2 & 3 to be appropriate environment values.
- Edit the Apache modules conf:
vi /local/apache2/etc/loadmodule.conf
- Add the following line to the end of the file:
LoadModule wsgi_module /opt/python3/lib/mod_wsgi.so
- Restart Apache using the command:
sudo /etc/init.d/uol.apache2 restart
