# voicegardens > An online landscape, built as a tool to explore the many aspects of the human voice. - [voicegardens](#voicegardens) - [Interwebz](#interwebz) - [Hackity Hack Hack](#hackity-hack-hack) - [Deploying](#deploying) - [Layers of the Onion](#layers-of-the-onion) - [License](#license) ## Interwebz - [live site voicegardens.org](https://voicegardens.org) - ["offline" installation version of voicegardens.org](https://offline.voicegardens.org) - [barbican.org.uk: This is Public Space](https://www.barbican.org.uk/whats-on/2019/event/this-is-public-space) - [upprojects.com: This is Public Space](https://www.upprojects.com/projects/this-is-public-space/) ## Hackity Hack Hack ```bash $ sudo apt install -y make git $ git clone ssh://gitea@vvvvvvaria.org:12345/varia/voicegardens.git $ cd voicegardens $ python3 -m venv .venv $ source .venv/bin/activate $ pip install -r requirements.txt $ make dev-serve ``` ## Deploying You can add the following to your SSH configuration: ``` Host voicegardens.org Hostname voicegardens.org User Port 12345 IdentityFile ~/.ssh/ ``` Make sure you can SSH into the server. ```bash $ ssh voicegardens.org $ sudo -i # you have root access too ``` Then it's possible to release the site with the following targets. ```bash $ make offline # https://offline.voicegardens.org $ make voicegardens # https://voicegardens.org ``` Here is an example Supervisor configuration: ``` [group:voicegardens] programs=online,offline [program:online] directory=/var/www/voicegardens.org user=www-data autostart=true autorestart=true environment=PATH="/var/www/voicegardens.org/.venv/lib/python3.7/site-packages:%(ENV_PATH)s" command=/var/www/voicegardens.org/.venv/bin/gunicorn --workers 1 --bind 127.0.0.1:9090 voicegardens.server:app [program:offline] directory=/var/www/offline.voicegardens.org user=www-data autostart=true autorestart=true environment=PATH="/var/www/offline.voicegardens.org/.venv/lib/python3.7/site-packages:%(ENV_PATH)s" command=/var/www/offline.voicegardens.org/.venv/bin/gunicorn --workers 1 --bind 127.0.0.1:9091 voicegardens.server:app ``` And an Nginx configuration (after running `cerbot --nginx -d voicegardens.org`): ``` upstream voicegardens { server 127.0.0.1:9090; } server { root /var/www/voicegardens.org; server_name voicegardens.org; # managed by Certbot location / { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://voicegardens; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/voicegardens.org/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/voicegardens.org/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = voicegardens.org) { return 301 https://$host$request_uri; } # managed by Certbot listen 80 ; listen [::]:80 ; server_name voicegardens.org; return 404; # managed by Certbot } ``` You will also need to include the following in the `/etc/nginx/nginx.conf`: ``` client_max_body_size 100M; ``` And you'll need to create user accounts and hand out the right permissions too: ``` $ useradd -m voicegardens -s /bin/bash $ usermod -a -G sudo voicegardens $ usermod -a -G www-data voicegardens $ chgrp www-data /var/www/voicegardens.org/voicegardens/archive/ $ chmod g+rwxs /var/www/offline.voicegardens.org/voicegardens/archive/ ``` And the following in the `/etc/sudoers` file also: ``` voicegardens ALL=(ALL) NOPASSWD: ALL ``` ## Layers of the Onion - [Flask](http://flask.palletsprojects.com/en/1.1.x/) - [p5.js](https://p5js.org) ## License - [AGPL](LICENSE)