We’re discussing graphite’s web portal itself, not the icingaweb modules, right?
The trickiest part is getting Gunicorn up and running if you don’t have experience running Django apps.
Similarly to Assaf, I point icingaweb’s graphite module directly at Gunicorn instead of Nginx (typically ipaddress:8000) and that works fine. For Graphite’s web portal specifically, you’ll need to make sure you forward the static content (described in that documentation) with Nginx. Here’s my systemd module:
Description = Graphite
User = carbon
Group = carbon
WorkingDirectory = /opt/graphite/webapp
PIDFile = /var/run/graphite/graphite.pid
ExecStart = /usr/local/bin/python3.7 /usr/local/bin/gunicorn --bind 0.0.0.0:8000 graphite_wsgi:application
ExecReload = /bin/kill -s HUP $MAINPID
ExecStop = /bin/kill -s TERM $MAINPID
WantedBy = multi-user.target
Naturally change paths accordingly. I install Graphite with pip and I’m not familiar with how Ubuntu lays it out (if at all). Your graphite_wsgi file should be in the webapp directory that parents graphite-web’s folder. That mess should summarize some headache I dealt with outside of the official documentation, let me know if you need anything clarified.
Additionally, check the local_settings.py file. That’s a standard thing with Django and if you need to configure any custom URIs before setting up a reverse proxy (URL_PREFIX=/graphite for example), that can be handled there.