From fcedd7534c1d7dc042297a1e24a9db57089bd8fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Y=C3=BBki=20VACHOT?= Date: Tue, 1 Feb 2022 19:38:39 +0100 Subject: [PATCH] Update: save Docker nginx Angular Node Flask --- docker-compose.yml | 50 ------------------- frontend/angular.json | 2 +- frontend/app.py | 7 --- frontend/backend/Dockerfile | 2 - frontend/backend/app.py | 9 ++++ .../backend/{ => application}/__init__.py | 3 ++ .../backend/{ => application}/responses.py | 2 + frontend/backend/{ => application}/routes.py | 18 ++----- .../backend/{ => application}/sessionJWT.py | 3 ++ frontend/{ => backend}/config.py | 5 +- frontend/conf/nginx.conf | 6 +-- frontend/docker-compose.yml | 45 +++++++++++++++++ frontend/package.json | 4 +- frontend/server.js | 13 +++++ frontend/src/environments/environment.prod.ts | 2 +- frontend/src/environments/environment.ts | 2 +- 16 files changed, 89 insertions(+), 84 deletions(-) delete mode 100644 docker-compose.yml delete mode 100644 frontend/app.py create mode 100644 frontend/backend/app.py rename frontend/backend/{ => application}/__init__.py (91%) rename frontend/backend/{ => application}/responses.py (94%) rename frontend/backend/{ => application}/routes.py (97%) rename frontend/backend/{ => application}/sessionJWT.py (93%) rename frontend/{ => backend}/config.py (81%) create mode 100644 frontend/docker-compose.yml create mode 100644 frontend/server.js diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 6e0db76..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,50 +0,0 @@ -version: '3.8' - -services: - nginx: - image: nginx:latest - volumes: - - ./frontend/conf/nginx.conf:/etc/nginx/nginx.conf - - ./frontend/logs/nginx:/etc/nginx/logs - - ./frontend/cert:/etc/nginx/cert - networks: - - net - ports: - - 80:80 - depends_on: - - server - - server: - container_name: server - build: frontend/backend - command: python -m flask run - ports: - - "4200:4200" - volumes: - - ./frontend/backend:/data/frontend/backend - - ./frontend/app.py:/data/frontend/app.py - - ./frontend/config.py:/data/frontend/config.py - environment: - - FLASK_APP=app.py - - FLASK_ENV=production - - FLASK_DEBUG=1 - - FLASK_RUN_PORT=4200 - - PYTHONUNBUFFERED=1 - networks: - - net - depends_on: - - frontend - - frontend: - container_name: frontend - build: frontend - command: npm run build - volumes: - - ./frontend/src:/data/frontend - - ./frontend/node_modules:/data/frontend/node_modules - environment: - - NODE_ENV=production - -networks: - net: - driver: bridge diff --git a/frontend/angular.json b/frontend/angular.json index 9877372..c961521 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -20,7 +20,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "backend/dist/", + "outputPath": "dist/frontend", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", diff --git a/frontend/app.py b/frontend/app.py deleted file mode 100644 index 3f85513..0000000 --- a/frontend/app.py +++ /dev/null @@ -1,7 +0,0 @@ -from backend import create_app -import os - -app = create_app(os.environ.get('FLASK_ENV')) - -if __name__ == "__main__": - app.run(host='0.0.0.0', DEBUG=True) diff --git a/frontend/backend/Dockerfile b/frontend/backend/Dockerfile index 041b46d..0b0cc90 100644 --- a/frontend/backend/Dockerfile +++ b/frontend/backend/Dockerfile @@ -1,7 +1,5 @@ FROM python:latest -WORKDIR /data/frontend/backend COPY requirements.txt requirements.txt RUN pip install --upgrade pip RUN pip install -r requirements.txt COPY . . -WORKDIR /data/frontend diff --git a/frontend/backend/app.py b/frontend/backend/app.py new file mode 100644 index 0000000..1f5e483 --- /dev/null +++ b/frontend/backend/app.py @@ -0,0 +1,9 @@ +print("Import backend") +from application import create_app +print("Import os") +import os + +app = create_app(os.environ.get('FLASK_ENV')) + +if __name__ == "__main__": + app.run(host='0.0.0.0', DEBUG=True) diff --git a/frontend/backend/__init__.py b/frontend/backend/application/__init__.py similarity index 91% rename from frontend/backend/__init__.py rename to frontend/backend/application/__init__.py index 85e3463..ef08a90 100644 --- a/frontend/backend/__init__.py +++ b/frontend/backend/application/__init__.py @@ -1,8 +1,11 @@ +print("Import Flask") from flask import Flask +print("Import Flask-Cors") from flask_cors import CORS def create_app(flask_env='development'): + print("create app") app = Flask(__name__, instance_relative_config=False, static_url_path='') origin = app.config.get('ALLOW_ORIGIN') if origin is None: diff --git a/frontend/backend/responses.py b/frontend/backend/application/responses.py similarity index 94% rename from frontend/backend/responses.py rename to frontend/backend/application/responses.py index 03e11a6..32453c8 100644 --- a/frontend/backend/responses.py +++ b/frontend/backend/application/responses.py @@ -1,4 +1,6 @@ +print("Import responses Flask") from flask import current_app as app +print("Import Json") import json diff --git a/frontend/backend/routes.py b/frontend/backend/application/routes.py similarity index 97% rename from frontend/backend/routes.py rename to frontend/backend/application/routes.py index cba8040..b510218 100644 --- a/frontend/backend/routes.py +++ b/frontend/backend/application/routes.py @@ -1,5 +1,8 @@ +print("Import Flask") from flask import request, Blueprint, send_from_directory, current_app as app +print("Import Requests") import requests +print("Import werkzeug") from werkzeug.exceptions import HTTPException from .responses import send_message, send_error from .sessionJWT import create_auth_token, check_auth_token @@ -33,21 +36,6 @@ def handle_exception(e): return send_error(e.code, e.name) -@bp.route('/', methods=['GET']) -def root(): - return send_from_directory("dist", "index.html") - - -@bp.route('/frontend/backend/dist/', methods=['GET']) -def static(path): - return send_from_directory("dist", path) - - -@bp.route('/assets/', methods=['GET']) -def assets(path): - return send_from_directory("dist/assets", path) - - # Login @bp.route('/api/login', methods=['POST']) def login(): diff --git a/frontend/backend/sessionJWT.py b/frontend/backend/application/sessionJWT.py similarity index 93% rename from frontend/backend/sessionJWT.py rename to frontend/backend/application/sessionJWT.py index ef228fb..2722453 100644 --- a/frontend/backend/sessionJWT.py +++ b/frontend/backend/application/sessionJWT.py @@ -1,5 +1,8 @@ +print("Import datetime") from datetime import datetime, timedelta +print("Import sessionJWT Flask") from flask import current_app as app +print("Import jwt") import jwt diff --git a/frontend/config.py b/frontend/backend/config.py similarity index 81% rename from frontend/config.py rename to frontend/backend/config.py index c689319..3242208 100644 --- a/frontend/config.py +++ b/frontend/backend/config.py @@ -1,3 +1,4 @@ +print("Import os") import os basedir = os.path.abspath(os.path.dirname(__file__)) @@ -10,9 +11,9 @@ class Config(object): FLASK_APP = os.environ.get('FLASK_APP', None) FLASK_ENV = os.environ.get('FLASK_ENV', None) - FLASK_RUN_PORT = os.environ.get('FLASK_RUN_PORT', 4200) + FLASK_RUN_PORT = os.environ.get('FLASK_RUN_PORT', 5000) - API_URL = os.environ.get('API_URL', 'http://127.0.0.1:5000/api/') + API_URL = os.environ.get('API_URL', 'http://127.0.0.1:5001/api/') SECRET_KEY = os.environ.get('SECRET_KEY', 'default_secret_key') ALLOW_ORIGIN = os.environ.get('ALLOW_ORIGIN', None) diff --git a/frontend/conf/nginx.conf b/frontend/conf/nginx.conf index 315d874..3e7fc19 100644 --- a/frontend/conf/nginx.conf +++ b/frontend/conf/nginx.conf @@ -17,8 +17,8 @@ http { proxy_read_timeout 90; proxy_buffers 32 4k; - upstream server { - server server:4200; + upstream frontend { + server frontend:4200; } @@ -28,7 +28,7 @@ http { access_log logs/access.log; location / { - proxy_pass http://server; + proxy_pass http://frontend; } } diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml new file mode 100644 index 0000000..b5ffa7c --- /dev/null +++ b/frontend/docker-compose.yml @@ -0,0 +1,45 @@ +version: '3.8' + +services: + nginx: + image: nginx:latest + volumes: + - ./conf/nginx.conf:/etc/nginx/nginx.conf + - ./logs/nginx:/etc/nginx/logs + - ./cert:/etc/nginx/cert + networks: + - net + ports: + - 80:80 + depends_on: + - frontend + + flask-frontend: + container_name: flask-frontend + build: backend + command: python -m flask run + volumes: + - ./backend:/data/backend + environment: + - FLASK_APP=app.py + - FLASK_ENV=development + - FLASK_DEBUG=0 + - FLASK_RUN_PORT=5000 + depends_on: + - frontend + + frontend: + container_name: frontend + build: . + command: npm start + volumes: + - ./src:/data/frontend + - ./node_modules:/data/frontend/node_modules + environment: + - NODE_ENV=production + networks: + - net + +networks: + net: + driver: bridge diff --git a/frontend/package.json b/frontend/package.json index b347ace..2f177c9 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng build --build-optimizer --baseHref=frontend/backend/dist/ && cd .. && python -m flask run", - "build": "ng build --build-optimizer --baseHref=frontend/backend/dist/", + "start": "ng build && node server.js", + "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test" }, diff --git a/frontend/server.js b/frontend/server.js new file mode 100644 index 0000000..7398651 --- /dev/null +++ b/frontend/server.js @@ -0,0 +1,13 @@ +const path = require('path'); +const express = require('express'); +const app = express(); +const port = process.env.PORT || 4200; + +app.use(express.static(__dirname + '/dist/frontend')); +app.get('/*', function(req,res) { + res.sendFile(path.join(__dirname+ '/dist/frontend/index.html')); +}); + +app.listen(port, '0.0.0.0',() => { + console.log (`listening on port ${port}`); +}); diff --git a/frontend/src/environments/environment.prod.ts b/frontend/src/environments/environment.prod.ts index dc660af..b5bca68 100644 --- a/frontend/src/environments/environment.prod.ts +++ b/frontend/src/environments/environment.prod.ts @@ -1,4 +1,4 @@ export const environment = { production: true, - debutUrl: 'http://127.0.0.1:4200/api/' + debutUrl: 'http://127.0.0.1:5000/api/' }; diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index ab9ef5a..0dfd866 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -5,7 +5,7 @@ export const environment = { production: false, - debutUrl: 'http://127.0.0.1:4200/api/' + debutUrl: 'http://127.0.0.1:5000/api/' }; /*