Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
docker_nodejs [2023/07/03 09:28] montserrat_castellarnau [Mini projecte nodejs dockeritzat] |
docker_nodejs [2023/07/03 10:58] (actual) montserrat_castellarnau [Dockeritzar la Base de Dades PostgreSQL (docker_compose.yml)] |
||
|---|---|---|---|
| Línia 11: | Línia 11: | ||
| \\ | \\ | ||
| - | ===== Mini projecte nodejs dockeritzat | + | ===== Creació Bases de Dades i RestApi en local ===== |
| En primer lloc en el PostgreSQL, amb el PgAdmin o un altre editor com per exemple DBeaver [[https:// | En primer lloc en el PostgreSQL, amb el PgAdmin o un altre editor com per exemple DBeaver [[https:// | ||
| {{: | {{: | ||
| Línia 68: | Línia 68: | ||
| </ | </ | ||
| - | I veure la web amb el browser a: | + | En el fitxer package.json cal afegir el següent per poder executar l’api |
| - | http://< | + | " |
| - | ===== Exercici Dockerfile | + | " |
| + | A continuació en el terminal | ||
| + | $ npm start | ||
| + | |||
| + | Ara en qualsevol navegador podem consultar les dades de la taula pacients: | ||
| + | http://localhost:3000/ | ||
| + | {{: | ||
| + | ===== Dockeritzar la RestApi | ||
| <WRAP todo> | <WRAP todo> | ||
| A partir de la base de dades de PostreSQL i la restapi creada amb nodejs, que amb la ruta /pacients ens mostra tots el pacients que tenim en aquesta taula, crear una imatge (Dockerfile) de tal manera que puguem crear un contenidor per tenir la RestApi funcionant. | A partir de la base de dades de PostreSQL i la restapi creada amb nodejs, que amb la ruta /pacients ens mostra tots el pacients que tenim en aquesta taula, crear una imatge (Dockerfile) de tal manera que puguem crear un contenidor per tenir la RestApi funcionant. | ||
| </ | </ | ||
| + | En la mateixa carpeta " | ||
| <file Dockerfile Dockerfile> | <file Dockerfile Dockerfile> | ||
| Línia 85: | Línia 93: | ||
| CMD [ " | CMD [ " | ||
| </ | </ | ||
| + | <WRAP important> | ||
| + | Si primer creem el contenidor sense el -d, podrem veure que dona el següent error: | ||
| + | * “Error: connect ECONNREFUSED 127.0.0.1: | ||
| + | El motiu és que si la Api està dins d’un contenidor i accedeix a la bases de dades que hi ha a l' | ||
| + | {{: | ||
| + | </ | ||
| + | <WRAP important> | ||
| + | Un cop modificada la IP, apareix un altre eror: | ||
| + | * “no hay una línea en pg_hba.conf para 192.168.1.221, | ||
| + | En aquest cas cal afegir, al fitxer pg_hba.conf | ||
| + | host all postgres | ||
| + | </ | ||
| + | Des del terminal, en la carpeta " | ||
| + | $ docker build -t imatge_node . | ||
| + | I ara podem crear el contenidor: | ||
| + | $ docker run --name contenidor_node -p 3000:3000 -d imatge_node | ||
| + | Ara en qualsevol navegador podem consultar les dades de la taula pacients: | ||
| + | http:// | ||
| + | ===== Dockeritzar la Base de Dades PostgreSQL (docker_compose.yml) ===== | ||
| + | Dins del mateix directori " | ||
| + | |||
| + | <file SQL init.sql> | ||
| + | CREATE TABLE pacients ( | ||
| + | id SERIAL PRIMARY KEY, | ||
| + | nom VARCHAR(50) NOT NULL | ||
| + | ); | ||
| + | |||
| + | INSERT INTO pacients (nom) VALUES | ||
| + | (' | ||
| + | (' | ||
| + | (' | ||
| + | (' | ||
| + | (' | ||
| + | |||
| + | </ | ||
| + | |||
| + | <WRAP todo> | ||
| + | Ara l' | ||
| + | * Contenidor1: | ||
| + | * Contenidor2: | ||
| + | * Contenidor3: | ||
| + | </ | ||
| + | <file docker-compose docker-compose.yml> | ||
| + | version: ' | ||
| + | services: | ||
| + | server: | ||
| + | build: | ||
| + | context: . | ||
| + | dockerfile: Dockerfile | ||
| + | ports: | ||
| + | - " | ||
| + | environment: | ||
| + | NODE_ENV: production | ||
| + | PG_HOST: db | ||
| + | PG_PORT: 5432 | ||
| + | PG_DATABASE: | ||
| + | PG_USER: appuser | ||
| + | PG_PASSWORD: | ||
| + | depends_on: | ||
| + | - db | ||
| + | db: | ||
| + | image: postgres | ||
| + | container_name: | ||
| + | ports: | ||
| + | - " | ||
| + | environment: | ||
| + | POSTGRES_DB: | ||
| + | POSTGRES_USER: | ||
| + | POSTGRES_PASSWORD: | ||
| + | volumes: | ||
| + | - dades:/ | ||
| + | - ./ | ||
| + | pgadmin: | ||
| + | image: dpage/ | ||
| + | container_name: | ||
| + | restart: always | ||
| + | ports: | ||
| + | - " | ||
| + | environment: | ||
| + | PGADMIN_DEFAULT_EMAIL: | ||
| + | PGADMIN_DEFAULT_PASSWORD: | ||
| + | volumes: | ||
| + | - pgadmin-data:/ | ||
| + | volumes: | ||
| + | dades: | ||
| + | |||
| + | </ | ||
| + | <WRAP important> | ||
| + | Ara cal modificar el fitxer index.controllers.js de l'Api, per tal que apunti a la base de dades del contenidor corresponent: | ||
| + | const pool = new Pool({ | ||
| + | user: ' | ||
| + | host: ' | ||
| + | password: ' | ||
| + | database: ' | ||
| + | port: ' | ||
| + | }); | ||
| + | </ | ||
| + | Ara ja podem aixecar els contenidors: | ||
| + | $ docker-compose up -d | ||
| + | Ara en qualsevol navegador podem consultar les dades de la taula pacients i veurem que se'ns mostren les que hem posat en el nostre script SQL: | ||
| + | http:// | ||
| + | Ara ens connectarem al contenidor3, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Ens loguegem amb les credencial que hem posat en el docker-compose en el Contenidor3. | ||
| + | Ara necessitem saber la IP del contenidor2, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | A continuació, | ||
| + | $ docker inspect postgresdb | ||
| + | I la ip en aquest cas és: " | ||
| + | En el PgAdmin del navegador, ens connectem a la nostra BBDD, el contenidor2: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | I efectivament, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Si inserim un altre registre a la taula pacients: | ||
| + | INSERT INTO pacients (nom) VALUES (' | ||
| + | Si tornem al navegador, podem veure que ja se'ns mostra: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | A més a més, el contenidor2 de la BBDD, s'ha creat amb persistència, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Amb això, si se'ns para o cau aquest contenidor en podem aixecar un altre lligat a aquest volum i continuarem tenin la BBDD. | ||
| + | |||