Skip to content

Commit

Permalink
Merge pull request #18 from CAMAP-APP/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Mandrak-Kimigo authored May 22, 2024
2 parents fc20525 + 2fd6d1d commit 630616f
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 11 deletions.
68 changes: 58 additions & 10 deletions docs/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ L'installation consistera a
2. installer les outils et dépendances nécessaire pour le développement.
3. personnaliser le docker-file pour utiliser les fichiers sources locaux de la machine hote dans les conteneurs docker,

En cas d'erreur, un troubleshooting est à disposition [ici](./troubleshooting.md)

## Architecture des projets et interactions

Pour développer une évolution dans l'application CAMAP, il est nécessaire de comprendre comment les projets s'articulent.

### camap-hx (Le socle applicatif initial):

#### backend (templates):
#### backend (templates et api):
- role:
- rendu de templates "templo" via apache2 mod neko.
- service d'API sur `/api/<controller>/<action>` où <controller> est défini dans `camap-hx\src\controller\api\<Controller>.hx` et <action> en tant que `doAction` dans le controlleur.
Expand All @@ -35,6 +37,9 @@ Pour développer une évolution dans l'application CAMAP, il est nécessaire de
- Les modifications des templates (.mtt) sont prises en compte au rechargement de la page.
- Les modifications haxe nécessitent une recompilation (build backend/build.hxml depuis vscode)

#### backend (cron):
- voir [crons.md](crons.md)

