Last active
August 29, 2015 14:21
-
-
Save mahasak/f8f167327180298921d1 to your computer and use it in GitHub Desktop.
Install Ubuntu + Python + Nginx + uWSGI
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Fix locale problem | |
------------------------------------------ | |
Run the following command | |
$ update-locale LC_ALL="en_US.UTF-8" | |
If it failed, you will need to add the following to __/var/lib/locales/supported.d/local__ file | |
en_US.UTF-8 UTF-8 | |
Then run | |
$ locale-gen | |
Install necessary packages | |
------------------------------------------ | |
Update aptitude | |
$ apt-get update | |
$ apt-get upgrade | |
Install necessary packages | |
$ apt-get install build-essential | |
Install Python | |
$ apt-get install python2.7-dev python-setuptools python-dev | |
For PyOpenssl | |
$ apt-get install python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev | |
For scipy | |
$ apt-get install libatlas-base-dev gfortran | |
$ easy_install pip | |
Setup Git | |
------------------------------------------ | |
Install git | |
$ apt-get install git-core | |
Generate a new SSH key | |
$ ssh-keygen -t rsa -C "your_email@youremail.com" | |
Then add the key from __~/.ssh/id_rsa.pub__ to GitHub | |
Test the key by | |
$ ssh -T git@github.com | |
Install Virtualenv | |
------------------------------------------ | |
Install virtualenv | |
$ pip install virtualenv | |
* I will not use virtualenvwrapper because I want to isolate everything about the website under one directory (in this case, Python libraries). | |
Install Postgresql Server | |
------------------------------------------ | |
Install Postgresql Server and Python library | |
$ apt-get install postgresql python-psycopg2 libpq-dev | |
Create a new database and database's user | |
$ sudo -u postgres createdb [database_name] | |
$ sudo -u postgres createuser -SDRP [database_user_name] | |
Config __pg_hba.conf__ file (you may need to change version number) | |
$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf | |
Then add the following to pg_hba.conf file let database user authenticated using password | |
local [database_name] [database_user_name] md5 | |
Reload Postgresql server | |
$ /etc/init.d/postgresql reload | |
Install nginx | |
------------------------------------------ | |
Setup aptitude | |
$ apt-get install python-software-properties software-properties-common | |
$ add-apt-repository ppa:nginx/stable | |
Install nginx | |
$ apt-get install nginx-full | |
Install PCRE library (necessary for rewrite module) | |
$ apt-get install libpcre3-dev | |
Install uWSGI | |
------------------------------------------ | |
Install uWSGI | |
$ apt-get install uwsgi uwsgi-plugin-python | |
Configuration | |
========================================= | |
Example website is __example.com__ | |
Setup folder structure | |
----------------------------------------- | |
Create folders | |
$ mkdir -p /web/example.com/ | |
$ cd /web/example.com/ | |
$ mkdir logs public_html source | |
Get source code | |
----------------------------------------- | |
$ cd /web/example.com/source/ | |
$ git clone git@github.com:[username]/[repository].git | |
Set owner to www-data | |
$ chown -R www-data:www-data /web | |
Setup virtualenv | |
----------------------------------------- | |
$ cd /web | |
$ virtualenv example.com | |
Config nginx | |
----------------------------------------- | |
$ cd /etc/nginx/sites-available | |
$ vim example.com | |
Add the following configuration to the file | |
server { | |
listen 80; | |
server_name $hostname; | |
access_log /web/example.com/logs/access.log; | |
error_log /web/example.com/logs/error.log; | |
location / { | |
uwsgi_pass unix:///run/uwsgi/app/example.com/example.com.socket; | |
include uwsgi_params; | |
uwsgi_param UWSGI_SCHEME $scheme; | |
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; | |
} | |
location /static { | |
root /web/example.com/public_html/static/; | |
} | |
} | |
Then create a symlink | |
$ ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com | |
Then you may need to delete default site | |
$ rm /etc/nginx/sites-enabled/default | |
Config uwsgi | |
----------------------------------------- | |
$ vim /etc/uwsgi/apps-available/example.com.xml | |
Add the following configuration to the file | |
<uwsgi> | |
<plugin>python</plugin> | |
<vhost/> | |
<socket>/run/uwsgi/app/example.com/example.com.socket</socket> | |
<pythonpath>/web/example.com/source/example/</pythonpath> | |
<wsgi-file>/web/example.com/source/example/example/wsgi.py</wsgi-file> | |
<virtualenv>/web/example.com</virtualenv> | |
<logto>/web/example.com/logs/example.com.log</logto> | |
<master/> | |
<processes>4</processes> | |
<harakiri>60</harakiri> | |
<reload-mercy>8</reload-mercy> | |
<cpu-affinity>1</cpu-affinity> | |
<stats>/tmp/stats.socket</stats> | |
<max-requests>2000</max-requests> | |
<limit-as>512</limit-as> | |
<reload-on-as>256</reload-on-as> | |
<reload-on-rss>192</reload-on-rss> | |
<no-orphans/> | |
<vacuum/> | |
</uwsgi> | |
Then create a symlink | |
$ ln -s /etc/uwsgi/apps-available/example.com.xml /etc/uwsgi/apps-enabled/example.com.xml | |
Restart server | |
========================================= | |
$ service uwsgi restart | |
$ service nginx restart | |
Optional | |
========================================= | |
Install PIL/Pillow | |
------------------------------------------ | |
Install dependencies | |
$ apt-get install libjpeg62-dev zlib1g-dev libfreetype6-dev liblcms1-dev | |
Install Pillow | |
$ pip install Pillow |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment