Initial setup
$ sudo yum update $ sudo yum install epel-release $ sudo yum groupinstall "Development tools" $ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel telnet htop $ sudo yum install python-devel python-virtualenv $ sudo yum install mysql-connector-python mysql-devel mysql-server
Install Python
Download and install Python : https://www.python.org/
./configure && make && make altinstall
Install uWSGI
$ wget https://bootstrap.pypa.io/get-pip.py $ which python2.7 $ sudo /usr/local/bin/python2.7 get-pip.py $ which pip2.7 $ sudo /usr/local/bin/pip2.7 install uWSGI $ which uwsgi $ uwsgi --version
Setup vassels
$ sudo mkdir -p /etc/uwsgi/vassels
Setup Emperor service
$ sudo vim /etc/init.d/emperor
#!/bin/sh # chkconfig: 2345 99 10 # Description: Starts and stops the emperor-uwsgi # See how we were called. RUNEMPEROR="/usr/local/bin/uwsgi --emperor=/etc/uwsgi/vassels" PIDFILE=/var/run/emperor-uwsgi.pid LOGFILE=/var/log/uwsgi/emperor.log start() { if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then echo 'Service emperor-uwsgi already running' >&2 return 1 fi echo 'Starting Emperor...' >&2 local CMD="$RUNEMPEROR &> \"$LOGFILE\" & echo \$!" su -c "$CMD" > "$PIDFILE" echo 'Service started' >&2 } stop() { if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then echo 'Service emperor-uwsgi not running' >&2 return 1 fi echo 'Stopping emperor-uwsgi' >&2 kill -7 $(cat "$PIDFILE") && rm -f "$PIDFILE" echo 'Service stopped' >&2 } status() { if [ ! -f "$PIDFILE" ]; then echo "Emperor is not running." >&2 return 1 else echo "Emperor (pid `cat ${PIDFILE}`) is running..." ps -ef |grep `cat $PIDFILE`| grep -v grep fi } case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop start ;; *) echo "Usage: emperor {start|stop|restart}" exit 1 esac
Setup app user & environment
$ useradd foobar
$ usermod -md /srv/foobar foobar
$ chmod 755 /srv/foobar
$ sudo su - foobar
foobar@local~$ virtualenv --python=python2.7 ~/venv
foobar@local~$ mkdir www
foobar@local~$ mkdir logs
foobar@local~$ touch logs/uwsgi.log
foobar@local~$ touch uwsgi.ini
foobar@local~$ echo "source ~/venv/bin/activate" >> ~/.bashrc
foobar@local~$ source ~/venv/bin/activate
(venv)foobar@local~$ vim uwsgi.ini
[uwsgi] master = true processes = 2 socket = /tmp/foobar.sock chdir = /srv/foobar/www virtualenv = /srv/foobar/venv module = app:app uid = foobar chown-socket = foobar:nginx chmod-socket = 660 vacuum = true die-on-term = true python-autoreload = 3 py-autoreload = 1 logger = file:/srv/foobar/logs/uwsgi.log
Exit from foobar user & create uwsgi symlink
(venv)foobar@local~$ exit
$ sudo ln -s /srv/foobar/uwsgi.ini /etc/uwsgi/vassels/foobar.ini
Start emperor service & setup set the startup
$ sudo service emperor start $ sudo chkconfig emperor on