mvk/src/content/docs/guides/3. gcloud/020-create-gcloud-infra.md

95 lines
2.9 KiB
Markdown
Raw Normal View History

---
title: Create gcloud infrastructure
description: A guide to creating gcloud infrastructure.
---
Clone the `infctl` repo if you have not yet done so. We will work on the assumption that we are working in a home directory called `projects`.
```bash
cd ~/projects
if [ ! -d "infctl-cli" ]; then
git clone https://codeberg.org/headshed/infctl-cli
cd infctl-cli
else
cd infctl-cli
fi
```
we need to configure some environment variables to let our build know some things about our project.
```bash
cp .env.gcloud-example .env
```
edit our newly created `.env` file and give it values that are appropriate to our gcloud account, for example:
```
PROJECT_NAME="my-very-own-dev-lab"
EMAIL="your.email@mailsomewhere.com"
APP_DOMAIN_NAME="atestdr.yourdomain.com"
```
where each of these variables represent:
* your project name, often called the project id in gcloud
* your email that you wish to be identified with for DNS and TLS encryption
* the domain name you want to use for this project when it is on line
Activate these in the current shell with:
```bash
source .env
```
Before we go any further, we need to confirm we have our gcloud environment ready and configured:
```bash
gcloud compute instances list --project="$PROJECT_NAME" \
&& gcloud compute disks list --project="$PROJECT_NAME" \
&& gcloud compute firewall-rules list --project="$PROJECT_NAME" \
&& gcloud storage buckets list --project="$PROJECT_NAME"
```
We should see pretty much an empty list but for default rules assigned for us by Google to our project to accept SSH, RDP and ICMP traffic - 4 lines in all.
To build the infrastructure :
```bash
LOG_FORMAT=none infctl -f gcloud/tf/scripts/build-gcloud-k3s-pipeline.json
```
You should see a successful build ending with something like:
```bash
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
k3s_vm_public_ip = "xxx.xxx.xxx.xxx"
project_number = "..233434.."
✅ Step completed: run tofu
✅ 🚀 Pipeline completed successfully
```
Take a note of public IP address assigned to your VM as in `xxx.xxx.xxx.xxx` in the above example.
You need to create an `A record` in your DNS console to point to this address, using the environment name you set for your app earlier
```bash
echo $APP_DOMAIN_NAME
<whatever you set your application full domain name to>
```
### Setting an A Record in your chosen or Cloudflare DNS
If you are using Cloudflare DNS, you can follow the below or use as a guide for your chosen DNS console...
1. Log in to your Cloudflare dashboard.
2. Select your domain.
3. Go to the **DNS** tab.
4. Click **Add record**.
5. Choose **A** as the record type.
6. Enter your subdomain (e.g., `atestdr`) in the **Name** field.
7. Enter your VM's public IP address in the **IPv4 address** field.
8. Set the record to be DNS only and a low TTL, for example 5 min.
9. Click **Save**.
Your domain should now point to your VM's public IP.