Home Host a website or app

Host a website or app

Put your website, shop or app online on a Cloud Server: upload your files, set the server up so a browser can open it, add your domain name and turn on HTTPS.
By D
• 8 articles

Put your website online: what you need and how it fits together

You do not need to be a developer to put a website online. You need four things, in this order. Each one has its own article, and together they take about thirty minutes. What you need 1. A Cloud Server. This is the computer that holds your website and answers visitors. See Launch your first Cloud Server. 2. A public address. A new server sits on a private network and cannot be reached from the internet until you give it a public IP. See Give your server a public address. 3. Your website files. The pages, images and styles that make up your site. You copy them onto the server with FileZilla. See Upload your files with FileZilla. 4. A web server program. Your server does not answer web visitors until you install one. This is the part people miss, and it is why a freshly uploaded site shows nothing. See Set up your server so a browser can open your site. Then, when the site works on its address, you add the finishing touches: your domain name and HTTPS so the browser shows a padlock instead of "Not secure". Two things that surprise people Our servers use port 2200 for file transfers, not the usual 22. If FileZilla or your terminal hangs or refuses the connection, this is almost always why. A new server accepts almost nothing from the internet. It allows you in (SSH on 2200) and blocks the rest, including normal web traffic. You have to open ports 80 and 443 yourself, in two places: the Security Group in the console, and the firewall on the server. Both are covered in Set up your server so a browser can open your site. Which kind of site do you have? - Plain files (HTML, CSS, images, or the output of a website builder): follow the four steps above and you are done. - WordPress, a shop, or anything with a login and a database: see Host a WordPress site. - An app your developer wrote (Node.js, Python, Laravel and so on): see Host an app that runs code. What it costs You pay for the server by the hour, plus the public IP, and nothing extra for the web server software or the HTTPS certificate. Both are free and open source. See How billing works. If you get stuck Work through My website does not open. It goes through the causes in the order they actually happen. If it is still down after that, contact support with your server name, its public IP and what you have already tried.

Last updated on Sep 16, 2026

Upload your files with FileZilla

FileZilla copies files from your computer to your server, the way you would drag files between two folders. It is free, and it works the same on Windows, Mac and Linux. Before you start You need your server's public IP address (the console shows it on the server's page; if it has none, see Give your server a public address) and the way you log in to it: either your SSH key file or the password you set when you created the server. Download FileZilla Client from filezilla-project.org. Take the free "Client" version, not the Server version. Connect 1. Open FileZilla and choose File, then Site Manager, then New site. Name it after your server. 2. Fill in the fields on the right: - Protocol: SFTP - SSH File Transfer Protocol. Do not leave it on FTP, which our servers do not accept. - Host: your server's public IP, for example 102.215.225.40. No http:// in front. - Port: 2200. This is not the usual 22. Our platform moves SSH to 2200 and blocks 22, so the standard port will simply hang. - Logon Type: Key file if you created the server with an SSH key, or Normal if you set a password. - User: the login name for your operating system. Ubuntu servers use ubuntu, Rocky Linux uses rocky, Debian uses debian. The Operating Systems page in the console names it for each image. - Key file: browse to the .pem file you downloaded when you created the key. On Windows FileZilla offers to convert it to its own format; say yes and keep the converted copy. 3. Press Connect. The first time, FileZilla shows the server's fingerprint and asks whether to trust it. Tick "Always trust this host" and continue. Your computer's files are now on the left, the server's on the right. Where to put your website The web server reads one folder, and only that folder. On Ubuntu and Debian it is: /var/www/html In the right-hand panel, type that path into the Remote site box and press Enter. Drag your files from the left panel into it. Your home page file must be named index.html (all lower case), or the browser will show a list of files instead of your site. Upload the contents of your site folder, not the folder itself. If you upload a folder called website, your site will live at yourdomain.com/website instead of yourdomain.com. "Permission denied" when you drag files in This is normal on a new server: /var/www/html belongs to the system, and you are logging in as an ordinary user. Give yourself ownership once, and it stops for good. Connect to the server (see How to connect to your Cloud Server) and run: sudo chown -R $USER:$USER /var/www/html Then reconnect in FileZilla and drag the files again. If FileZilla will not connect at all - It hangs, then times out: the port is wrong. It must be 2200. - "Too many authentication failures" or it keeps asking for a password: the user name is wrong for your image, or you picked the wrong key file. - "Connection refused": the server is off or still starting. Check the server's status in the console. - Everything looks right and it still fails: work through My server cannot be reached. Next Files on the server do nothing on their own. Next, set up your server so a browser can open your site.

