commit f23bc0f7540a55bc313e3c8bc20bac42789f1fc1 Author: jonas@geiger-natur.de Date: Sat Aug 30 11:16:57 2025 +0200 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..532be7f --- /dev/null +++ b/README.md @@ -0,0 +1,156 @@ +# Prerequisites + +- Hetzner Account +- Github Account + +## Step 1 - Hetzner Project + +- Select 'Console' and create a new Project +- Select 'Security' -> 'API Tokens' and create a new token with read & write permissions +- Copy the token into an editor for the next steps + +## Step 2 - Generate SSH Keys + +- Run command "ssh-keygen -t ed25519" in terminal + +## Step 3 - Github PAT (Personal access token) + +- Settings -> Developer settings -> Personal access tokens -> Tokens (classic) -> Generate new token +- Check 'repo' checkbox +- Copy the token also into an editor for the next steps + +## Step 4 - Github Repository + +- Create a new repository +- Add the following secrets + - HCLOUD_TOKEN: The token from [Step 1](#step-1---hetzner-project--api-token) + - SSH_PUBLIC_KEY: the hole file input from id_ed25519.pub, generated by [Step 2](#step-2---generate-ssh-keys) + - SSH_PRIVATE_KEY: the hole file input from id_ed25519.pub, generated by [Step 2](#step-2---generate-ssh-keys) + - GH_PAT: the token from [Step 3](#step-3---github-pat-personal-access-token) + +## Step 5 - Github Inital-Workflow + +- Go back to your repository on Github an select 'Actions', then 'New workflow' and 'set up a workflow yourself' and change the name to 'initial.yml' + +``` yaml +name: Initial + +on: + workflow_dispatch: + +jobs: + initial: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v3 + with: + token: ${{ secrets.GH_PAT }} + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y curl unzip git + + - name: Install Packer, Terraform, kubectl, hcloud + run: | + # Install Packer + wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list + sudo apt-get update + sudo apt-get install -y packer terraform + # Install hcloud CLI + curl -fsSL https://github.com/hetznercloud/cli/releases/latest/download/hcloud-linux-amd64.tar.gz | tar -xz + sudo mv hcloud /usr/local/bin/ + + - name: Run Hetzner Kube script (non-interactive) + env: + HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }} + folder_name: config + folder_path: . + create_snapshots: yes + run: | + tmp_script=$(mktemp) + curl -sSL -o "${tmp_script}" https://raw.githubusercontent.com/kube-hetzner/terraform-hcloud-kube-hetzner/master/scripts/create.sh + chmod +x "${tmp_script}" + bash "${tmp_script}" + rm "${tmp_script}" + + - name: Commit and push kube.tf + snapshot file + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add config/kube.tf + git add config/hcloud-microos-snapshots.pkr.hcl + git commit -m "Add generated kube.tf and snapshot file from workflow" || echo "No changes to commit" + git push +``` + +- After that choose 'Run workflow' + +This workflow needs 5-10 minutes. It creates some servers on hetzner, generates a snapshot and deletes the servers. +The Snapshots are needed as blueprint for your kubernetes cluster servers. + +## Step 6 - Kube.tf Modification + +- Click on 'code' again, select the 'develop' branch in the dropdown and click on your config-folder +- Open the kube-tf file and modify it as you need (you need to click on 'Edit this file') +- After that select 'Commit Changes' twice + +## Step 7 - Github Deployment-Workflow + +- Add the last workflow named deployment.yml and put in the following code + +``` yaml +name: Deployment + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + defaults: + run: + shell: bash + working-directory: ./config/ + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Create SSH files + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 + echo "${{ secrets.SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub + chmod 600 ~/.ssh/id_ed25519 + chmod 644 ~/.ssh/id_ed25519.pub + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 + + - name: Terraform Init + run: terraform init --upgrade + + - name: Create terraform.tfvars + run: | + cat > ./terraform.tfvars <