The pre-requirement is to set up the digitalocean droplets. After it is set up, ssh to the vps, change the password.
1. install packages
1. update the packages
sudo apt-get update
sudo apt-get upgrade
2. Install mysql-server
on vps. It is not necessary to install mysql-client
.
sudo apt-get install mysql-server
3. install python mysql interface, which is called mysqldb
.
This usually will cause multiple errors such as "cannot find MySQLdb" or "_mysql is not found" . like this blog. My experience is run all these command and then append the path to the system.
sudo apt install python-mysqldb
sudo apt-get install libmysqlclient-dev
easy_install MySQL-python
6. digitalocean will kick you out. To stay connected, do these changes:
cd /etc/ssh
sudo vi sshd_config
search for the keyword TCPKeepAlive and then add in the following below the TCPKeepAlive yes:
ClientAliveInterval 30
ClientAliveCountMax 99999
7. Install Apache and wsgi, and enable wsgi
WSGI (Web Server Gateway Interface) is an interface between web servers and web apps for python. Mod_wsgi is an Apache HTTP server mod that enables Apache to serve Flask applications.
Open terminal and type the following command to install mod_wsgi:
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi
sudo a2enmod wsgi
Now the basic set up is done. Create the folder structure like the following:
Folder Structure in /var/www/
|----elec2016 |---------elec2016 |--------------static |--------------templates
2. set up virtual environment
8. Set up virtualenv and install Flask/pandas or the other necessary packages
Setting up a virtual environment will keep the application and its dependencies isolated from the main system. Changes to it will not affect the cloud server's system configurations.
In this step, we will create a virtual environment for our flask application.
8.1 We will use pip to install virtualenv and Flask. If pip is not installed, install it on Ubuntu through apt-get.
sudo apt-get install python-pip
8.2 If virtualenv is not installed, use pip to install it using following command:
sudo pip install virtualenv
8.3 Give the following command (where venv is the name you would like to give your temporary environment):
sudo virtualenv venv
it will create a folder venv in /var/www/elec2016/elec2016, so you will see /var/www/elec2016/elec2016/venv
8.4 Now, install Flask in that environment by activating the virtual environment with the following command:
source venv/bin/activate
8.5 Give this command to install Flask inside:
sudo pip install Flask
To install the other packages, do the same thing like install Flask. Sometimes need to use sudo apt-get
to install the packages. Make sure to start with sudo to aviod using other enviroment pip
or apt-set
.
8.6 install pandas or other necessary packages to run the project
sudo apt-get install python-pandas
8.7 Next, run the following command to test if the installation is successful and the app is running:
sudo python __init__.py
It should display “Running on http://localhost:5000/” or "Running on http://127.0.0.1:5000/". If you see this message, you have successfully configured the app.
8.8 To deactivate the environment, give the following command:
deactivate
3. Configure and Enable a New Virtual Host
9. add /etc/apache2/sites-available/elec2016.conf
Ubuntu request the .conf file for virtual host.
<VirtualHost *:80> ServerName yourdomain.com ServerAdmin youemail@email.com WSGIScriptAlias / /var/www/elec2016/flaskapp.wsgi <Directory /var/www/elec2016/elec2016/> Order allow,deny Allow from all </Directory> Alias /static /var/www/elec2016/elec2016/static <Directory /var/www/elec2016/elec2016/static/> Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
enable the virtual host by
sudo a2ensite elec2016
4. Create the .wsgi File
10. create the wsgi file
Apache uses the .wsgi file to serve the Flask app. Move to the /var/www/FlaskApp directory and create a file named flaskapp.wsgi with following commands:
cd /var/www/elec2016
sudo vi flaskapp.wsgi
Add the following lines of code to the flaskapp.wsgi file:
#!/usr/bin/python import sys import logging logging.basicConfig(stream=sys.stderr) sys.path.insert(0,"/var/www/elec2016/") from elec2016 import app as application application.secret_key = 'Add your secret key'
a better look of the file is
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/elec2016/")
from elec2016 import app as application
application.secret_key = 'elec2016test'
Until now the folder structure is like
|--------elec2016 |----------------elec2016 |-----------------------static |-----------------------templates |-----------------------venv |-----------------------__init__.py |----------------flaskapp.wsgi
5. enable virtual host / start apache / reload apache
11. run
sudo a2ensite elec2016
service apache2 reload
or to restart apache service with
sudo service apache2 restart
6. Others & debug
12. install anaconda. this is more likely for data processing/data mining purpose.
bash Anaconda.sh
13. install tweepy since I need to download tweets
pip install tweepy
14. reboot and restart all service
14.1. reboot
reboot
14.2. restart mysql:
sudo service mysql restart
14.3. kick-off download job
cd develop/elec_2016_static_v2/
python 20160808_twitter_download_t2.py &
14.4. restart apache service:
sudo service apache2 restart