Last updated on Sep 16, 2026

Set up your server so a browser can open your site

Uploading files is only half the job. A Cloud Server does not answer web visitors until you install a web server program, and until you open the ports that web traffic uses. This article does both. Copy each command exactly, one line at a time. Connect to your server first: How to connect to your Cloud Server. 1. Install the web server We use Apache here because it works with plain files and with WordPress, with no extra configuration. sudo apt update sudo apt install -y apache2 sudo systemctl enable --now apache2 Check it is running: systemctl status apache2 You want to see active (running). Press q to come back to the prompt. 2. Open the ports on the server's own firewall Your server runs a firewall that blocks everything it was not told to allow. Web traffic uses port 80 (http) and port 443 (https). sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw status The status list should now include 80 and 443. If it says Status: inactive, this firewall is off on your image and there is nothing to do here. Never turn off the whole firewall to "make it work". Leave SSH on 2200 allowed, or you will lock yourself out. 3. Open the same ports in the console The console has a second firewall in front of every server, called a Security Group, and it also blocks web traffic by default. A new server allows only SSH on 2200 and remote desktop, so your site stays invisible until you add these rules. In the console: Networking, then Security Groups, open the group your server uses, and add two rules: - Direction Ingress, protocol TCP, port 80, remote 0.0.0.0/0 - Direction Ingress, protocol TCP, port 443, remote 0.0.0.0/0 0.0.0.0/0 means "anyone on the internet", which is what a public website needs. The full walkthrough with every field is in How to open a port on your server. 4. Put your files where the web server reads them Apache serves one folder: /var/www/html Upload your site into it with FileZilla. Your home page must be called index.html. If a file called index.html already exists there, it is Ubuntu's default page, and yours should replace it. 5. Look at your site In a browser, type your server's public IP address: http://102.215.225.40 Use your own IP, and type http:// at the front. Browsers now assume https, and https will not work until you reach Turn on HTTPS. You should see your home page. If you see Ubuntu's default Apache page instead, your files are not in /var/www/html, or your home page is not named index.html. 6. Add your domain and HTTPS A site on a bare IP address works, but nobody will type it and browsers will call it "Not secure". Finish with Point your domain name at your server and then Turn on HTTPS. If nothing opens Go through My website does not open. Nine times out of ten it is step 2 or step 3 above: one of the two firewalls is still closed.

Last updated on Sep 16, 2026

Point your domain name at your server

Your site is reachable at an address like http://102.215.225.40. This article makes it answer to yourcompany.com instead. Before you start Your site must already open on the IP address. If it does not, finish Set up your server so a browser can open your site first, otherwise you will be guessing at two problems at once. You also need to be able to sign in wherever you bought the domain. That is your registrar: for example Ricta for .rw names, or GoDaddy, Namecheap or Cloudflare. The records to create In your registrar's DNS or Name Server settings, create two records: | Type | Name or Host | Value | TTL | |---|---|---|---| | A | @ | your server's public IP | 3600 | | A | www | your server's public IP | 3600 | @ means the domain itself (yourcompany.com) and www covers www.yourcompany.com. Some registrars want the full name instead of @; if the form rejects it, type yourcompany.com. Delete any old A records for the same names, including ones pointing at a previous host or a parking page. Two A records for one name send visitors to both places at random. How long it takes Usually a few minutes, up to a few hours. The world does not update at once, so you may see the new site while a colleague still sees the old one. Do not change the records again while you wait, that only restarts the clock. Check what the internet currently sees: nslookup yourcompany.com When the answer is your server's IP, you are done. Then tell the web server its name Open http://yourcompany.com. You should see your site. If you plan to host more than one site on the same server, or you use WordPress, set the name in the Apache configuration as well: sudo nano /etc/apache2/sites-available/000-default.conf Under <VirtualHost *:80>, add these two lines, then save with Ctrl+O and exit with Ctrl+X: ServerName yourcompany.com ServerAlias www.yourcompany.com sudo systemctl reload apache2 If you use our DNS service If your domain's name servers point at Gewape Cloud rather than your registrar, create the same records in the console instead. See Managing your DNS. Next With the domain answering, turn on HTTPS. The certificate is issued for your domain name, so it has to be this way round: domain first, certificate second.

