Home Pricing Docs Blog Sign in Start free →
Documentation

Everything you need
to deploy.

Guides, references, and answers for hosting Discord bots, websites, and more on NeedTo.Host — European infrastructure, low latency, free tier included.


Introduction

NeedTo.Host is a cloud hosting platform designed for developers and creators — with a strong focus on Discord bot hosting and web hosting at unbeatable latency from Europe.

What can you host?

  • Discord Bots — Any language (Node.js, Python, etc.) running inside isolated Docker containers
  • Static Sites — HTML/CSS/JS, Nginx-powered, instant deploy
  • Node.js Apps — Express, Next.js, Fastify…
  • PHP — Apache + PHP 8.2
  • Python — Flask, Django, FastAPI
  • Ghost CMS — Modern blog platform, pre-installed
  • WordPress — Full stack: Nginx, PHP-FPM, MySQL 8, Redis

Infrastructure

All services run on Hetzner FSN1 (Frankfurt, Germany) — one of the closest datacenters to Discord's European infrastructure (~10–20ms WebSocket latency). Your containers are fully isolated with Docker.

Why Frankfurt? Discord's closest backend endpoint from Western Europe is in Frankfurt. A bot hosted here experiences ~10ms WebSocket latency vs ~120ms from a US server.

Quick start

From zero to deployed in under 2 minutes.

1

Create an account

Go to needto.host/register and sign up with your email. You'll receive a verification email — click the link to activate your account.

2

Choose a plan

Visit Dashboard → Plans. Pick a free or paid plan. For bots, the free 256MB plan is a great start.

3

Configure your service

Name your service. For websites, choose a subdomain (e.g. mybot.needto.host). Select your node — Frankfurt is recommended.

4

Upload your files

Use the Files tab to upload your project. Or use the Startup tab to clone a Git repository on first boot.

5

Set your startup command & start

In the Startup tab, set your launch command (e.g. node index.js). Then click Start in the Console. Your service is live.

Account setup

Manage your profile, security, and authentication settings.

Email verification

Your email must be verified before you can create or purchase any service. Check your inbox after registration — if the email doesn't arrive within 2 minutes, check spam or use the "Resend" button on the verification page.

Two-factor authentication (2FA)

Enable 2FA in Security settings using any TOTP authenticator (Google Authenticator, Authy, 1Password…). You'll also receive recovery codes — store them safely.

Important: Recovery codes are single-use and shown only once. If you lose access to your authenticator and your recovery codes, account recovery will require manual identity verification.

Password reset

Use Forgot password to receive a reset link by email. Links expire after 1 hour.

Discord Bots

Host any Discord bot — Node.js, Python, Java, Rust. Any language that runs in Docker. See our Discord bot hosting overview →

Supported runtimes

Your bot container includes a full Linux environment (Debian-based). You can run anything that works in a Docker container: Node.js, Python 3, Java, Go, Rust, etc.

Deploying a Node.js bot

1

Upload your files

Go to Files tab and upload your project. Make sure package.json is at the root.

2

Set environment variables

Go to Startup → Environment Variables and add your bot token: DISCORD_TOKEN=your_token_here

3

Set startup command

In Startup → Startup command, set: npm install && node index.js

4

Start

Click Start in the Console. The output will appear live.

Deploying a Python bot

# Startup command example
pip install -r requirements.txt && python bot.py

Make sure your requirements.txt is at the root and includes discord.py or nextcord.

Auto-restart

Paid bot plans support auto-restart — if your container crashes, Docker will automatically restart it. Enable it in Startup → Auto-restart. Free tier bots do not support auto-restart.

Latency tip: Our Frankfurt server is ~10–20ms from Discord's EU gateway. That's 5–10× faster than US-based hosting.

Websites

Deploy any type of website under your free *.needto.host subdomain or your own custom domain.

Available install types

TypeStackBest for
StaticNginxHTML/CSS/JS portfolios, landing pages
Node.jsNode + NginxExpress, Next.js, Fastify APIs
PHPApache + PHP 8.2Custom PHP apps, Laravel, Symfony
PythonPython 3 + GunicornFlask, Django, FastAPI
Ghost CMSGhost + NginxBlogs, newsletters
WordPressNginx + FPM + MySQL + RedisCMS, e-commerce

Subdomains

Every site gets a free subdomain at yourname.needto.host. Subdomains must be 3–63 characters, lowercase letters, numbers, and hyphens only.

Ports

For Node.js, Python, or PHP apps, your app must listen on the port specified in the Network tab of your service dashboard. Use the environment variable PORT in your code:

// Node.js
const PORT = process.env.PORT || 3000
app.listen(PORT)
# Python (Flask)
import os
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))

WordPress

WordPress is fully automated — Nginx, PHP 8.2-FPM, MySQL 8, and Redis object cache are pre-configured. See our WordPress hosting overview →

Admin access

After provisioning (takes ~2–3 minutes), access your WordPress admin at:

https://yoursite.needto.host/wp-admin

Credentials are shown in the WordPress sub-tab of your service page immediately after creation. Store them — they won't be shown again.

Redis object cache

Redis is pre-configured as an object cache drop-in. It significantly improves page load times by caching database queries. No configuration needed.

PHP configuration

PHP 8.2-FPM is configured with OPcache (192MB) for fast performance. JIT is disabled by default for compatibility.

File uploads

Upload media and theme files via the WordPress admin interface or via the Files tab in the service dashboard (both methods work).

Performance tip: Install a caching plugin like WP Super Cache or W3 Total Cache on top of Redis for maximum performance.

VPS

Full virtual private servers are coming soon. Coming soon

VPS plans will give you full root access to a dedicated Linux environment. Join our Discord server to be notified when VPS plans launch.

Custom domains

Point your own domain to your site. HTTPS is provisioned automatically via Let's Encrypt.

Custom domains are available for paid website plans only. Free tier sites cannot use custom domains without the Custom Domain add-on.

Step 1 — Add your domain

In your service dashboard, go to the Domain sub-tab. Enter your custom domain (e.g. www.example.com or example.com).

Step 2 — Configure DNS

Add one of the following DNS records with your domain registrar:

TypeNameValue
A@ or www116.202.158.97
CNAMEwwwyoursite.needto.host

DNS propagation typically takes a few minutes, but can take up to 24–48 hours in rare cases.

Step 3 — Verify & get HTTPS

Click Verify in the Domain tab. We'll check your DNS records and automatically request an SSL certificate from Let's Encrypt. HTTPS will be active within ~30 seconds of verification.

Only one custom domain per service. You can update or remove it at any time from the Domain tab.

File manager

Browse, upload, edit, and delete files directly in your container.

Uploading files

In the Files tab of your service, click Upload to drag-and-drop or browse files. You can upload individual files or entire ZIP archives (automatically extracted).

Navigating directories

Click any folder to enter it. Use the breadcrumb navigation at the top to go back. Your working directory is shown at all times.

Editing files inline

Click any text file (e.g. .js, .py, .json, .html) to open the inline editor. Save with the button or Ctrl+S.

Permissions

All files in your container are accessible. System directories are not exposed. Your working directory is /home/container.

Console & logs

Real-time container output, start/stop controls, and log history.

Live console

The Console tab shows your container's stdout/stderr in real time via WebSocket. There is no delay — you see output as it happens.

Start / Stop / Restart

Use the buttons at the top of the Console tab to control your container. The status indicator (green/orange/red) reflects the current state.

Sending input

Click the console input at the bottom to type a command and press Enter. This sends stdin to your running process — useful for interactive REPL programs.

Log retention

Logs are streamed live and not stored server-side beyond the active session. If you need persistent logs, write them to a file from your application.

Environment variables

Securely inject secrets and configuration into your container.

Setting variables

Go to the Startup tab of your service, then the Environment section. Add key/value pairs. Changes apply on the next container restart.

Accessing variables in code

// Node.js
const token = process.env.DISCORD_TOKEN

# Python
import os
token = os.environ.get('DISCORD_TOKEN')

Security

Environment variables are stored encrypted and are never exposed in logs or the console output. Never hardcode secrets in your source files — use env vars instead.

Never commit secrets to Git. Use a .env file locally and set the same variables in the dashboard for production.

Startup command

The command executed when your container starts.

How it works

The startup command runs as a shell command inside your container when you click Start. It's executed with /bin/sh -c, so you can chain commands with &&.

Common examples

# Node.js bot / app
npm install && node index.js

# Python bot
pip install -r requirements.txt && python bot.py

# Python with venv
python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && python bot.py

# Run a script
bash start.sh

Git clone on first boot

You can clone a public Git repository and start your app in one command:

git clone https://github.com/youruser/yourbot.git . && npm install && node index.js

Tip: Use npm install --production instead of npm install to skip dev dependencies and save memory.

Free Tier

Host for free with the free Discord Bot or Website plan. Here's what you need to know.

What's included

256 MB RAM 1 GB Storage 10% CPU €0/mo 1 per plan type Verified email required

Time system

Free services run on a time budget. Each service starts with 15 minutes of runtime. Every minute your service is active consumes 1 minute of budget.

When your time reaches 0, the service is suspended (stopped, not deleted). You have 72 hours to refill time before deletion.

Limits compared to paid plans

FeatureFreePaid
RAM256 MBUp to 8 GB
Storage1 GBUp to 50 GB
Custom domainAdd-on onlyIncluded
Auto-restart (bots)
Sleep modeActiveNever sleeps
Runtime budget15 min + claimableUnlimited
UptimeSleep after 15min idleAlways on

Sleep mode

Free tier sites and bots automatically sleep after inactivity to conserve resources.

How sleep works

If your free service receives no HTTP traffic for 15 minutes, it is put to sleep. The container is paused and time stops counting.

Wake on visit

When a visitor loads your site, they'll see a wake screen for a few seconds while your container starts. The wake is automatic — no action required from you or your visitors.

The wake screen automatically retries the request once the container is ready. Most services wake in 2–5 seconds.

Bots and sleep

Discord bots on free plans also sleep after 15 minutes of inactivity. Unlike websites, bots don't "wake on visit" — they need a manual start or a scheduled claim to keep running.

Want always-on? Upgrade to a paid plan — paid services never sleep and have unlimited runtime.

Claiming free time

Extend your free tier runtime by completing a short sponsored link.

How to claim

1

Open your service

Go to your free service in the dashboard. In the sidebar, find the Free Tier block.

2

Click "Claim +12h"

This opens a sponsored link. Complete the short page (usually 10–15 seconds).

3

Return and confirm

After completing, return to the dashboard. Your 12 hours of runtime will be added automatically.

Limits

  • Maximum 5 claims per 24 hours per user (= 60h runtime per day)
  • Claims expire if not confirmed within 30 minutes
  • Anti-bypass protection is active — VPNs or link skippers won't work

Plans & pricing

Monthly subscriptions billed via Stripe. Cancel anytime.

Plan types

  • Discord Bot plans — Optimized for always-on bots, auto-restart, low latency
  • Website plans — Nginx proxied, custom domain support, multiple install types
  • Free plans — Time-based, with sleep mode. No credit card required.

Payment

All paid plans are billed monthly via Stripe. We accept all major credit cards and many local payment methods (Bancontact, iDEAL, SEPA, etc.). We never store your card details.

VAT / Tax

Prices are shown excluding VAT. VAT is applied based on your country of residence (EU OSS rules). The exact amount is shown during checkout before you pay.

Upgrading / downgrading

Currently, to change your plan, cancel the existing service and create a new one with the new plan. Prorated billing on the old service is handled automatically.

Invoices

Download and manage your billing history.

Every payment generates an invoice in your Dashboard → Invoices. Invoices include:

  • Invoice number (format: INV-YYYY-NNNN)
  • Service name, plan, period
  • Subtotal, VAT amount, total
  • Your country and applicable tax rate

Click Download PDF to get a printable invoice for your accounting.

Cancel a service

Cancel anytime — no minimum commitment.

How to cancel

Open your service in the dashboard. Scroll to the bottom of the sidebar and click Delete server. This will:

  • Stop and remove your container
  • Cancel the associated Stripe subscription
  • Create a prorated invoice for the remaining days of the current period
  • Free up the subdomain for reuse

Deletion is permanent. All files inside your container are deleted and cannot be recovered. Back up your data before deleting.

Billing on cancellation

When you delete a paid service mid-period, a prorated invoice is automatically created for the days used. You are not charged for unused days.

Limits & fair use

Technical limits to ensure fair resource usage for all users.

ResourceFree planPaid plan
Services per account1 bot + 1 siteUnlimited
RAM256 MBPlan-defined (up to 8 GB)
Storage1 GBPlan-defined (up to 50 GB)
CPU10%Plan-defined (up to 400%)
Custom domainsAdd-on required1 per service
BandwidthFair useFair use
Email sendingNot includedNot included

Excessive bandwidth usage or abuse (DDoS, crypto mining, spam) will result in immediate service suspension.

FAQ

Common questions answered.

Can I run a database?

You can use SQLite (file-based, no extra config) for small projects. For MySQL or PostgreSQL, use an external managed database service (PlanetScale, Railway, Supabase free tier). WordPress on NeedTo.Host already includes MySQL automatically.

Can I use a .env file?

Yes — upload a .env file via the file manager, or use the Environment Variables section in the Startup tab. Both approaches work. For security, we recommend using the dashboard env vars over committed files.

Why is my bot not connecting to Discord?

Check these common causes:

  • Your DISCORD_TOKEN env var is missing or incorrect
  • The startup command isn't running (check the console for errors)
  • Missing intents — make sure you've enabled the required Gateway Intents in the Discord Developer Portal
  • The container hasn't started — check that the status dot is green

My site shows a 502 error

Your app is not listening on the correct port, or it crashed on startup. Check the Console for errors. Make sure your app listens on the port shown in the Network tab and on host 0.0.0.0 (not localhost).

Can I use a custom Docker image?

Not directly — services run inside a standard Debian-based container. You can install packages at startup using apt-get in your startup command, but full custom images are not supported on the current plans.

Is there an API?

A public API is on the roadmap. Currently, all management is done through the dashboard. If you need programmatic access, contact support.

Can I transfer a service to another account?

Not currently supported. Contact support for manual transfers in special cases.

What happens when my paid subscription expires?

If a payment fails, you'll receive an email and your service will be suspended (not deleted immediately). You have a grace period to update your payment method. After 7 days without resolution, the service is cancelled.

Contact & support

We're here to help.

Support tickets

The fastest way to get help: open a ticket in Dashboard → Support. Our team responds within 24 hours (usually faster).

Email

For billing or account issues: contact@needto.host

Fastest support: Always include your service ID (found in the URL of your service page) when opening a ticket. This helps us diagnose issues immediately.