RS Supabase
Most of the Supabase processes, plus MinIO for object storage, and Cantaloupe as a IIIF server.
Recogito-Studio is ready for self-hosting and these instructions detail the steps necessary for deployment on Ubuntu Linux, v24 (although many earlier versions will also work as well). The deployment strategy utilizes Docker, Docker Compose, and Nginx.
In the example below we will install Recogito Studio on a Digital Ocean Droplet. Digital Ocean is a well-regarded cloud hosting platform known for its ease of use and competitive pricing, but the instructions are easily translated to other cloud platforms or on-premises data centers.
RS Supabase
Most of the Supabase processes, plus MinIO for object storage, and Cantaloupe as a IIIF server.
RS Client
The client application of Recogito Studio, written in Astro JS.
Postgres
Postgres server with Supabase Vector process and pgAdmin for database management.
Portainer
Container management tool for managing and monitoring the Docker environment.
A full setup requires five DNS records pointing to your instance’s public IP:
https://server.example.com
- Main serverhttps://client.example.com
- Client applicationhttps://portainer.example.com
- Container managementhttps://pgadmin.example.com
- Database administrationhttps://minio.example.com
- Object storageFor optional plugin-ner:
https://trigger.example.com
- Trigger.dev dashboardBegin by creating a new droplet in your Digital Ocean account.
Choose Ubuntu (latest version) as your operating system and select appropriate region and datacenter.
Choose Basic shared CPU, Regular SSD with minimum: 4GB Memory, 2 CPUs, 80GB SSD.
Choose your preferred authentication method and enable automatic backups (recommended for production).
Review your settings and create the droplet.
Once created, note the IPv4 address for your new droplet.
Connect to your server:
ssh root@your_server_ip
Update the system:
apt update
Create a new user with sudo privileges:
adduser recogitousermod -aG sudo recogito
Configure UFW firewall:
ufw app listufw allow OpenSSHufw enableufw status
Install and configure the web server:
sudo apt updatesudo apt install nginx
Adjust firewall for web traffic:
sudo ufw allow 'Nginx Full'sudo ufw status
Verify Nginx is running:
systemctl status nginx
Test by navigating to http://your_server_ip
- you should see the Nginx welcome page.
Verify Git is installed:
git --version
Install via SNAP:
sudo snap install docker
Install Node Package Manager:
sudo apt install npm
Clone the repository:
git clone --depth 1 https://github.com/recogito/recogito-studio.gitcd ./recogito-studio
Copy and edit environment variables:
cp ./docker/.env.example ./docker/.envnano ./docker/.env
Update these required values in your .env
file:
Generate JWT secret:
openssl rand -base64 36
https://server.example.com
)openssl rand -base64 24
Execute the installation script:
sudo bash ./install-self-hosted-docker.sh
Respond “Yes” to database push when prompted.
Copy and customize Nginx configuration files:
sudo cp ./nginx.client.example.com /etc/nginx/sites-available/client.example.comsudo nano /etc/nginx/sites-available/client.example.com
Replace client.example.com
with your actual client domain.
sudo cp ./nginx.server.example.com /etc/nginx/sites-available/server.example.comsudo nano /etc/nginx/sites-available/server.example.com
Update:
server_name
with your server URLAccess-Control-Allow-Origin
headers with your client URLRepeat for remaining services:
sudo cp ./nginx.minio.example.com /etc/nginx/sites-available/minio.[yourdomain].comsudo cp ./nginx.pgadmin.example.com /etc/nginx/sites-available/pgadmin.[yourdomain].comsudo cp ./nginx.portainer.example.com /etc/nginx/sites-available/portainer.[yourdomain].com
Add WebSocket support to /etc/nginx/nginx.conf
:
sudo nano /etc/nginx/nginx.conf
Add to http block:
map $http_upgrade $connection_upgrade { default upgrade; '' close;}
Create symbolic links:
sudo ln -s /etc/nginx/sites-available/server.example.com /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/client.example.com /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/pgadmin.example.com /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/minio.example.com /etc/nginx/sites-enabled/sudo ln -s /etc/nginx/sites-available/portainer.example.com /etc/nginx/sites-enabled/
Test and restart:
sudo nginx -tsudo systemctl restart nginx
Install Certbot:
sudo snap install core; sudo snap refresh coresudo snap install --classic certbotsudo ln -s /snap/bin/certbot /usr/bin/certbot
Generate certificates for each domain:
sudo certbot --nginx -d client.example.comsudo certbot --nginx -d server.example.comsudo certbot --nginx -d pgadmin.example.comsudo certbot --nginx -d minio.example.comsudo certbot --nginx -d portainer.example.com
Verify auto-renewal:
sudo systemctl status snap.certbot.renew.servicesudo certbot renew --dry-run
Navigate to your client URL (https://client.example.com
). You should see the Recogito Studio interface.
Sign in with:
admin@example.com
ORG_ADMIN_PW
in your .env
fileNavigate to your server URL (https://server.example.com
) for Supabase studio access:
supabase
DASHBOARD_PASSWORD
in your .env
fileFuture documentation will cover: