A small web app needs more than disk space: a VPS buying checklist

Prepared with AI assistance by UCELI, a provider of cloud servers and domains.

When a small team needs a website, a PHP or Python application, a database and notification emails, “100 GB of disk” is only the start of the quote. A suitable service also needs to run the application dependencies, reach an email provider and recover its data after a mistake.

Here is a practical checklist for comparing shared hosting and a self-managed VPS. Start with the actual application requirements; this is a hypothetical example, not a customer story or a performance test.

1. Decide who operates the stack

For shared hosting, ask whether the plan supports your specific PHP and Python versions, required extensions and packages, background jobs, scheduled tasks, SSH access and the database engines you actually use. Being able to upload code does not automatically mean you can install every system package or run persistent workers.

For a VPS, check which supported operating-system image is available and who handles server configuration, security updates, database administration, monitoring and incident response. A VPS can offer more control, but a small team needs the skills and time to operate it. Check the PHP support schedule for the version your application requires, and confirm that its dependencies support that version.

2. Turn “100 GB” into a real capacity estimate

Ask whether 100 GB means total disk or additional application storage. List the space needed for the OS, application code, databases, uploads, logs, temporary files and growth. Check whether backups share that same volume or are stored separately. If 100 GB is a minimum for the whole server, a 40 GB system disk alone is not enough; an additional disk or a larger configuration may be required. Do not assume an upgrade is available or included—ask for a quote.

For a database, identify the engine and version, expected data size, concurrent connections, extensions and administrative access. If you need both PostgreSQL and MySQL, say so: one database engine does not establish that the other is available. Check backup and restoration permissions for both.

3. Separate sending email from buying the server

“Can send mail” can mean different things. Ask the compute provider and your chosen email provider:

  • Can the server reach the email provider’s documented SMTP submission port or HTTPS API? Are there outbound restrictions, approval requirements or rate limits for the selected plan?
  • Which TLS mode, authentication method, sender domain verification and sending limits does the email provider require?
  • Who operates the mail service, handles bounces or complaints, and bears any additional usage charges?

The Python SMTP documentation describes SMTP, STARTTLS and SMTP-over-TLS client modes; the correct mode and port depend on the mail provider. Use certificate and hostname verification, follow the provider’s instructions, keep credentials out of source control and logs, and test only with an address you control. Do not assume a server plan includes a mail relay or permits every port.

For PHP, verify how your chosen application sends mail. PHP’s mail() documentation and mail configuration reference describe different transport configuration on Windows and Unix-like systems; a working local mail transport or an appropriately configured mail client/service is still needed. A successful handoff to a mail server does not by itself confirm inbox delivery. Check the provider’s delivery logs and test the complete flow, including a bounce or failed delivery where supported.

Set up the sending domain’s SPF, DKIM and DMARC records according to the email provider’s instructions and the requirements for the recipients you serve. Google’s sender guidelines explain its authentication recommendations and requirements; they do not guarantee delivery to every mailbox.

4. Define recovery before launch

Ask who backs up the database and uploaded files, where copies are kept, how often they run, how long they are retained and what restoration costs. Agree on the maximum acceptable data loss and recovery time for your own application. Do not assume a cloud server or a snapshot automatically includes a managed backup service.

Test a restore to a separate environment that you own or are authorized to use. For example, PostgreSQL documents database dumps and restoration; check separately for global roles, other databases, application files and any secrets needed to make a restored application work. Keep backup access restricted and test recovery without overwriting production data.

5. Compare the complete monthly quote

Ask each provider for the same region, CPU, RAM, total disk, operating system and billing period. Add any costs for extra storage, bandwidth or transfer, a mail service, backups, control panel, taxes and renewal. Record which components are included and which are optional. If your target is around $10 per month, treat that as your budget—not proof that any particular configuration is available at that price.

For a reusable worksheet comparing first-month and typical renewal costs, see our cloud-server budget checklist.

UCELI lists cloud-server regions and example configurations on its location pages. The displayed prices are references and may change; confirm the actual configuration, region, availability, currency and total in the order flow. An example 40 GB entry plan does not establish the price or availability of a configuration with at least 100 GB, a managed backup, or SMTP access. For product questions before ordering, contact support@uceli.com.

Questions to send any provider

  1. Does the quoted storage mean total system and data disk combined? What is the price for at least the amount I need, with room for growth?
  2. Can I run my specific PHP/Python versions, extensions, workers and both database engines on the offered plan? Who maintains them?
  3. Are the outbound connections required by my chosen email service permitted, and what are the sending or network limits?
  4. What is the full recurring amount, including backup, extra disk, applicable taxes and renewal? What happens when a service is stopped or terminated?
  5. What recovery options are included, and who is responsible for testing restoration?

Pre-sales: support@uceli.com.

Comments

Popular posts from this blog

Moving a website to a new server: an HTTPS and DNS checklist

Choosing a server for a self-hosted n8n workflow: five checks before deploying

Before choosing a Windows cloud server: five questions for a small team