September 4, 2025Sep 4 Borgitory is a comprehensive web-based management interface for BorgBackup repositories with real-time monitoring, automated scheduling, and cloud synchronization capabilities. It's a docker container here.It's currently in Beta so don't use it with production backups yet.GitHubGitHub - mlapaglia/Borgitory: Web UI for managing BorgBac...Web UI for managing BorgBackup repositories with scheduling, monitoring, and cloud sync - mlapaglia/BorgitoryI am working on making it a community app. Edited September 4, 2025Sep 4 by mlapaglia
September 15, 2025Sep 15 This looks awesome, and I'm looking forward to following it.Any chance you can make it easy to migrate from Borgmatic directly to this? I find Borgmatic works great, but the learning curve for starting it was extremely difficult. It also only has a log file for monitoring. This would be very nice to monitor.Keep up the good work!
September 15, 2025Sep 15 Hi,i wanted to test this but im getting this error on a fresh install via the community app. any hints?File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 629, in connectreturn self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file(Background on this error at: https://sqlalche.me/e/20/e3q8)❌ Database migration failed!** Press ANY KEY to close this window **
September 16, 2025Sep 16 Author 9 hours ago, shinexx said:Hi,i wanted to test this but im getting this error on a fresh install via the community app. any hints?File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 629, in connectreturn self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file(Background on this error at: https://sqlalche.me/e/20/e3q8)❌ Database migration failed!** Press ANY KEY to close this window **sorry 2.0 was just released and the template broke. i have updated it. in the mean time change your data directory to mount to /app/data instead of /app/app/data and it should start working again.17 hours ago, gamerayers said:This looks awesome, and I'm looking forward to following it.Any chance you can make it easy to migrate from Borgmatic directly to this? I find Borgmatic works great, but the learning curve for starting it was extremely difficult. It also only has a log file for monitoring. This would be very nice to monitor.Keep up the good work!You should be able to mount the repository to the container and import the repository into the app.
September 17, 2025Sep 17 I get this error:util.load_python_file(self.dir, "env.py")~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/util/pyfiles.py", line 116, in load_python_filemodule = load_module_py(module_id, path)File "/opt/venv/lib/python3.13/site-packages/alembic/util/pyfiles.py", line 136, in load_module_pyspec.loader.exec_module(module) # type: ignore~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^File "<frozen importlib._bootstrap_external>", line 1026, in exec_moduleFile "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removedFile "/app/alembic/env.py", line 109, in <module>run_migrations_online()~~~~~~~~~~~~~~~~~~~~~^^File "/app/alembic/env.py", line 103, in run_migrations_onlinecontext.run_migrations()~~~~~~~~~~~~~~~~~~~~~~^^File "<string>", line 8, in run_migrationsFile "/opt/venv/lib/python3.13/site-packages/alembic/runtime/environment.py", line 946, in run_migrationsself.get_context().run_migrations(**kw)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/runtime/migration.py", line 627, in run_migrationsstep.migration_fn(**kw)~~~~~~~~~~~~~~~~~^^^^^^File "/app/alembic/versions/d930de046be6_migrate_cloud_sync_configs_to_json_.py", line 25, in upgradewith op.batch_alter_table("apscheduler_jobs", schema=None) as batch_op:~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib/python3.13/contextlib.py", line 148, in __exit__next(self.gen)~~~~^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/operations/base.py", line 397, in batch_alter_tableimpl.flush()~~~~~~~~~~^^File "/opt/venv/lib/python3.13/site-packages/alembic/operations/batch.py", line 115, in flushfn(*arg, **kw)~~^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/ddl/impl.py", line 464, in drop_indexself._exec(schema.DropIndex(index, **kw))~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/ddl/impl.py", line 246, in _execreturn conn.execute(construct, params)~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in executereturn meth(self,distilled_parameters,execution_options or NO_OPTIONS,)File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/sql/ddl.py", line 187, in _execute_on_connectionreturn connection._execute_ddl(~~~~~~~~~~~~~~~~~~~~~~~^self, distilled_params, execution_options^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1530, in _execute_ddlret = self._execute_context(dialect,...<4 lines>...compiled,)File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_contextreturn self._exec_single_context(~~~~~~~~~~~~~~~~~~~~~~~~~^dialect, context, statement, parameters^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_contextself._handle_dbapi_exception(~~~~~~~~~~~~~~~~~~~~~~~~~~~~^e, str_statement, effective_parameters, cursor, context^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exceptionraise sqlalchemy_exception.with_traceback(exc_info[2]) from eFile "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_contextself.dialect.do_execute(~~~~~~~~~~~~~~~~~~~~~~~^cursor, str_statement, effective_parameters, context^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_executecursor.execute(statement, parameters)~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such index: ix_apscheduler_jobs_next_run_time[SQL: DROP INDEX ix_apscheduler_jobs_next_run_time](Background on this error at: https://sqlalche.me/e/20/e3q8)❌ Database migration failed!
September 17, 2025Sep 17 Author 6 hours ago, Ulvster said:I get this error:util.load_python_file(self.dir, "env.py")~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/util/pyfiles.py", line 116, in load_python_filemodule = load_module_py(module_id, path)File "/opt/venv/lib/python3.13/site-packages/alembic/util/pyfiles.py", line 136, in load_module_pyspec.loader.exec_module(module) # type: ignore~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^File "<frozen importlib._bootstrap_external>", line 1026, in exec_moduleFile "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removedFile "/app/alembic/env.py", line 109, in <module>run_migrations_online()~~~~~~~~~~~~~~~~~~~~~^^File "/app/alembic/env.py", line 103, in run_migrations_onlinecontext.run_migrations()~~~~~~~~~~~~~~~~~~~~~~^^File "<string>", line 8, in run_migrationsFile "/opt/venv/lib/python3.13/site-packages/alembic/runtime/environment.py", line 946, in run_migrationsself.get_context().run_migrations(**kw)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/runtime/migration.py", line 627, in run_migrationsstep.migration_fn(**kw)~~~~~~~~~~~~~~~~~^^^^^^File "/app/alembic/versions/d930de046be6_migrate_cloud_sync_configs_to_json_.py", line 25, in upgradewith op.batch_alter_table("apscheduler_jobs", schema=None) as batch_op:~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib/python3.13/contextlib.py", line 148, in __exit__next(self.gen)~~~~^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/operations/base.py", line 397, in batch_alter_tableimpl.flush()~~~~~~~~~~^^File "/opt/venv/lib/python3.13/site-packages/alembic/operations/batch.py", line 115, in flushfn(*arg, **kw)~~^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/ddl/impl.py", line 464, in drop_indexself._exec(schema.DropIndex(index, **kw))~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/alembic/ddl/impl.py", line 246, in _execreturn conn.execute(construct, params)~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1419, in executereturn meth(self,distilled_parameters,execution_options or NO_OPTIONS,)File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/sql/ddl.py", line 187, in _execute_on_connectionreturn connection._execute_ddl(~~~~~~~~~~~~~~~~~~~~~~~^self, distilled_params, execution_options^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1530, in _execute_ddlret = self._execute_context(dialect,...<4 lines>...compiled,)File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_contextreturn self._exec_single_context(~~~~~~~~~~~~~~~~~~~~~~~~~^dialect, context, statement, parameters^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_contextself._handle_dbapi_exception(~~~~~~~~~~~~~~~~~~~~~~~~~~~~^e, str_statement, effective_parameters, cursor, context^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exceptionraise sqlalchemy_exception.with_traceback(exc_info[2]) from eFile "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_contextself.dialect.do_execute(~~~~~~~~~~~~~~~~~~~~~~~^cursor, str_statement, effective_parameters, context^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)^File "/opt/venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 951, in do_executecursor.execute(statement, parameters)~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such index: ix_apscheduler_jobs_next_run_time[SQL: DROP INDEX ix_apscheduler_jobs_next_run_time](Background on this error at: https://sqlalche.me/e/20/e3q8)❌ Database migration failed!Can you try moving your db file and then restart the app so it will make a new DB and see if you still have the issue?
September 18, 2025Sep 18 Author I see the issue. this is from before i had a db migration process created. i'll create a patch version shortly.EDIT: v2.2.0 should fix your issue. i am also adding integration tests to keep this from happening again ❤️ Edited September 18, 2025Sep 18 by mlapaglia
September 19, 2025Sep 19 Just forced update. Logged in. Looks fabulous! Edited September 19, 2025Sep 19 by paladin
September 19, 2025Sep 19 Working so far, I've imported my 31Tb Repo from Vorta, no problem so far. Thank you!☺️
September 23, 2025Sep 23 Author 2.3.0 is out with support for pre/post hooks so you can run custom commands before and after a backup
September 28, 2025Sep 28 Using latest version 2.4.3 of borgitory.I tried to mount /mnt/remotes/192.168.1.105_share11/borgbackup/ to /mnt/repos.I also tried /mnt/remotes/192.168.1.105_share11 to /mnt/repos or even /mnt/remotes/ to /mnt/repos.The scan logic does not pick up any of the repos.Is there a way I can manually add one or more directories/repos?I have the feeling it scans for ages and it does not find anything.Thanks
September 28, 2025Sep 28 When I try to add linodes object storage (equal to aws) as the cloud sync configuration I am getting an error"GET /api/shared/notification?type=error&message=An%20error%20occurred%3A%20Unprocessable%20Content HTTP/1.1" 200 OKAnyone know what could be the cause of it?
September 28, 2025Sep 28 Author 1 hour ago, mastervol said:Using latest version 2.4.3 of borgitory.I tried to mount /mnt/remotes/192.168.1.105_share11/borgbackup/ to /mnt/repos.I also tried /mnt/remotes/192.168.1.105_share11 to /mnt/repos or even /mnt/remotes/ to /mnt/repos.The scan logic does not pick up any of the repos.Is there a way I can manually add one or more directories/repos?I have the feeling it scans for ages and it does not find anything.ThanksGo to the debug screen and see if the app sees those mounted volumes.
September 28, 2025Sep 28 Author 8 minutes ago, 2TC said:When I try to add linodes object storage (equal to aws) as the cloud sync configuration I am getting an error"GET /api/shared/notification?type=error&message=An%20error%20occurred%3A%20Unprocessable%20Content HTTP/1.1" 200 OKAnyone know what could be the cause of it?If you look at the response of the http call in dev tools it usually has more information in there.
September 28, 2025Sep 28 8 minutes ago, mlapaglia said:If you look at the response of the http call in dev tools it usually has more information in there.Alright, this explains it. The AWS part seems hardcoded, and the linode expects "AKIA"-prefix of the Key ID and Access Key.From the payload I can readprovider: s3provider_config[access_key]provider_config[secret_key]So unless I make a change to the actual config or it is being added as an alternative in the base, it will most likely fail.
September 28, 2025Sep 28 Author 1 hour ago, 2TC said:So unless I make a change to the actual config or it is being added as an alternative in the base, it will most likely fail.Adding additional providers is documented here if you want to contribute! https://borgitory.com/en/latest/cloud-providers.html
September 29, 2025Sep 29 Author 22 hours ago, mastervol said:try v2.5.0-alpha3 and see if that works better.
September 29, 2025Sep 29 2 hours ago, mlapaglia said:try v2.5.0-alpha3 and see if that works better.Cool, thanks, this works.Now I can use the remotes share from unraid.Now exploring the application ;-)
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.