En aquest tema, aprendrem com construir i desplegar aplicacions Go. Aquest procés inclou la compilació del codi font en binaris executables, la configuració de l'entorn de producció i el desplegament de l'aplicació en un servidor. També veurem algunes eines i pràctiques recomanades per assegurar-nos que el nostre desplegament sigui eficient i segur.

  1. Compilació d'Aplicacions Go

1.1. Compilació Bàsica

Go és un llenguatge compilat, el que significa que el codi font es converteix en un executable binari. Per compilar una aplicació Go, utilitzem la comanda go build.

go build -o myapp main.go
  • -o myapp: especifica el nom de l'executable resultant.
  • main.go: és el fitxer principal del nostre projecte.

1.2. Compilació per a Diferents Plataformes

Go permet compilar aplicacions per a diferents sistemes operatius i arquitectures. Això és especialment útil quan necessitem desplegar la nostra aplicació en un entorn diferent del nostre sistema de desenvolupament.

GOOS=linux GOARCH=amd64 go build -o myapp-linux main.go
  • GOOS=linux: especifica el sistema operatiu de destinació.
  • GOARCH=amd64: especifica l'arquitectura de la CPU de destinació.

1.3. Compilació Estàtica

Per assegurar-nos que el nostre executable no tingui dependències externes, podem compilar-lo de manera estàtica.

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o myapp-static main.go
  • CGO_ENABLED=0: desactiva l'ús de Cgo.
  • -a: força la recompilació de tots els paquets.
  • -installsuffix cgo: evita conflictes amb les versions dinàmiques.

  1. Desplegament d'Aplicacions Go

2.1. Preparació del Servidor

Abans de desplegar la nostra aplicació, hem de preparar el servidor de destinació. Això inclou la instal·lació de les dependències necessàries i la configuració de l'entorn.

2.1.1. Instal·lació de Dependències

Si la nostra aplicació depèn de serveis externs com bases de dades, hem d'assegurar-nos que aquests serveis estiguin instal·lats i configurats correctament.

2.1.2. Configuració de l'Entorn

Podem utilitzar fitxers de configuració o variables d'entorn per gestionar la configuració de la nostra aplicació. Això ens permet canviar la configuració sense modificar el codi font.

2.2. Transferència de l'Executable

Un cop hem compilat l'executable, el transferim al servidor de destinació. Podem utilitzar eines com scp o rsync per fer-ho.

scp myapp user@server:/path/to/deploy

2.3. Execució de l'Aplicació

Un cop l'executable està al servidor, podem executar-lo. És recomanable utilitzar un gestor de processos com systemd o supervisord per assegurar-nos que l'aplicació es reiniciï automàticament en cas de fallada.

2.3.1. Configuració amb systemd

Creem un fitxer de servei per a la nostra aplicació.

[Unit]
Description=My Go Application

[Service]
ExecStart=/path/to/deploy/myapp
Restart=always
User=myuser
Group=mygroup
Environment=ENV_VAR=value

[Install]
WantedBy=multi-user.target

Després, activem i iniciem el servei.

sudo systemctl enable myapp.service
sudo systemctl start myapp.service

  1. Eines de Desplegament

3.1. Docker

Docker és una eina popular per empaquetar aplicacions i les seves dependències en contenidors. Això facilita el desplegament en diferents entorns.

3.1.1. Creació d'un Dockerfile

FROM golang:1.19 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

3.1.2. Construcció i Execució del Contenidor

docker build -t myapp .
docker run -d -p 8080:8080 myapp

3.2. Kubernetes

Kubernetes és una plataforma per automatitzar el desplegament, l'escalat i la gestió d'aplicacions en contenidors.

3.2.1. Creació d'un Fitxer de Desplegament

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        ports:
        - containerPort: 8080

3.2.2. Desplegament amb kubectl

kubectl apply -f deployment.yaml

  1. Millors Pràctiques

4.1. Gestió de Secrets

Utilitzeu eines com Vault o AWS Secrets Manager per gestionar secrets de manera segura.

4.2. Monitorització

Implementeu eines de monitorització com Prometheus i Grafana per supervisar el rendiment de la vostra aplicació.

4.3. Registre

Utilitzeu eines de registre com ELK Stack (Elasticsearch, Logstash, Kibana) per centralitzar i analitzar els logs de la vostra aplicació.

Conclusió

En aquesta secció, hem après com compilar i desplegar aplicacions Go. Hem vist com preparar el servidor, transferir l'executable i executar l'aplicació. També hem explorat eines com Docker i Kubernetes per facilitar el desplegament. Finalment, hem revisat algunes millors pràctiques per assegurar-nos que el nostre desplegament sigui segur i eficient. Amb aquests coneixements, estem preparats per portar les nostres aplicacions Go a producció.

© Copyright 2024. Tots els drets reservats