Bissl docker kram zum laufen gebracht #70-1_docker_and_build #76

Merged
edraft merged 7 commits from #70-1_docker_and_build into #70 2022-10-20 20:49:40 +02:00
32 changed files with 498 additions and 77 deletions

View File

@ -12,13 +12,15 @@
"database": "src/modules/database/database.json",
"moderator": "src/modules/moderator/moderator.json",
"permission": "src/modules/permission/permission.json",
"bot-api": "src/bot_api/bot-api.json"
"bot-api": "src/bot_api/bot-api.json",
"post-build": "tools/post_build/post-build.json"
},
"Scripts": {
"post-build": "cpl run post-build",
"prod": "export KDB_ENVIRONMENT=production; export KDB_NAME=KDB-Prod; cpl start;",
"stage": "export KDB_ENVIRONMENT=staging; export KDB_NAME=KDB-Stage; cpl start;",
"dev": "export KDB_ENVIRONMENT=development; export KDB_NAME=KDB-Dev; cpl start;",
"build-docker": "cpl b; docker-compose down; docker build -t kdb .",
"build-docker": "cpl b; docker-compose down; docker build -t kdb:kdb .",
"compose": "docker-compose up -d",
"docker": "cpl build-docker; cpl compose;"
}

View File

@ -2,13 +2,12 @@ version: "3.9"
volumes:
kdb_prod_1:
kdb_staging_1:
kdb_web_prod_1:
kdb_db_1:
kdb_db_2:
services:
kdb_prod_1:
image: kdb/kdb:0.2.1
image: kdb/kdb:0.3
container_name: kdb_prod_1
depends_on:
- kdb_db_1
@ -20,18 +19,16 @@ services:
KDB_PREFIX: "!k "
restart: 'no'
kdb_staging_1:
image: kdb/kdb:0.2.1
container_name: kdb_staging_1
kdb_web_prod_1:
image: kdb/kdb-web:0.3
container_name: kdb_web_prod_1
depends_on:
- kdb_db_1
- kdb_prod_1
volumes:
- kdb_staging_1:/app
environment:
KDB_ENVIRONMENT: "staging"
KDB_TOKEN: ""
KDB_PREFIX: "!kt "
- kdb_web_prod_1:/app
restart: 'no'
ports:
- '8042:80'
kdb_db_1:
image: mysql:latest
@ -46,19 +43,4 @@ services:
ports:
- "3307:3306"
volumes:
- kdb_db_1:/var/lib/mysql
kdb_db_2:
image: mysql:latest
container_name: kdb_db_2
command: mysqld --default-authentication-plugin=mysql_native_password
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "kd_kdb"
MYSQL_USER: "kd_kdb"
MYSQL_PASSWORD: "kd_kdb"
MYSQL_DATABASE: "kd_kdb"
ports:
- "3308:3306"
volumes:
- kdb_db_2:/var/lib/mysql
- kdb_db_1:/var/lib/mysql

View File

@ -4,10 +4,7 @@ FROM python:3.10.7-bullseye
WORKDIR /app
COPY ./dist/bot/build/ .
RUN pip install cpl-core --extra-index-url https://pip.sh-edraft.de
RUN pip install cpl-discord --extra-index-url https://pip.sh-edraft.de
RUN pip install cpl-query --extra-index-url https://pip.sh-edraft.de
RUN pip install cpl-translation --extra-index-url https://pip.sh-edraft.de
RUN pip install -r requirements.txt --extra-index-url https://pip.sh-edraft.de
RUN apt-get update -y
RUN apt-get install nano -y

View File

@ -33,9 +33,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "bot-api",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
bot Keksdose bot
~~~~~~~~~~~~~~~~~~~
Discord bot for the Keksdose discord Server
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
"""
__title__ = 'bot_api.controller.discord'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '0.3.0'
from collections import namedtuple
# imports:
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='0', minor='3', micro='0')

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
bot Keksdose bot
~~~~~~~~~~~~~~~~~~~
Discord bot for the Keksdose discord Server
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
"""
__title__ = 'bot_api.event'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '0.3.0'
from collections import namedtuple
# imports:
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='0', minor='3', micro='0')

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
bot Keksdose bot
~~~~~~~~~~~~~~~~~~~
Discord bot for the Keksdose discord Server
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
"""
__title__ = 'bot_api.filter.discord'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '0.3.0'
from collections import namedtuple
# imports:
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='0', minor='3', micro='0')

View File

@ -1 +1,26 @@
# -*- coding: utf-8 -*-
"""
bot Keksdose bot
~~~~~~~~~~~~~~~~~~~
Discord bot for the Keksdose discord Server
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
"""
__title__ = 'bot_api.mail'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '0.3.0'
from collections import namedtuple
# imports
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='0', minor='3', micro='0')

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
bot Keksdose bot
~~~~~~~~~~~~~~~~~~~
Discord bot for the Keksdose discord Server
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
"""
__title__ = 'bot_api.model.discord'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '0.3.0'
from collections import namedtuple
# imports:
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='0', minor='3', micro='0')

