## Introduction This guide walks you through hosting a simple website on a Virtual Machine (VM) in Atlas Cloud using the web console. You'll create a VM manually, install a web server, upload your website files, and configure DNS. > **For infrastructure-as-code**: See [[Website hosting with Terraform]] for automated deployment with version control and remote state management. ## Prerequisites - An Atlas Cloud account - A registered domain name (e.g., yourdomain.com) — optional - Basic knowledge of SSH and command-line tools ## Step 1: Create a Virtual Machine See [[Creating your first cloud service]] for a tutorial on creating a VM. See [[Instances]] and [[Guest Networks]] for further details of the following steps. 1. Log in to the [Atlas Cloud Platform](https://sky.runatlas.is). 2. Create a guest network if you don't have one (see [[Guest Networks]]). 1. Make sure your allow egress traffic on your network (see the link above) 3. Create a new instance (see [[Instances]]), click "Add Instance" and configure: - Name: web-server - Template: Ubuntu 24.04 LTS - Compute offering: Select `Small Instance` (0.5 vCPU, 0.5 GB RAM) - Networks: Select the network you created above 4. Click "Launch VM". ## Step 2: Assign a Public IP and Configure Firewall 1. Go to Networking > Public IP Addresses. 2. Acquire a new public IP if needed. 3. For the public IP, configure port forwarding: - Protocol: TCP - Public port: 80 (for HTTP) - Private port: 80 - VM: Select your web-server instance 4. Repeat for HTTPS (port 443 to 443). 5. Set firewall (ingress) rules to allow HTTP and HTTPS traffic from the internet. 6. Configure egress rules for the network to allow outbound traffic. Click your network, go to the **Egress rules** tab, and add rules to allow: - TCP port 80 (HTTP) to `0.0.0.0/0` - TCP port 443 (HTTPS) to `0.0.0.0/0` - UDP port 53 (DNS) to `0.0.0.0/0` - TCP port 53 (DNS) to `0.0.0.0/0` > **Why egress rules?** Without egress rules, your VM cannot reach the internet for package updates (`apt update`), DNS resolution, or fetching external resources like SSL certificates. ## Step 3: Connect to Your VM 1. Use SSH to connect to your VM using the public IP and your SSH key. ```bash ssh -i your-key.pem ubuntu@<public-ip> ``` 2. Update the system: ```bash sudo apt update && sudo apt upgrade -y ``` ## Step 4: Install a Web Server For this example, we'll use Apache on Ubuntu: 1. Install Apache: ```bash sudo apt install apache2 -y ``` 2. Start and enable Apache: ```bash sudo systemctl start apache2 sudo systemctl enable apache2 ``` 3. Verify it's running: ```bash sudo systemctl status apache2 ``` ## Step 5: Create and Upload Your Website Files Create a minimal `index.html` file on your local machine: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Welcome to Atlas Cloud</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="bg-gray-100 flex items-center justify-center min-h-screen"> <div class="text-center"> <h1 class="text-4xl font-bold text-blue-600 mb-4"> Hello from Atlas Cloud! ☁️ </h1> <p class="text-lg text-gray-700"> Your website is live and looking great on Atlas. </p> </div> </body> </html> ``` Upload it using SCP: ```bash scp -i your-key.pem ./index.html ubuntu@<public-ip>:/var/www/html/ ``` ## Step 6: Test Your Website 1. Open a browser and visit <http://your.ip.address>. 2. Ensure the site loads correctly. ![[index.html on Atlas.png]] Congratulations! Your website is now hosted on Atlas Cloud. ## Optional: Configure Your Domain 1. In your domain registrar's DNS settings, add an A record: - Name: `@` - Type: `A` - Value: `your.public.ip.address` (from the IP address view in the Atlas Console) 1. Wait for DNS propagation (may take up to 24 hours, but usually near-instant). 2. Visit your domain (e.g., <http://yourdomain.com>) to confirm. ## Optional: Add SSL with Let's Encrypt 1. Install Certbot (recommended method): ```bash sudo apt update sudo apt install certbot python3-certbot-apache -y ``` 2. Obtain a certificate: ```bash sudo certbot --apache -d yourdomain.com --non-interactive --agree-tos --email [email protected] --redirect ``` 3. Verify automatic renewal is enabled: ```bash sudo systemctl status certbot.timer ``` > **Note**: For automated infrastructure deployment, see [[Website hosting with Terraform]] for an IaC approach that includes SSL setup.