[GH-ISSUE #24] Bug: [Errno 13] Permission denied: '/app' on native Linux install (LXC) #24

Closed
opened 2026-05-06 12:22:45 +02:00 by BreizhHardware · 3 comments

Originally created by @counterf on GitHub (Apr 16, 2026).
Original GitHub issue: https://github.com/chr0nzz/traefik-manager/issues/24

Originally assigned to: @chr0nzz on GitHub.

I am trying to install traefik-manager on an existing traefik LXC machine.

Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Starting gunicorn 25.3.0 Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Listening at: http://0.0.0.0:5000 (57839) Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Using worker: sync Apr 16 14:31:17 traefik-internal gunicorn[57840]: [2026-04-16 14:31:17 -0400] [57840] [INFO] Booting worker with pid: 57840 Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Control socket listening at /opt/traefik-manager/.gunicorn/gunicor> Apr 16 14:31:17 traefik-internal gunicorn[57840]: [2026-04-16 14:31:17 -0400] [57840] [ERROR] Exception in worker process Apr 16 14:31:17 traefik-internal gunicorn[57840]: Traceback (most recent call last): Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/arbiter.py", line 713, in spawn_worker Apr 16 14:31:17 traefik-internal gunicorn[57840]: worker.init_process() Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/workers/base.py", line 136, in init_p> Apr 16 14:31:17 traefik-internal gunicorn[57840]: self.load_wsgi() Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/workers/base.py", line 148, in load_w> Apr 16 14:31:17 traefik-internal gunicorn[57840]: self.wsgi = self.app.wsgi() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/base.py", line 66, in wsgi Apr 16 14:31:17 traefik-internal gunicorn[57840]: self.callable = self.load() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 57, in load Apr 16 14:31:17 traefik-internal gunicorn[57840]: return self.load_wsgiapp() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsg> Apr 16 14:31:17 traefik-internal gunicorn[57840]: return util.import_app(self.app_uri) Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/util.py", line 377, in import_app Apr 16 14:31:17 traefik-internal gunicorn[57840]: mod = importlib.import_module(module) Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module Apr 16 14:31:17 traefik-internal gunicorn[57840]: return _bootstrap._gcd_import(name[level:], package, level) Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 1206, in _gcd_import Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 1178, in _find_and_load Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 690, in _load_unlocked Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap_external>", line 940, in exec_module Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/app.py", line 47, in <module> Apr 16 14:31:17 traefik-internal gunicorn[57840]: app.secret_key = _load_or_create_secret_key() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/app.py", line 42, in _load_or_create_secret_key Apr 16 14:31:17 traefik-internal gunicorn[57840]: os.makedirs(os.path.dirname(_SECRET_KEY_PATH), exist_ok=True) Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen os>", line 215, in makedirs Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen os>", line 225, in makedirs ...skipping... Apr 16 14:47:20 traefik-internal gunicorn[59295]: self.callable = self.load() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 57, in load Apr 16 14:47:20 traefik-internal gunicorn[59295]: return self.load_wsgiapp() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsg> Apr 16 14:47:20 traefik-internal gunicorn[59295]: return util.import_app(self.app_uri) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/util.py", line 377, in import_app Apr 16 14:47:20 traefik-internal gunicorn[59295]: mod = importlib.import_module(module) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: return _bootstrap._gcd_import(name[level:], package, level) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1206, in _gcd_import Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1178, in _find_and_load Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 690, in _load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap_external>", line 940, in exec_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 47, in <module> Apr 16 14:47:20 traefik-internal gunicorn[59295]: app.secret_key = _load_or_create_secret_key() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 42, in _load_or_create_secret_key Apr 16 14:47:20 traefik-internal gunicorn[59295]: os.makedirs(os.path.dirname(_SECRET_KEY_PATH), exist_ok=True) Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 215, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 225, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: PermissionError: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [2026-04-16 14:47:20 -0400] [59295] [INFO] Worker exiting (pid: 59295) Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [INFO] Control socket listening at /opt/traefik-manager/.gunicorn/gunicor> Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Worker (pid:59295) exited with code 3. Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Shutting down: Master Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Reason: Worker failed to boot. Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Failed with result 'exit-code'. ...skipping... Apr 16 14:47:20 traefik-internal gunicorn[59295]: self.callable = self.load() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 57, in load Apr 16 14:47:20 traefik-internal gunicorn[59295]: return self.load_wsgiapp() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsg> Apr 16 14:47:20 traefik-internal gunicorn[59295]: return util.import_app(self.app_uri) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/util.py", line 377, in import_app Apr 16 14:47:20 traefik-internal gunicorn[59295]: mod = importlib.import_module(module) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: return _bootstrap._gcd_import(name[level:], package, level) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1206, in _gcd_import Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1178, in _find_and_load Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 690, in _load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap_external>", line 940, in exec_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 47, in <module> Apr 16 14:47:20 traefik-internal gunicorn[59295]: app.secret_key = _load_or_create_secret_key() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 42, in _load_or_create_secret_key Apr 16 14:47:20 traefik-internal gunicorn[59295]: os.makedirs(os.path.dirname(_SECRET_KEY_PATH), exist_ok=True) Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 215, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 225, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: PermissionError: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [2026-04-16 14:47:20 -0400] [59295] [INFO] Worker exiting (pid: 59295) Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [INFO] Control socket listening at /opt/traefik-manager/.gunicorn/gunicor> Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Worker (pid:59295) exited with code 3. Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Shutting down: Master Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Reason: Worker failed to boot. Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Failed with result 'exit-code'.

This is how I got it installed:

`▸ What would you like to install?
Choose an option
1) Traefik + Traefik Manager (full stack)
2) Traefik Manager only
Choice [1]: 2

────────────────────────────────────────

Deployment method
1) Docker
2) Linux service (systemd)
Choice [1]: 2

▸ Checking dependencies
✔ curl found
✔ git found
✔ Python 3.11.2 found
✔ systemd found

▸ Traefik Manager - Linux Service Setup
Press Enter to accept defaults shown in brackets.

Install directory [/opt/traefik-manager]:
Data directory [/var/lib/traefik-manager]: /opt/traefik-manager/data
Port [5000]:

────────────────────────────────────────

-- Service User --
Create a dedicated system user (traefik-manager)? (y/n) [y]: y

────────────────────────────────────────

-- Dynamic Config --
ℹ Single file is simpler. Directory (one .yml per service) is easier at scale.
Dynamic config layout
1) Single file (dynamic.yml)
2) Directory - one .yml file per service
Choice [1]: 2
Path to Traefik dynamic config directory [/etc/traefik/conf.d]: /etc/traefik/dynamic/

────────────────────────────────────────

-- Optional Mounts --
ℹ Expose extra Traefik data to Traefik Manager for richer visibility.
Mount SSL certs (acme.json)? (y/n) [y]: y
Path to acme.json [/etc/traefik/acme.json]:
Mount access logs? (y/n) [y]: y
Path to Traefik access log [/var/log/traefik/access.log]: /var/log/traefik-access.log
Mount Traefik static config (traefik.yml)? (y/n) [n]: y
Path to traefik.yml [/etc/traefik/traefik.yml]:

▸ Installing Traefik Manager
⚠ /opt/traefik-manager already exists. Pulling latest changes.
Already up to date.
✔ Repository cloned to /opt/traefik-manager
✔ Python dependencies installed
✔ Data directories created at /opt/traefik-manager/data
✔ System user traefik-manager created
✔ systemd unit written to /etc/systemd/system/traefik-manager.service
Created symlink /etc/systemd/system/multi-user.target.wants/traefik-manager.service → /etc/systemd/system/traefik-manager.service.
✔ Service enabled and started

▸ Waiting for Traefik Manager to generate temporary password
⚠ Could not retrieve temporary password. Check: sudo journalctl -u traefik-manager`

Originally created by @counterf on GitHub (Apr 16, 2026). Original GitHub issue: https://github.com/chr0nzz/traefik-manager/issues/24 Originally assigned to: @chr0nzz on GitHub. I am trying to install traefik-manager on an existing traefik LXC machine. `Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Starting gunicorn 25.3.0 Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Listening at: http://0.0.0.0:5000 (57839) Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Using worker: sync Apr 16 14:31:17 traefik-internal gunicorn[57840]: [2026-04-16 14:31:17 -0400] [57840] [INFO] Booting worker with pid: 57840 Apr 16 14:31:17 traefik-internal gunicorn[57839]: [2026-04-16 14:31:17 -0400] [57839] [INFO] Control socket listening at /opt/traefik-manager/.gunicorn/gunicor> Apr 16 14:31:17 traefik-internal gunicorn[57840]: [2026-04-16 14:31:17 -0400] [57840] [ERROR] Exception in worker process Apr 16 14:31:17 traefik-internal gunicorn[57840]: Traceback (most recent call last): Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/arbiter.py", line 713, in spawn_worker Apr 16 14:31:17 traefik-internal gunicorn[57840]: worker.init_process() Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/workers/base.py", line 136, in init_p> Apr 16 14:31:17 traefik-internal gunicorn[57840]: self.load_wsgi() Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/workers/base.py", line 148, in load_w> Apr 16 14:31:17 traefik-internal gunicorn[57840]: self.wsgi = self.app.wsgi() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/base.py", line 66, in wsgi Apr 16 14:31:17 traefik-internal gunicorn[57840]: self.callable = self.load() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 57, in load Apr 16 14:31:17 traefik-internal gunicorn[57840]: return self.load_wsgiapp() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsg> Apr 16 14:31:17 traefik-internal gunicorn[57840]: return util.import_app(self.app_uri) Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/util.py", line 377, in import_app Apr 16 14:31:17 traefik-internal gunicorn[57840]: mod = importlib.import_module(module) Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module Apr 16 14:31:17 traefik-internal gunicorn[57840]: return _bootstrap._gcd_import(name[level:], package, level) Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 1206, in _gcd_import Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 1178, in _find_and_load Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 690, in _load_unlocked Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap_external>", line 940, in exec_module Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/app.py", line 47, in <module> Apr 16 14:31:17 traefik-internal gunicorn[57840]: app.secret_key = _load_or_create_secret_key() Apr 16 14:31:17 traefik-internal gunicorn[57840]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "/opt/traefik-manager/app.py", line 42, in _load_or_create_secret_key Apr 16 14:31:17 traefik-internal gunicorn[57840]: os.makedirs(os.path.dirname(_SECRET_KEY_PATH), exist_ok=True) Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen os>", line 215, in makedirs Apr 16 14:31:17 traefik-internal gunicorn[57840]: File "<frozen os>", line 225, in makedirs ...skipping... Apr 16 14:47:20 traefik-internal gunicorn[59295]: self.callable = self.load() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 57, in load Apr 16 14:47:20 traefik-internal gunicorn[59295]: return self.load_wsgiapp() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsg> Apr 16 14:47:20 traefik-internal gunicorn[59295]: return util.import_app(self.app_uri) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/util.py", line 377, in import_app Apr 16 14:47:20 traefik-internal gunicorn[59295]: mod = importlib.import_module(module) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: return _bootstrap._gcd_import(name[level:], package, level) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1206, in _gcd_import Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1178, in _find_and_load Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 690, in _load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap_external>", line 940, in exec_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 47, in <module> Apr 16 14:47:20 traefik-internal gunicorn[59295]: app.secret_key = _load_or_create_secret_key() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 42, in _load_or_create_secret_key Apr 16 14:47:20 traefik-internal gunicorn[59295]: os.makedirs(os.path.dirname(_SECRET_KEY_PATH), exist_ok=True) Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 215, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 225, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: PermissionError: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [2026-04-16 14:47:20 -0400] [59295] [INFO] Worker exiting (pid: 59295) Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [INFO] Control socket listening at /opt/traefik-manager/.gunicorn/gunicor> Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Worker (pid:59295) exited with code 3. Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Shutting down: Master Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Reason: Worker failed to boot. Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Failed with result 'exit-code'. ...skipping... Apr 16 14:47:20 traefik-internal gunicorn[59295]: self.callable = self.load() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 57, in load Apr 16 14:47:20 traefik-internal gunicorn[59295]: return self.load_wsgiapp() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/app/wsgiapp.py", line 47, in load_wsg> Apr 16 14:47:20 traefik-internal gunicorn[59295]: return util.import_app(self.app_uri) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/venv/lib/python3.11/site-packages/gunicorn/util.py", line 377, in import_app Apr 16 14:47:20 traefik-internal gunicorn[59295]: mod = importlib.import_module(module) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: return _bootstrap._gcd_import(name[level:], package, level) Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1206, in _gcd_import Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1178, in _find_and_load Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 690, in _load_unlocked Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap_external>", line 940, in exec_module Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 47, in <module> Apr 16 14:47:20 traefik-internal gunicorn[59295]: app.secret_key = _load_or_create_secret_key() Apr 16 14:47:20 traefik-internal gunicorn[59295]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "/opt/traefik-manager/app.py", line 42, in _load_or_create_secret_key Apr 16 14:47:20 traefik-internal gunicorn[59295]: os.makedirs(os.path.dirname(_SECRET_KEY_PATH), exist_ok=True) Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 215, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: File "<frozen os>", line 225, in makedirs Apr 16 14:47:20 traefik-internal gunicorn[59295]: PermissionError: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [Errno 13] Permission denied: '/app' Apr 16 14:47:20 traefik-internal gunicorn[59295]: [2026-04-16 14:47:20 -0400] [59295] [INFO] Worker exiting (pid: 59295) Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [INFO] Control socket listening at /opt/traefik-manager/.gunicorn/gunicor> Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Worker (pid:59295) exited with code 3. Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Shutting down: Master Apr 16 14:47:20 traefik-internal gunicorn[59294]: [2026-04-16 14:47:20 -0400] [59294] [ERROR] Reason: Worker failed to boot. Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED Apr 16 14:47:20 traefik-internal systemd[1]: traefik-manager.service: Failed with result 'exit-code'.` This is how I got it installed: `▸ What would you like to install? Choose an option 1) Traefik + Traefik Manager (full stack) 2) Traefik Manager only Choice [1]: 2 ──────────────────────────────────────── Deployment method 1) Docker 2) Linux service (systemd) Choice [1]: 2 ▸ Checking dependencies ✔ curl found ✔ git found ✔ Python 3.11.2 found ✔ systemd found ▸ Traefik Manager - Linux Service Setup Press Enter to accept defaults shown in brackets. Install directory [/opt/traefik-manager]: Data directory [/var/lib/traefik-manager]: /opt/traefik-manager/data Port [5000]: ──────────────────────────────────────── -- Service User -- Create a dedicated system user (traefik-manager)? (y/n) [y]: y ──────────────────────────────────────── -- Dynamic Config -- ℹ Single file is simpler. Directory (one .yml per service) is easier at scale. Dynamic config layout 1) Single file (dynamic.yml) 2) Directory - one .yml file per service Choice [1]: 2 Path to Traefik dynamic config directory [/etc/traefik/conf.d]: /etc/traefik/dynamic/ ──────────────────────────────────────── -- Optional Mounts -- ℹ Expose extra Traefik data to Traefik Manager for richer visibility. Mount SSL certs (acme.json)? (y/n) [y]: y Path to acme.json [/etc/traefik/acme.json]: Mount access logs? (y/n) [y]: y Path to Traefik access log [/var/log/traefik/access.log]: /var/log/traefik-access.log Mount Traefik static config (traefik.yml)? (y/n) [n]: y Path to traefik.yml [/etc/traefik/traefik.yml]: ▸ Installing Traefik Manager ⚠ /opt/traefik-manager already exists. Pulling latest changes. Already up to date. ✔ Repository cloned to /opt/traefik-manager ✔ Python dependencies installed ✔ Data directories created at /opt/traefik-manager/data ✔ System user traefik-manager created ✔ systemd unit written to /etc/systemd/system/traefik-manager.service Created symlink /etc/systemd/system/multi-user.target.wants/traefik-manager.service → /etc/systemd/system/traefik-manager.service. ✔ Service enabled and started ▸ Waiting for Traefik Manager to generate temporary password ⚠ Could not retrieve temporary password. Check: sudo journalctl -u traefik-manager`
BreizhHardware 2026-05-06 12:22:45 +02:00
  • closed this issue
  • added the
    bug
    label
Author
Owner

@counterf commented on GitHub (Apr 16, 2026):

I changed the user in the /etc/systemd/system/traefik-manager.service to root and no issues now. I think there is some compatibility issue with lxc containers proxmox.

<!-- gh-comment-id:4263631444 --> @counterf commented on GitHub (Apr 16, 2026): I changed the user in the /etc/systemd/system/traefik-manager.service to root and no issues now. I think there is some compatibility issue with lxc containers proxmox.
Author
Owner

@chr0nzz commented on GitHub (Apr 16, 2026):

Thanks for the detailed report! This was a bug in the startup code - the Flask session secret key path was hardcoded to /app/config/.secret_key (a Docker-internal path) instead of being derived from SETTINGS_PATH like everything else. So on a native Linux install it tried to create /app/ and hit a permission error.

Fixed in the upcoming v0.12.0 release, out tomorrow. In the meantime you can work around it by setting SECRET_KEY= in your systemd unit's [Service] section - that bypasses the file entirely.

<!-- gh-comment-id:4263649551 --> @chr0nzz commented on GitHub (Apr 16, 2026): Thanks for the detailed report! This was a bug in the startup code - the Flask session secret key path was hardcoded to /app/config/.secret_key (a Docker-internal path) instead of being derived from SETTINGS_PATH like everything else. So on a native Linux install it tried to create /app/ and hit a permission error. Fixed in the upcoming v0.12.0 release, out tomorrow. In the meantime you can work around it by setting SECRET_KEY=<any-random-string> in your systemd unit's [Service] section - that bypasses the file entirely.
Author
Owner

@chr0nzz commented on GitHub (Apr 17, 2026):

new update out and fixes this issue, if you don't want to run as root you can reinstall it.

<!-- gh-comment-id:4265421619 --> @chr0nzz commented on GitHub (Apr 17, 2026): new update out and fixes this issue, if you don't want to run as root you can reinstall it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/traefik-manager#24
No description provided.