View File

@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "admin",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "auto-role",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "base",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "boot-log",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "moderator",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -2,7 +2,7 @@
"ProjectSettings": {
"Name": "permission",
"Version": {
"Major": "0",
"Major": "1",
"Minor": "0",
"Micro": "0"
},
@ -22,9 +22,7 @@
"cpl-cli==2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {
"linux": ""
},
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
post-build KDB - post build
~~~~~~~~~~~~~~~~~~~
Tool project to clean build project files
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
"""
__title__ = 'post_build'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '1.0.0'
from collections import namedtuple
# imports:
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='1', minor='0', micro='0')
edraft marked this conversation as resolved Outdated

Gibt es hier einen Grund warum alles leer und auf 0 steht?

Gibt es hier einen Grund warum alles leer und auf 0 steht?

View File

@ -0,0 +1,26 @@
from cpl_core.application import ApplicationABC
from cpl_core.configuration import ConfigurationABC
from cpl_core.console import Console
from cpl_core.dependency_injection import ServiceProviderABC
from post_build.service.dependencies import Dependencies
from post_build.service.remove_config import RemoveConfig
class Application(ApplicationABC):
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
ApplicationABC.__init__(self, config, services)
self._remove_config: RemoveConfig = services.get_service(RemoveConfig)
self._deps: Dependencies = services.get_service(Dependencies)
def configure(self):
pass
def main(self):
Console.write_line('KDB Post-Build:')
Console.spinner(f'Removing unnecessary configs', self._remove_config.remove)
Console.spinner(f'Creating requirements file for pip', self._deps.create)

View File

@ -0,0 +1,30 @@
{
"TimeFormatSettings": {
"DateFormat": "%Y-%m-%d",
"TimeFormat": "%H:%M:%S",
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
},
"LoggingSettings": {
"Path": "logs/",
"Filename": "log_$start_time.log",
"ConsoleLogLevel": "ERROR",
"FileLogLevel": "WARN"
},
"PostBuild": {
"KeepConfigs": [
"appsettings.json",
"appsettings.staging.json",
"appsettings.production.json",
"apisettings.json",
"apisettings.staging.json",
"apisettings.production.json"
],
"ConfigPaths": [
"bot/config/",
"bot_api/config/"
]
}
}

View File

@ -0,0 +1,14 @@
from cpl_core.application import ApplicationBuilder
from post_build.application import Application
from post_build.startup import Startup
def main():
app_builder = ApplicationBuilder(Application)
app_builder.use_startup(Startup)
app_builder.build().run()
if __name__ == '__main__':
main()

View File

@ -0,0 +1,44 @@
{
"ProjectSettings": {
"Name": "post-build",
"Version": {
"Major": "1",
"Minor": "0",
"Micro": "0"
edraft marked this conversation as resolved
Review

Major, Minor und Micro haben noch einen 0-Wert. Ist das gewollt?

Major, Minor und Micro haben noch einen 0-Wert. Ist das gewollt?
},
"Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de",
"Description": "KDB - post build",
"LongDescription": "Tool project to clean build project files",
"URL": "https://www.sh-edraft.de",
"CopyrightDate": "2022",
"CopyrightName": "sh-edraft.de",
"LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.",
edraft marked this conversation as resolved Outdated

Author, AuthorEmail, Description, LongDescription, URL, CopyrightDate, CopyrightName, LicenseName und LicenseDescription sind leer. Ist das gewollt?

Author, AuthorEmail, Description, LongDescription, URL, CopyrightDate, CopyrightName, LicenseName und LicenseDescription sind leer. Ist das gewollt?
"Dependencies": [
"cpl-core>=2022.10.0.post7"
],
"DevDependencies": [
"cpl-cli>=2022.10.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {},
"Classifiers": []
},
"BuildSettings": {
"ProjectType": "console",
"SourcePath": "",
"OutputPath": "../../dist",
"Main": "post_build.main",
"EntryPoint": "post-build",
"IncludePackageData": false,
"Included": [],
"Excluded": [
"*/__pycache__",
"*/logs",
"*/tests"
],
"PackageData": {},
"ProjectReferences": []
}
}

View File

@ -0,0 +1,29 @@
import traceback
from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
from cpl_core.console import Console
class PostBuildSettings(ConfigurationModelABC):
def __init__(self):
ConfigurationModelABC.__init__(self)
self._keep_config = []
self._config_paths = []
@property
def keep_config(self) -> list[str]:
return self._keep_config
@property
def config_paths(self) -> list[str]:
return self._config_paths
def from_dict(self, settings: dict):
try:
self._keep_config = settings['KeepConfigs']
self._config_paths = settings['ConfigPaths']
except Exception as e:
Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings')
Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}')

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
post-build KDB - post build
~~~~~~~~~~~~~~~~~~~
Tool project to clean build project files
:copyright: (c) 2022 sh-edraft.de
:license: MIT, see LICENSE for more details.
edraft marked this conversation as resolved Outdated

Komentar ist leer

Komentar ist leer
"""
__title__ = 'post_build.service'
__author__ = 'Sven Heidemann'
__license__ = 'MIT'
__copyright__ = 'Copyright (c) 2022 sh-edraft.de'
__version__ = '1.0.0'
edraft marked this conversation as resolved
Review