Last updated on Sep 16, 2026

Turn on HTTPS (free certificate)

Without HTTPS, browsers label your site "Not secure", and anything visitors type can be read in transit. The certificate is free, takes about two minutes, and renews itself. Before you start - Your domain already opens your site over http. If not, do Point your domain name at your server first. The certificate is issued by checking your domain, so it cannot be issued before the domain works. - Port 443 is open in both firewalls, as in Set up your server so a browser can open your site. Get the certificate Connect to your server and run: sudo apt update sudo apt install -y certbot python3-certbot-apache sudo certbot --apache It asks three things: 1. Your email address. Used only to warn you if a renewal ever fails. Use a real one you read. 2. Agree to the terms. Type y. 3. Which names to secure. It lists the names it found, for example yourcompany.com and www.yourcompany.com. Press Enter to take all of them. When it finishes it says "Congratulations", and it has already changed your Apache configuration to serve https and to send http visitors to it. Open https://yourcompany.com. The padlock should be there. Renewal Certificates last 90 days and renew themselves. Check that the automatic renewal is in place: sudo systemctl status certbot.timer And test a renewal without actually doing one: sudo certbot renew --dry-run If it fails - "Timeout during connect": port 80 is closed somewhere. The certificate check comes in over port 80, even though it issues a certificate for 443. Recheck both firewalls. - "DNS problem: NXDOMAIN": the domain does not point at this server yet. Run nslookup yourcompany.com and wait until it answers with your IP. - "Too many certificates already issued": you have retried many times in a week. Wait an hour and use --dry-run while testing. Managed load balancers If your site sits behind one of our Load Balancers instead of a single server, the certificate goes on the load balancer, not here. See Add a TLS certificate.

Last updated on Sep 16, 2026

Host a WordPress site

WordPress needs three things your plain HTML site did not: PHP to run its code, a database to hold your posts, and a few permissions set correctly. This takes about twenty minutes. Do Set up your server so a browser can open your site first, so Apache is installed and ports 80 and 443 are open in both firewalls. 1. Install PHP and the database sudo apt update sudo apt install -y php php-mysql libapache2-mod-php mariadb-server sudo systemctl enable --now mariadb 2. Create the database sudo mysql At the MariaDB [(none)]> prompt, type these four lines, one at a time. Replace choose-a-strong-password with a password you invent, and keep it: WordPress asks for it in step 4. CREATE DATABASE wordpress; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'choose-a-strong-password'; GRANT ALL ON wordpress.* TO 'wpuser'@'localhost'; EXIT; The database listens only on the server itself, which is what you want. Nothing about it is exposed to the internet. 3. Put WordPress in place cd /tmp curl -O https://wordpress.org/latest.tar.gz tar xzf latest.tar.gz sudo rm -rf /var/www/html/index.html sudo cp -r wordpress/. /var/www/html/ sudo chown -R www-data:www-data /var/www/html sudo find /var/www/html -type d -exec chmod 755 {} \; sudo find /var/www/html -type f -exec chmod 644 {} \; sudo systemctl restart apache2 The chown line matters: WordPress writes files when you install plugins or upload images, and it can only do that if the web server owns the folder. 4. Finish in the browser Open your site (http://yourcompany.com, or the public IP if the domain is not ready). The WordPress wizard asks for: - Database Name: wordpress - Username: wpuser - Password: the one you invented in step 2 - Database Host: localhost - Table Prefix: leave as wp_ Then it asks for your site title and an administrator account. Use a real email address, and a password a person cannot guess. This account can change everything on your site. 5. Turn on HTTPS straight away A WordPress login over plain http sends the password across the internet in the clear. Do Turn on HTTPS now, before you write anything. Keeping it safe - Update WordPress, plugins and themes when it asks. Out-of-date plugins are the usual way these sites get broken into. - Install only plugins you actually need, from wordpress.org. - Take a snapshot of the server before big changes: Back up your data. - Never edit files as root over FileZilla. Upload into /var/www/html and keep the ownership above. Common problems - "Error establishing a database connection": the password in step 4 does not match step 2. Run sudo nano /var/www/html/wp-config.php and check DB_PASSWORD. - A blank white page: PHP is missing or failed. Run sudo apt install -y php libapache2-mod-php && sudo systemctl restart apache2. - WordPress asks for FTP details when installing a plugin: the ownership in step 3 was not applied. Run the chown line again.

