## http://heliopropa.irap.omp.eu # What ## Web Server Build and serve heliopropa's visualizations. It's a `flask` webserver, serving `d3.js` plots. It also gathers NetCDF data from AMDA, and serves it as CSV to the plotter. ### Rationale - Reading NetCDF from javascript is doable, but still *very* hacky. - The bridge can handle pagination and collecting multiple NetCDF into one CSV. # How ## Source https://gitlab.irap.omp.eu/CDPP/SPACEWEATHERONLINE ## Overview - `config.yml` : the main configuration file. - `web/run.py` : the front controller, holding most of the code. - `web/run.log` : you'll find more information about failures in the log. - `web/view/home.html.jinja2` : the HTML template. - `web/static/js/swapp.ls` : most of the javascript client-side. ## Install ### Prerequisites gcc libncurses-dev python2 virtualenv ### Python venv ``` bash virtualenv venv source venv/bin/activate pip install matplotlib pip install numpy==1.8.* pip install -r requirements.txt ``` ### CentOs 6 Shenanigans ``` bash yum install https://centos6.iuscommunity.org/ius-release.rpm yum install python27* ``` But then `virtualenv` yields ``` File "/var/www/html/HELIOPROPA/web/run.py", line 24, in [Fri Nov 30 14:30:38 2018] [error] [client 10.10.135.119] from netCDF4 import Dataset, date2num [Fri Nov 30 14:30:38 2018] [error] [client 10.10.135.119] File "/var/www/html/HELIOPROPA/venv/lib/python2.7/site-packages/netCDF4/__init__.py", line 3, in [Fri Nov 30 14:30:38 2018] [error] [client 10.10.135.119] from ._netCDF4 import * [Fri Nov 30 14:30:38 2018] [error] [client 10.10.135.119] ImportError: /var/www/html/HELIOPROPA/venv/lib/python2.7/site-packages/netCDF4/_netCDF4.so: undefined symbol: PyUnicodeUCS2_FromStringAndSize ``` _Solution:_ Configure Apache to use `web/run_ssa.wsgi` and use pip2.7 install system wide. ### Install libcdf. ``` bash wget https://spdf.gsfc.nasa.gov/pub/software/cdf/dist/cdf38_1/cdf38_1-dist-all.tar.gz tar -xzvf cdf38_1-dist-all.tar.gz cd cdf38_1-dist make all OS=linux ENV=gnu make INSTALLDIR=/usr/local/lib/libcdf install ``` ## Develop ``` bash source venv/bin/activate DEBUG=true python web/run.py ``` Then, browse [localhost:5000](http://localhost:5000). ## Troubleshoot ### Installing scipy Getting `MemoryErrors` ? Try with the `--no-cache-dir` option. `pip install scipy --no-cache-dir` ### Fix permissions problems with the cache ``` sudo setfacl -R -m u:apache:rwx -m u:`whoami`:rwx cache sudo setfacl -dR -m u:apache:rwx -m u:`whoami`:rwx cache ``` # Gunicorn and Nginx deployment on OVH for development see [ Digital Ocean documentation ] (https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-20-04-fr) ## wep app service and Gunicorn see ./resources/heliopropa.service /etc/systemd/system/heliopropa.service [Unit] Description=Gunicorn instance to serve Heliopropa After=network.target [Service] User=debian Group=www-data WorkingDirectory= /home/debian/heliopropa/ Environment="PATH=/home/debian/heliopropa/venv/bin/" ExecStart=/home/debian/heliopropa/venv/bin/gunicorn --workers 3 --bind unix:heliopropa.sock -m 007 web.run:app [Install] WantedBy=multi-user.target ## Nginx see ./resources/heliopropa.nginx /etc/nginx/sites-available/heliopropa server { listen 80; server_name heliopropa heliopropa.co-libri.org; location / { include proxy_params; proxy_pass http://unix:/home/debian/heliopropa/heliopropa.sock; } } ## Start and Allow at system reboot sudo systemctl start nginx sudo systemctl start heliopropa sudo systemctl enable heliopropa ## Git hook auto deploy see ./resources/post-receive.git-hook Set bare repo with hook on vps ssh user@vps git clone --bare path-to-heliopropa-repo heliopropa.git cd heliopropa.git/hooks vim post-receive chmod +x post-receive Push from dev computer git remote add helio-dev user@vps:heliopropa.git git push heliopropa HEAD:DEV