Hier evtl auch version

Hier evtl auch version
from collections import namedtuple
# imports
VersionInfo = namedtuple('VersionInfo', 'major minor micro')
version_info = VersionInfo(major='1', minor='0', micro='0')

View File

@ -0,0 +1,64 @@
import os
from cpl_cli.configuration import WorkspaceSettings, ProjectSettings, BuildSettings
from cpl_core.configuration import ConfigurationABC
from cpl_core.console import Console
from cpl_core.environment import ApplicationEnvironmentABC
from post_build.post_build_settings import PostBuildSettings
class Dependencies:
def __init__(
self,
config: ConfigurationABC,
env: ApplicationEnvironmentABC,
ws: WorkspaceSettings,
project: ProjectSettings,
build: BuildSettings,
post_build: PostBuildSettings
):
self._config = config
self._env = env
self._workspace = ws
self._project = project
self._build = build
self._post_build = post_build
self._dependencies = {}
def _add_dependencies(self, deps: list[str]):
for d in deps:
d_name = d
if '>=' in d:
d_name = d.split('>=')[0]
if '<=' in d:
d_name = d.split('<=')[0]
if '==' in d:
d_name = d.split('==')[0]
if d_name in self._dependencies:
continue
self._dependencies[d_name] = d
def create(self):
dist_path = os.path.abspath(os.path.join(
self._env.working_directory,
os.path.dirname(self._workspace.projects[self._project.name]),
self._build.output_path,
self._project.name,
'build'
))
for project in self._workspace.projects:
project_file = os.path.join(self._env.working_directory, self._workspace.projects[project])
self._config.add_json_file(project_file, output=False, optional=False)
project: ProjectSettings = self._config.get_configuration(ProjectSettings)
self._add_dependencies(project.dependencies)
with open(f'{dist_path}/requirements.txt', 'w+', encoding='utf-8') as f:
for dependency in self._dependencies:
f.write(f'{self._dependencies[dependency]}\n')
f.close()

View File

@ -0,0 +1,39 @@
import os
from cpl_cli.configuration import ProjectSettings, BuildSettings, WorkspaceSettings
from cpl_core.console import Console
from cpl_core.environment import ApplicationEnvironmentABC
from post_build.post_build_settings import PostBuildSettings
class RemoveConfig:
def __init__(self, env: ApplicationEnvironmentABC, ws: WorkspaceSettings, project: ProjectSettings, build: BuildSettings, post_build: PostBuildSettings):
self._env = env
self._workspace = ws
self._project = project
self._build = build
self._post_build = post_build
def remove(self):
dist_path = os.path.abspath(os.path.join(
self._env.working_directory,
os.path.dirname(self._workspace.projects[self._project.name]),
self._build.output_path,
self._project.name,
'build'
))
for cfg_path in self._post_build.config_paths:
config_path = os.path.join(
dist_path,
cfg_path
)
for r, d, f in os.walk(config_path):
for file in f:
if file in self._post_build.keep_config:
continue
os.remove(os.path.abspath(os.path.join(config_path, file)))

View File

@ -0,0 +1,32 @@
import os.path
from cpl_cli.configuration import WorkspaceSettings, ProjectSettings
from cpl_core.application import StartupABC
from cpl_core.configuration import ConfigurationABC
from cpl_core.console import Console
from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC
from cpl_core.environment import ApplicationEnvironment
from post_build.service.dependencies import Dependencies
from post_build.service.remove_config import RemoveConfig
class Startup(StartupABC):
def __init__(self):
StartupABC.__init__(self)
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
configuration.add_json_file(f'appsettings.json', optional=False, output=False)
environment.set_working_directory(os.path.abspath(os.path.join(environment.working_directory, '../../')))
configuration.add_json_file(f'cpl-workspace.json', optional=False, output=False)
ws: WorkspaceSettings = configuration.get_configuration(WorkspaceSettings)
configuration.add_json_file(ws.projects[ws.default_project], optional=False, output=False)
return configuration
def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC:
services.add_transient(RemoveConfig)
services.add_transient(Dependencies)
return services.build_service_provider()

View File

@ -40,8 +40,8 @@
"budgets": [
{
"type": "initial",
"maximumWarning": "500kb",
"maximumError": "1mb"
"maximumWarning": "8mb",
"maximumError": "16mb"
},
{
"type": "anyComponentStyle",

2
kdb-web/dockerfile Normal file
View File

@ -0,0 +1,2 @@
FROM nginx:alpine
COPY ./dist/kdb-web/ /usr/share/nginx/html

View File

@ -9,7 +9,8 @@
"prebuild": "npm run update-version",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
"test": "ng test",
"build-docker": "ng build; docker build -t kdb-web:kdb-web ."
},
"private": true,
"dependencies": {