diff --git a/docs/assets/img/bunkerweb_db.svg b/docs/assets/img/bunkerweb_db.svg new file mode 100644 index 000000000..d7f898638 --- /dev/null +++ b/docs/assets/img/bunkerweb_db.svg @@ -0,0 +1 @@ +1**11*1*1*1*1**1*11*bw_selectssetting_idvarchar[256]valuevarchar[256]bw_settingsidvarchar[256]namevarchar[256]plugin_idvarchar[64]contextcontexesdefaultvarchar[4096]helpvarchar[512]labelvarchar[256]regexvarchar[1024]typesettings_typesmultiplevarchar[128]bw_services_settingsservice_idvarchar[64]setting_idvarchar[256]valuevarchar[4096]suffixintmethodmethodsbw_servicesidvarchar[64]methodmethodsbw_global_valuessetting_idvarchar[256]valuevarchar[4096]suffixintmethodmethodsbw_pluginsidvarchar[64]namevarchar[128]descriptionvarchar[256]versionvarchar[32]streamvarchar[16]externalbooleanmethodmethodsdatalongblobchecksumvarchar[128]bw_jobsnamevarchar[128]plugin_idvarchar[64]file_namevarchar[256]everyschedulesreloadbooleansuccessbooleanlast_rundatetimebw_jobs_cacheidintjob_namevarchar[128]service_idvarchar[64]file_namevarchar[256]datalongbloblast_updatedatetimechecksumvarchar[128]bw_instanceshostnamevarchar[256]portintserver_namevarchar[256]bw_metadataidintis_initializedbooleanfirst_config_savedbooleanautoconf_loadedbooleanscheduler_first_startbooleancustom_configs_changedbooleanexternal_plugins_changedbooleanconfig_changedbooleanintegrationintegrationsversionvarcharbw_plugin_pagesidintplugin_idvarchar[64]template_filelongblobtemplate_checksumvarchar[128]actions_filelongblobactions_checksumvarchar[128]bw_custom_configsidintservice_idvarchar[64]typecustom_config_typesnamevarchar[256]datalongblobchecksumvarchar[128]methodmethods \ No newline at end of file diff --git a/docs/concepts.md b/docs/concepts.md index 3271c8bde..59d8fcb8e 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -112,6 +112,11 @@ Database configuration is done by using the `DATABASE_URI` setting which respect - MySQL : `mysql+pymysql://bunkerweb:changeme@bw-db:3306/db` - PostgreSQL : `postgresql://bunkerweb:changeme@bw-db:5432/db` +
+ ![Overview](assets/img/bunkerweb_db.svg){ align=center, width="800" } +
Database Schema
+
+ ## Scheduler To make things automagically work together, a dedicated service called the scheduler is in charge of : diff --git a/src/bw/Dockerfile b/src/bw/Dockerfile index 21f6675d4..afcbc171a 100644 --- a/src/bw/Dockerfile +++ b/src/bw/Dockerfile @@ -52,22 +52,19 @@ RUN apk add --no-cache pcre bash python3 && \ cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ mkdir -p /var/tmp/bunkerweb && \ mkdir -p /var/run/bunkerweb && \ + mkdir -p /var/log/bunkerweb && \ mkdir -p /var/www/html && \ mkdir -p /etc/bunkerweb && \ mkdir -p /data/cache && ln -s /data/cache /var/cache/bunkerweb && \ for dir in $(echo "configs plugins") ; do mkdir -p "/data/${dir}" && ln -s "/data/${dir}" "/etc/bunkerweb/${dir}" ; done && \ for dir in $(echo "configs/http configs/stream configs/server-http configs/server-stream configs/default-server-http configs/default-server-stream configs/modsec configs/modsec-crs") ; do mkdir "/data/${dir}" ; done && \ - chown -R root:nginx /data && \ - chmod -R 770 /data && \ - chown -R root:nginx /var/cache/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb /usr/bin/bwcli && \ - chmod 770 /var/cache/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb && \ + chown -R root:nginx /data /etc/nginx /var/cache/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb /var/log/bunkerweb /usr/bin/bwcli && \ + chmod -R 770 /data /etc/nginx /var/cache/bunkerweb /var/tmp/bunkerweb /var/log/bunkerweb /var/run/bunkerweb && \ chmod 750 /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/entrypoint.sh /usr/bin/bwcli /usr/share/bunkerweb/deps/python/bin/* && \ - chown -R root:nginx /etc/nginx && \ - chmod -R 770 /etc/nginx && \ - rm -f /var/log/nginx/* && \ - ln -s /proc/1/fd/2 /var/log/nginx/error.log && \ - ln -s /proc/1/fd/2 /var/log/nginx/modsec_audit.log && \ - ln -s /proc/1/fd/1 /var/log/nginx/access.log + rm -f /var/log/bunkerweb/* && \ + ln -s /proc/1/fd/2 /var/log/bunkerweb/error.log && \ + ln -s /proc/1/fd/2 /var/log/bunkerweb/modsec_audit.log && \ + ln -s /proc/1/fd/1 /var/log/bunkerweb/access.log # Fix CVEs RUN apk add "libx11>=1.8.4-r1" diff --git a/src/common/confs/http.conf b/src/common/confs/http.conf index 526548891..6eef32804 100644 --- a/src/common/confs/http.conf +++ b/src/common/confs/http.conf @@ -15,7 +15,7 @@ default_type application/octet-stream; # access log format log_format logf '{{ LOG_FORMAT }}'; -access_log /var/log/nginx/access.log logf; +access_log /var/log/bunkerweb/access.log logf; # temp paths proxy_temp_path /var/tmp/bunkerweb/proxy_temp; diff --git a/src/common/confs/nginx.conf b/src/common/confs/nginx.conf index 7df394d45..7bf691d5b 100644 --- a/src/common/confs/nginx.conf +++ b/src/common/confs/nginx.conf @@ -27,7 +27,7 @@ pcre_jit on; worker_rlimit_nofile {{ WORKER_RLIMIT_NOFILE }}; # error log level -error_log /var/log/nginx/error.log {{ LOG_LEVEL }}; +error_log /var/log/bunkerweb/error.log {{ LOG_LEVEL }}; # reason env var env REASON; diff --git a/src/common/core/letsencrypt/jobs/certbot-new.py b/src/common/core/letsencrypt/jobs/certbot-new.py index f8b9fe3da..e38328387 100755 --- a/src/common/core/letsencrypt/jobs/certbot-new.py +++ b/src/common/core/letsencrypt/jobs/certbot-new.py @@ -39,9 +39,9 @@ def certbot_new( "--config-dir", str(letsencrypt_path.joinpath("etc")), "--work-dir", - str(letsencrypt_path.joinpath("lib")), + join(sep, "var", "lib", "bunkerweb", "letsencrypt"), "--logs-dir", - str(letsencrypt_path.joinpath("log")), + join(sep, "var", "log", "bunkerweb"), "--manual", "--preferred-challenges=http", "--manual-auth-hook", @@ -86,10 +86,14 @@ try: # Create directory if it doesn't exist letsencrypt_path = Path(sep, "var", "cache", "bunkerweb", "letsencrypt") + letsencrypt_path.mkdir(parents=True, exist_ok=True) + letsencrypt_job_path = Path( sep, "usr", "share", "bunkerweb", "core", "letsencrypt", "jobs" ) - letsencrypt_path.mkdir(parents=True, exist_ok=True) + Path(sep, "var", "lib", "bunkerweb", "letsencrypt").mkdir( + parents=True, exist_ok=True + ) # Extract letsencrypt folder if it exists in db db = Database( @@ -197,10 +201,6 @@ try: logger.error(f"Error while saving Let's Encrypt data to db cache : {err}") else: logger.info("Successfully saved Let's Encrypt data to db cache") - - # Delete lib and log folders to avoid sending them - rmtree(str(letsencrypt_path.joinpath("lib")), ignore_errors=True) - rmtree(str(letsencrypt_path.joinpath("log")), ignore_errors=True) except: status = 3 logger.error(f"Exception while running certbot-new.py :\n{format_exc()}") diff --git a/src/common/core/letsencrypt/jobs/certbot-renew.py b/src/common/core/letsencrypt/jobs/certbot-renew.py index 9cc6d90f7..29baff26f 100755 --- a/src/common/core/letsencrypt/jobs/certbot-renew.py +++ b/src/common/core/letsencrypt/jobs/certbot-renew.py @@ -34,9 +34,9 @@ def renew(domain: str, letsencrypt_path: Path) -> int: "--config-dir", str(letsencrypt_path.joinpath("etc")), "--work-dir", - str(letsencrypt_path.joinpath("lib")), + join(sep, "var", "lib", "bunkerweb", "letsencrypt"), "--logs-dir", - str(letsencrypt_path.joinpath("log")), + join(sep, "var", "log", "bunkerweb"), "--cert-name", domain, "--deploy-hook", @@ -83,6 +83,9 @@ try: # Create directory if it doesn't exist letsencrypt_path = Path(sep, "var", "cache", "bunkerweb", "letsencrypt") letsencrypt_path.mkdir(parents=True, exist_ok=True) + Path(sep, "var", "lib", "bunkerweb", "letsencrypt").mkdir( + parents=True, exist_ok=True + ) # Extract letsencrypt folder if it exists in db db = Database( @@ -149,10 +152,6 @@ try: logger.error(f"Error while saving Let's Encrypt data to db cache : {err}") else: logger.info("Successfully saved Let's Encrypt data to db cache") - - # Delete lib and log folders to avoid sending them - rmtree(str(letsencrypt_path.joinpath("lib")), ignore_errors=True) - rmtree(str(letsencrypt_path.joinpath("log")), ignore_errors=True) except: status = 2 logger.error(f"Exception while running certbot-renew.py :\n{format_exc()}") diff --git a/src/common/core/modsecurity/confs/server-http/modsecurity-rules.conf.modsec b/src/common/core/modsecurity/confs/server-http/modsecurity-rules.conf.modsec index cbd40737d..5526739e0 100644 --- a/src/common/core/modsecurity/confs/server-http/modsecurity-rules.conf.modsec +++ b/src/common/core/modsecurity/confs/server-http/modsecurity-rules.conf.modsec @@ -62,7 +62,7 @@ SecResponseBodyLimitAction ProcessPartial SecAuditEngine {{ MODSECURITY_SEC_AUDIT_ENGINE }} SecAuditLogParts {{ MODSECURITY_SEC_AUDIT_LOG_PARTS }} SecAuditLogType Serial -SecAuditLog /var/log/nginx/modsec_audit.log +SecAuditLog /var/log/bunkerweb/modsec_audit.log # include OWASP CRS configurations {% if USE_MODSECURITY_CRS == "yes" %} diff --git a/src/common/db/model.py b/src/common/db/model.py index 6d59794db..0d539092e 100644 --- a/src/common/db/model.py +++ b/src/common/db/model.py @@ -31,15 +31,6 @@ CUSTOM_CONFIGS_TYPES_ENUM = Enum( "server_stream", name="custom_configs_types_enum", ) -LOG_LEVELS_ENUM = Enum( - "CRITICAL", - "ERROR", - "WARNING", - "INFO", - "DEBUG", - "NOTSET", - name="log_levels_enum", -) INTEGRATIONS_ENUM = Enum( "Linux", "Docker", diff --git a/src/linux/Dockerfile-centos b/src/linux/Dockerfile-centos index 237355ff6..13723bd25 100644 --- a/src/linux/Dockerfile-centos +++ b/src/linux/Dockerfile-centos @@ -29,14 +29,12 @@ RUN dnf install yum-utils redhat-lsb-core -y && \ RUN dnf install -y python39-pip brotli brotli-devel wget gperftools-devel perl libxslt-devel libxml2 libxslt bash gd gd-devel gcc-c++ kernel-devel curl znc-modtcl libmpc-devel gmp-devel gawk mpfr-devel libtool pcre-devel automake autoconf readline-devel gcc make openssl-devel git zlib-devel libxml2-devel pkgconf libcurl-devel geoip-devel lmdb-libs && \ pip3.9 install --no-cache-dir --upgrade pip && \ pip3.9 install wheel && \ - #mkdir -p /usr/share/bunkerweb/deps && \ chmod +x /tmp/bunkerweb/deps/install.sh && \ bash /tmp/bunkerweb/deps/install.sh && \ mkdir /usr/share/bunkerweb/deps/python && \ export MAKEFLAGS="-j$(nproc)" && \ pip3.9 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /usr/share/bunkerweb/deps/requirements.txt -#RUN pip3.9 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /tmp/bunkerweb/deps/requirements.txt # Copy files # can't exclude deps from . so we are copying everything by hand @@ -64,15 +62,15 @@ RUN cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ mkdir -p /etc/bunkerweb/plugins && \ mkdir -p /var/tmp/bunkerweb/ && \ mkdir -p /var/run/bunkerweb/ && \ + mkdir -p /var/log/bunkerweb/ && \ mkdir -p /var/www/html && \ mkdir -p /var/lib/bunkerweb && \ - #mkdir /var/www/html && \ echo "Linux" > /usr/share/bunkerweb/INTEGRATION && \ #It's a find command that will find all files in the bunkerweb directory, excluding the ui/deps directory, and then chmod them to 0740. find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type f -exec chmod 0740 {} \; && \ #It's a find command that will find all files in the bunkerweb directory, excluding the ui/deps directory, and then chmod them to 0740. find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type d -exec chmod 0750 {} \; && \ - chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ && \ + chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ /var/log/bunkerweb/ && \ chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/ui/main.py /var/www && \ # Don't forget to add /var/www/html on the above line find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ diff --git a/src/linux/Dockerfile-debian b/src/linux/Dockerfile-debian index aafde2aad..3b7c2e854 100644 --- a/src/linux/Dockerfile-debian +++ b/src/linux/Dockerfile-debian @@ -19,35 +19,6 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \ cat /tmp/req/requirements.txt /tmp/req/requirements.txt.1 /tmp/req/requirements.txt.2 /tmp/req/requirements.txt.3 > /usr/share/bunkerweb/deps/requirements.txt && \ rm -rf /tmp/req -# # Install dependencies -# RUN apt-get update && \ -# apt-get install -y --no-install-recommends \ -# wget \ -# build-essential \ -# libffi-dev \ -# libgdbm-dev \ -# libc6-dev \ -# libssl-dev \ -# zlib1g-dev \ -# libbz2-dev \ -# libreadline-dev \ -# libsqlite3-dev \ -# libncurses5-dev \ -# libncursesw5-dev \ -# xz-utils \ -# tk-dev - -# # Installing python3.11 -# RUN wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz && \ -# tar xzf Python-3.11.4.tgz && \ -# cd Python-3.11.4 && \ -# ./configure --enable-optimizations && \ -# make -j$(nproc) && \ -# make altinstall && \ -# rm -rf /usr/src/Python-3.11.4* -# # Installing pip -# RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 - # Nginx RUN apt-get install gnupg2 ca-certificates wget -y && \ echo "deb https://nginx.org/packages/debian/ bullseye nginx" > /etc/apt/sources.list.d/nginx.list && \ @@ -68,9 +39,6 @@ RUN apt install --no-install-recommends python3-pip bash libssl-dev git libpcre+ pip3 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /usr/share/bunkerweb/deps/requirements.txt && \ if [ ! -f /usr/share/bunkerweb/deps/python/zope/__init__.py ] ; then touch /usr/share/bunkerweb/deps/python/zope/__init__.py ; fi - # Dirty fix to avoid errors with --target and packages same namespace -#RUN pip install --no-deps --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /tmp/bunkerweb/deps/requirements.txt - # Copy files # can't exclude deps from . so we are copying everything by hand COPY src/bw/loading /usr/share/bunkerweb/loading @@ -97,6 +65,7 @@ RUN cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ mkdir -p /etc/bunkerweb/plugins && \ mkdir -p /var/tmp/bunkerweb/ && \ mkdir -p /var/run/bunkerweb/ && \ + mkdir -p /var/log/bunkerweb/ && \ mkdir -p /var/www/ && \ mkdir -p /var/lib/bunkerweb && \ mkdir /var/www/html && \ @@ -105,7 +74,7 @@ RUN cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type f -exec chmod 0740 {} \; && \ #It's a find command that will find all files in the bunkerweb directory, excluding the ui/deps directory, and then chmod them to 0740. find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type d -exec chmod 0750 {} \; && \ - chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ && \ + chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ /var/log/bunkerweb/ && \ chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/ui/main.py /var/www/ && \ # Don't forget to add /var/www/html on the above line find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ diff --git a/src/linux/Dockerfile-fedora b/src/linux/Dockerfile-fedora index 0750e1f38..a99dab771 100644 --- a/src/linux/Dockerfile-fedora +++ b/src/linux/Dockerfile-fedora @@ -34,9 +34,6 @@ RUN dnf install -y python3-pip brotli brotli-devel gperftools-devel perl libxslt export MAKEFLAGS="-j$(nproc)" && \ pip install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /usr/share/bunkerweb/deps/requirements.txt && \ if [ ! -f /usr/share/bunkerweb/deps/python/zope/__init__.py ] ; then touch /usr/share/bunkerweb/deps/python/zope/__init__.py ; fi - # Dirty fix to avoid errors with --target and packages same namespace - #cp -r /usr/lib64/python3.10/* /usr/lib/python3.10/ && \ - #PYTHONPLATLIBDIR=lib pip3.10 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /tmp/bunkerweb/deps/requirements.txt # Copy files # can't exclude deps from . so we are copying everything by hand @@ -64,12 +61,13 @@ RUN cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ mkdir -p /etc/bunkerweb/plugins && \ mkdir -p /var/tmp/bunkerweb/ && \ mkdir -p /var/run/bunkerweb/ && \ + mkdir -p /var/log/bunkerweb/ && \ mkdir -p /var/www/html && \ mkdir -p /var/lib/bunkerweb && \ echo "Linux" > /usr/share/bunkerweb/INTEGRATION && \ find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type f -exec chmod 0740 {} \; && \ find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type d -exec chmod 0750 {} \; && \ - chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ && \ + chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ /var/log/bunkerweb/ && \ chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/ui/main.py /var/www/ && \ find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ chmod 755 /usr/share/bunkerweb diff --git a/src/linux/Dockerfile-rhel b/src/linux/Dockerfile-rhel index 1de573667..dfe469714 100644 --- a/src/linux/Dockerfile-rhel +++ b/src/linux/Dockerfile-rhel @@ -40,17 +40,14 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \ # Compile and install dependencies RUN dnf install -y readline-devel python39-pip brotli brotli-devel gperftools-devel perl libxslt-devel libxml2 libxslt bash gd gd-devel gcc-c++ curl znc-modtcl gawk libtool pcre-devel automake autoconf gcc make openssl-devel git zlib-devel libxml2-devel pkgconf libcurl-devel geoip-devel --skip-broken && \ - pip3.9 install --no-cache-dir --upgrade pip && \ - pip3.9 install wheel && \ - #mkdir -p /usr/share/bunkerweb/deps && \ - chmod +x /tmp/bunkerweb/deps/install.sh && \ - bash /tmp/bunkerweb/deps/install.sh && \ - mkdir /usr/share/bunkerweb/deps/python && \ - export MAKEFLAGS="-j$(nproc)" && \ - pip3.9 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /usr/share/bunkerweb/deps/requirements.txt && \ - if [ ! -f /usr/share/bunkerweb/deps/python/zope/__init__.py ] ; then touch /usr/share/bunkerweb/deps/python/zope/__init__.py ; fi - -#RUN pip3.10 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /tmp/bunkerweb/deps/requirements.txt + pip3.9 install --no-cache-dir --upgrade pip && \ + pip3.9 install wheel && \ + chmod +x /tmp/bunkerweb/deps/install.sh && \ + bash /tmp/bunkerweb/deps/install.sh && \ + mkdir /usr/share/bunkerweb/deps/python && \ + export MAKEFLAGS="-j$(nproc)" && \ + pip3.9 install --no-cache-dir --require-hashes --target /usr/share/bunkerweb/deps/python -r /usr/share/bunkerweb/deps/requirements.txt && \ + if [ ! -f /usr/share/bunkerweb/deps/python/zope/__init__.py ] ; then touch /usr/share/bunkerweb/deps/python/zope/__init__.py ; fi # Copy BW files # can't exclude deps from . so we are copying everything by hand @@ -72,21 +69,22 @@ COPY src/VERSION /usr/share/bunkerweb/VERSION # Setup BW RUN cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ - chmod 755 /usr/bin/bwcli && \ - mkdir -p /etc/bunkerweb/configs && \ - mkdir -p /var/cache/bunkerweb/ && \ - mkdir -p /etc/bunkerweb/plugins && \ - mkdir -p /var/tmp/bunkerweb/ && \ - mkdir -p /var/run/bunkerweb/ && \ - mkdir -p /var/www/html && \ - mkdir -p /var/lib/bunkerweb && \ - echo "Linux" > /usr/share/bunkerweb/INTEGRATION && \ - find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type f -exec chmod 0740 {} \; && \ - find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type d -exec chmod 0750 {} \; && \ - chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ && \ - chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/ui/main.py /var/www/ && \ - find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ - chmod 755 /usr/share/bunkerweb + chmod 755 /usr/bin/bwcli && \ + mkdir -p /etc/bunkerweb/configs && \ + mkdir -p /var/cache/bunkerweb/ && \ + mkdir -p /etc/bunkerweb/plugins && \ + mkdir -p /var/tmp/bunkerweb/ && \ + mkdir -p /var/run/bunkerweb/ && \ + mkdir -p /var/log/bunkerweb/ && \ + mkdir -p /var/www/html && \ + mkdir -p /var/lib/bunkerweb && \ + echo "Linux" > /usr/share/bunkerweb/INTEGRATION && \ + find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type f -exec chmod 0740 {} \; && \ + find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type d -exec chmod 0750 {} \; && \ + chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ /var/log/bunkerweb/ && \ + chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/ui/main.py /var/www/ && \ + find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ + chmod 755 /usr/share/bunkerweb # Copy Linux files COPY src/linux/scripts /usr/share/bunkerweb/scripts diff --git a/src/linux/Dockerfile-ubuntu b/src/linux/Dockerfile-ubuntu index d35611eb1..d90d2d8c5 100644 --- a/src/linux/Dockerfile-ubuntu +++ b/src/linux/Dockerfile-ubuntu @@ -19,37 +19,6 @@ RUN mkdir -p /usr/share/bunkerweb/deps && \ cat /tmp/req/requirements.txt /tmp/req/requirements.txt.1 /tmp/req/requirements.txt.2 /tmp/req/requirements.txt.3 > /usr/share/bunkerweb/deps/requirements.txt && \ rm -rf /tmp/req -# # Install dependencies -# RUN apt-get update -y && \ -# DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ -# wget \ -# build-essential \ -# checkinstall \ -# libgdbm-dev \ -# libc6-dev \ -# libssl-dev \ -# zlib1g-dev \ -# libbz2-dev \ -# libreadline-dev \ -# libsqlite3-dev \ -# libncurses5-dev \ -# libncursesw5-dev \ -# xz-utils \ -# tk-dev \ -# libffi-dev \ -# tzdata - -# # Installing python3.11 -# RUN wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz && \ -# tar xzf Python-3.11.4.tgz && \ -# cd Python-3.11.4 && \ -# ./configure --enable-optimizations && \ -# make -j$(nproc) && \ -# make altinstall && \ -# rm -rf /usr/src/Python-3.11.4* -# # Installing pip -# RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 - # Nginx RUN apt update && \ apt-get install curl gnupg2 ca-certificates lsb-release ubuntu-keyring software-properties-common -y && \ @@ -63,7 +32,6 @@ RUN apt update && \ RUN apt install --no-install-recommends bash libssl-dev git libpcre++-dev zlib1g-dev libxml2-dev libyajl-dev pkgconf libcurl4-openssl-dev libgeoip-dev liblmdb-dev apt-utils bash build-essential autoconf libtool automake g++ gcc libxml2-dev make musl-dev gnupg patch libreadline-dev libpcre3-dev libgd-dev python3-pip -y && \ pip install --no-cache-dir --upgrade pip && \ pip install wheel && \ - #mkdir -p /usr/share/bunkerweb/deps && \ chmod +x /tmp/bunkerweb/deps/install.sh && \ bash /tmp/bunkerweb/deps/install.sh && \ mkdir /usr/share/bunkerweb/deps/python && \ @@ -97,12 +65,13 @@ RUN cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ mkdir -p /etc/bunkerweb/plugins && \ mkdir -p /var/tmp/bunkerweb/ && \ mkdir -p /var/run/bunkerweb/ && \ + mkdir -p /var/log/bunkerweb/ && \ mkdir -p /var/www/html && \ mkdir -p /var/lib/bunkerweb && \ echo "Linux" > /usr/share/bunkerweb/INTEGRATION && \ find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type f -exec chmod 0740 {} \; && \ find /usr/share/bunkerweb -path /usr/share/bunkerweb/ui/deps -prune -o -type d -exec chmod 0750 {} \; && \ - chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ && \ + chmod 770 /var/cache/bunkerweb/ /var/tmp/bunkerweb/ /var/run/bunkerweb/ /var/log/bunkerweb/ && \ chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/ui/main.py /var/www/ && \ find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ chmod 755 /usr/share/bunkerweb diff --git a/src/linux/fpm-centos b/src/linux/fpm-centos index e02e574db..a3fcf003f 100644 --- a/src/linux/fpm-centos +++ b/src/linux/fpm-centos @@ -10,4 +10,4 @@ --before-install /usr/share/bunkerweb/scripts/beforeInstall.sh --after-install /usr/share/bunkerweb/scripts/postinstall.sh --after-remove /usr/share/bunkerweb/scripts/afterRemoveRPM.sh -/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb +/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/log/bunkerweb/=/var/log/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb diff --git a/src/linux/fpm-debian b/src/linux/fpm-debian index 36812a872..41fea2fdd 100644 --- a/src/linux/fpm-debian +++ b/src/linux/fpm-debian @@ -10,4 +10,4 @@ --before-install /usr/share/bunkerweb/scripts/beforeInstall.sh --after-install /usr/share/bunkerweb/scripts/postinstall.sh --after-remove /usr/share/bunkerweb/scripts/afterRemoveDEB.sh -/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb +/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/log/bunkerweb/=/var/log/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb diff --git a/src/linux/fpm-fedora b/src/linux/fpm-fedora index 93170afa8..a68471832 100644 --- a/src/linux/fpm-fedora +++ b/src/linux/fpm-fedora @@ -10,4 +10,4 @@ --before-install /usr/share/bunkerweb/scripts/beforeInstall.sh --after-install /usr/share/bunkerweb/scripts/postinstall.sh --after-remove /usr/share/bunkerweb/scripts/afterRemoveRPM.sh -/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb +/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/log/bunkerweb/=/var/log/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb diff --git a/src/linux/fpm-rhel b/src/linux/fpm-rhel index 503f9b6c2..92f49f2a2 100644 --- a/src/linux/fpm-rhel +++ b/src/linux/fpm-rhel @@ -10,4 +10,4 @@ --before-install /usr/share/bunkerweb/scripts/beforeInstall.sh --after-install /usr/share/bunkerweb/scripts/postinstall.sh --after-remove /usr/share/bunkerweb/scripts/afterRemoveRPM.sh -/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb +/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/log/bunkerweb/=/var/log/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb diff --git a/src/linux/fpm-ubuntu b/src/linux/fpm-ubuntu index 3cbc97612..bac8251b2 100644 --- a/src/linux/fpm-ubuntu +++ b/src/linux/fpm-ubuntu @@ -11,4 +11,4 @@ --after-install /usr/share/bunkerweb/scripts/postinstall.sh --after-remove /usr/share/bunkerweb/scripts/afterRemoveDEB.sh --deb-no-default-config-files -/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb +/usr/share/bunkerweb/=/usr/share/bunkerweb/ /usr/bin/bwcli=/usr/bin/bwcli /etc/bunkerweb/=/etc/bunkerweb /var/tmp/bunkerweb/=/var/tmp/bunkerweb /var/run/bunkerweb/=/var/run/bunkerweb /var/log/bunkerweb/=/var/log/bunkerweb /var/cache/bunkerweb/=/var/cache/bunkerweb /lib/systemd/system/bunkerweb.service=/lib/systemd/system/bunkerweb.service /lib/systemd/system/bunkerweb-ui.service=/lib/systemd/system/bunkerweb-ui.service /var/lib/bunkerweb=/var/lib/bunkerweb diff --git a/src/linux/scripts/afterRemoveDEB.sh b/src/linux/scripts/afterRemoveDEB.sh index 31e044598..de5e2f688 100644 --- a/src/linux/scripts/afterRemoveDEB.sh +++ b/src/linux/scripts/afterRemoveDEB.sh @@ -66,6 +66,12 @@ function remove { do_and_check_cmd rm -rf /var/run/bunkerweb fi + # Remove /var/log/bunkerweb + if test -e "/var/log/bunkerweb"; then + echo "ℹ️ Remove /var/log/bunkerweb" + do_and_check_cmd rm -rf /var/log/bunkerweb + fi + # Remove /var/lib/bunkerweb if test -e "/var/cache/bunkerweb"; then echo "ℹ️ Remove /var/cache/bunkerweb" diff --git a/src/linux/scripts/afterRemoveRPM.sh b/src/linux/scripts/afterRemoveRPM.sh index 822c725af..aacfd8a16 100644 --- a/src/linux/scripts/afterRemoveRPM.sh +++ b/src/linux/scripts/afterRemoveRPM.sh @@ -66,6 +66,12 @@ function remove { do_and_check_cmd rm -rf /var/run/bunkerweb fi + # Remove /var/log/bunkerweb + if test -e "/var/log/bunkerweb"; then + echo "ℹ️ Remove /var/log/bunkerweb" + do_and_check_cmd rm -rf /var/log/bunkerweb + fi + # Remove /var/lib/bunkerweb if test -e "/var/cache/bunkerweb"; then echo "ℹ️ Remove /var/cache/bunkerweb" diff --git a/src/linux/scripts/postinstall.sh b/src/linux/scripts/postinstall.sh index 746ff1e39..79ded46c3 100644 --- a/src/linux/scripts/postinstall.sh +++ b/src/linux/scripts/postinstall.sh @@ -23,7 +23,7 @@ function do_and_check_cmd() { # Give all the permissions to the nginx user echo "Setting ownership for all necessary directories to nginx user and group..." -do_and_check_cmd chown -R nginx:nginx /usr/share/bunkerweb /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb +do_and_check_cmd chown -R nginx:nginx /usr/share/bunkerweb /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb /var/log/bunkerweb # Stop and disable nginx on boot echo "Stop and disable nginx on boot..." diff --git a/src/scheduler/Dockerfile b/src/scheduler/Dockerfile index afcb3a713..cf281ab41 100644 --- a/src/scheduler/Dockerfile +++ b/src/scheduler/Dockerfile @@ -51,24 +51,20 @@ RUN apk add --no-cache bash libgcc libstdc++ openssl libmagic && \ adduser -h /var/cache/nginx -g scheduler -s /bin/sh -G scheduler -D -H -u 101 scheduler && \ cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \ echo "Docker" > /usr/share/bunkerweb/INTEGRATION && \ + mkdir -p /etc/nginx && \ mkdir -p /var/tmp/bunkerweb && \ mkdir -p /var/run/bunkerweb && \ + mkdir -p /var/log/bunkerweb && \ mkdir -p /var/www && \ mkdir -p /etc/bunkerweb && \ mkdir -p /data/cache && ln -s /data/cache /var/cache/bunkerweb && \ mkdir -p /data/lib && ln -s /data/lib /var/lib/bunkerweb && \ - mkdir -p /data/www && ln -s /data/www /var/www/html && \ for dir in $(echo "configs plugins") ; do mkdir -p "/data/${dir}" && ln -s "/data/${dir}" "/etc/bunkerweb/${dir}" ; done && \ for dir in $(echo "configs/http configs/stream configs/server-http configs/server-stream configs/default-server-http configs/default-server-stream configs/modsec configs/modsec-crs") ; do mkdir "/data/${dir}" ; done && \ - chown -R root:scheduler /data && \ - chmod -R 770 /data && \ - chown -R root:scheduler /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb /usr/bin/bwcli && \ - chmod -R 770 /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb && \ + chown -R root:scheduler /data /etc/nginx /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb /var/log/bunkerweb /usr/bin/bwcli && \ + chmod -R 770 /data /etc/nginx /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb /var/run/bunkerweb /var/log/bunkerweb && \ find /usr/share/bunkerweb/core/*/jobs/* -type f -exec chmod 750 {} \; && \ chmod 750 /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/gen/*.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/scheduler/entrypoint.sh /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/deps/python/bin/* /usr/bin/bwcli && \ - mkdir -p /etc/nginx && \ - chown -R scheduler:scheduler /etc/nginx && \ - chmod -R 770 /etc/nginx && \ chmod 660 /usr/share/bunkerweb/INTEGRATION && \ chown root:scheduler /usr/share/bunkerweb/INTEGRATION diff --git a/src/scheduler/main.py b/src/scheduler/main.py index 3d962899b..ce7f67328 100644 --- a/src/scheduler/main.py +++ b/src/scheduler/main.py @@ -507,7 +507,10 @@ if __name__ == "__main__": "Config generator failed, configuration will not work as expected...", ) else: - copy(str(nginx_variables_path), str(tmp_variables_path)) + copy( + str(nginx_variables_path), + join(sep, "var", "tmp", "bunkerweb", "variables.env"), + ) if SCHEDULER.apis: # send nginx configs diff --git a/src/ui/static/css/dashboard.css b/src/ui/static/css/dashboard.css index 6e95df38c..315b4f010 100644 --- a/src/ui/static/css/dashboard.css +++ b/src/ui/static/css/dashboard.css @@ -16,6 +16,15 @@ font-family: "Open Sans", sans-serif !important; } +.ace_editor, +.ace_editor div, +.ace_content { + font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", + monospace !important; + font-size: 16px !important; + font-weight: normal !important; +} + *, ::before, ::after { diff --git a/src/ui/styles.css b/src/ui/styles.css index 8819e16f8..e287fee1b 100644 --- a/src/ui/styles.css +++ b/src/ui/styles.css @@ -11,6 +11,15 @@ font-family: "Open Sans", sans-serif !important; } +.ace_editor, +.ace_editor div, +.ace_content { + font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", + monospace !important; + font-size: 16px !important; + font-weight: normal !important; +} + .close-btn { @apply dark:brightness-90 inline-block px-6 py-3 font-bold text-center text-red-500 border border-red-500 uppercase align-middle transition-all rounded-lg cursor-pointer dark:bg-gray-200 dark:hover:brightness-75 bg-white hover:bg-white/80 focus:bg-white/80 leading-normal ease-in tracking-tight-rem shadow-xs hover:-translate-y-px active:opacity-85 hover:shadow-md; }