digraph G { pack=16; graph [ dpi = 300 ]; bgcolor=transparent; truecolor=true; {rank=same;sshd;uwsgie;nginx;incron;} //rankdir=LR; subgraph uwsgi_tree { uwsgie [label="uwsgi" style=filled fillcolor=white fontname="Arial"]; uwsgiv [label="vassal" style=filled fillcolor=white fontname="Arial"]; uwsgi_ini [fontname="Arial"]; } subgraph piku_env { label="piku user"; {rank=same;piku;nginx_confd;} sshd [style=filled fillcolor=white fontname="Arial"]; piku [style=filled fillcolor=white fontname="Arial"]; sshd->piku; piku->git [label="push", fontname="Arial"]; subgraph cluster_app_env { label="Application environment" fontname="Arial" style=filled fillcolor=lightgrey labelloc=b ordering=out; {rank=same;git;uwsgiv;} {rank=same;reqs;uwsgi_ini;nginx_conf;} uwsgie->uwsgiv; uwsgiv->uwsgi_ini [arrowhead=none style=dashed]; virtualenv [style=filled fillcolor=white shape=folder fontname="Arial"]; git [style=filled fillcolor=white shape=folder label="git repo" fontname="Arial"]; env [style=filled fillcolor=white shape=note label="ENV" fontname="Arial"]; reqs [style=filled fillcolor=white shape=note label="requirements.txt" fontname="Arial"]; app [style=filled fillcolor=white shape=folder fontname="Arial"]; git->env; env->uwsgi_ini; env->nginx_conf; git->app; uwsgi_ini [style=filled fillcolor=white label="uwsgi.ini" shape=note fontname="Arial"]; nginx_conf [style=filled fillcolor=white label="nginx.conf", shape=note, fontname="Arial"]; git->reqs; reqs->virtualenv; uwsgi_ini->virtualenv; nginx_conf->app; } } subgraph nginx_tree { nginx [fontname="Arial" style=filled fillcolor=white]; nginx_confd [label="master\nnginx.conf" shape=note style=filled fillcolor=white fontname="Arial"]; nginx->nginx_confd [arrowhead=none style=dashed]; nginx_confd->nginx_conf [arrowhead=none style=dashed]; } subgraph incron_tree { incron [fontname="Arial" style=filled fillcolor=white]; nginx_conf -> incron [label="watch", style="dotted", fontname="Arial" weight=0]; incron -> nginx [label="reload" style="dotted" fontname="Arial" weight=0]; incron->nginx_conf [style=invis]; } }