From 2c4187a0df5b0afb17367a05b9475b8f92b0c844 Mon Sep 17 00:00:00 2001 From: Lewis Dale Date: Sun, 5 May 2024 20:47:23 +0100 Subject: [PATCH] Day eight: deploying --- src/blog/posts/2024/5/learning-go-day-8.md | 145 +++++++++++++++++++++ src/images/oopsie-working.png | Bin 0 -> 35006 bytes 2 files changed, 145 insertions(+) create mode 100644 src/blog/posts/2024/5/learning-go-day-8.md create mode 100644 src/images/oopsie-working.png diff --git a/src/blog/posts/2024/5/learning-go-day-8.md b/src/blog/posts/2024/5/learning-go-day-8.md new file mode 100644 index 0000000..94db189 --- /dev/null +++ b/src/blog/posts/2024/5/learning-go-day-8.md @@ -0,0 +1,145 @@ +--- +title: "Learning Go: Day Eight" +date: 2024-05-08T08:00:00.0Z +tags: + - learning + - go +excerpt: "Getting the project deployed via Gitea actions" +--- + +So that I can do the whole build-in-public thing properly, I always want my code to automatically deploy. I've got [Gitea Actions](https://docs.gitea.com/usage/actions/overview) on my Gitea server, so I can use those to build, deploy, and start a Go binary. + +## Building and copying a binary + +This is the simplest part. I had a decent template from my Eleventy action that I was able to take and turn into the following workflow: + +```yaml +name: Build and copy to prod +on: + push: +jobs: + build-and-copy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: 1.22 + - name: Build binary + run: go build -o dist/oopsie + - name: Install SSH Key + uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.SSH_KEY }} + known_hosts: ${{ secrets.SSH_KNOWN_HOSTS }} + - name: Copy to prod + run: scp -rp dist/* ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:oopsie/ +``` + +This installs Go on the action runner, builds the binary, and then uses SCP to copy the compiled binary onto my server. To facilitate this, I created a user on my VPS, created a new SSH key, and added the public key to the `.ssh/authorized_keys` file. Then I added the private key to the Gitea action secrets, along with the `known_hosts` entry for my git server, the name of the user I created, and the hostname for my VPS. + +## Running the software + +So now I need to run my compiled software. I can create a systemd service to do this, and then run it as the user I've created. First of all I create a new file, `/etc/systemd/user/oopsie.service`: + +```systemd +[Unit] +Description=Daemon for the Oopsie service + +[Service] +Type=simple +#User= +#Group= +ExecStart=/home//oopsie/oopsie +Restart=on-failure +StandardOutput=file:%h/log_file + +[Install] +WantedBy=default.target +``` + +Then, as the user I've created I run: + +```bash +systemctl --user daemon-reload +systemctl --user start oopsie.service +``` + +And can confirm my service is running locally: + +```bash +curl -X POST http://localhost:8000 +> This was a POST request! +``` + +## Nginx proxy + +Next up I need to use Nginx's `proxy_pass` directive to direct any requests to https://oopsie.lewisdale.dev to my running service. Again, this was mostly lifted from an existing template I already had: + +```nginx +server { + listen 80; + listen [::]:80; + server_name oopsie.lewisdale.dev; + rewrite ^ https://$server_name$request_uri? permanent; +} + +server { + # SSL configuration + # + listen 443 ssl; + listen [::]:443 ssl; + server_name oopsie.lewisdale.dev; + + # Include certificate params + include snippets/certs/lewisdale.dev; + ssl_certificate /etc/letsencrypt/live/lewisdale.dev/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/lewisdale.dev/privkey.pem; # managed by Certbot + + include /etc/letsencrypt/options-ssl-nginx.conf; + + location / { + proxy_pass http://localhost:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +Woo, now I can actually access my service over the internet! + +![Screenshot from Mozilla Firefox, showing oopsie.lewisdale.dev responding with "This was a GET request!"](./src/images/oopsie-working.png) + +## Restarting the service + +Finally, I can use the `-o` argument with the `RemoteCommand` [SSH config option](https://linux.die.net/man/5/ssh_config) to execute a command. I can use that to run `systemctl restart`: + +```yaml +- name: Restart the service + run: ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} -o RemoteCommand="systemctl --user restart oopsie.service" +``` + +## Nope + +Ah, that's not quite correct. My first build failed: + +```bash +scp: oopsie//oopsie: Text file busy +``` + +I can't overwrite a file while it's in use. Instead, I have to stop the service, copy the file, and then start the service again: + +```yaml +- name: Stop the service + run: ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} -o RemoteCommand="systemctl --user stop oopsie.service" +- name: Copy to prod + run: scp -rp dist/* ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:oopsie/ +- name: Restart the service + run: ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} -o RemoteCommand="systemctl --user start oopsie.service" +``` + +And that works! It deploys successfully. Ironically, there's a minor bit of downtime while it does, but for now that's really not an issue. You can see the project in progress on [its deployed home](https://oopsie.lewisdale.dev) or [on the Git repo](https://git.lewisdale.dev/lewis/oopsie). \ No newline at end of file diff --git a/src/images/oopsie-working.png b/src/images/oopsie-working.png new file mode 100644 index 0000000000000000000000000000000000000000..99864b92a108c01fc09b3f44c4ddf30a1b428b7f GIT binary patch literal 35006 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 G{=WcBuWs=G literal 0 HcmV?d00001