changements dans les dockerfiles + ajout de quelques trucs pour svelte en PoC

This commit is contained in:
batche
2022-11-14 16:02:54 +01:00
parent 8b4545f4d6
commit aa3eb111c1
15 changed files with 213 additions and 320 deletions

View File

@@ -17,14 +17,11 @@ prod:
start: start:
docker compose -f ${DOCKERCOMPOSEPATH} start docker compose -f ${DOCKERCOMPOSEPATH} start
docker logs --follow nestjs_api_back_dev docker logs --follow srcs-backend_dev-1
start_dev: start_dev:
docker compose -f ${DOCKERCOMPOSEPATH} start dev docker compose -f ${DOCKERCOMPOSEPATH} start dev
docker logs --follow nestjs_api_back_dev docker logs --follow srcs-backend_dev-1
start_debug:
docker compose -f ${DOCKERCOMPOSEPATH} start debug
start_prod: start_prod:
docker compose -f ${DOCKERCOMPOSEPATH} start prod docker compose -f ${DOCKERCOMPOSEPATH} start prod

View File

@@ -1,154 +1,77 @@
services: services:
backend_dev: backend_dev:
container_name: nestjs_api_back_dev build:
image: nestjs_api_back_dev context: ./requirements/nestjs
build: target: development
context: ./requirements/nestjs dockerfile: Dockerfile
target: development volumes:
dockerfile: Dockerfile - ./requirements/nestjs/api_back/src:/usr/app/src
command: npm run start:dev - ./requirements/nestjs/api_back/test:/usr/app/test/
networks: env_file:
- transcendance_network - .env
volumes: environment:
- ./requirements/nestjs/api_back:/usr/src/app NODE_ENV: "${NODE_ENV}"
- /usr/src/app/node_modules restart: unless-stopped
env_file: depends_on:
- .env - postgresql
environment: - redis
NODE_ENV: "${NODE_ENV}"
restart: unless-stopped
depends_on:
- postgresql
- redis
# backend_prod: frontend_dev:
# container_name: nestjs_api_back_prod build:
# image: nestjs_api_back_prod context: ./requirements/svelte
# build: target: development
# context: ./requirements/nestjs dockerfile: Dockerfile
# target: production volumes:
# dockerfile: Dockerfile - ./requirements/svelte/api_front/src:/usr/app/src/
# command: npm run start:prod - ./requirements/svelte/api_front/public:/usr/app/public/
# ports: env_file:
# - 3000:3000 - .env
# networks: environment:
# - transcendance_network NODE_ENV: "${NODE_ENV}"
# volumes: restart: unless-stopped
# - data_nest_back:/usr/src/app depends_on:
# - /usr/src/app/node_modules - postgresql
# restart: unless-stopped - redis
# env_file: - backend_dev
# - .env
# environment:
# NODE_ENV: "${NODE_ENV}"
# depends_on:
# - postgresql
# - redis
frontend_dev: # t'embete pas a gerer ton propre container nginx
container_name: nestjs_api_front_dev nginx:
image: nestjs_api_front_dev image: nginx:alpine
build: restart: unless-stopped
context: ./requirements/svelte volumes:
target: development - ./requirements/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf:ro
dockerfile: Dockerfile command: [nginx-debug, "-g", "daemon off;"]
command: npm run dev ports:
networks: - "8080:8080"
- transcendance_network depends_on:
volumes: - backend_dev
- ./requirements/svelte/api_front:/usr/src/app - frontend_dev
- /usr/src/app/node_modules - postgresql
env_file: - redis
- .env
environment:
NODE_ENV: "${NODE_ENV}"
restart: unless-stopped
depends_on:
- postgresql
- redis
- backend_dev
nginx: postgresql:
container_name: nginx container_name: nestjs_postgresql
build: image: postgres
context: ./requirements/nginx volumes:
dockerfile: Dockerfile - data_nest_postgresql:/var/lib/postgresql/data
ports: restart: unless-stopped
- 8080:8080 environment:
networks: POSTGRES_USER: "${POSTGRES_USER}"
- transcendance_network POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
restart: unless-stopped POSTGRES_DB: "${POSTGRES_DB}"
depends_on: POSTGRES_HOST: "${POSTGRES_HOST}"
- backend_dev POSTGRES_PORT: "${POSTGRES_PORT}"
- frontend_dev
- postgresql
- redis
postgresql: # Je connais pas redis, mais si t'en a besoin que a l'interieur de tes containers, je pense pas que t'as besoin d'un expose.
container_name: nestjs_postgresql redis:
image: postgres container_name: nestjs_redis
# ports: image: redis:alpine
# - 5432:5432 expose:
networks: - "6379"
- transcendance_network restart: unless-stopped
volumes: environment:
- data_nest_postgresql:/var/lib/postgresql/data REDIS_HOST: "${REDIS_HOST}"
restart: unless-stopped REDIS_PORT: "${REDIS_PORT}"
environment:
POSTGRES_USER: "${POSTGRES_USER}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
POSTGRES_DB: "${POSTGRES_DB}"
POSTGRES_HOST: "${POSTGRES_HOST}"
POSTGRES_PORT: "${POSTGRES_PORT}"
redis:
container_name: nestjs_redis
image: redis:alpine
expose:
- "6379"
networks:
- transcendance_network
restart: unless-stopped
environment:
REDIS_HOST: "${REDIS_HOST}"
REDIS_PORT: "${REDIS_PORT}"
networks:
transcendance_network:
driver: bridge
volumes: volumes:
data_nest_back: data_nest_postgresql:
data_nest_postgresql:
data_nest_redis:
# debug:
# container_name: nestjs_api_debug
# image: nestjs_api_debug
# build:
# context: ./requirements/nestjs
# target: development
# dockerfile: Dockerfile
# command: run start:dev --debug 0.0.0.0:9229
# ports:
# - 3000:3000
# - 9229:9229
# networks:
# - transcendance_network
# volumes:
# - ./requirements/nestjs/api_back:/usr/src/app
# - /usr/src/app/node_modules
# env_file:
# - .env
# environment:
# NODE_ENV: "${NODE_ENV}"
# DEBUG: "*" # enable all debug logs
# restart: unless-stopped
# depends_on:
# - postgresql