#### backend (css, html, images, fonts et autres fichiers statics)
- role: fournir les fichiers css pour les thèmes et les styles de pages
- sources: camap-hx/www/*, camap-hx/www/theme/default/css/bootswatch.scss, camap-hx/www/theme/default/css/variables.less
Expand All @@ -61,13 +66,58 @@ Pour développer une évolution dans l'application CAMAP, il est nécessaire de

### camap-ts

Camap-ts rassemble un ensemble de sous projet. Le projet parent contient un package.json et quelques outils pour les pilotes globalement.

- role: build et démarrer les sous-projets
- exécution: voir [package.json](..%2Fpackage.json)
- installer toutes les dépendances des packages: camap-ts> `npm install`
- build tous les packages: camap-ts> `npm run build`
- Démarrer le serveur nest et le cron: camap-ts> `npm start`

#### camap-ts/packages/camap-common

- role: Bibliothèque de code partagé pour les autres application.
- sources: camap-ts/packages/camap-common/src
- compilation (via rollup): camap-ts> `npm run build:common`
- output:
- camap-ts/packages/camap-common/dist/index.js
- point d'entrée au format commonJS de la lib

#### camap-ts/packages/api-core

- role: Serveur d'API NestJS, fournit un service d'API complémentaire à camap-hx/backend.
- sources: camap-ts/packages/api-core/src, camap-common
- compilation: camap-ts> `npm run build:front`
- output: camap-ts/packages/front-core/dist/*
- exécution:
- camap-ts> `npm start`
- cron: voir [crons.md](crons.md)

#### camap-ts/packages/api-core/mails

- role: Compiler les templates de mails pour l'envoi de mails de la partie typescript de l'app.
- sources: camap-ts/packages/api-core/mails
- compilation: camap-ts> `npm run build:mail`
- output: camap-ts/packages/api-core/mails/dist
- exécution: via le service nest [emails.md](emails.md)

#### camap-ts/packages/front-core

- role: Compile les neomodules pour les fournir au frontend à la demande.
- sources: camap-ts/packages/front-core/src, camap-common
- output:
- camap-ts/public/neostatic/*.bundle.js
- camap-ts/public/neostatic/manifest.json
- compilation: camap-ts> `npm run build:front`
- utilisation:
- Le template haxe [base.mtt](..%2F..%2Fcamap-hx%2Flang%2Fmaster%2Ftpl%2Fbase.mtt) importe les scripts via [BridgeService.hx](..%2F..%2Fcamap-hx%2Fsrc%2Fservice%2FBridgeService.hx)
- voir [neo-modules.md](neo-modules.md)

## Installer l'environnement projet

Tout d'abord, suivez les étapes d'installation de [**camap-docker**](https://github.com/CAMAP-APP/camap-docker).

Utiliser dans un premier temps le docker-compose.yml de base (pas celui de dev).
Utiliser dans un premier temps le docker-compose.yml de base.

Une fois les étapes terminées, assurez vous de jouer une première fois la commande `docker compose up -d --build` et de vérifier que l'environnement fonctionne en mode production.

Expand Down Expand Up @@ -97,14 +147,12 @@ Une fois les étapes terminées, assurez vous de jouer une première fois la com
- `lix use haxe 4.0.5`
- `lix download`
- `npm install`
- Exécutez les actions:
- "Haxe: Restart Language Server" pour vérifier que votre installation a bien détecté l'environnement haxe.
- "Build"

## Utiliser le docker-compose.yml pour le dev

Copier/coller `camap-docker\docker-compose.dev.yml` comme `docker-compose.yml` dans votre dossier camap et exécuter ce docker-compose
- Exécutez les actions:
- "Haxe: Restart Language Server" pour vérifier que votre installation a bien détecté l'environnement haxe.
- "Build"

exécuter ```docker-compose up -d --build```
## Utiliser le docker-compose.dev.yml pour le dev

Cela permettra, grâce aux volumes, de lancer les conteneurs docker avec les fichiers compilés locaux de la machine hote.

exécuter ```docker-compose up -d```
72 changes: 72 additions & 0 deletions docs/troubleshooting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Troubleshooting

Consultez cette section en cas d'erreur


## Sur le navigateur
`Error : load.c(181) : Module not found : /srv/www/../lang/fr/tmp/error.mtt.n`
- Vérifier que les fichiers dans `lang/fr` ont bien été générés
- Sinon :
- Relancer build
- Checker permission
Si cela ne fonctionne pas :
- Lisez ['.templates.md'](./templates.md) pour bien comprendre le fonctionnement des templates
- `cd backend && haxe build.hxml -D i18n_generation && cd tpl && neko ../../../backend/temploc2.n -macros macros.mtt -output ../tmp/ *.mtt */*.mtt */*/*.mtt`


`"Unsupported charset : #255"`
- Attention à ne pas créer la DB vous même, laissez le serveur camap-hx le faire pour imposer le bon charset

`"Error : Invalid field access : id"`
- **explication**: L'application (haxe) essaye d'accéder à la base de données mais celle-ci n'est pas disponible ou n'est pas initialisée
- à vérifier:
- initialisation la base de données (`camap-ts> npm run schema:sync` puis visiter [https://camap.localdomain/install](https://camap.localdomain/install))
- la base de données accepte les connexionl'accès via mysql_native_password
- la base de données est accessible dans l'environnement haxe
- Recréez un container neko-loc-camap, charger la page `https://camap.localdomain/` puis vérifiez les logs si besoin
- ⚠ N'oubliez pas, il faut ouvrir la page dans la navigateur pour lancer la génération !

La route `https://camap.localdomain/user/login` fonctionne, mais n'affiche pas le formulaire + erreurs en console (`Uncaught TypeError: can't access property "createNeoModule", neo is undefined`)

## Base de données - loc-mysql
- `[Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.`
- Changer les permissions vers 0444: `chmod 0444 my.cnf`
- Et monter le dossier :
```yaml
volumes:
# Set mysql extra config:
- my.cnf:/etc/mysql/conf.d/my.cnf
```

Si la config BD est bien prise en compte, le warning suivant doit apparaitre dans les logs de la BD : "Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'"

- `Public Key Retrieval is not allowed` (depuis un client BD comme DBeaver)
- La config my.cnf n'a pas l'air d'être prise en compte (et donc le mode de connexion particulier)

## camap-ts - nest-loc-camap
- `[Nest] 31 - 04/30/2024, 9:53:00 AM ERROR [Scheduler] QueryFailedError: Table 'db-camap.BufferedJsonMail' doesn't exist`
- Soit : Les tables de la BD n'ont pas été créées. Vérifier les logs pour voir si une autre erreur apparait
- Soit : Nest n'arrive pas à se connecter à) la BD

- `Failed to connect to mysql server : Failed to connect on host 'loc-mysql'`
- Relancer, le docker compose a peu être été trop vite..
- Erreur rare

### camap-hx - neko-loc-camap
- ` Failed to connect to mysql server : Client does not support authentication protocol requested by server; consider upgrading MySQL client`
- Pour brancher Neko sur MySQL8, il faut utiliser l'ancienne authentification "mysql_native_password". Pour cela, une ligne a été ajoutée dans `camap-ts/mysql/my.cnf`. Cependant, il faut vérifier que ce fichier est bien pris en compte par la BD. Vérifier les logs de loc-mysql si le warning "World-writable config file" est présent

- `Segmentation fault`
- Pas sur, mais tentez d'augmenter la RAM affectée à Docker (j'ai dû monter à 12GB personnellement)
- N'hésitez pas à tenter de lancer plusieurs fois le container jusqu'à temps que cela fonctionne

- `Error : Temploc compilation of error.mtt failed : Called from templo/Main.nml line 183`
- Le dossier lang/master/tmp ne doit pas exister. Essayer de le créer à la main

- `TypeError: can't access property "createNeoModule", neo is undefined`
- Essayer `npm run build:front` dans camap-ts
- Si il y a une erreur de `camap-common not found`, rebuilder le tout => Dans le dossier packages : `npm run build`

- `unable to load resources from camap-ts`
- **explication**: SSL n'est pas configuré en local et l'application ne parvient pas à accéder à camap-ts par manque de permission
- **solution**: ouvrir le navigateur sur [https://api.camap.localdomain/](https://api.camap.localdomain/) et ajouter une exception de sécurité.
2 changes: 1 addition & 1 deletion mysql/my.cnf
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ character-set-server = utf8mb4
# bind-address=0.0.0.0

default-authentication-plugin=mysql_native_password
log-error-verbosity=1
log-error-verbosity=1
1 change: 1 addition & 0 deletions packages/api-core/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ const envFilePath = join(
TypeOrmModule.forRoot(),
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
cache: 'bounded',
debug: process.env.NODE_ENV !== 'production',
playground: process.env.NODE_ENV !== 'production',
autoSchemaFile: join(process.cwd(), './src/schema.gql'),
Expand Down

0 comments on commit 630616f

Please sign in to comment.