Three ways to run Signal & Noise Tools. Pick the one that matches your comfort level.
Sign up at railway.app with your GitHub account. The Hobby plan ($5/month) includes enough resources to run S&N Tools comfortably.
Fork the S&N Tools repository to your GitHub account. In Railway, click New Project → Deploy from GitHub Repo and select your fork.
Railway detects the Dockerfile automatically. No configuration needed.
In your Railway project, click New → Database → PostgreSQL. Railway creates it instantly and gives you the connection URL.
Add these environment variables to your app service (Settings → Variables):
DB_CONNECTION=pgsql
DATABASE_URL=${{Postgres.DATABASE_URL}}
APP_KEY=base64:... (generate with: php artisan key:generate --show)
APP_URL=https://your-app.up.railway.app
SESSION_ENCRYPT=true
In Settings → Networking, Railway gives you a free .up.railway.app subdomain, or you can add a custom domain. Point your domain's CNAME record to the Railway URL. HTTPS is automatic.
Visit your domain. The setup wizard runs on first visit: enter your name, email, and password. Migrations run automatically on every deploy. You're ready to go.
When you sync your fork with new releases, Railway rebuilds and redeploys automatically. Migrations run on every deploy. Zero downtime. You can also update from Settings → System inside the app.
A managed cloud server you control. $5–10/month. Good for freelancers who want their tools online 24/7.
Sign up at Cloudways. Launch a new PHP application on a DigitalOcean or Vultr server.
Region: closest to you. Size: 1GB RAM ($5–10/mo). Cloudways handles PHP, Nginx, and SSL automatically.
SSH into your server and run:
apt update && apt upgrade -y
apt install -y php8.3 php8.3-fpm php8.3-pgsql php8.3-mbstring \
php8.3-xml php8.3-curl php8.3-zip php8.3-gd \
postgresql nginx composer unzip nodejs npm
sudo -u postgres createuser sntools
sudo -u postgres createdb sntools -O sntools
sudo -u postgres psql -c "ALTER USER sntools PASSWORD 'your-password-here';"
Upload the zip to your server and extract:
cd /var/www
unzip sntools-latest.zip
cd sntools
cp .env.example .env
php artisan key:generate
Edit .env with your database credentials:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=sntools
DB_USERNAME=sntools
DB_PASSWORD=your-password-here
Then run the installer:
bash install.sh
In your domain's DNS settings, add an A record pointing to your server's IP address. For example: tools.yourdomain.com → 123.45.67.89
Set up Nginx to serve the app and use Certbot for free HTTPS.
Visit https://tools.yourdomain.com/register and create your account.
Applies to all methods.
Go to Settings → System → Check for Updates. If an update is available, click Install Update. The app downloads the new version, replaces files (never touching your data), runs migrations, and reloads. No terminal needed.
Go to Settings → Security. Enter an email and choose a role (Team or Finance). Share the invite link. They create their account and only see the modules their role allows.
Go to Settings → AI & Integrations. Add your Stripe or MercadoPago keys. Invoices get a "Pay Now" button. Stripe handles cards worldwide. MercadoPago handles cards, bank transfers, and cash payments across Latin America.
Go to Settings → Branding. Change the app name, upload your logo, set your accent color. It becomes your branded platform.
Add one cron entry to your server. Laravel's scheduler handles the rest:
* * * * * cd /path/to/sntools && php artisan schedule:run >> /dev/null 2>&1
This runs: late payment reminders (daily at 9 AM), audit log cleanup (weekly). On cPanel: use Cron Jobs in the control panel. On Railway/Render: use their built-in cron or a separate worker.
S&N Tools exposes GET /up — a JSON health endpoint that returns app status, version, and database connectivity. Point your hosting provider's uptime monitor at it. Returns 200 when healthy, 503 when the database is unreachable.
If your server uses Nginx instead of Apache, copy nginx.example.conf from the repo root to your Nginx config directory and adjust the paths. Apache works out of the box via .htaccess.