View File

@@ -0,0 +1,11 @@
# Ignore everything
*
# Allow files and folders with a pattern starting with !
!api_back/*.js
!api_back/*.ts
!api_back/*.json
!api_back/*.html
!api_back/*.lock
!api_back/.env

View File

@@ -1,42 +1,10 @@
FROM node:alpine AS development FROM node:alpine AS development
WORKDIR /usr/src/app WORKDIR /usr/app
COPY --chown=node:node ./api_back/package*.json ./ COPY api_back/* .
COPY api_back/.env .env
RUN npm i RUN npm ci
COPY --chown=node:node ./api_back/ ./ CMD [ "npm", "run", "start:dev" ]
USER node
# FROM node:19-alpine AS build
# WORKDIR /usr/src/app
# COPY --chown=node:node ./api_back/package*.json ./
# COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node ./api_back/ ./
# RUN npm run build
# ENV NODE_ENV production
# RUN npm ci --only=production && npm cache clean --force
# USER node
# FROM node:19-alpine AS production
# WORKDIR /usr/src/app
# COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node --from=build /usr/src/app/dist ./dist
# USER node
ENV HOST=0.0.0.0
CMD [ "node", "run", "start:dev" ]

View File

@@ -36,17 +36,6 @@ export class AuthenticationController {
return response.status(200).redirect('http://transcendance:8080'); return response.status(200).redirect('http://transcendance:8080');
} }
/**
* GET /api/v2/auth/status
* Route pour vérifier si l'utilisateur est connecté
* ou non.
*/
@Get('status')
@UseGuards(AuthenticateGuard)
status() {
return 'status';
}
/** /**
* GET /api/v2/auth/logout * GET /api/v2/auth/logout
* Route pour déconnecter l'utilisateur * Route pour déconnecter l'utilisateur

View File

@@ -24,7 +24,7 @@ export class FriendshipController {
return this.friendshipService.findOneFriend(relationshipId, user.id); return this.friendshipService.findOneFriend(relationshipId, user.id);
} }
// POST http://127.0.0.1:3000/api/v2/network/ // POST http://127.0.0.1:3000/api/v2/network/myfriends
@Post('myfriends') @Post('myfriends')
@HttpCode(HttpStatus.CREATED) @HttpCode(HttpStatus.CREATED)
@UseGuards(AuthenticateGuard) @UseGuards(AuthenticateGuard)

View File

@@ -30,6 +30,9 @@ export class User {
@Column('json', { nullable: true }) @Column('json', { nullable: true })
status: [string]; status: [string];
// @Column()
// isFirstConnection: boolean;
@Column({ default: false, nullable: true }) @Column({ default: false, nullable: true })
isEnabledTwoFactorAuth: boolean; isEnabledTwoFactorAuth: boolean;

View File

@@ -31,18 +31,18 @@ export class UsersController {
* car un utilisateur est crée à la première connexion avec l'Oauth de 42. * car un utilisateur est crée à la première connexion avec l'Oauth de 42.
*/ */
@UseGuards(AuthenticateGuard) // @UseGuards(AuthenticateGuard)
@Get() // @Get()
findOne(@Req() req) { // findOne(@Req() req) {
return this.usersService.findOne(req.user.id); // return this.usersService.findOne(req.user.id);
} // }
@UseGuards(AuthenticateGuard) // @UseGuards(AuthenticateGuard)
@Post() // @Post()
@HttpCode(HttpStatus.CREATED) // @HttpCode(HttpStatus.CREATED)
create(@Body() createUsersDto : CreateUsersDto ) { // create(@Body() createUsersDto : CreateUsersDto ) {
return this.usersService.create(createUsersDto); // return this.usersService.create(createUsersDto);
} // }
@UseGuards(AuthenticateGuard) @UseGuards(AuthenticateGuard)
@Patch() @Patch()

