Добавлены веб-приложение и сервер

Этот коммит содержится в:
Глеб Иваницкий 2024-08-13 23:57:26 +03:00
родитель ef9458add9
Коммит 0206480701
9 изменённых файлов: 107 добавлений и 2 удалений

Просмотреть файл

@ -15,6 +15,20 @@ config.read(
class Main:
host = config.get(
section='Main',
option='host',
fallback='localhost',
)
port = config.getint(
section='Main',
option='port',
)
title = config.get(
section='Main',
option='title',
fallback='CIT IS Bot',
)
cwd = config.get(
section='Main',
option='cwd',

19
main.py
Просмотреть файл

@ -1,7 +1,22 @@
import asyncio
import uvicorn
from bot import bot, dp
import config
from web import app
from server import Server
if __name__ == "__main__":
asyncio.run(dp.run_polling(bot))
if __name__ == '__main__':
config = uvicorn.Config(
app=app,
host=config.Main.host,
port=config.Main.port,
)
server = Server(
config=config,
)
with server.run_in_thread():
asyncio.run(dp.run_polling(bot))

29
nginx/main.conf Обычный файл
Просмотреть файл

@ -0,0 +1,29 @@
server {
listen 212.109.196.217:443 ssl;
listen [2a01:230:4:700::6969]:443 ssl;
server_name cit.csasq.ru;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/csasq.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/csasq.ru/privkey.pem;
keepalive_timeout 30;
location / {
include /opt/cit-is-bot/nginx/secure-headers.conf;
include ./conf.d/http-proxy.conf;
proxy_pass http://cit.csasq.ru;
}
location /static/ {
include /opt/cit-is-bot/nginx/secure-headers.conf;
include ./conf.d/gzip.conf;
root /opt/cit-is-bot;
expires -1;
add_header Service-Worker-Allowed /;
}
}

6
nginx/secure-headers.conf Обычный файл
Просмотреть файл

@ -0,0 +1,6 @@
add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' https://esm.run https://cdn.jsdelivr.net; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; media-src 'self' blob:; worker-src 'self' blob:";
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header Referrer-Policy "origin";
add_header X-XSS-Protection "1; mode=block; report=mailto:security@csasq.ru";

Просмотреть файл

@ -1,5 +1,8 @@
aiogram
APScheduler
fastapi
jinja2
psycopg[binary]
pydantic
redis
uvicorn

1
server/__init__.py Обычный файл
Просмотреть файл

@ -0,0 +1 @@
from .main import Server

21
server/main.py Обычный файл
Просмотреть файл

@ -0,0 +1,21 @@
import contextlib
import time
import threading
import uvicorn
class Server(uvicorn.Server):
@contextlib.contextmanager
def run_in_thread(self):
thread = threading.Thread(
target=self.run,
)
thread.start()
try:
while not self.started:
time.sleep(1e-3)
yield
finally:
self.should_exit = True
thread.join()

1
web/__init__.py Обычный файл
Просмотреть файл

@ -0,0 +1 @@
from .main import app

15
web/main.py Обычный файл
Просмотреть файл

@ -0,0 +1,15 @@
from fastapi import FastAPI
import config
app = FastAPI(
title=config.Main.title,
)
@app.get(
path='/',
)
async def _():
return ';-)'