Hosting Guide

Three ways to run Signal & Noise Tools. Pick the one that matches your comfort level.

🏠
Shared Hosting
Cloudways, Hostinger, or any PHP host. Upload files, run the browser setup wizard. No terminal needed.
$3–10/mo · Easiest
🚂
Railway (Docker)
One-click deploy from GitHub. Free Postgres included. No server management. Best for most users.
$5/mo · Recommended
🌊
VPS (Cloudways)
Managed cloud server with SSH access. Run the CLI installer. Good for technical users.
$5–10/mo · Intermediate
Requirements (all methods)
PHP 8.1 or newer
PostgreSQL database
512MB RAM minimum
200MB disk space
HTTPS (Let's Encrypt is free)

🏠 Shared Hosting Easiest

Hostinger, Cloudways, or any host that supports PHP 8.1+ and PostgreSQL. Uses the browser setup wizard.

Important: Your host must support PostgreSQL (not just MySQL). Most cheap shared hosting only offers MySQL. Check before you buy. Recommended hosts: Cloudways, Hostinger VPS, Railway, Render.
1
Create a database

In your hosting control panel, create a new PostgreSQL database. Note the host, database name, username, and password.

2
Upload the files

Extract the zip on your computer. Upload the sntools folder to your hosting via File Manager or FTP. Place it in your web root (usually public_html) or a subdomain folder.

Make sure the web server points to the public directory inside the sntools folder.

3
Run the setup wizard

Visit your domain in a browser:

https://yourdomain.com/setup

The wizard walks you through three steps:

Step 1: Enter your database credentials. The wizard tests the connection.
Step 2: Create your owner account (name, email, password).
Step 3: The wizard runs migrations and sets everything up.

No terminal needed. Everything happens in the browser.

4
Done

Log in and start using your tools. Set up your business info in Settings → Business, and configure your branding in Settings → Branding.

🚂 Railway (Docker) Recommended

Deploy from GitHub with a managed database. No servers to maintain. Updates deploy automatically.
1
Create a Railway account

Sign up at railway.app with your GitHub account. The Hobby plan ($5/month) includes enough resources to run S&N Tools comfortably.

2
Fork and deploy

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.

3
Add a database

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
4
Set your domain

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.

5
Create your account

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.

Automatic updates

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.

🌊 VPS (Cloudways) Intermediate

A managed cloud server you control. $5–10/month. Good for freelancers who want their tools online 24/7.

1
Create a server

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.

2
Install requirements

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
3
Set up PostgreSQL
sudo -u postgres createuser sntools
sudo -u postgres createdb sntools -O sntools
sudo -u postgres psql -c "ALTER USER sntools PASSWORD 'your-password-here';"
4
Upload and install

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
5
Point your domain

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.

6
Create your account

Visit https://tools.yourdomain.com/register and create your account.

After installation

Applies to all methods.

Updates

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.

Invite your team

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.

Set up payments

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.

White-label

Go to Settings → Branding. Change the app name, upload your logo, set your accent color. It becomes your branded platform.

Set up cron (scheduled tasks)

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.

Health check (optional)

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.

Nginx users

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.