starting backend code

This commit is contained in:
Your Name 2026-02-08 22:31:05 +01:00
parent bd52695d14
commit 29d0c42adf
18 changed files with 33 additions and 196 deletions

33
backend.py Normal file
View File

@ -0,0 +1,33 @@
import asyncio
import websockets
import aiohttp
async def proxy_handler(websocket, path):
target_url = await websocket.recv()
async with aiohttp.ClientSession() as session:
async with session.ws_connect(target_url) as target_ws:
async def forward_to_target():
async for msg in websocket:
if isinstance(msg, str):
await target_ws.send_str(msg)
else:
await target_ws.send_bytes(msg)
async def forward_to_client():
async for msg in target_ws:
if msg.type == aiohttp.WSMsgType.TEXT:
await websocket.send(msg.data)
elif msg.type == aiohttp.WSMsgType.BINARY:
await websocket.send(msg.data)
await asyncio.gather(
forward_to_target(),
forward_to_client()
)
async def main():
async with websockets.serve(proxy_handler, "localhost", 8765):
await asyncio.Future()
asyncio.run(main())

View File

@ -1,68 +0,0 @@
services:
minishell:
container_name: "minishell"
restart: always
build:
context: ./minishell
dockerfile: Dockerfile
cap_drop:
- ALL
cap_add:
- SETGID
- FSETID
- SETUID
devices:
- /dev/kvm
# Prevents gaining new privileges
security_opt:
- no-new-privileges
networks:
website_net:
nginx-site:
container_name: "nginx-site"
image: nginx
restart: always
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/certs:/certs
- ./nginx/site:/var/www/html
- novnc:/opt/noVNC/
networks:
website_net:
ports:
- 5080:80
- 5443:443
minirt:
container_name: "minirt-site"
restart: always
build: ./miniRT
environment:
- DISPLAY=:1
networks:
website_net:
volumes:
- novnc:/opt/noVNC/
volumes:
novnc:
networks:
website_net:
external: true
driver: bridge

View File

@ -1,4 +0,0 @@
#!/bin/bash
make fclean -C minishell
make fclean -C miniRT

View File

@ -1,10 +0,0 @@
#!/bin/bash
set -e
# Compile the minishell project
make -C minishell
make -C miniRT
# start the containers
docker compose up --build

View File

@ -1,4 +0,0 @@
# Website Creation sources
# Compile the kernel
- https://itsfoss.com/compile-linux-kernel/

View File

@ -1,110 +0,0 @@
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
# Include MIME types
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Rate limiting with connection limits for noVNC
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
# Upstream for miniRT with connection limiting
upstream minirt_backend {
server minirt:6080 max_conns=2; # Limit to 2 concurrent connections
}
server {
listen 80;
listen [::]:80;
charset utf-8;
server_name victorvobis.org www.victorvobis.org;
root /var/www/html;
limit_conn conn_limit_per_ip 2;
location / {
index index.html index.htm;
}
location /minishell/vnc {
proxy_pass http://minishell:8006/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /minirt/password {
add_header Content-Type application/json;
try_files /json/password.json =404;
}
location /minirt/vnc {
index vnc.html;
try_files $uri $uri/ /vnc.html;
# Ensure proper MIME types for JavaScript modules
location ~* \.js$ {
add_header Content-Type "application/javascript" always;
expires 1h;
}
location ~* \.css$ {
add_header Content-Type "text/css" always;
expires 1h;
}
location ~* \.(png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1d;
add_header Cache-Control "public, immutable";
}
}
location /vnc {
alias /opt/noVNC/;
index vnc.html;
try_files $uri $uri/ /vnc.html;
# Ensure proper MIME types for JavaScript modules
location ~* \.js$ {
add_header Content-Type "application/javascript" always;
expires 1h;
}
location ~* \.css$ {
add_header Content-Type "text/css" always;
expires 1h;
}
location ~* \.(png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1d;
add_header Cache-Control "public, immutable";
}
}
# Proxy ONLY WebSocket connections to the minirt container
location /websockify {
proxy_pass http://minirt_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_connect_timeout 60s;
proxy_buffering off;
}
}
}