From 67e5014d787ea697fd49bbcef8d38b02ef367642 Mon Sep 17 00:00:00 2001 From: DomySh Date: Sun, 12 Jun 2022 20:02:05 +0200 Subject: [PATCH] Docker: single container compose --- .gitignore | 4 +- docker-compose.yml | 12 +- {backend => firewall}/.dockerignore | 0 {backend => firewall}/Dockerfile | 21 +- {backend => firewall}/README.md | 0 {backend => firewall}/app.py | 266 +----------------- {backend => firewall}/c_back/proxy | Bin {backend => firewall}/c_back/proxy.cpp | 0 {backend => firewall}/c_back/proxy_wrap.py | 0 {backend => firewall}/config/nginx.conf | 7 +- {backend => firewall}/config/supervisord.conf | 0 {frontend => firewall/frontend}/.dockerignore | 0 {frontend => firewall/frontend}/.gitignore | 0 {frontend => firewall/frontend}/README.md | 0 .../frontend}/package-lock.json | 0 {frontend => firewall/frontend}/package.json | 0 .../frontend}/public/favicon.ico | Bin .../frontend}/public/index.html | 0 .../frontend}/public/logo192.png | Bin .../frontend}/public/logo512.png | Bin .../frontend}/public/manifest.json | 0 .../frontend}/public/robots.txt | 0 {frontend => firewall/frontend}/src/App.tsx | 0 .../frontend}/src/_vars.scss | 0 .../frontend}/src/components/AddNewRegex.tsx | 0 .../src/components/AddNewService.tsx | 0 .../src/components/FilterTypeSelector.tsx | 0 .../src/components/Footer/Footer.module.scss | 0 .../frontend}/src/components/Footer/index.tsx | 0 .../src/components/Header/Header.module.scss | 0 .../frontend}/src/components/Header/index.tsx | 0 .../frontend}/src/components/MainLayout.tsx | 0 .../RegexView/RegexView.module.scss | 0 .../src/components/RegexView/index.tsx | 0 .../ServiceRow/ServiceRow.module.scss | 0 .../src/components/ServiceRow/index.tsx | 0 .../frontend}/src/components/YesNoModal.tsx | 0 .../frontend}/src/index.scss | 0 {frontend => firewall/frontend}/src/index.tsx | 0 .../frontend}/src/js/models.ts | 0 .../frontend}/src/js/utils.tsx | 0 .../frontend}/src/pages/HomePage.tsx | 0 .../frontend}/src/pages/ServiceDetails.tsx | 0 .../frontend}/src/react-app-env.d.ts | 0 {frontend => firewall/frontend}/tsconfig.json | 0 {backend => firewall}/requirements.txt | 0 frontend/Dockerfile | 14 - 47 files changed, 32 insertions(+), 292 deletions(-) rename {backend => firewall}/.dockerignore (100%) rename {backend => firewall}/Dockerfile (58%) rename {backend => firewall}/README.md (100%) rename {backend => firewall}/app.py (50%) rename {backend => firewall}/c_back/proxy (100%) rename {backend => firewall}/c_back/proxy.cpp (100%) rename {backend => firewall}/c_back/proxy_wrap.py (100%) rename {backend => firewall}/config/nginx.conf (70%) rename {backend => firewall}/config/supervisord.conf (100%) rename {frontend => firewall/frontend}/.dockerignore (100%) rename {frontend => firewall/frontend}/.gitignore (100%) rename {frontend => firewall/frontend}/README.md (100%) rename {frontend => firewall/frontend}/package-lock.json (100%) rename {frontend => firewall/frontend}/package.json (100%) rename {frontend => firewall/frontend}/public/favicon.ico (100%) rename {frontend => firewall/frontend}/public/index.html (100%) rename {frontend => firewall/frontend}/public/logo192.png (100%) rename {frontend => firewall/frontend}/public/logo512.png (100%) rename {frontend => firewall/frontend}/public/manifest.json (100%) rename {frontend => firewall/frontend}/public/robots.txt (100%) rename {frontend => firewall/frontend}/src/App.tsx (100%) rename {frontend => firewall/frontend}/src/_vars.scss (100%) rename {frontend => firewall/frontend}/src/components/AddNewRegex.tsx (100%) rename {frontend => firewall/frontend}/src/components/AddNewService.tsx (100%) rename {frontend => firewall/frontend}/src/components/FilterTypeSelector.tsx (100%) rename {frontend => firewall/frontend}/src/components/Footer/Footer.module.scss (100%) rename {frontend => firewall/frontend}/src/components/Footer/index.tsx (100%) rename {frontend => firewall/frontend}/src/components/Header/Header.module.scss (100%) rename {frontend => firewall/frontend}/src/components/Header/index.tsx (100%) rename {frontend => firewall/frontend}/src/components/MainLayout.tsx (100%) rename {frontend => firewall/frontend}/src/components/RegexView/RegexView.module.scss (100%) rename {frontend => firewall/frontend}/src/components/RegexView/index.tsx (100%) rename {frontend => firewall/frontend}/src/components/ServiceRow/ServiceRow.module.scss (100%) rename {frontend => firewall/frontend}/src/components/ServiceRow/index.tsx (100%) rename {frontend => firewall/frontend}/src/components/YesNoModal.tsx (100%) rename {frontend => firewall/frontend}/src/index.scss (100%) rename {frontend => firewall/frontend}/src/index.tsx (100%) rename {frontend => firewall/frontend}/src/js/models.ts (100%) rename {frontend => firewall/frontend}/src/js/utils.tsx (100%) rename {frontend => firewall/frontend}/src/pages/HomePage.tsx (100%) rename {frontend => firewall/frontend}/src/pages/ServiceDetails.tsx (100%) rename {frontend => firewall/frontend}/src/react-app-env.d.ts (100%) rename {frontend => firewall/frontend}/tsconfig.json (100%) rename {backend => firewall}/requirements.txt (100%) delete mode 100755 frontend/Dockerfile diff --git a/.gitignore b/.gitignore index e5a403b..3d37166 100755 --- a/.gitignore +++ b/.gitignore @@ -7,10 +7,10 @@ **/.pnp.js # testing -/frontend/coverage +/firewall/frontend/coverage # production -/frontend/build +/firewall/frontend/build # misc **/.DS_Store diff --git a/docker-compose.yml b/docker-compose.yml index c42cddd..e2d48c1 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,9 @@ version: '3.9' services: - frontend: + firewall: restart: unless-stopped - build: frontend - backend: - restart: unless-stopped - build: backend - ports: - - 80:80 \ No newline at end of file + build: firewall + network_mode: "host" + environment: + - NGINX_PORT=8080 \ No newline at end of file diff --git a/backend/.dockerignore b/firewall/.dockerignore similarity index 100% rename from backend/.dockerignore rename to firewall/.dockerignore diff --git a/backend/Dockerfile b/firewall/Dockerfile similarity index 58% rename from backend/Dockerfile rename to firewall/Dockerfile index 219446a..8314d31 100755 --- a/backend/Dockerfile +++ b/firewall/Dockerfile @@ -1,3 +1,17 @@ + +#Frontend build +FROM node:16-alpine AS frontend +RUN apk add --update npm +RUN npm install -g npm@latest +RUN mkdir /app +WORKDIR /app +ADD ./frontend/package.json . +ADD ./frontend/package-lock.json . +RUN npm install +COPY ./frontend/ . +RUN npm run build + +#Building main conteiner FROM python:3-buster RUN apt-get update && apt-get -y install supervisor build-essential libboost-dev nginx @@ -12,8 +26,13 @@ COPY . /execute/ COPY ./config/nginx.conf /etc/nginx/nginx.conf COPY ./config/supervisord.conf /etc/supervisor/supervisord.conf +#Copy react app in the main container +COPY --from=frontend /app/build/ ./frontend/ + RUN usermod -a -G root nobody RUN chown -R nobody:root /execute && \ chmod -R 660 /execute && chmod -R u+X /execute -ENTRYPOINT ["/usr/bin/supervisord","-c","/etc/supervisor/supervisord.conf"] \ No newline at end of file +ENTRYPOINT ["/usr/bin/supervisord","-c","/etc/supervisor/supervisord.conf"] + + diff --git a/backend/README.md b/firewall/README.md similarity index 100% rename from backend/README.md rename to firewall/README.md diff --git a/backend/app.py b/firewall/app.py similarity index 50% rename from backend/app.py rename to firewall/app.py index b9dd531..714c0d9 100644 --- a/backend/app.py +++ b/firewall/app.py @@ -1,44 +1,7 @@ -import sqlite3 +import sqlite3, random, string, subprocess from flask import Flask, jsonify, request -import random -class SQLite(): - def __init__(self, db_name) -> None: - self.conn = None - self.cur = None - self.db_name = db_name - - def connect(self) -> None: - try: - self.conn = sqlite3.connect(self.db_name + '.db', check_same_thread = False) - except: - with open(self.db_name + '.db', 'x') as f: - pass - - self.conn = sqlite3.connect(self.db_name + '.db', check_same_thread = False) - - self.cur = self.conn.cursor() - - def disconnect(self) -> None: - self.conn.close() - - def check_integrity(self, tables = {}) -> None: - for t in tables: - self.cur.execute(''' - SELECT name FROM sqlite_master WHERE type='table' AND name=?; - ''', (t,)) - - if len(self.cur.fetchall()) == 0: - self.cur.execute(f'CREATE TABLE main.{t}({"".join([(c + " " + tables[t][c] + ", ") for c in tables[t]])[:-2]});') - - def query(self, query, values = ()): - self.cur.execute(query, values)import sqlite3 -from flask import Flask, jsonify, request -import random -import string -import subprocess - class SQLite(): def __init__(self, db_name) -> None: self.conn = None @@ -303,231 +266,4 @@ if __name__ == '__main__': #uwsgi subprocess.run(["uwsgi","--http","127.0.0.1:8080","--master","--module","app:app"]) - return self.cur.fetchall() - - -db = SQLite('firegex') -db.connect() -app = Flask(__name__) - -@app.route('/api/general-stats') -def get_general_stats(): - n_services = db.query(''' - SELECT COUNT (*) FROM services; - ''')[0][0] - n_regexes = db.query(''' - SELECT COUNT (*) FROM regexes; - ''')[0][0] - n_packets = db.query(''' - SELECT SUM(blocked_packets) FROM regexes; - ''')[0][0] - - res = { - 'services': n_services, - 'regexes': n_regexes, - 'closed': n_packets if n_packets else 0 - } - - return res - - -@app.route('/api/services') -def get_services(): - res = [] - for i in db.query('SELECT * FROM services;'): - n_regex = db.query('SELECT COUNT (*) FROM regexes WHERE service_id = ?;', (i[1],))[0][0] - n_pacchetti = db.query('SELECT SUM(blocked_packets) FROM regexes WHERE service_id = ?;', (i[1],))[0][0] - - res.append({ - 'id': i[1], - 'status': i[0], - 'public_port': i[3], - 'internal_port': i[2], - 'n_regex': n_regex, - 'n_packets': n_pacchetti if n_pacchetti else 0, - }) - - return jsonify(res) - - -@app.route('/api/service/') -def get_service(serv): - q = db.query('SELECT * FROM services WHERE service_id = ?;', (serv,)) - - res = {} - if len(q) != 0: - n_regex = db.query('SELECT COUNT (*) FROM regexes WHERE service_id = ?;', (serv,))[0][0] - n_pacchetti = db.query('SELECT SUM(blocked_packets) FROM regexes WHERE service_id = ?;', (serv,))[0][0] - - res = { - 'id': q[0][1], - 'status': q[0][0], - 'public_port': q[0][3], - 'internal_port': q[0][2], - 'n_packets': n_pacchetti if n_pacchetti else 0, - 'n_regex': n_regex - } - - return res - - -@app.route('/api/service//stop') -def get_service_stop(serv): - db.query(''' - UPDATE services SET status = 'stop' WHERE service_id = ?; - ''', (serv,)) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/service//start') -def get_service_start(serv): - db.query(''' - UPDATE services SET status = 'active' WHERE service_id = ?; - ''', (serv,)) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/service//delete') -def get_service_delete(serv): - db.query(''' - DELETE FROM services WHERE service_id = ?; - ''', (serv,)) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/service//terminate') -def get_service_termite(serv): - db.query(''' - UPDATE services SET status = 'stop' WHERE service_id = ?; - ''', (serv,)) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/service//regen-port') -def get_regen_port(serv): - db.query('UPDATE services SET public_port = ? WHERE service_id = ?;', (random.randint(30000, 45000), serv)) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/service//regexes') -def get_service_regexes(serv): - res = [] - for i in db.query('SELECT * FROM regexes WHERE service_id = ?;', (serv,)): - res.append({ - 'id': i[5], - 'service_id': i[2], - 'regex': i[0], - 'is_blacklist': i[3], - 'mode': i[1], - 'n_packets': i[4] - }) - - return jsonify(res) - - -@app.route('/api/regex/') -def get_regex_id(regex_id): - q = db.query('SELECT * FROM regexes WHERE regex_id = ?;', (regex_id,)) - - res = {} - if len(q) != 0: - res = { - 'id': regex_id, - 'service_id': q[0][2], - 'regex': q[0][0], - 'is_blacklist': q[0][3], - 'mode': q[0][1], - 'n_packets': q[0][4] - } - - return res - - -@app.route('/api/regex//delete') -def get_regex_delete(regex_id): - db.query('DELETE FROM regexes WHERE regex_id = ?;', (regex_id,)) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/regexes/add', methods = ['POST']) -def post_regexes_add(): - req = request.get_json(force = True) - - db.query(''' - INSERT INTO regexes (regex_id, service_id, regex, is_blacklist, mode) VALUES (?, ?, ?, ?, ?); - ''', (random.randint(1, 1 << 32), req['service_id'], req['regex'], req['is_blacklist'], req['mode'])) - - res = { - 'status': 'ok' - } - - return res - - -@app.route('/api/services/add', methods = ['POST']) -def post_services_add(): - req = request.get_json(force = True) - - db.query(''' - INSERT INTO services (service_id, internal_port, public_port, status) VALUES (?, ?, ?, ?) - ''', (req['name'], req['port'], random.randint(30000, 45000), 'stop')) - - res = { - 'status': 'ok' - } - - return res - -if __name__ == "__main__": - import subprocess - # DB init - db.check_integrity({ - 'regexes': { - 'regex': 'TEXT NOT NULL', - 'mode': 'CHAR(1)', - 'service_id': 'TEXT NOT NULL', - 'is_blacklist': 'CHAR(50) NOT NULL', - 'blocked_packets': 'INTEGER DEFAULT 0', - 'regex_id': 'INTEGER NOT NULL' - }, - 'services': { - 'status': 'CHAR(50)', - 'service_id': 'TEXT NOT NULL', - 'internal_port': 'INT NOT NULL', - 'public_port': 'INT NOT NULL', - 'name': 'TEXT NOT NULL' - } - }) - #uwsgi - subprocess.run(["uwsgi","--http","127.0.0.1:8080","--master","--module","app:app"]) diff --git a/backend/c_back/proxy b/firewall/c_back/proxy similarity index 100% rename from backend/c_back/proxy rename to firewall/c_back/proxy diff --git a/backend/c_back/proxy.cpp b/firewall/c_back/proxy.cpp similarity index 100% rename from backend/c_back/proxy.cpp rename to firewall/c_back/proxy.cpp diff --git a/backend/c_back/proxy_wrap.py b/firewall/c_back/proxy_wrap.py similarity index 100% rename from backend/c_back/proxy_wrap.py rename to firewall/c_back/proxy_wrap.py diff --git a/backend/config/nginx.conf b/firewall/config/nginx.conf similarity index 70% rename from backend/config/nginx.conf rename to firewall/config/nginx.conf index 500d8f4..d8130dd 100755 --- a/backend/config/nginx.conf +++ b/firewall/config/nginx.conf @@ -10,12 +10,13 @@ events { http{ server { - listen 80; + listen ${NGINX_PORT}; server_name _; + + root /execute/frontend/; location / { - include proxy_params; - proxy_pass http://frontend:3000/; + try_files $uri /index.html; } location /api/ { diff --git a/backend/config/supervisord.conf b/firewall/config/supervisord.conf similarity index 100% rename from backend/config/supervisord.conf rename to firewall/config/supervisord.conf diff --git a/frontend/.dockerignore b/firewall/frontend/.dockerignore similarity index 100% rename from frontend/.dockerignore rename to firewall/frontend/.dockerignore diff --git a/frontend/.gitignore b/firewall/frontend/.gitignore similarity index 100% rename from frontend/.gitignore rename to firewall/frontend/.gitignore diff --git a/frontend/README.md b/firewall/frontend/README.md similarity index 100% rename from frontend/README.md rename to firewall/frontend/README.md diff --git a/frontend/package-lock.json b/firewall/frontend/package-lock.json similarity index 100% rename from frontend/package-lock.json rename to firewall/frontend/package-lock.json diff --git a/frontend/package.json b/firewall/frontend/package.json similarity index 100% rename from frontend/package.json rename to firewall/frontend/package.json diff --git a/frontend/public/favicon.ico b/firewall/frontend/public/favicon.ico similarity index 100% rename from frontend/public/favicon.ico rename to firewall/frontend/public/favicon.ico diff --git a/frontend/public/index.html b/firewall/frontend/public/index.html similarity index 100% rename from frontend/public/index.html rename to firewall/frontend/public/index.html diff --git a/frontend/public/logo192.png b/firewall/frontend/public/logo192.png similarity index 100% rename from frontend/public/logo192.png rename to firewall/frontend/public/logo192.png diff --git a/frontend/public/logo512.png b/firewall/frontend/public/logo512.png similarity index 100% rename from frontend/public/logo512.png rename to firewall/frontend/public/logo512.png diff --git a/frontend/public/manifest.json b/firewall/frontend/public/manifest.json similarity index 100% rename from frontend/public/manifest.json rename to firewall/frontend/public/manifest.json diff --git a/frontend/public/robots.txt b/firewall/frontend/public/robots.txt similarity index 100% rename from frontend/public/robots.txt rename to firewall/frontend/public/robots.txt diff --git a/frontend/src/App.tsx b/firewall/frontend/src/App.tsx similarity index 100% rename from frontend/src/App.tsx rename to firewall/frontend/src/App.tsx diff --git a/frontend/src/_vars.scss b/firewall/frontend/src/_vars.scss similarity index 100% rename from frontend/src/_vars.scss rename to firewall/frontend/src/_vars.scss diff --git a/frontend/src/components/AddNewRegex.tsx b/firewall/frontend/src/components/AddNewRegex.tsx similarity index 100% rename from frontend/src/components/AddNewRegex.tsx rename to firewall/frontend/src/components/AddNewRegex.tsx diff --git a/frontend/src/components/AddNewService.tsx b/firewall/frontend/src/components/AddNewService.tsx similarity index 100% rename from frontend/src/components/AddNewService.tsx rename to firewall/frontend/src/components/AddNewService.tsx diff --git a/frontend/src/components/FilterTypeSelector.tsx b/firewall/frontend/src/components/FilterTypeSelector.tsx similarity index 100% rename from frontend/src/components/FilterTypeSelector.tsx rename to firewall/frontend/src/components/FilterTypeSelector.tsx diff --git a/frontend/src/components/Footer/Footer.module.scss b/firewall/frontend/src/components/Footer/Footer.module.scss similarity index 100% rename from frontend/src/components/Footer/Footer.module.scss rename to firewall/frontend/src/components/Footer/Footer.module.scss diff --git a/frontend/src/components/Footer/index.tsx b/firewall/frontend/src/components/Footer/index.tsx similarity index 100% rename from frontend/src/components/Footer/index.tsx rename to firewall/frontend/src/components/Footer/index.tsx diff --git a/frontend/src/components/Header/Header.module.scss b/firewall/frontend/src/components/Header/Header.module.scss similarity index 100% rename from frontend/src/components/Header/Header.module.scss rename to firewall/frontend/src/components/Header/Header.module.scss diff --git a/frontend/src/components/Header/index.tsx b/firewall/frontend/src/components/Header/index.tsx similarity index 100% rename from frontend/src/components/Header/index.tsx rename to firewall/frontend/src/components/Header/index.tsx diff --git a/frontend/src/components/MainLayout.tsx b/firewall/frontend/src/components/MainLayout.tsx similarity index 100% rename from frontend/src/components/MainLayout.tsx rename to firewall/frontend/src/components/MainLayout.tsx diff --git a/frontend/src/components/RegexView/RegexView.module.scss b/firewall/frontend/src/components/RegexView/RegexView.module.scss similarity index 100% rename from frontend/src/components/RegexView/RegexView.module.scss rename to firewall/frontend/src/components/RegexView/RegexView.module.scss diff --git a/frontend/src/components/RegexView/index.tsx b/firewall/frontend/src/components/RegexView/index.tsx similarity index 100% rename from frontend/src/components/RegexView/index.tsx rename to firewall/frontend/src/components/RegexView/index.tsx diff --git a/frontend/src/components/ServiceRow/ServiceRow.module.scss b/firewall/frontend/src/components/ServiceRow/ServiceRow.module.scss similarity index 100% rename from frontend/src/components/ServiceRow/ServiceRow.module.scss rename to firewall/frontend/src/components/ServiceRow/ServiceRow.module.scss diff --git a/frontend/src/components/ServiceRow/index.tsx b/firewall/frontend/src/components/ServiceRow/index.tsx similarity index 100% rename from frontend/src/components/ServiceRow/index.tsx rename to firewall/frontend/src/components/ServiceRow/index.tsx diff --git a/frontend/src/components/YesNoModal.tsx b/firewall/frontend/src/components/YesNoModal.tsx similarity index 100% rename from frontend/src/components/YesNoModal.tsx rename to firewall/frontend/src/components/YesNoModal.tsx diff --git a/frontend/src/index.scss b/firewall/frontend/src/index.scss similarity index 100% rename from frontend/src/index.scss rename to firewall/frontend/src/index.scss diff --git a/frontend/src/index.tsx b/firewall/frontend/src/index.tsx similarity index 100% rename from frontend/src/index.tsx rename to firewall/frontend/src/index.tsx diff --git a/frontend/src/js/models.ts b/firewall/frontend/src/js/models.ts similarity index 100% rename from frontend/src/js/models.ts rename to firewall/frontend/src/js/models.ts diff --git a/frontend/src/js/utils.tsx b/firewall/frontend/src/js/utils.tsx similarity index 100% rename from frontend/src/js/utils.tsx rename to firewall/frontend/src/js/utils.tsx diff --git a/frontend/src/pages/HomePage.tsx b/firewall/frontend/src/pages/HomePage.tsx similarity index 100% rename from frontend/src/pages/HomePage.tsx rename to firewall/frontend/src/pages/HomePage.tsx diff --git a/frontend/src/pages/ServiceDetails.tsx b/firewall/frontend/src/pages/ServiceDetails.tsx similarity index 100% rename from frontend/src/pages/ServiceDetails.tsx rename to firewall/frontend/src/pages/ServiceDetails.tsx diff --git a/frontend/src/react-app-env.d.ts b/firewall/frontend/src/react-app-env.d.ts similarity index 100% rename from frontend/src/react-app-env.d.ts rename to firewall/frontend/src/react-app-env.d.ts diff --git a/frontend/tsconfig.json b/firewall/frontend/tsconfig.json similarity index 100% rename from frontend/tsconfig.json rename to firewall/frontend/tsconfig.json diff --git a/backend/requirements.txt b/firewall/requirements.txt similarity index 100% rename from backend/requirements.txt rename to firewall/requirements.txt diff --git a/frontend/Dockerfile b/frontend/Dockerfile deleted file mode 100755 index 2527933..0000000 --- a/frontend/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:16-alpine - -#React project copy -RUN apk add --update npm -RUN npm install -g npm@latest -RUN mkdir /app -WORKDIR /app -ADD package.json . -ADD package-lock.json . -RUN npm install -RUN npm install serve -g -COPY . . -RUN npm run build -ENTRYPOINT [ "serve", "-s", "build" ] \ No newline at end of file