mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
[#640] Fix shenanigans when executing docker compose restart
This commit is contained in:
parent
07fb7cf164
commit
9222420b7a
3 changed files with 54 additions and 62 deletions
|
|
@ -35,13 +35,9 @@ function trap_reload() {
|
|||
}
|
||||
trap "trap_reload" HUP
|
||||
|
||||
if [ -f "/etc/nginx/variables.env" ] ; then
|
||||
log "ENTRYPOINT" "⚠️ " "Looks like BunkerWeb has already been loaded, will not generate temp config"
|
||||
else
|
||||
# generate "temp" config
|
||||
echo -e "IS_LOADING=yes\nUSE_BUNKERNET=no\nSERVER_NAME=\nAPI_HTTP_PORT=${API_HTTP_PORT:-5000}\nAPI_SERVER_NAME=${API_SERVER_NAME:-bwapi}\nAPI_WHITELIST_IP=${API_WHITELIST_IP:-127.0.0.0/8}\nUSE_REAL_IP=${USE_REAL_IP:-no}\nUSE_PROXY_PROTOCOL=${USE_PROXY_PROTOCOL:-no}\nREAL_IP_FROM=${REAL_IP_FROM:-192.168.0.0/16 172.16.0.0/12 10.0.0.0/8}\nREAL_IP_HEADER=${REAL_IP_HEADER:-X-Forwarded-For}\nHTTP_PORT=${HTTP_PORT:-8080}\nHTTPS_PORT=${HTTPS_PORT:-8443}" > /tmp/variables.env
|
||||
python3 /usr/share/bunkerweb/gen/main.py --variables /tmp/variables.env
|
||||
fi
|
||||
# generate "temp" config
|
||||
echo -e "IS_LOADING=yes\nUSE_BUNKERNET=no\nSERVER_NAME=\nAPI_HTTP_PORT=${API_HTTP_PORT:-5000}\nAPI_SERVER_NAME=${API_SERVER_NAME:-bwapi}\nAPI_WHITELIST_IP=${API_WHITELIST_IP:-127.0.0.0/8}\nUSE_REAL_IP=${USE_REAL_IP:-no}\nUSE_PROXY_PROTOCOL=${USE_PROXY_PROTOCOL:-no}\nREAL_IP_FROM=${REAL_IP_FROM:-192.168.0.0/16 172.16.0.0/12 10.0.0.0/8}\nREAL_IP_HEADER=${REAL_IP_HEADER:-X-Forwarded-For}\nHTTP_PORT=${HTTP_PORT:-8080}\nHTTPS_PORT=${HTTPS_PORT:-8443}" > /tmp/variables.env
|
||||
python3 /usr/share/bunkerweb/gen/main.py --variables /tmp/variables.env
|
||||
|
||||
# start nginx
|
||||
log "ENTRYPOINT" "ℹ️" "Starting nginx ..."
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ class ApiCaller:
|
|||
self.__apis = apis
|
||||
|
||||
def auto_setup(self, bw_integration: Optional[str] = None):
|
||||
self.__apis.clear()
|
||||
if bw_integration is None:
|
||||
if getenv("KUBERNETES_MODE", "no") == "yes":
|
||||
bw_integration = "Kubernetes"
|
||||
|
|
|
|||
|
|
@ -194,17 +194,6 @@ def api_to_instance(api):
|
|||
}
|
||||
|
||||
|
||||
def update_docker_instances(sc, db, force=False):
|
||||
current_apis = set(sc.apis)
|
||||
sc.auto_setup()
|
||||
if force or current_apis != set(sc.apis):
|
||||
new_instances = []
|
||||
for api in sc.apis:
|
||||
new_instances.append(api_to_instance(api))
|
||||
return db.update_instances(new_instances)
|
||||
return ""
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
# Don't execute if pid file exists
|
||||
|
|
@ -322,21 +311,25 @@ if __name__ == "__main__":
|
|||
)
|
||||
sleep(5)
|
||||
env = db.get_config()
|
||||
else:
|
||||
env = db.get_config()
|
||||
|
||||
env["DATABASE_URI"] = db.database_uri
|
||||
|
||||
# Instantiate scheduler
|
||||
SCHEDULER = JobScheduler(env.copy() | environ.copy(), logger, INTEGRATION)
|
||||
|
||||
if INTEGRATION in ("Swarm", "Kubernetes", "Autoconf"):
|
||||
if INTEGRATION in ("Docker", "Swarm", "Kubernetes", "Autoconf"):
|
||||
# Automatically setup the scheduler apis
|
||||
SCHEDULER.auto_setup()
|
||||
elif INTEGRATION == "Docker":
|
||||
err = update_docker_instances(SCHEDULER, db, force=True)
|
||||
if err:
|
||||
logger.error(
|
||||
f"Couldn't save instances to database: {err}",
|
||||
)
|
||||
while not SCHEDULER.apis:
|
||||
SCHEDULER.auto_setup()
|
||||
|
||||
if not SCHEDULER.apis:
|
||||
logger.warning(
|
||||
"No BunkerWeb API found, retrying in 5s ...",
|
||||
)
|
||||
sleep(5)
|
||||
db.update_instances([api_to_instance(api) for api in SCHEDULER.apis])
|
||||
|
||||
scheduler_first_start = db.is_scheduler_first_start()
|
||||
|
||||
|
|
@ -476,6 +469,7 @@ if __name__ == "__main__":
|
|||
stop(1)
|
||||
|
||||
FIRST_RUN = True
|
||||
CONFIG_NEED_GENERATION = True
|
||||
CHANGES = []
|
||||
threads = []
|
||||
|
||||
|
|
@ -514,44 +508,45 @@ if __name__ == "__main__":
|
|||
else:
|
||||
logger.info("All jobs in run_once() were successful")
|
||||
|
||||
content = ""
|
||||
for k, v in env.items():
|
||||
content += f"{k}={v}\n"
|
||||
SCHEDULER_TMP_ENV_PATH.write_text(content)
|
||||
# run the generator
|
||||
proc = subprocess_run(
|
||||
[
|
||||
"python3",
|
||||
join(sep, "usr", "share", "bunkerweb", "gen", "main.py"),
|
||||
"--settings",
|
||||
join(sep, "usr", "share", "bunkerweb", "settings.json"),
|
||||
"--templates",
|
||||
join(sep, "usr", "share", "bunkerweb", "confs"),
|
||||
"--output",
|
||||
join(sep, "etc", "nginx"),
|
||||
"--variables",
|
||||
str(SCHEDULER_TMP_ENV_PATH),
|
||||
],
|
||||
stdin=DEVNULL,
|
||||
stderr=STDOUT,
|
||||
check=False,
|
||||
)
|
||||
|
||||
if proc.returncode != 0:
|
||||
logger.error(
|
||||
"Config generator failed, configuration will not work as expected...",
|
||||
)
|
||||
else:
|
||||
copy(
|
||||
str(nginx_variables_path),
|
||||
join(sep, "var", "tmp", "bunkerweb", "variables.env"),
|
||||
if CONFIG_NEED_GENERATION:
|
||||
content = ""
|
||||
for k, v in env.items():
|
||||
content += f"{k}={v}\n"
|
||||
SCHEDULER_TMP_ENV_PATH.write_text(content)
|
||||
# run the generator
|
||||
proc = subprocess_run(
|
||||
[
|
||||
"python3",
|
||||
join(sep, "usr", "share", "bunkerweb", "gen", "main.py"),
|
||||
"--settings",
|
||||
join(sep, "usr", "share", "bunkerweb", "settings.json"),
|
||||
"--templates",
|
||||
join(sep, "usr", "share", "bunkerweb", "confs"),
|
||||
"--output",
|
||||
join(sep, "etc", "nginx"),
|
||||
"--variables",
|
||||
str(SCHEDULER_TMP_ENV_PATH),
|
||||
],
|
||||
stdin=DEVNULL,
|
||||
stderr=STDOUT,
|
||||
check=False,
|
||||
)
|
||||
|
||||
if SCHEDULER.apis:
|
||||
# send nginx configs
|
||||
thread = Thread(target=send_nginx_configs)
|
||||
thread.start()
|
||||
threads.append(thread)
|
||||
if proc.returncode != 0:
|
||||
logger.error(
|
||||
"Config generator failed, configuration will not work as expected...",
|
||||
)
|
||||
else:
|
||||
copy(
|
||||
str(nginx_variables_path),
|
||||
join(sep, "var", "tmp", "bunkerweb", "variables.env"),
|
||||
)
|
||||
|
||||
if SCHEDULER.apis:
|
||||
# send nginx configs
|
||||
thread = Thread(target=send_nginx_configs)
|
||||
thread.start()
|
||||
threads.append(thread)
|
||||
|
||||
try:
|
||||
if SCHEDULER.apis:
|
||||
|
|
|
|||
Loading…
Reference in a new issue