Can't login anymore

Hi,

I run Gramps Web (latest image) in a Docker container on my Synology NAS. I have a reverse proxy to be able to connect to Gramps Web over https:// gramps.mydomain.nl, but I used to be able to connect directly via http:// ipaddress:5449 as well. Since last week, I can’t login anymore. When I log in, I am immediately returned to the login page.

When I try to login via http:/ /ipaddress:5449, I get the following error messages in the browser console:

XHRGEThttp://ipaddress:5449/api/metadata/[HTTP/1.1 500 INTERNAL SERVER ERROR 592ms]

XHRPOSThttp://ipaddress:5449/api/token/create_owner/[HTTP/1.1 500 INTERNAL SERVER ERROR 217ms]

When I try to login via https:/ /gramps.mydomain.nl, I get the following error messages in the browser console:

XHRGEThttps://gramps.mydomain.nl/api/metadata/[HTTP/2 500 208ms]

XHRPOSThttps://gramps.mydomain.nl/api/token/create_owner/[HTTP/2 500 207ms]

These are the environment variables:

"GRAMPSWEB_TREE=MyName",

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",

"DEBIAN_FRONTEND=noninteractive",

"GRAMPS_VERSION=60",

"PYTHONPATH=:/usr/lib/python3/dist-packages",

"LANGUAGE=en_US.utf8",

"LANG=en_US.utf8",

"LC_ALL=en_US.utf8",

"OMP_NUM_THREADS=1",

"GRAMPS_API_CONFIG=/app/config/config.cfg",

"GRAMPSWEB_USER_DB_URI=sqlite:////app/users/users.sqlite",

"GRAMPSWEB_MEDIA_BASE_DIR=/app/media",

"GRAMPSWEB_SEARCH_INDEX_DB_URI=sqlite:////app/indexdir/search_index.db",

"GRAMPSWEB_STATIC_PATH=/app/static",

"GRAMPSWEB_THUMBNAIL_CACHE_CONFIG__CACHE_DIR=/app/thumbnail_cache",

"GRAMPSWEB_REQUEST_CACHE_CONFIG__CACHE_DIR=/app/cache/request_cache",

"GRAMPSWEB_PERSISTENT_CACHE_CONFIG__CACHE_DIR=/app/cache/persistent_cache",

"GRAMPSWEB_REPORT_DIR=/app/cache/reports",

"GRAMPSWEB_EXPORT_DIR=/app/cache/export",

"GRAMPSHOME=/root",

"GRAMPS_DATABASE_PATH=/root/.gramps/grampsdb",

"WEB_CONCURRENCY=1",

"GUNICORN_NUM_WORKERS=1",

"GRAMPSWEB_BASE_URL=https://gramps.mydomain.nl"

I can’t figure out what’s wrong. Does anyone recognize this issue or can suggest any help?

Thanks in advance!

This is the only output in the Portainer logs:

(__main__.py:8): Gtk-CRITICAL **: 13:30:26.439: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed

INFO  [alembic.runtime.migration] Context impl SQLiteImpl.

INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

[2026-02-08 13:30:33 +0000] [11] [INFO] Starting gunicorn 24.1.1

[2026-02-08 13:30:33 +0000] [11] [INFO] Listening at: http://0.0.0.0:5000 (11)

[2026-02-08 13:30:33 +0000] [11] [INFO] Using worker: sync

[2026-02-08 13:30:33 +0000] [12] [INFO] Booting worker with pid: 12

(gunicorn:12): Gtk-CRITICAL **: 13:30:36.033: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed

/usr/local/lib/python3.11/dist-packages/flask_limiter/_extension.py:364: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.

  warnings.warn(

(__main__.py:9): Gtk-CRITICAL **: 06:03:27.145: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed

INFO  [alembic.runtime.migration] Context impl SQLiteImpl.

INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

[2026-02-09 06:03:39 +0000] [12] [INFO] Starting gunicorn 24.1.1

[2026-02-09 06:03:39 +0000] [12] [INFO] Listening at: http://0.0.0.0:5000 (12)

[2026-02-09 06:03:39 +0000] [12] [INFO] Using worker: sync

[2026-02-09 06:03:39 +0000] [13] [INFO] Booting worker with pid: 13

(gunicorn:13): Gtk-CRITICAL **: 06:03:42.266: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed

/usr/local/lib/python3.11/dist-packages/flask_limiter/_extension.py:364: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.

  warnings.warn(

The logs stop after warnings.warn( and even after I try to login, no new log entries are created.

Error 500 without a corresponding exception in the log is impossible, so I claim the data shared here is not consistent.

I’m not aware of a recent change that could explain this, so it must have something to do with your setup.

That’s what I’m trying to figure out. It was working before, so it’s unclear to me why it isn’t now. If I had more log info to share, I would. But this is all that’s available in Portainer.

And it works via reverse proxy? Are you using password authentication (the normal one)?