Last updated on Sep 16, 2026

Host an app that runs code (Node.js, Python and others)

A website made of files is served straight from a folder. An app is a program that has to keep running, and it usually listens on its own port such as 3000 or 8000. Two things are needed: keep it running, and let visitors reach it on the normal web ports. This article assumes your developer gave you the code and the command that starts it. 1. Upload the code Put it in your home folder rather than the web folder, because visitors should never download the source: /home/ubuntu/myapp Use FileZilla, or ask your developer to deploy with git. 2. Run it as a service A program started by hand stops when you close the terminal. A service starts again by itself, including after a reboot. Create one: sudo nano /etc/systemd/system/myapp.service Paste this, change the three lines in bold to match your app, then save with Ctrl+O and exit with Ctrl+X: [Unit] Description=My application After=network.target [Service] User=ubuntu WorkingDirectory=/home/ubuntu/myapp ExecStart=/usr/bin/node server.js Restart=always [Install] WantedBy=multi-user.target WorkingDirectory is where your code lives, and ExecStart is the command that starts it (for Python it might be /usr/bin/python3 app.py). Then: sudo systemctl daemon-reload sudo systemctl enable --now myapp systemctl status myapp active (running) means it started. If it failed, read the reason: journalctl -u myapp -n 50 --no-pager 3. Put it behind the web server Your app listens on something like port 3000, which is not open to the internet and should stay that way. Apache takes the visitor's request on port 80 and passes it to your app: sudo a2enmod proxy proxy_http sudo nano /etc/apache2/sites-available/000-default.conf Inside <VirtualHost *:80>, add these lines (change 3000 if your app uses another port): ProxyPreserveHost On ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ sudo systemctl restart apache2 Now http://your-domain reaches your app, and port 3000 stays private. Add HTTPS the same way as any site: Turn on HTTPS. React, Vue and other built sites If your developer says the app is "built" into a folder of files (often called dist or build), it is not an app in this sense. Upload the contents of that folder to /var/www/html and follow Set up your server so a browser can open your site instead. Databases For anything beyond a small site, use a managed database rather than running one on the same server: we handle the backups and the updates. See Create a managed database.

Last updated on Sep 16, 2026

My website does not open

Work down this list in order. Each step tells you what a good answer looks like, so you can tell where the problem is rather than changing things at random. 1. Is it the whole site, or just you? Try the site on mobile data with wifi off. If it opens there, your office network or your computer is caching an old answer. Try a private window, and wait a few minutes. 2. Does the server answer on its IP address? In a browser, type http:// and your server's public IP. - The site opens: the server is fine, the problem is your domain name. Go to step 5. - It spins and times out: a firewall is closed. Go to step 3. - "Connection refused": the web server program is not running. Go to step 4. 3. Are ports 80 and 443 open in both places? There are two firewalls, and web traffic needs both. On the server: sudo ufw status You should see 80 and 443 allowed. If not: sudo ufw allow 80/tcp sudo ufw allow 443/tcp In the console: Networking, then Security Groups, open the group your server uses, and confirm it has ingress rules for TCP 80 and TCP 443 from 0.0.0.0/0. New servers do not have them. The step-by-step is in How to open a port on your server. 4. Is the web server running? systemctl status apache2 If it is not running, start it and read why it stopped: sudo systemctl start apache2 journalctl -u apache2 -n 30 --no-pager A common cause is a configuration typo. Check it with: sudo apache2ctl configtest Syntax OK means the configuration is fine. 5. Does your domain point at this server? nslookup yourcompany.com The answer must be your server's public IP. If it is an old address or nothing at all, fix the records in Point your domain name at your server and allow time for the change to spread. 6. Does the site load but show the wrong thing? - Ubuntu's default page: your files are not in /var/www/html, or the home page is not named index.html. - A list of file names: there is no index.html in the folder. - A blank white page: usually PHP failing. See the WordPress notes in Host a WordPress site. - "Not secure" in the address bar: HTTPS is not on yet. See Turn on HTTPS. 7. Still down Contact support with: your server name and public IP, your domain, which step above you reached, and the exact message you see. That turns a day of questions into one answer. See What to include when you report a problem.

Last updated on Sep 16, 2026