Conteneuriser et déployer une application Go avec seelf
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.
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.
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.
Il ne vous reste plus qu’à cliquer sur Deploy pour lancer le déploiement de votre application.
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 !
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 !
Félicitations, vous venez de déployer votre première application avec seelf !