go-rest-boilerplate

command module
v1.0.1-0...-55f3d51 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 20, 2020 License: MIT Imports: 2 Imported by: 0

README

Go Web Server boilerplate

Go Report Card Build Status GoDoc

Sommaire

Installation

  • Installer la dernière de Go (Download page)
  • Copier le fichier config.toml.dist vers config.toml et renseigner les bonnes valeurs

Liste des commandes

Dévelopement
Commande Description
make serve Launch Web server
make logsRotation Launch logs rotation
make logsExport Launch logs CSV export
make dbInit Launch database initilization
make dbDump Launch database dump
make make-migration Create migration
make migrate Make migrations
make ws Launch WebSockets server
Production

Compiler le fichier binaire <binaire> avec make build et renseigner des bonnes valeurs de le fichier de configuration config.toml.

Commande Description
./<binaire> serve Launch Web server
./<binaire> logs-rotation Launch logs rotation
./<binaire> logs-export Launch logs CSV export
./<binaire> db --init Launch database initilization
./<binaire> db --dump Launch database dump
./<binaire> make-migration -n <Name in CamelCase> Create migration
./<binaire> migrate Make migrations
./<binaire> websocket Launch WebSockets server

Architecture du projet

\_ assets
   \_ js
\_ commands
\_ database
\_ handlers
   \_ api
   \_ web
\_ lib
\_ logs
\_ migrations
\_ models
\_ repositories
   \_ user
\_ routes
   \_ user
   \_ echo
   \_ web
\_ templates
   \_ example
   \_ layout
\_ websockets
  • Le dossier assets contient les fichiers multimédia (images, vidéos, etc.), JavaScript ou encore CSS.
  • Le dossier commands contient toutes les commandes que l'on peut lancer depuis un terminal.
  • Le dossier database contient tous les fichiers relatifs à l'utilisation de MySQL ainsi que l'initialisation et le dump de la base. Il contient également l'initalisation de l'ORM.
  • Le dossier handlers contient tous les handlers du serveur Web. Ils sont divisés par type. Par exemple, on a un dossier api pour gérer les API et un dossier web pour gérer un "site".
  • Le dossier lib contient des fonctions globales à l'application.
  • Le dossier logs contient les logs du serveur Web.
  • Le dossier migrations contient les fichiers de migrations.
  • Le dossier models contient les modèles (base de données).
  • Le dossier repositories contient les repositories. Ces fichiers permettent d'écrire les requêtes s'appliquant à un modèle. Les fichiers dépendant du type de base de données, ils sont suffixés par le type de base de données, par exemple, _mysql.
  • Le dossier routes contient les fichiers relatifs au routing. Ils sont divisés par type. Par exemple, on a un dossier api pour gérer les API et un dossier web pour gérer un "site".
  • Le dossier templates contient les templates des différentes page Web.
  • Le dossier websockets contient les fichiers relatifs au serveur de WebSockets.

Golang web server in production

Creating a Service for Systemd
touch /lib/systemd/system/<service name>.service

Edit file:

[Unit]
Description=<service description>
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=<path to exec with arguments>

[Install]
WantedBy=multi-user.target
Commande Description
service <service name> start To launch
service <service name> enable To enable on boot
service <service name> disable To disable on boot
service <service name> status To show status
service <service name> stop To stop

Deploiement avec Docker

Liens
Commandes
Commande Description
docker image ls Lister les images
docker image remove <image_id> ou docker rmi <image_id> Supprimer une image
docker container ls Lister les conteneurs
docker container stop <container_id> Stopper un conteneur
docker rm <container_id> Supprimer un conteneur
docker build -t <image_name> -f <dockerfile_name> . Build de l'image
docker run -d -p <port_local>:<port_container> <image_name> Lancement de l'image
TODO
  • Pouvoir modifier dynamique le port et le nom du binaire dans le dockerfile

Serveur Web

Le serveur peut contenir plusieurs sous-domaines. Leur configuration se fait dans le fichier config.toml via la partie [server]. Le serveur possède 3 sous-domaines par défaut :

  • apiSubDomain : sous-domaine relatif aux API
  • clientSubDomain : sous-domaine pour lancer, par exemple, une application JavaScript Vue.js
  • webSubDomain : sous-domaine pour créer une application côté serveur. Il contient également les routes de debug pour pprof ou trace.

Mesure et performance

Go met à disposition de puissants outils pour mesurer les performances des programmes :

  • pprof (graph, flamegraph, peek)
  • trace
  • cover

=> Lien vers une vidéo intéressante Mesure et optimisation de la performance en Go

pprof

Lancer :

curl http://localhost:8888/debug/pprof/heap?seconds=10 > <fichier à analyser>

Puis :

go tool pprof -http :7000 <fichier à analyser> # Interface web
go tool pprof --nodefraction=0 -http :7000 <fichier à analyser> # Interface web avec tous les noeuds
go tool pprof <fichier à analyser> # Ligne de commande
trace

Lancer :

go test <package path> -trace=<fichier à analyser>
curl localhost:<port>/debug/pprof/trace?seconds=10 > <fichier à analyser>

Puis :

go tool trace <fichier à analyser>
cover

Lancer :

go test <package path> -covermode=count -coverprofile=./<fichier à analyser>

Puis :

go tool cover -html=<fichier à analyser>

TODO list

Astuces et explications

Performance, Débug et profilage
Architecture

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
handlers
api
web
api
web

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL