A website writen in flask for the visualisation of solarwind propagation simulations.
Builds and serves 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.
You can very quickly have a running app out of the box.
Just:
docker compose build
docker compose up -d
and point your browser to http://127.0.0.1:8080/
See later about configuring port number
Preferred way of running heliopropa app.
docker stack mainly consists in two files:
Dockerfile: for the container buildingcompose.yaml: for the volumes configuration and links with nginx service and gunicorn
And your can tweak port configuration thanks to $PORT environment variable.
(@see ports: section in compose.yaml )
Either by setting it in your shell
PORT=8081 docker compose up -d
Or in a config file:
cp compose.env-dist compose.env
${EDITOR} compose.env # set to your needs
docker compose --env-file=compose.env build
Or
cp compose.env-dist .env
${EDITOR} .env # set to your needs
docker compose build
You may want to understand where data is stored:
The web application saves *.csv files in the ./cache/ directory, which happens to be a docker volume
named helio_cache.
The speasy library holds a cache dir located at container:/root/.cache/speasy/Cache/ which is also mounted as a
volume: speasy_cache.
Two configuration files are also used:
./config.yml: for the web app.${HOME}/.config/speasy/config.ini: for the speasy library.
You can use the compose.override.yaml file to make dynamic links between your local files or directories and the
container.
That way you can live edit the config files, and also use already loaded cache directories.
To do so:
cp compose.override.yaml-dist compose.override.yaml
${EDITOR} compose.override.yaml # make sure its ok, comment what you dont need
docker compose build
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/main.js: most of the javascript client-side.
cp config.yml-dist config.yml
$(EDITOR) config.yml # but defaults should be ok
Also take a look at the ./ressources/ directory for more available configuration files.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
source venv/bin/activate
DEBUG=true python web/run.py
Then, browse localhost:5000.
A tool called hp_cmd.py is available to make so administrative task.
It allows you to nightly populate the csv cache so later visitors won't have to wait for data download.
Basic usage:
# look at what it would do
python web/hp_cmd.py --dry-run -clog csv_gen -a
# do it
python web/hp_cmd.py -clog csv_gen -a
# see all usages
python web/hp_cmd.py --help
Docker usage:
docker compose exec web python web/hp_cmd.py --all
Http tasks:
http://${HOSTNAME}/cache/clear
http://${HOSTNAME}/cache/cleanup
http://${HOSTNAME}/cache/warmup
http://${HOSTNAME}/log
http://${HOSTNAME}/log/clear
If your want to dig into code usage take a look at our notebooks:
pip install -r requirements-nb.txt
jupyter notebook ./notebooks/
then browse to given url.
Each file name is self-explanatory, and each notebook contains explanations.
see [ Digital Ocean documentation ] (https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-20-04-fr)
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
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;
}
}
sudo systemctl start nginx
sudo systemctl start heliopropa
sudo systemctl enable heliopropa
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