{"id":27646223,"url":"https://github.com/alex-rosta/civo-env","last_synced_at":"2026-01-23T20:06:23.726Z","repository":{"id":288667238,"uuid":"968595761","full_name":"alex-rosta/civo-env","owner":"alex-rosta","description":"Homelab k3s cluster on Civo using terraform ","archived":false,"fork":false,"pushed_at":"2025-07-03T17:18:20.000Z","size":541,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-03T18:29:35.195Z","etag":null,"topics":["argocd","civo","civo-k3s","gitops","infrastructure-as-code","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alex-rosta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-18T11:19:34.000Z","updated_at":"2025-07-03T17:18:23.000Z","dependencies_parsed_at":"2025-05-14T11:35:49.021Z","dependency_job_id":"ae37e1e3-99de-42c1-8c40-e6a49c49b87c","html_url":"https://github.com/alex-rosta/civo-env","commit_stats":null,"previous_names":["alex-rosta/civo-env"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alex-rosta/civo-env","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alex-rosta%2Fcivo-env","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alex-rosta%2Fcivo-env/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alex-rosta%2Fcivo-env/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alex-rosta%2Fcivo-env/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alex-rosta","download_url":"https://codeload.github.com/alex-rosta/civo-env/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alex-rosta%2Fcivo-env/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28699372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argocd","civo","civo-k3s","gitops","infrastructure-as-code","terraform"],"created_at":"2025-04-24T01:17:38.946Z","updated_at":"2026-01-23T20:06:23.721Z","avatar_url":"https://github.com/alex-rosta.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Recreation of my home environment\n\nIt was not good that my cloud addicted ass got my lab equipment taken away\n\nThis project assumes that your dns is provided by Cloudflare.\n- Kubernetes cluster on Civo Cloud\n- Grafana \u0026 Prometheus with dashboard preconfigured\n- ArgoCD for Gitops deployments\n- Cert-manager for TLS certificates with Let's Encrypt, http01 challenge\n- Deploys a sample application of mine\n- Auto creation of DNS records\n- Nginx ingress\n\n## Project Structure\n\nI have split the configuration into two \"stages\", infra and k3s.\nRun the infra first. and then proceed with k3s.\nThis is to keep the infrastructure separated from the application layer.\n\n## Getting Started\n\n1. Clone this repository\n2. Copy `terraform.tfvars.example` to `terraform.tfvars` and customize the values\n3. Initialize infra folder:\n   ```\n   cd /civoenv/infra \u0026\u0026 terraform init\n   ```\n4. Apply the configuration:\n   ```\n   terraform plan\n   terraform apply\n   ```\n\u003cspan style=\"color:red;\"\u003e\u003cb\u003e(!) Between this stage and the next there may be some delay in getting the ingress ip up. And since the next stage references that ip, there may be errors if it doesn't properly pick it up. Wait a few minutes and then proceed to k3s stage in order for Civo to properly get the nginx ingress up and running.\u003c/b\u003e\u003c/span\u003e\u003cbr\u003e\n5. Proceed to the k3s stage (The kubeconfig file used for cluster operations will be written to the infra folder and referenced)\n   ```\n   cd ../k3s \u0026\u0026 terraform init\n   terraform plan\n   terraform apply\n   ```\n\n## Accessing Services\n\nAfter deployment, the following services will be available:\n\n- Armory application (Sample app): https://armory.yourdomain.com\n\nGet the argocd initial secret: \n```\nkubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath=\"{.data.password}\" | ForEach-Object { [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($_)) }\n```\n\n## Deploying more services\n\nAdding your own services to the cluster is easy through ArgoCD yaml deployments. Just add them in gitops\\argocd like the example, and reference them with a manifest block like such;\n```hcl\nresource \"kubernetes_manifest\" \"app-armory\" {\n  manifest = yamldecode(file(\"../gitops/argocd/app-armory.yaml\"))\n}\n```\nAnd DNS if you want;\n```hcl\nmodule \"customapp_dns\" {\n  source             = \"../modules/dns\"\n  cloudflare_email   = var.cloudflare_email\n  cloudflare_api_key = var.cloudflare_api_key\n  cloudflare_zone_id = var.cloudflare_zone_id\n  content            = data.kubernetes_service.nginx_ingress.status[0].load_balancer[0].ingress[0].ip\n  name               = \"custom_app.${var.domain}\"\n}","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falex-rosta%2Fcivo-env","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falex-rosta%2Fcivo-env","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falex-rosta%2Fcivo-env/lists"}