Secret key multi-worker generating bugfix, volume instead of dir in mariadb, upd deps

This commit is contained in:
DarkCat09 2023-03-10 17:17:23 +04:00
parent 4509d02425
commit edbf0233ba
6 changed files with 64 additions and 16 deletions

6
.env
View file

@ -1,6 +1,12 @@
APP_HOST=0.0.0.0 APP_HOST=0.0.0.0
APP_PORT=8000 APP_PORT=8000
# Generate a strong secret key
# On Linux: openssl rand -hex 32
# If this variable is not set,
# the key is generated automatically
#SECRET_KEY=secret
DB_HOST=${REPO_NAME_SNAKE}_db DB_HOST=${REPO_NAME_SNAKE}_db
DB_PORT=3306 DB_PORT=3306
DB_USER=${REPO_NAME_SNAKE} DB_USER=${REPO_NAME_SNAKE}

View file

@ -7,26 +7,47 @@ from pydantic import BaseSettings
# Directories # Directories
file_dir = Path(__file__).parent file_dir = Path(__file__).parent
templates_dir = str( templates_dir = str(file_dir.parent / 'templates')
file_dir.parent / 'templates' static_dir = str(file_dir.parent / 'static')
)
static_dir = str(
file_dir.parent / 'static'
)
# Main configuration # Main configuration
class Settings(BaseSettings): class Settings(BaseSettings):
debug: bool = False debug: bool = False
secret_key: str = secrets.token_hex(32) secret_key: str = 'secret'
app_host: str = '127.0.0.1' app_host: str = '127.0.0.1'
app_port: int = 8000 app_port: int = 8000
# Instantiate Settings class
settings = Settings() settings = Settings()
# Jinja templates handler # Jinja templates handler
templates = Jinja2Templates( templates = Jinja2Templates(
directory=templates_dir, directory=templates_dir,
) )
def secret_key_check() -> None:
"""Generates a secret key automatically
if the env var `secret_key` is not set
or contains text `secret`"""
if settings.secret_key == 'secret':
key_file = Path('/tmp/secret_key')
if key_file.exists():
with key_file.open('rt') as f:
secret_key = f.read()
else:
secret_key = secrets.token_hex(32)
with key_file.open('wt') as f:
f.write(secret_key)
settings.secret_key = secret_key
# Call the function
secret_key_check()

View file

@ -20,10 +20,14 @@ services:
container_name: ${REPO_NAME_SNAKE}_db container_name: ${REPO_NAME_SNAKE}_db
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- "./database:/var/lib/mysql" #- "./database:/var/lib/mysql"
- "db_data:/var/lib/mysql"
env_file: .env_db env_file: .env_db
healthcheck: healthcheck:
test: sh -c "mysqladmin ping -u$$$$MYSQL_USER -p$$$$MYSQL_PASSWORD" test: sh -c "mysqladmin ping -u$$$$MYSQL_USER -p$$$$MYSQL_PASSWORD"
interval: 1s interval: 1s
timeout: 3s timeout: 3s
retries: 20 retries: 20
volumes:
db_data:

View file

@ -1,4 +0,0 @@
[mypy]
show_error_codes = True
ignore_missing_imports = True
warn_redundant_casts = True

21
pyproject.toml Normal file
View file

@ -0,0 +1,21 @@
[project]
name = "app"
version = "1.0.0"
dependencies = [
"fastapi",
"uvicorn[standard]",
"jinja2",
"starlette-wtf",
"sqlalchemy",
"sqlalchemy-utils",
"mysqlclient",
"python-dotenv",
]
[tool.setuptools]
packages = []
[tool.mypy]
show_error_codes = true
ignore_missing_imports = true
warn_redundant_casts = true

View file

@ -1,8 +1,8 @@
fastapi~=0.93.0 fastapi~=0.93.0
starlette~=0.25.0 starlette
pydantic~=1.10.6 pydantic
uvicorn[standard]~=0.20.0 uvicorn[standard]~=0.21.0
gunicorn~=20.1.0 gunicorn~=20.1.0
jinja2~=3.1.2 jinja2~=3.1.2