https://github.com/cloudsteak/trn-node-docker-demo
https://github.com/cloudsteak/trn-node-docker-demo
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/cloudsteak/trn-node-docker-demo
- Owner: cloudsteak
- Created: 2023-04-18T09:22:21.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-03-22T23:56:55.000Z (about 1 year ago)
- Last Synced: 2025-03-23T00:23:18.396Z (about 1 year ago)
- Language: JavaScript
- Size: 770 KB
- Stars: 4
- Watchers: 0
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NodeJS alapú webalkalmazás Azure-hoz
## Támogatott NodeJS verziók
- Node 18 LTS
- Node 20 LTS
- Node 22 LTS
## Kapcsolódó projekt
Nem Docker verzió: https://github.com/cloudsteak/trn-node-demo
## Docker alapok
[docker-alapok.md](./docs/docker-alapok.md)
## Megoldás
A megoldás "Embedded JavaScript templating"-re épül. https://ejs.co
https://ejs.co/#install
## Teszt lépések
**[eslint](https://eslint.org/)** tesztelés előkészítve.
Ha CI pipeline-t telepítesz, akkor ellemőrzi a kódodban (példa alapján app.js) a pontosvesszők helyességét. A CD rész, csak akkor fut le, ha a CI (a teszt) sikeres.
Kézzel is futtatható a teszt:
```bash
npm run test
```
vagy
```bash
eslint ./app.js
```
## Azure Pipeline létrehozás és kapcsolat GitHub-al
1. Personal Acces Token létrehozás: https://github.com/settings/tokens
2. "Generate new token (classic)"
- Note: A token neve. Adj valami értelmezhető nevet. Pl.: AZPIPELINEPAT
- Expiration: Token lejárati ideje. Tesztelés esetén választhatod a "No expiration". Éles rendszer esetén adj lejárati időt!!!
- Az alábbi részeket válaszd ki a jelölönégyzeteknél
- "repo": mindegyiket alatta
- "admin:repo_hook": mindegyiket alatta
- "user": mindegyiket alatta
3. "Generate token" gombra kattintéssal a token létrejön.
4. A tokent másold biztonságos helyre! Nem visszafejthető.
5. Menj át az Azure DevOps-ba, a saját organization és project alapján. Pl.: https://cloudsteak.visualstudio.com/MentorKlub/_settings/adminservices (Project Settings > Service connections)
6. "Create service connection"
7. "New Azure service connection" résznél válaszd a GitHub-ot
8. "New GitHub service connection" résznél az alábbi módon töltsd ki
- "Personal Access Token Authentication"
- "Personal access token" mezőbe illeszd be a GitHub-on generált token értékét
- "Service connection name" mezőbe adj egy nevet. Pl.: GITADOCONN
- Jelöld be a "Grant access permission to all pipelines" jelölő négyzetet
- Kattints a "Verify and Save" gombra
9. Menj a Pipeline részbe. Pl.: https://cloudsteak.visualstudio.com/MentorKlub/_build
10. "Create Pipeline"
11. GitHub (Yaml)
12. Select lapon görgess a lapaljára és kattints az utolsó sorban a linkre: "You may also select a specific connection."
13. Választd a "GITADOCONN"-t
14. Keresd meg a GitHub repo-k között, amivel kapcsolódni szeretnél.
15. Létező YAML esetén a Run gomb melletti nyilra kattins és válaszd a "Save" lehetőséget.
16. Várd meg míg a pipeline létrejön. Ezzel a kapcsolt kész.
17. Ha GitHub-on módosítasz a kódon, akkor a pipeline elindul és a benne lévő kód lefut.
## NodeJs alkalmazás Docker-izálása
Dockerfile: leírja az alkalmazás környezet kialakításának feltételeit és lépéseit.
.dockerignore: tartalmazza azon fájlok, mappák és minták lerását, amit a docker image készítő figyelmen kívül hagy.
### Helyi "Build and run"
Helyi gépen hogyan tesztelhetem.
#### 1. Image build
```bash
docker build --tag mentorklub.azurecr.io/trn-node-docker .
```
Megjegyzés:
- Ha az image fájlt Apple Silicon processzoros gépen készítem, de utána Intel processzoros gépen használom, akkor a fenti parancshoz adjuk hozzá ezt: `--platform linux/amd64`
- Több platformos build: `docker buildx build --tag mentorklub.azurecr.io/trn-node-docker --push . --platform linux/amd64,linux/arm64,linux/arm/v7`
#### 2. Docker konténer létrehozás és futtatás
```bash
docker run -d -p 80:3000 --name nodedemo mentorklub.azurecr.io/trn-node-docker:latest
```
#### 3. Eredmény tesztelése
http://localhost
### Azure-ban futtatás
1. Azure Container Registry létrehozás
_Megjegyzés: Az ACR-nek Azure szinten egyedinek kell lennie. A lenti példában használt `mentorklub` ARC már létezik, így használj másikat, ha ezt is szeretnld kipróbálni._
```bash
# Erőforráscsoport létrehozás - ha szükséges
az group create --name mentorklub --location swedencentral
# ACR létrehozás
az acr create --resource-group mentorklub --name mentorklub --sku Basic
# Admin engedlyezése
az acr update -n mentorklub --admin-enabled true
```
2. Pipeline építés Azure DevOps-ban
3. Pipeline azure-pipelines.yml fájl módosítás
Hogy csak a Push esetén fusson le. Illesszük be a `condition: eq(variables['Build.reason'], 'IndividualCI')` sort.
```yaml
stages:
- stage: Build
displayName: Build and push stage
condition: eq(variables['Build.reason'], 'IndividualCI')
jobs:
```
A tag-ekhez tegyük be a `latest` értéket is.
```yaml
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
latest
```
4. Webalkalmazás létrehozása (Docker)
5. Webalkalmazás módosítása
1. Üzembehelyezési központban állítsuk át a `Folyamatos telepítés` értékés `Bekalcsolva`-ra.
2. Konfiguráció > Általános beállítások > Mindig bekapcsolva: Be
## AKS
AKS-en való futtatáshoz itt találsz leírást: [aks/readme.md](aks/readme.md)
## Hibakezelés
1. Admin Account engedélyezése az ACR-ben
Ha frissen hoztunk létre egy Azure Container Registry-t, akkor az alapértelmezett beállítások miatt nem tudunk hozzáférni az ACR-hez.
Amikor megpróbálunk mégis hozzáférni webalkalmazásból, akkor a következő hibát kapjuk:

Hiba megoldása, hogy engedélyezzük az Admin Account-ot az ACR-ben.
1. Jelentkezzünk be az ACR-be:
```bash
az acr login --name mentorklub
```
2. Engedélyezzük az Admin Account-ot:
```bash
az acr update -n mentorklub --admin-enabled true
```