View File

@@ -0,0 +1,10 @@
# Ignore everything
*
# Allow files and folders with a pattern starting with !
!api_front/*.js
!api_front/*.ts
!api_front/*.json
!api_front/*.html
!api_front/*.lock

View File

@@ -1,42 +1,9 @@
FROM node:alpine AS development FROM node:alpine AS development
WORKDIR /usr/src/app WORKDIR /usr/app
COPY --chown=node:node ./api_front/package*.json ./ COPY ./api_front/* .
RUN npm i RUN npm ci
COPY --chown=node:node ./api_front/ ./ CMD [ "npm", "run", "dev" ]
USER node
# FROM node:19-alpine AS build
# WORKDIR /usr/src/app
# COPY --chown=node:node ./api_front/package*.json ./
# COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node ./api_front/ ./
# RUN npm run build
# ENV NODE_ENV production
# RUN npm ci --only=production && npm cache clean --force
# USER node
# FROM node:19-alpine AS production
# WORKDIR /usr/src/app
# COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node --from=build /usr/src/app/dist ./dist
# USER node
ENV HOST=0.0.0.0
CMD [ "node", "run", "dev"]

View File

@@ -5,7 +5,7 @@
"scripts": { "scripts": {
"build": "rollup -c", "build": "rollup -c",
"dev": "rollup -c -w", "dev": "rollup -c -w",
"start": "sirv public --no-clear", "start": "sirv public --no-clear --host",
"check": "svelte-check --tsconfig ./tsconfig.json" "check": "svelte-check --tsconfig ./tsconfig.json"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -2,10 +2,12 @@
import Login from "./pages/auth/login.svelte"; import Login from "./pages/auth/login.svelte";
import Home from "./pages/home/home.svelte"; import Home from "./pages/home/home.svelte";
import Router, {link} from 'svelte-spa-router'; import Router, {link} from 'svelte-spa-router';
import Profil from "./pages/profil/profil.svelte";
const routes = { const routes = {
"/": Home, "/": Home,
"/login": Login, "/login": Login,
"/profil": Profil,
}; };
</script> </script>
@@ -19,10 +21,12 @@
<li> <li>
<a href="/" type="button" class="btn btn-primary">Home</a> <a href="/" type="button" class="btn btn-primary">Home</a>
</li> </li>
<!-- <li>
<a href="/profil" use:link type="button" class="btn btn-primary">Profil</a>
</li> -->
</ul> </ul>
<div class="text-end"> <div class="text-end">
<a href="/login" use:link type="button" class="btn btn-warning">Connexion</a> <a href="/login" use:link type="button" class="btn btn-warning">Connexion</a>
</div> </div>
</div> </div>

View File

@@ -1,18 +1,23 @@
<script lang="ts"> <script lang="ts">
import axios from 'axios'; import axios from 'axios';
import { onMount } from 'svelte';
import {push} from 'svelte-spa-router'; import {push} from 'svelte-spa-router';
let user = {logedIn: false}; let user = {logedIn: false};
onMount(async () => {
console.log('PROFIL SVELTE');
const {data} = await axios.get('http://transcendance:8080/api/v2/user');
if (data)
user.logedIn = true;
});
$: submit = async() => { $: submit = async() => {
window.location.href = 'http://transcendance:8080/api/v2/auth'; window.location.href = 'http://transcendance:8080/api/v2/auth';
if (document.cookie) {
user.logedIn = true;
}
} }
$: logout = async() => { $: logout = async() => {
fetch('http://transcendance:8080/api/v2/auth/logout'); await fetch('http://transcendance:8080/api/v2/auth/logout',);
user.logedIn = false; user.logedIn = false;
} }

View File

@@ -1,69 +1,55 @@
<script> <script>
let href = import Router, { link } from "svelte-spa-router";
import Login from "../auth/login.svelte";
import Profil from "../profil/profil.svelte";
const routes = {
"/login": Login,
"/profil": Profil,
};
</script> </script>
<body> <body>
<main class="d-flex flex-nowrap"> <main class="d-flex flex-nowrap">
<h1 class="visually-hidden">Sidebars examples</h1> <h1 class="visually-hidden">Sidebars examples</h1>
<div class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark" style="width: 280px;"> <div
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none"> class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark"
<svg class="bi pe-none me-2" width="40" height="32"><use xlink:href="#bootstrap"/></svg> style="width: 280px;"
<span class="fs-4">Sidebar</span> >
</a> <a href="/" use:link class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<hr> <span class="fs-4">Sidebar</span>
<ul class="nav nav-pills flex-column mb-auto"> </a>
<li class="nav-item"> <hr />
<a href="/pouepouet" class="nav-link active" aria-current="page"> <ul class="nav nav-pills flex-column mb-auto">
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#home"/></svg> <li class="nav-item">
Profil <a
</a> href="/profil"
</li> use:link
<li> class="nav-link active"
<a href="#" class="nav-link text-white" on:click={color}> aria-current="page"
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#speedometer2"/></svg> >
Dashboard Profil
</a> </a>
</li> </li>
<li> </ul>
<a href="#" class="nav-link text-white"> <hr />
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#table"/></svg> </div>
Orders </main>
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#grid"/></svg>
Products
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#people-circle"/></svg>
Customers
</a>
</li>
</ul>
<hr>
</div>
</main>
</body> </body>
<Router {routes} />
<style> <style>
body { body {
min-height: 100vh; min-height: 100vh;
min-height: -webkit-fill-available; min-height: -webkit-fill-available;
} }
main {
height: 100vh;
height: -webkit-fill-available;
max-height: 100vh;
overflow-x: auto;
overflow-y: hidden;
}
.dropdown-toggle { outline: 0; }
main {
height: 100vh;
height: -webkit-fill-available;
max-height: 100vh;
overflow-x: auto;
overflow-y: hidden;
}
</style> </style>

View File

@@ -1,14 +1,44 @@
<script> <script>
import axios from "axios";
import { onMount } from "svelte"; import { onMount } from "svelte";
let user = {};
onMount (async() => { onMount (async() => {
const response = await fetch('http://transcendance:8080/api/v2/user'); console.log("PROFIL SVELTE");
const data = await response.json(); const {data} = await axios.get('http://transcendance:8080/api/v2/user');
console.log(data.username);
console.log(data); console.log(data);
user = data;
}); });
const profile = {
</script> </script>
<body>
<main class="form-signin w-100 m-auto">
<div class="container">
<div class="row">
<div class="col-12">
<h1>Profil</h1>
<ul>
<li>username : {user.username}</li>
</ul>
</div>
</div>
</div>
</main>
</body>
<style>
body {
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
}
.form-signin {
max-width: 330px;
padding: 15px;
}
</style>