# Démarrer avec les sources Dans ce tutoriel, nous verrons comment lancer un environnement de développement en local sur notre machine afin de travailler sur les sources de Bouncer. ## Prérequis Les éléments suivants doivent être installés sur votre machine: - [Golang > 1.20](https://go.dev/) - [Docker](https://www.docker.com/) - [Git](https://git-scm.com/) - [GNU Make](https://www.gnu.org/software/make/) Les ports suivants doivent être disponibles sur votre machine: - `8080` - `8081` ## Étapes 1. Cloner le dépôt des sources du projet Bouncer ``` git clone https://forge.cadoles.com/Cadoles/bouncer ``` 2. Se positionner dans le répertoire du projet ``` cd bouncer ``` 3. Lancer le projet en mode "développement" ``` make watch ``` Si toutes les dépendances sont correctement installées et configurées sur votre machine, la console devrait afficher une série de messages pour ensuite s'arrêter sur quelque chose ressemblant à: ``` 14:47:06: daemon: make run BOUNCER_CMD="--config config.yml server admin run" 2023-06-23 20:47:06.095 [INFO] <./internal/command/server/admin/run.go:42> RunCommand.func1 listening {"url": "http://127.0.0.1:8081"} 2023-06-23 20:47:06.095 [INFO] <./internal/admin/server.go:126> (*Server).run http server listening 14:47:06: daemon: make run-redis bouncer-redis docker run --rm -t \ --name bouncer-redis \ -v /home/wpetit/workspace/bouncer/data/redis:/data \ -p 6379:6379 \ redis:alpine3.17 \ redis-server --save 60 1 --loglevel warning 1:C 23 Jun 2023 20:47:06.754 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 23 Jun 2023 20:47:06.754 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=1, just started 1:C 23 Jun 2023 20:47:06.754 # Configuration loaded 1:M 23 Jun 2023 20:47:06.759 # Warning: Could not create server TCP listening socket ::*:6379: unable to bind socket, errno: 97 1:M 23 Jun 2023 20:47:06.760 # Server initialized 1:M 23 Jun 2023 20:47:06.760 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect ``` À ce stade, le serveur `bouncer-admin` écoute sur http://127.0.0.1:8081 et le serveur `bouncer-proxy` sur http://127.0.0.1:8080. > **Note** > > L'outil [`modd`](https://github.com/cortesi/modd) est utilisé pour surveiller les modifications sur les sources et relancer automatiquement la compilation et les services en cas de changement. ## Commandes `make` utiles ### `make watch` Surveiller les sources, compiler celles ci en cas de modifications et lancer les services `bouncer-proxy` et `bouncer-admin`. ### `make test` Exécuter les tests unitaires/d'intégration du projet. ### `make build` Compiler une version de développement du binaire `bouncer`. ### `make docker-build` Construire une image Docker pour Bouncer. Vous pouvez ensuite lancer l'image localement avec la commande: ``` docker run \ -it --rm \ reg.cadoles.com/cadoles/bouncer: \ -p 8080:8080 \ bouncer server proxy run ``` ### `make grafterm` Afficher un tableau de bord [`grafterm`](https://github.com/slok/grafterm) branché sur l'instance Prometheus locale. ### `make siege` Lancer une session de test [`siege`](https://github.com/JoeDog/siege) sur l'instance `bouncer-proxy` locale. ## Arborescence du projet ```bash . ├── bin # Répertoire de destination des binaires Go de développement ├── cmd # Package principal (main) du binaire Bouncer ├── data # Répertoire des données de développement (Redis) ├── dist # Répertoire de destination des archives/paquets pour la publication ├── doc # Répertoire de documentation du projet ├── internal # Source Go du projet │   ├── admin │   ├── auth │   ├── chi │   ├── client │   ├── command │   ├── config │   ├── format │   ├── imports │   ├── jwk │   ├── proxy │   ├── schema │   ├── setup │   └── store ├── layers # Fichiers annexes liés aux layers (templates HTML) │   └── queue ├── misc # Fichiers annexes │   ├── jenkins # Fichiers liés au pipeline d'intégration continue Jenkins │   ├── logo # Logo du projet │   └── packaging # Fichiers liés à l'empaquetage des binaires └── tools # Outils utilisés en développement ```