User:Pedro Sá Couto/TW/Deployment

From XPUB & Lens-Based wiki

Gunicorn Deployment


# Run

## in Development
`export FLASK_APP=run.py` 
`export FLASK_ENV=development`
`flask run`

**Using gunicorn:** 

`gunicorn --env SCRIPT_NAME=/watermark -w 4 -b 127.0.0.1:5000 app:app --log-level debug`
* `-w` workers
* `-b` bind to address / unix socker

**And gunicorn with using unix sock:** (this how it should run in production) 
` gunicorn --env SCRIPT_NAME=/watermark --workers 4 --bind unix:app.sock -m 007 app:app --log-level debug

## in Production with gunicorn and unix sockets
Based on https://medium.com/faun/deploy-flask-app-with-nginx-using-gunicorn-7fda4f50066a

### systemd service file

Add to /etc/systemd/system/watermarks.service

```
[Unit]
After=network.target

[Service]
User=psc
Group=www-data
WorkingDirectory=/var/www/TacticalApp
Environment="PATH=/var/www/TacticalApp/venv/bin"
ExecStart=/var/www/TacticalApp/venv/bin/gunicorn --env SCRIPT_NAME=/watermarks --workers 4 --bind unix:app.sock -m 007 app:app

[Install]
WantedBy=multi-user.target
```

## enable  & start service file
`systemctl enable watermarks.service`

`systemctl start watermarks.service`

It is also a good idea to check the status of the service
`systemctl status watermarks.service`

## Nginx config

```
location / {
    # if using gunicorn with app sock, use:
    proxy_pass http://unix:/var/www/TacticalApp/app.sock;
    # if using gunicord with port 5000, use:
    proxy_pass http://127.0.0.1:5000;
    }
```

## debug.

It might be helpful to enable gunicorn logging, while in development, to check what is going on,
 by replacing in watermarks.service, the `ExecStart=` value with:
 
`ExecStart=/var/www/TacticalApp/venv/bin/gunicorn --log-level debug --error-logfile /var/www/TacticalApp/app.log --workers 4 --bind unix:app.sock -m 007 app:app`

And reloading the services
`systemctl daemon-reload`

`systemctl restart watermarks.service`

and the start following app.log:
`tail -f /var/www/TacticalApp/app.log`

But in the long run logging should be disabled

----
09.06.2020 Handling url path /watermarks

* gunicorn has to be started with argument `--env SCRIPT_NAME=/watermark` which defines its path:
`gunicorn --env SCRIPT_NAME=/watermark --workers 4 --bind unix:app.sock -m 007 app:app --log-level debug`
    * allows for the following URLs
        * http://127.0.0.1/watermark
        * http://127.0.0.1/watermark/uploadbook
        * http://127.0.0.1/watermark/about

* added page /test `watermark/test` for testing url_for() - correct
* made urls relative
* service file with `--env SCRIPT_NAME=/watermark` see above
* 
gunicorn  -w 4 -b :5000 app:app