How to Deploy a Website: Pick a Host, Upload It, Connect a Domain
By Manob Editorial ·

To deploy a website, match the host to what the site is built with. Upload static HTML to a static host or any web hosting, run WordPress on hosting with PHP and MySQL, and build a React or Vite app before uploading its dist folder. Then point your domain's DNS at the host and turn on HTTPS.
Host limits and commands below come from each provider's own documentation, checked on October 14, 2026. The Nginx configuration was syntax-checked with nginx -t.
Step 1: Work out what kind of site you have
"Deploy" means different work depending on what the server has to do when someone visits:
| Your site | What the server must do | Where it can run |
|---|---|---|
| HTML template (HTML, CSS, JavaScript, Bootstrap) | Serve files as they are | Any static host or web hosting |
| React, Vue or other Vite app | Serve the built files, plus a fallback for client-side routes | Static hosts |
| WordPress or another PHP site | Run PHP and a MySQL or MariaDB database | WordPress or PHP hosting, or a VPS |
| Node.js, Python, or Next.js with server features | Keep your app's process running | An app platform or a VPS |
| A site built in an AI workspace | Whatever the workspace sets up | The workspace's own deploy |
If you're unsure what a "host" covers versus a domain, read domain vs hosting first.
Step 2: Choose where to host it
As of October 2026, from each provider's own pages:
- GitHub Pages: static sites from a repository, free for public repositories. Published sites can be up to 1 GB, with a soft bandwidth limit of 100 GB a month. It isn't allowed as free hosting for an online business, an e-commerce site or SaaS.
- Netlify: a Free plan at $0. You can drag a folder onto Netlify Drop with no account, connect a Git repository, or deploy from the command line.
- Cloudflare Pages: on the Free plan, up to 20,000 files per site and 500 builds a month; any single file can be up to 25 MiB.
- Vercel: the Hobby plan is free, but Vercel restricts it to "non-commercial, personal use only".
- Shared or WordPress hosting: runs PHP and MySQL, and you upload files over SFTP or a file manager. The right pick for WordPress.
- A VPS: a server you manage yourself, for apps that need their own process. Our VPS vs shared hosting comparison covers the trade-off.
- manob.ai's AI workspace: if you build the site there, deploy is included on the free Starter plan. The Builder plan ($12/month) adds full-stack builds with an API, database and auth, plus a custom domain (plans).
Step 3: Deploy a static HTML site
First, make sure index.html sits at the top of the folder you upload, not inside a sub-folder. Then pick one route:
- Drag and drop. Drop the folder on Netlify Drop, or use Direct Upload in the Cloudflare dashboard (up to 1,000 files that way, per Cloudflare's docs). Both give you a live URL straight away.
- Upload to web hosting. Copy the folder's contents, not the folder itself, into your host's web root, often
public_html. FileZilla or the host's file manager works; from a terminal, rsync uploads only what changed:
The trailing slash onrsync -avz --delete my-site/ user@your-server:public_html/my-site/copies its contents.--deleteremoves server files that aren't in your folder, so leave it off ifpublic_htmlholds anything else. - From the command line. Netlify and Cloudflare both deploy a folder in one command:
# Netlify: install the CLI once, then deploy npm install -g netlify-cli netlify deploy --prod --dir ./my-site # Cloudflare Pages: create the project once, then deploy npx wrangler pages project create npx wrangler pages deploy ./my-site
Contact forms are the usual snag: a template's PHP mail script works only on PHP hosting. On a static host, use a form service or a serverless function. Our guide to editing a Bootstrap template covers getting a template ready before upload.
Step 4: Deploy a React or Vite app
Browsers can't run your source files directly, so build first:
npm run build # Vite writes the site to dist/
npm run preview # check it at http://localhost:4173
Deploy the dist folder by any route from Step 3, or connect the Git repository so the host builds on every push (build command npm run build, output folder dist). Then handle client-side routes, so reloading /about doesn't return a 404:
- Netlify: add a
_redirectsfile containing/* /index.html 200topublic/, so it ends up indist(Netlify docs). - Cloudflare Pages: nothing to add. Its docs say that without a top-level 404.html, Pages assumes a single-page application and serves the root for unknown paths.
- GitHub Pages: needs a base path and a 404.html copy. See how to host a React app on GitHub Pages.
- Your own Nginx server:
try_files $uri $uri/ /index.html;in the site'slocation /block.
Values in VITE_* environment variables end up in the public JavaScript, so never put API keys there.
Step 5: Deploy a WordPress site
- Check the host's versions. WordPress.org's requirements page recommends PHP 8.3 or greater, MySQL 8.0 or greater or MariaDB 10.11 or greater, and HTTPS support.
- Install WordPress with the host's installer, or upload the WordPress files and run the setup wizard against a new database.
- Moving a site you built locally? Use a migration plugin, or copy
wp-contentand import the database export. Either way, the site's address changes, so check that links and images point at the live domain afterwards. - Add the theme. Our guide to installing a WordPress theme manually covers the upload and the usual errors.
Step 6: Deploy a Node.js app to a VPS
On a VPS, your app listens on a local port and Nginx passes visitors to it. Keep the app running with a process manager such as systemd or PM2, then add a site config (shown for Ubuntu or Debian, in /etc/nginx/sites-available/example.com):
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run
The last two lines come from Certbot's Nginx instructions: one gets and installs a free certificate, the other tests automatic renewal. Point the domain at the server before running Certbot, or the certificate request fails.
Step 7: Connect your domain
Static hosts give you a free address first, such as username.github.io or project.pages.dev. To use your own domain, add it in the host's dashboard, then point DNS at the host: usually an A record for the bare domain and a CNAME for www, or the host's nameservers. Our guide to connecting a domain to hosting walks through both methods and checking them with dig. No domain yet? See how to buy a domain name, or search for one on manob.ai.
Step 8: Turn on HTTPS and check everything
GitHub Pages requests a Let's Encrypt certificate once your DNS is correct, then lets you tick Enforce HTTPS; on a VPS, Certbot does it. Other hosts document their own steps. Then work through this list:
- Load the site on a phone and a laptop, click every menu link, and watch the browser console for missing files.
- Send a test message through every form.
- Check that
http://redirects tohttps://, and that bothwwwand the bare domain work. - Visit a made-up URL to see your 404 page.
- Add the site to Google Search Console and submit its sitemap.
- For WordPress, schedule backups of both the files and the database.
Need a site to deploy? Compare HTML5 templates or React templates; every item on manob.ai can be previewed before purchase.
Frequently asked questions
How do I deploy a website for free?
Static sites can go on GitHub Pages (public repositories, no commercial use), Netlify's Free plan or Cloudflare Pages, and Vercel's Hobby plan covers personal, non-commercial projects. A custom domain costs extra, and WordPress needs hosting that runs PHP and a database.
What's the difference between deploying and hosting?
Hosting is the server that keeps your site online. Deploying is the act of putting a new version of the site onto that server, whether by upload, command or Git push.
Do I need a domain name to deploy a website?
No. Static hosts give you a free subdomain, such as username.github.io or project.pages.dev, which works for testing. Add your own domain when you're ready to launch.
Can I deploy a WordPress site to GitHub Pages or Netlify?
Not as a working WordPress site. WordPress needs PHP and a MySQL or MariaDB database on every request, and neither host runs them, so use WordPress or PHP hosting, or a VPS.
Why does my site show a 404 after I deploy it?
Usually index.html isn't at the top of the uploaded folder, or a single-page app has no fallback for its routes. Check the folder structure first, then the routing fix for your host in Step 4.
