Installation
This guide walks you through deploying solyto on your own server using Docker.
Prerequisites
Section titled “Prerequisites”Before you begin, make sure you have:
- A server (VPS, dedicated, or home server) with at least 2 GB RAM and 10 GB storage
- Docker and Docker Compose installed
- Three domain names (or subdomains) pointing to your server’s IP address:
app.example.com— the frontendapi.example.com— the APIdav.example.com— CalDAV/CardDAV
- A valid email address for Let’s Encrypt TLS certificates
- Ports 80 and 443 open on your firewall
DNS setup
Section titled “DNS setup”Point your three domain names to your server’s public IP address:
app.example.com A your.server.ipapi.example.com A your.server.ipdav.example.com A your.server.ipWait for DNS propagation before continuing (usually a few minutes, up to 24 hours).
One-step install
Section titled “One-step install”The fastest way to install solyto is with the setup script:
curl -fsSL "https://raw.githubusercontent.com/solyto/selfhosted/main/setup.sh?$(date +%s)" | bashThe setup script will:
- Clone the selfhosted repo
- Create required directories (
storage/,bootstrap/cache/, etc.) - Prompt you interactively for:
- API_DOMAIN — e.g.
api.example.com - APP_DOMAIN — e.g.
app.example.com - DAV_DOMAIN — e.g.
dav.example.com - ACME_EMAIL — your email for Let’s Encrypt
- API_DOMAIN — e.g.
- Generate all required secrets (database passwords, app key, etc.)
- Write everything to
.envand./secrets/
After the script finishes, start the services:
cd selfhosteddocker compose up -dManual install
Section titled “Manual install”If you prefer to do everything manually:
1. Clone the repo
Section titled “1. Clone the repo”git clone https://github.com/solyto/selfhosted.gitcd selfhosted2. Create directories
Section titled “2. Create directories”mkdir -p storage/app/publicmkdir -p storage/framework/cachemkdir -p storage/framework/sessionsmkdir -p storage/framework/viewsmkdir -p storage/logsmkdir -p bootstrap/cachechown -R www-data:www-data storage/3. Configure environment
Section titled “3. Configure environment”Copy the example environment file and edit it:
cp .env.example .envEdit .env with your domain names, timezone, and preferences. See Configuration for all available options.
4. Generate secrets
Section titled “4. Generate secrets”Create the ./secrets/ directory and generate the required secret files:
mkdir -p secrets
# Application keyecho "base64:$(openssl rand -base64 32)" > secrets/app_key
# MariaDBecho "solyto" > secrets/db_useropenssl rand -hex 32 > secrets/db_passwordecho "solyto" > secrets/mariadb_useropenssl rand -hex 32 > secrets/mariadb_passwordopenssl rand -hex 32 > secrets/mariadb_root_password
# PostgreSQL (DAV)echo "solyto_dav" > secrets/dav_db_useropenssl rand -hex 32 > secrets/dav_db_passwordopenssl rand -hex 32 > secrets/postgres_root_password
# Optional secrets (create empty files)touch secrets/solyto_bot_webhook_tokentouch secrets/solyto_bot_telegram_tokentouch secrets/hardcover_api_keytouch secrets/ai_api_keytouch secrets/mailgun_secrettouch secrets/vapid_public_keytouch secrets/vapid_private_keytouch secrets/bgg_api_keytouch secrets/tmdb_access_tokentouch secrets/imgproxy_keytouch secrets/imgproxy_saltSee Docker Secrets for details on each secret.
5. Start the services
Section titled “5. Start the services”docker compose up -dVerify the installation
Section titled “Verify the installation”Check container status
Section titled “Check container status”docker compose psAll services should show status Up or Up (healthy).
Check the API health endpoint
Section titled “Check the API health endpoint”curl -s https://api.example.com/api/v1/healthA successful response means the API is running and connected to the database.
Access the app
Section titled “Access the app”Open https://app.example.com in your browser. You should see the solyto login page.
Creating your first user
Section titled “Creating your first user”The registration page is available at https://app.example.com/auth/register — create your account with a display name, email address, and a password (minimum 12 characters).
Alternatively, create a user from the command line:
docker exec -it <project>-api so users:createReplace <project> with your PROJECT_NAME (default solyto). If you changed the project name, adjust the container name accordingly.
Next steps
Section titled “Next steps”- Configuration — fine-tune your environment variables
- Docker Secrets — set up optional integrations
- Upgrading — how to keep solyto up to date
Video guide
Section titled “Video guide”A step-by-step video of the install process is in the works and will be embedded here.