Conteneuriser et déployer une application Go avec seelf

Publié dans développement
le

Passer d'un projet local à une application accessible à tous peut parfois sembler frustrant. Aujourd'hui, voyons comment conteneuriser et déployer une application Go simplement grâce à seelf.

Notre application d'exemple

Imaginez que vous êtes un ou une développeur·euse Go qui vient d'avoir une idée d'application extraordinaire : une application qui affiche le nombre de fois où elle a été lançée. Pour rendre les choses encore plus palpipantes, vous décidez d'enregistrer les dates de lancement de l'application dans une base PostgreSQL.

Le code pour cette application d'exemple est disponible ici : https://github.com/YuukanOO/seelf-go-tutorial. Le dépôt est divisé en branches pour chacune des étapes.

Vous réalisez donc cette application et sans soucis, parvenez à la faire tourner sur votre poste avec votre base PostgreSQL locale. Vous êtes donc fier·ère de vous (qui ne le serait pas ?!).

Conteneurisation avec Docker

Comme vous savez qu'il est plus simple de déployer et de partager une application une fois qu'elle se trouve conteneurisée, vous décidez de vous en occuper et parvenez à ce Dockerfile très simple pour votre application Go :

FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY . .
RUN go build -ldflags="-s -w" -o sample

FROM alpine:3.16
WORKDIR /app
COPY --from=builder /app/sample ./
EXPOSE 8080
CMD ["./sample"]

Et comme votre application nécessite une base PostgreSQL pour fonctionner, vous en profitez pour définir un fichier compose.yml qui vous permettra de lancer toute la stack choisie en une seule commande :

services:
  app:
    build: .
    restart: unless-stopped
    environment:
      - DATABASE_URL=postgresql://dbuser:dbpass@db:5432/sample?sslmode=disable
    ports:
      - 8080:8080
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: dbuser
      POSTGRES_PASSWORD: dbpass
      POSTGRES_DB: sample
    healthcheck:
      test: pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
      interval: 5s
      timeout: 5s
      retries: 5
    volumes:
      - dbdata:/var/lib/postgresql/data

volumes:
  dbdata:

Avec ces fichiers en place, un simple docker compose up -d --wait --build et votre application est disponible sur http://localhost:8080/.

Le déploiement avec seelf

Désormais, vous avez hâte de partager cette application avec le reste du monde. Comme vous êtes friand·e d'auto-hébergement, vous avez d'ores et déjà installer seelf sur votre propre serveur.

Vous commencez donc par créer une nouvelle application en cliquant sur le bouton New application.

Page d'accueil de seelf

Vous remplissez le formulaire en choisissant un nom mémorable (car il représentera le sous-domaine utilisé), l'url du dépôt Git le cas échéant et vous définissez les variables d'environment pour les services app et db (définis dans le fichier compose.yml) qui prendront le pas sur celles définies par défaut.

Création d'une application dans seelf

Vous cliquez sur Create et sur le prochain écran sur New deployment afin de demander le déploiement de votre application. Comme le code de l'application est disponible sur Git, vous choisissez git en tant que mode de déploiement et la branche containerizing qui contient nos fichiers Dockerfile et compose.yml qui nous servent à lancer l'application en local.

Création d'un déploiement dans seelf

Il ne vous reste plus qu'à cliquer sur Deploy pour lancer le déploiement de votre application.

Page de déploiement (en cours) dans seelf

Après quelques secondes/minutes selon si les images étaient déjà rappatriées ou non, le déploiement devrait être terminé et votre application disponible !

Page de déploiement (succès) dans seelf

Un clic sur app dans la section deployed services ouvrira l'application ainsi déployée que vous pourrez alors partager avec le monde entier !

Notre application en ligne grâce à seelf

Félicitations, vous venez de déployer votre première application avec seelf !