label-studio icon indicating copy to clipboard operation
label-studio copied to clipboard

Upgrade label-studio version (in docker) causes web UI to be completely blank

Open mkrupczak3 opened this issue 1 year ago • 43 comments

Describe the bug I have a label-studio instance running locally on linux with docker-compose. Whenever I try to upgrade the label-studio version from 1.9.0 to any newer version, the web UI for label-studio upon login is completely blank.

I have tried running a shell in the label-studio-app container and triggering the upgrade there with pip before updating the container tag to newer version, however this has no effect and the issue still occurs.

To Reproduce Steps to reproduce the behavior:

  1. Launch a label-studio instance version 1.9.0 using docker
  2. Create a project, import data
  3. Stop the container and update tag to newer label-studio version
  4. Upon login, the user interface for label-studio will be completely blank

Expected behavior The expected contract for docker containers is that software upgrade is done atomically by incrementing the container's tag. The container's state is supposed to be ephemeral, so it should not be dependent on manual execution of a shell within the container to perform the upgrade there (such changes will disappear upon re-launch of the container anyways).

Screenshots Example error output from label-studio when upgrading from 1.9.0 to 1.10.0:

Starting new HTTPS connection (1): pypi.org:443
[https://pypi.org:443](https://pypi.org/) "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.10.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedColumn: column htx_user.is_deleted does not exist
LINE 1: ...", "htx_user"."is_staff", "htx_user"."is_active", "htx_user"...
                                                             ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/label-studio", line 6, in <module>
    sys.exit(main())
  File "/label-studio/label_studio/server.py", line 353, in main
    _init(input_args, config)
  File "/label-studio/label_studio/server.py", line 189, in _init
    user = _create_user(input_args, config)
  File "/label-studio/label_studio/server.py", line 141, in _create_user
    user = User.objects.filter(email=DEFAULT_USERNAME).first()
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 674, in first
    for obj in (self if self.ordered else self.order_by('pk'))[:1]:
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 280, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/compiler.py", line 1175, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.10/dist-packages/sentry_sdk/integrations/django/__init__.py", line 629, in execute
    return real_execute(self, sql, params)
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 79, in _execute
    with self.db.wrap_database_errors:
  File "/usr/local/lib/python3.10/dist-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: column htx_user.is_deleted does not exist
LINE 1: ...", "htx_user"."is_staff", "htx_user"."is_active", "htx_user"...
                                                             ^

Environment (please complete the following information):

  • OS: Alma Linux
  • Label Studio Version v1.9.0 (docker

Additional context

Running label-studio with a modified version of the example docker-compose.yml file.

mkrupczak3 avatar Aug 09 '24 20:08 mkrupczak3

Posted here on the label-studio Slack:

https://label-studio.slack.com/archives/CQ8LYQ0J2/p1723232435489269

mkrupczak3 avatar Aug 09 '24 20:08 mkrupczak3

Hi @mkrupczak3,

Migrations should be automatic but it looks like you've got one that failed to run. Let's get that fixed. Try these steps:

$ docker compose up -d
$ docker exec -it label-studio-app-1 bash
$ cd label_studio
$ python3 manage.py migrate

then hit ctrl+d to exit the docker shell and run docker compose restart.

jombooth avatar Aug 09 '24 21:08 jombooth

Thanks @jombooth,

I performed your suggested troubleshooting steps, however it seems that label-studio did not recognize the need for a migration:

I have no name!@91ae1ff040fd:~/label_studio$ python3 manage.py migrate
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': 'b1aeafb6179c46c180ce2d2c178fac11', 'span_id': 'a562ebc486c5a053', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487
/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_fields.py:160: UserWarning: Field "model_provider_connection_create" has conflict with protected namespace "model_".

You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_fields.py:160: UserWarning: Field "model_provider_connection_view" has conflict with protected namespace "model_".

You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_fields.py:160: UserWarning: Field "model_provider_connection_change" has conflict with protected namespace "model_".

You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_fields.py:160: UserWarning: Field "model_provider_connection_delete" has conflict with protected namespace "model_".

You may be able to resolve this warning by setting `model_config['protected_namespaces'] = ()`.
  warnings.warn(
Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, ml_model_providers, ml_models, organizations, projects, sessions, tasks, users, webhooks
Running migrations:
  No migrations to apply.

mkrupczak3 avatar Aug 09 '24 21:08 mkrupczak3

Ah, I should have mentioned that it'll be necessary to switch your label studio version to the later one that you're trying to run before running the above steps :sweat_smile:. Try changing your version to 1.10 and rebuilding your containers (docker-compose up --build) before the steps I shared above.

jombooth avatar Aug 09 '24 21:08 jombooth

I had updated the containers to 1.10 and used --force-recreate, still no effect.

Encountering a crash loop now with the following output:

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, organizations, projects, sessions, tasks, users, webhooks
Running migrations:
  No migrations to apply.
=> Migrations completed.
./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/31-run-label-studio-init.sh
=> Run label-studio init...
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': '619567a7df2b40ab9322b9c2cd5c6041', 'span_id': '8d19de90a697f9c7', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.10.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedColumn: column htx_user.is_deleted does not exist
LINE 1: ...", "htx_user"."is_staff", "htx_user"."is_active", "htx_user"...
                                                             ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/label-studio", line 6, in <module>
    sys.exit(main())
  File "/label-studio/label_studio/server.py", line 353, in main
    _init(input_args, config)
  File "/label-studio/label_studio/server.py", line 189, in _init
    user = _create_user(input_args, config)
  File "/label-studio/label_studio/server.py", line 141, in _create_user
    user = User.objects.filter(email=DEFAULT_USERNAME).first()
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 674, in first
    for obj in (self if self.ordered else self.order_by('pk'))[:1]:
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 280, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.10/dist-packages/django/db/models/sql/compiler.py", line 1175, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.10/dist-packages/sentry_sdk/integrations/django/__init__.py", line 629, in execute
    return real_execute(self, sql, params)
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 79, in _execute
    with self.db.wrap_database_errors:
  File "/usr/local/lib/python3.10/dist-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.10/dist-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: column htx_user.is_deleted does not exist
LINE 1: ...", "htx_user"."is_staff", "htx_user"."is_active", "htx_user"...
                                                             ^

mkrupczak3 avatar Aug 09 '24 22:08 mkrupczak3

I attempted with Caitlin's instructions via support thread, adding python3 label_studio/manage.py migrate in front of the label-studio run command in my docker compose file. I encountered the same issue where the script does not recognize the need for a migration:

[mwk@sisyphus label-studio]$ docker logs -f label-studio-app-1 
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': 'fc21c095aa7f48f8b5559893f13ee8ed', 'span_id': 'b3606cde1ece73e0', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.10.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, organizations, projects, sessions, tasks, users, webhooks
Running migrations:
  No migrations to apply.
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': '5f476ba88a104eeab5ee9cbd224508b9', 'span_id': 'be2a2622b2852857', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.10.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Performing system checks...

System check identified no issues (1 silenced).
August 09, 2024 - 22:04:44
Django version 3.2.23, using settings 'core.settings.label_studio'
Starting development server at http://0.0.0.0:8080/
Quit the server with CONTROL-C.
^C
[mwk@sisyphus label-studio]$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS          PORTS                                                                                          NAMES
e59e2da8252c   heartexlabs/label-studio:1.10.0   "./deploy/docker-ent…"   27 seconds ago   Up 26 seconds   8080/tcp, 0.0.0.0:8080->8085/tcp, :::8080->8085/tcp, 0.0.0.0:443->8086/tcp, :::443->8086/tcp   labelstudio_nginx
481482c38476   heartexlabs/label-studio:1.10.0   "./deploy/docker-ent…"   27 seconds ago   Up 26 seconds   8000/tcp, 8080/tcp                                                                             label-studio-app-1
0024171a07d4   postgres:11.5                     "docker-entrypoint.s…"   27 seconds ago   Up 27 seconds   5432/tcp                                                                                       label-studio-db-1
[mwk@sisyphus label-studio]$ docker exec -it label-studio-app-1 /bin/bash
groups: cannot find name for group ID 968
I have no name!@481482c38476:~$ python3 label_studio/manage.py migrate
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': '421a58c2ec8048009592626cadef7009', 'span_id': 'a35cbd3d8c770d95', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.10.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, organizations, projects, sessions, tasks, users, webhooks
Running migrations:
  No migrations to apply.

mkrupczak3 avatar Aug 09 '24 22:08 mkrupczak3

I attempted to upgrade label-studio using pip in the container then migrate, but also encountered an error:

I have no name!@87daec1c0581:~/label_studio$ python3 manage.py migrate
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': '4793a218e98048abbacb2a82e383f4c1', 'span_id': '858fa8a94b687139', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487
Traceback (most recent call last):
  File "/label-studio/label_studio/manage.py", line 23, in <module>
    execute_from_command_line(sys.argv)
  File "/label-studio/.local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/label-studio/.local/lib/python3.10/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/label-studio/.local/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/label-studio/.local/lib/python3.10/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/label-studio/.local/lib/python3.10/site-packages/django/apps/config.py", line 301, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/label-studio/label_studio/data_export/models.py", line 21, in <module>
    from tasks.models import Annotation
  File "/label-studio/label_studio/tasks/models.py", line 27, in <module>
    from data_manager.managers import PreparedTaskManager, TaskManager
  File "/label-studio/label_studio/data_manager/managers.py", line 26, in <module>
    class _Operator(BaseModel):
  File "/label-studio/.local/lib/python3.10/site-packages/pydantic/_internal/_model_construction.py", line 96, in __new__
    private_attributes = inspect_namespace(
  File "/label-studio/.local/lib/python3.10/site-packages/pydantic/_internal/_model_construction.py", line 401, in inspect_namespace
    raise PydanticUserError(
pydantic.errors.PydanticUserError: A non-annotated attribute was detected: `EQUAL = 'equal'`. All model fields require a type annotation; if `EQUAL` is not meant to be a field, you may be able to resolve this error by annotating it as a `ClassVar` or updating `model_config['ignored_types']`.

For further information visit https://errors.pydantic.dev/2.8/u/model-field-missing-annotation
Sentry is attempting to send 2 pending events
Waiting up to 2 seconds
Press Ctrl-C to quit

mkrupczak3 avatar Aug 09 '24 22:08 mkrupczak3

I'm not really sure what effect upgrading with pip inside the container would have. Can you instead try Label Studio 1.11.0 and rebuild your containers? I think I understand what happened here; I suspect a newer version of LS was running at some point and it ran the migration 0009_auto_20231201_0001 which will delete your user.is_deleted column.

jombooth avatar Aug 09 '24 22:08 jombooth

I'll try that soon

I should note: I'm re-creating the containers each time, but not building myself (using the pre-built images from docker hub)

mkrupczak3 avatar Aug 09 '24 22:08 mkrupczak3

Tried label studio 1.11.0 but still no luck:

I have no name!@31d472712473:~/label_studio$ python3 manage.py migrate
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': '801039114d63486990b4f5740d4b7305', 'span_id': 'b4169a4087a3b941', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.11.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, organizations, projects, sessions, tasks, users, webhooks
Running migrations:
  No migrations to apply.

mkrupczak3 avatar Aug 09 '24 23:08 mkrupczak3

Here is our docker-compose.yml file BTW:

version: "3.9"
services:
  nginx:
    user: "1001:968"
    build: .
    image: heartexlabs/label-studio:1.9.0
    restart: unless-stopped
    container_name: labelstudio_nginx
    ports:
      - "8080:8085"
      - "443:8086"
    depends_on:
      - app
    environment:
      - LABEL_STUDIO_HOST=${LABEL_STUDIO_HOST:-}
    #   Optional: Specify SSL termination certificate & key
    #   Just drop your cert.pem and cert.key into folder 'deploy/nginx/certs'
      - NGINX_SSL_CERT=/certs/cert.pem
      - NGINX_SSL_CERT_KEY=/certs/cert.key
    volumes:
      - /theta/label-studio/data:/label-studio/data:rw
    # - /etc/letsencrypt/live/sisyphus.theta.limited:/certs:ro
      - /etc/letsencrypt/live/sisyphus.theta.limited/cert.pem:/certs/cert.pem
      - /etc/letsencrypt/live/sisyphus.theta.limited/chain.pem:/certs/chain.pem
      - /etc/letsencrypt/live/sisyphus.theta.limited/fullchain.pem:/certs/fullchain.pem
      - /etc/letsencrypt/live/sisyphus.theta.limited/privkey.pem:/certs/privkey.pem      
    #   Optional: Override nginx default conf
      - /theta/projects/label-studio/nginx.conf:/etc/nginx/nginx.conf
    command: nginx

  app:
    user: "1001:968"
    stdin_open: true
    tty: true
    build: .
    image: heartexlabs/label-studio:1.9.0
    restart: unless-stopped
    expose:
      - "8000"
    depends_on:
      - db
    environment:
      - LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
      - LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/theta
      - LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true
      - DJANGO_DB=default
      - POSTGRE_NAME=postgres
      - POSTGRE_USER=postgres
      - POSTGRE_PASSWORD=
      - POSTGRE_PORT=5432
      - POSTGRE_HOST=db
      - LABEL_STUDIO_HOST=${LABEL_STUDIO_HOST:-}
      - JSON_LOG=1
    #      - LOG_LEVEL=DEBUG
    volumes:
      - /theta/label-studio/data:/label-studio/data:rw
      - /theta:/theta:rw
    command: label-studio-uwsgi

  db:
    image: postgres:11.5
    hostname: db
    restart: unless-stopped
    # Optional: Enable TLS on PostgreSQL
    # Just drop your server.crt and server.key into folder 'deploy/pgsql/certs'
    # NOTE: Both files must have permissions u=rw (0600) or less
    #    command: >
    #      -c ssl=on
    #      -c ssl_cert_file=/var/lib/postgresql/certs/server.crt
    #      -c ssl_key_file=/var/lib/postgresql/certs/server.key
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
    volumes:
      - /theta/postgres-data:/var/lib/postgresql/data
      - /theta/projects/label-studio/deploy/pgsql/certs:/var/lib/postgresql/certs:ro

mkrupczak3 avatar Aug 12 '24 19:08 mkrupczak3

Tried label studio 1.11.0 but still no luck:

I have no name!@31d472712473:~/label_studio$ python3 manage.py migrate
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': '801039114d63486990b4f5740d4b7305', 'span_id': 'b4169a4087a3b941', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.11.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, organizations, projects, sessions, tasks, users, webhooks
Running migrations:
  No migrations to apply.

I don't think the fact that no migrations were found indicates a problem; rather I think this demonstrates that indeed, a newer version of Label Studio had been running previously, which is why attempts to run earlier versions without rolling back the migrations from 1.11 led to errors. What happens now if you docker-compose up --build with the image tags in your compose file bumped up to 1.11? That is, heartexlabs/label-studio:1.9.0 replaced with heartexlabs/label-studio:1.11.0?

jombooth avatar Aug 12 '24 19:08 jombooth

Can't use --build as I don't have the Dockerfile locally. Pulling the images from dockerhub.

I do use --force-recreate though but have still been encountering the issue. Here is the full output from docker-compose on startup and with a web browser client connecting and encountering the blank page issue:

[mwk@sisyphus label-studio]$ docker-compose up --build --force-recreate
WARN[0000] /theta/projects/label-studio/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Building 0.0s (2/2) FINISHED                                 docker:default
 => [app internal] load .dockerignore                                      0.0s
 => => transferring context: 2B                                            0.0s
 => [app internal] load build definition from Dockerfile                   0.0s
 => => transferring dockerfile: 2B                                         0.0s
failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount2565012794/Dockerfile: no such file or directory
[mwk@sisyphus label-studio]$ docker-compose up --force-recreate
WARN[0000] /theta/projects/label-studio/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 4/4
 ✔ Network label-studio_default  Created                                   0.2s 
 ✔ Container label-studio-db-1   Created                                   0.0s 
 ✔ Container label-studio-app-1  Created                                   0.0s 
 ✔ Container labelstudio_nginx   Created                                   0.0s 
Attaching to app-1, db-1, labelstudio_nginx
db-1               | 2024-08-12 19:11:38.519 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db-1               | 2024-08-12 19:11:38.519 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db-1               | 2024-08-12 19:11:38.524 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db-1               | 2024-08-12 19:11:38.549 UTC [24] LOG:  database system was shut down at 2024-08-12 19:11:21 UTC
db-1               | 2024-08-12 19:11:38.555 UTC [1] LOG:  database system is ready to accept connections
app-1              | ./deploy/docker-entrypoint.sh: Looking for init scripts in /label-studio/deploy/docker-entrypoint.d/app/
app-1              | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/11-configure-custom-cabundle.sh
app-1              | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/20-wait-for-db.sh
app-1              | => Waiting for postgres...
app-1              | => Postgres is up.
app-1              | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/30-run-db-migrations.sh
app-1              | => Do database migrations...
labelstudio_nginx  | ./deploy/docker-entrypoint.sh: Looking for init scripts in /label-studio/deploy/docker-entrypoint.d/nginx/
labelstudio_nginx  | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/nginx/10-configure-nginx.sh
labelstudio_nginx  | => Copy nginx config file...
labelstudio_nginx  | => Configure system resolver...
labelstudio_nginx  | => Replacing nginx certs...
labelstudio_nginx  | => Successfully replaced nginx certs.
labelstudio_nginx  | => Replacing app endpoint...
labelstudio_nginx  | => Successfully replaced app endpoint.
labelstudio_nginx  | => Skipping adding subpath to nginx config.
labelstudio_nginx  | ./deploy/docker-entrypoint.sh: Configuration complete; ready for start up
app-1              | => Database and media directory: /label-studio/data
app-1              | => Static URL is set to: /static/
app-1              | Read environment variables from: /label-studio/data/.env
app-1              | get 'SECRET_KEY' casted as '<class 'str'>' with default REDACTED
app-1              | [Tracing] Create new propagation context: {'trace_id': 'REDACTED', 'span_id': 'REDACTED', 'parent_span_id': None, 'dynamic_sampling_context': None}
app-1              | Starting new HTTPS connection (1): pypi.org:443
app-1              | https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487
app-1              | 
app-1              |    ╔══════════════════════════════════════╗
app-1              |    ║                                      ║
app-1              |    ║   Update available 1.11.0 → 1.13.0   ║
app-1              |    ║   Run pip install -U label-studio    ║
app-1              |    ║                                      ║
app-1              |    ╚══════════════════════════════════════╝
app-1              | 
app-1              | Operations to perform:
app-1              |   Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, organizations, projects, sessions, tasks, users, webhooks
app-1              | Running migrations:
app-1              |   No migrations to apply.
app-1              | => Migrations completed.
app-1              | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/31-run-label-studio-init.sh
app-1              | => Run label-studio init...
app-1              | => Database and media directory: /label-studio/data
app-1              | => Static URL is set to: /static/
app-1              | => Database and media directory: /label-studio/data
app-1              | => Static URL is set to: /static/
app-1              | Read environment variables from: /label-studio/data/.env
app-1              | get 'SECRET_KEY' casted as '<class 'str'>' with default ''
app-1              | [Tracing] Create new propagation context: {'trace_id': 'REDACTED', 'span_id': 'REDACTED', 'parent_span_id': None, 'dynamic_sampling_context': None}
app-1              | Starting new HTTPS connection (1): pypi.org:443
app-1              | https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487
app-1              | 
app-1              |    ╔══════════════════════════════════════╗
app-1              |    ║                                      ║
app-1              |    ║   Update available 1.11.0 → 1.13.0   ║
app-1              |    ║   Run pip install -U label-studio    ║
app-1              |    ║                                      ║
app-1              |    ╚══════════════════════════════════════╝
app-1              | 
app-1              | 
app-1              | Label Studio has been successfully initialized.
app-1              | => label-studio init completed.
app-1              | ./deploy/docker-entrypoint.sh: Configuration complete; ready for start up
app-1              | [uWSGI] getting INI configuration from /label-studio/deploy/uwsgi.ini
app-1              | [log-encoder] registered format:applogger ${msg}
app-1              | [log-encoder] registered json:default {"timestamp": "${strftime:%d/%b/%Y:%H:%M:%S %z}", "source": "uwsgi", "levelname": "INFO", "message": "${msg}"}
app-1              | [log-encoder] registered nl
app-1              | *** Starting uWSGI 2.0.23 (64bit) on [Mon Aug 12 19:11:46 2024] ***
app-1              | 
app-1              | compiled with version: 11.4.0 on 17 January 2024 05:44:29
app-1              | 
app-1              | os: Linux-4.18.0-513.9.1.el8_9.x86_64 #1 SMP Sat Dec 2 05:23:44 EST 2023
app-1              | 
app-1              | nodename: REDACTED
app-1              | 
app-1              | machine: x86_64
app-1              | 
app-1              | clock source: unix
app-1              | 
app-1              | detected number of CPU cores: 4
app-1              | 
app-1              | current working directory: /label-studio
app-1              | 
app-1              | writing pidfile to /tmp/uwsgi.pid
app-1              | 
app-1              | detected binary path: /usr/local/bin/uwsgi
app-1              | 
app-1              | !!! no internal routing support, rebuild with pcre support !!!
app-1              | 
app-1              | chdir() to /label-studio/label_studio
app-1              | 
app-1              | your memory page size is 4096 bytes
app-1              | 
app-1              | detected max file descriptor number: 1048576
app-1              | 
app-1              | lock engine: pthread robust mutexes
app-1              | 
app-1              | thunder lock: enabled
app-1              | 
app-1              | uWSGI http bound on :8000 fd 8
app-1              | 
app-1              | uwsgi socket 0 bound to TCP address 127.0.0.1:35247 (port auto-assigned) fd 7
app-1              | 
app-1              | Python version: 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
app-1              | 
app-1              | Python main interpreter initialized at 0x56413ed2d2a0
app-1              | 
app-1              | python threads support enabled
app-1              | 
app-1              | your server socket listen backlog is limited to 100 connections
app-1              | 
app-1              | your mercy for graceful operations on workers is 3 seconds
app-1              | 
app-1              | mapped 712755 bytes (696 KB) for 4 cores
app-1              | 
app-1              | *** Operational MODE: preforking ***
app-1              | 
app-1              | spawned uWSGI master process (pid: 1)
app-1              | 
app-1              | spawned uWSGI worker 1 (pid: 39, cores: 1)
app-1              | 
app-1              | spawned uWSGI worker 2 (pid: 40, cores: 1)
app-1              | 
app-1              | spawned uWSGI worker 3 (pid: 41, cores: 1)
app-1              | 
app-1              | spawned uWSGI worker 4 (pid: 42, cores: 1)
app-1              | 
app-1              | *** Stats server enabled on :1717 fd: 22 ***
app-1              | 
app-1              | spawned uWSGI http 1 (pid: 43)
app-1              | 
app-1              | => Database and media directory: /label-studio/data
app-1              | 
app-1              | => Static URL is set to: /static/
app-1              | 
app-1              | => Database and media directory: /label-studio/data
app-1              | 
app-1              | => Database and media directory: /label-studio/data
app-1              | 
app-1              | => Database and media directory: /label-studio/data
app-1              | 
app-1              | => Static URL is set to: /static/
app-1              | 
app-1              | => Static URL is set to: /static/
app-1              | 
app-1              | => Static URL is set to: /static/
app-1              | 
app-1              | Read environment variables from: /label-studio/data/.env
app-1              | 
app-1              | Read environment variables from: /label-studio/data/.env
app-1              | 
app-1              | Read environment variables from: /label-studio/data/.env
app-1              | 
app-1              | Read environment variables from: /label-studio/data/.env
app-1              | 
app-1              | get 'SECRET_KEY' casted as '<class 'str'>' with default REDACTED
app-1              | 
app-1              | get 'SECRET_KEY' casted as '<class 'str'>' with default REDACTED
app-1              | 
app-1              | get 'SECRET_KEY' casted as '<class 'str'>' with default REDACTED
app-1              | 
app-1              | get 'SECRET_KEY' casted as '<class 'str'>' with default REDACTED
app-1              | 
app-1              | [Tracing] Create new propagation context: {'trace_id': 'REDACTED', 'span_id': 'REDACTED', 'parent_span_id': None, 'dynamic_sampling_context': None}
app-1              | 
app-1              | [Tracing] Create new propagation context: {'trace_id': 'REDACTED', 'span_id': 'REDACTED', 'parent_span_id': None, 'dynamic_sampling_context': None}
app-1              | 
app-1              | [Tracing] Create new propagation context: {'trace_id': 'REDACTED', 'span_id': 'REDACTED', 'parent_span_id': None, 'dynamic_sampling_context': None}
app-1              | 
app-1              | [Tracing] Create new propagation context: {'trace_id': 'REDACTED', 'span_id': 'REDACTED', 'parent_span_id': None, 'dynamic_sampling_context': None}
app-1              | 
app-1              | WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x56413ed2d2a0 pid: 39 (default app)
app-1              | 
app-1              | WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x56413ed2d2a0 pid: 41 (default app)
app-1              | 
app-1              | WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x56413ed2d2a0 pid: 40 (default app)
app-1              | 
app-1              | WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x56413ed2d2a0 pid: 42 (default app)
app-1              | 
labelstudio_nginx  | {"timestamp":"1723489912906","http":{"method":"GET","request_id":"dfcc3b28b5c89b0876746e5d4349cf63","status_code":302,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"","x_forwarded_for":"","url":"/","version":"HTTP/1.1","connection":"1","connection_requests":"1"},"network":{"bytes_written":1601,"bytes_read":1063,"client":{"ip":"172.29.0.1","port":53224},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.334","upstream_connect_time":"0.001","upstream_response_time":"0.335","upstream_header_time":"0.335"}}}
labelstudio_nginx  | {"timestamp":"1723489913293","http":{"method":"GET","request_id":"e054ce69f9a58b4c091eaf2740190d58","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"","x_forwarded_for":"","url":"/sw.js","version":"HTTP/1.1","connection":"1","connection_requests":"2"},"network":{"bytes_written":7656,"bytes_read":991,"client":{"ip":"172.29.0.1","port":53224},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.294","upstream_connect_time":"0.001","upstream_response_time":"0.295","upstream_header_time":"0.295"}}}
labelstudio_nginx  | {"timestamp":"1723489913511","http":{"method":"GET","request_id":"206be0bbff912a1351dfd36d3a05fe4a","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"","x_forwarded_for":"","url":"/projects/","version":"HTTP/1.1","connection":"4","connection_requests":"1"},"network":{"bytes_written":8602,"bytes_read":1072,"client":{"ip":"172.29.0.1","port":53228},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.464","upstream_connect_time":"0.001","upstream_response_time":"0.464","upstream_header_time":"0.464"}}}
labelstudio_nginx  | {"timestamp":"1723489913628","http":{"method":"GET","request_id":"53ed7645af21612f145b9233d4458ab2","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/css/uikit.e49a7a43adbd.css","version":"HTTP/1.1","connection":"4","connection_requests":"2"},"network":{"bytes_written":1791,"bytes_read":998,"client":{"ip":"172.29.0.1","port":53228},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913629","http":{"method":"GET","request_id":"bcb663ede09354373e61a0887a7f2ba7","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/css/main.05101f5b0b98.css","version":"HTTP/1.1","connection":"1","connection_requests":"3"},"network":{"bytes_written":5345,"bytes_read":997,"client":{"ip":"172.29.0.1","port":53224},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913655","http":{"method":"GET","request_id":"3e4f7e74832d2496e647c66be81a9a2a","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/js/Toast.min.9135be1633df.js","version":"HTTP/1.1","connection":"1","connection_requests":"4"},"network":{"bytes_written":1338,"bytes_read":1069,"client":{"ip":"172.29.0.1","port":53224},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913655","http":{"method":"GET","request_id":"1ae1b697a19b5d29f9a83438d177107c","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/js/helpers.9a01b074ff58.js","version":"HTTP/1.1","connection":"4","connection_requests":"3"},"network":{"bytes_written":5014,"bytes_read":1068,"client":{"ip":"172.29.0.1","port":53228},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913680","http":{"method":"GET","request_id":"e51f2d343fee09a8730ca298089a5f12","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/css/Toast.min.0479912dd9c5.css","version":"HTTP/1.1","connection":"1","connection_requests":"5"},"network":{"bytes_written":1057,"bytes_read":1085,"client":{"ip":"172.29.0.1","port":53224},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | 2024/08/12 19:11:53 [error] 23#23: *6 open() "/label-studio/label_studio/frontend/dist/react-app/main.css" failed (2: No such file or directory), client: 172.29.0.1, server: , request: "GET /react-app/main.css?v=a9766f HTTP/1.1", host: "localhost:8443", referrer: "https://localhost:8443/projects/"
labelstudio_nginx  | {"timestamp":"1723489913680","http":{"method":"GET","request_id":"be2db5c454f016ad1d87b633252b9020","status_code":404,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/react-app/main.css?v=a9766f","version":"HTTP/1.1","connection":"6","connection_requests":"1"},"network":{"bytes_written":348,"bytes_read":992,"client":{"ip":"172.29.0.1","port":53244},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | 2024/08/12 19:11:53 [error] 25#25: *7 open() "/label-studio/label_studio/frontend/dist/react-app/main.js" failed (2: No such file or directory), client: 172.29.0.1, server: , request: "GET /react-app/main.js?v=a9766f HTTP/1.1", host: "localhost:8443", referrer: "https://localhost:8443/projects/"
labelstudio_nginx  | {"timestamp":"1723489913696","http":{"method":"GET","request_id":"b4ba95282e22b524ae27fa15db6c5a58","status_code":404,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/react-app/main.js?v=a9766f","version":"HTTP/1.1","connection":"7","connection_requests":"1"},"network":{"bytes_written":348,"bytes_read":962,"client":{"ip":"172.29.0.1","port":53250},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913696","http":{"method":"GET","request_id":"80cef4896776c8df14aac429cf335805","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/fonts/roboto/roboto.css","version":"HTTP/1.1","connection":"8","connection_requests":"1"},"network":{"bytes_written":972,"bytes_read":1078,"client":{"ip":"172.29.0.1","port":53258},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913703","http":{"method":"GET","request_id":"70bcf1ad71ab4bb1ead903019802a500","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/js/jquery.min.e6c2415c0ace.js","version":"HTTP/1.1","connection":"9","connection_requests":"1"},"network":{"bytes_written":30947,"bytes_read":1072,"client":{"ip":"172.29.0.1","port":53260},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | 2024/08/12 19:11:53 [error] 22#22: *9 open() "/label-studio/label_studio/frontend/dist/react-app/main.js" failed (2: No such file or directory), client: 172.29.0.1, server: , request: "GET /react-app/main.js?v=a9766f HTTP/1.1", host: "localhost:8443", referrer: "https://localhost:8443/projects/"
labelstudio_nginx  | {"timestamp":"1723489913763","http":{"method":"GET","request_id":"1128909c88fed0923fb528bc27b31fbf","status_code":404,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/react-app/main.js?v=a9766f","version":"HTTP/1.1","connection":"9","connection_requests":"2"},"network":{"bytes_written":348,"bytes_read":962,"client":{"ip":"172.29.0.1","port":53260},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913819","http":{"method":"GET","request_id":"94dbb5f4b43f4fd47c089066accbb373","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/static/fonts/roboto/roboto.css","x_forwarded_for":"","url":"/static/fonts/roboto/roboto-v20-latin_cyrillic-regular.woff2","version":"HTTP/1.1","connection":"9","connection_requests":"3"},"network":{"bytes_written":22931,"bytes_read":1059,"client":{"ip":"172.29.0.1","port":53260},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489913839","http":{"method":"GET","request_id":"ee1ec809f407e23bcdfed63b418229d1","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"https://localhost:8443/projects/","x_forwarded_for":"","url":"/static/images/favicon.58c0a5114450.ico","version":"HTTP/1.1","connection":"9","connection_requests":"4"},"network":{"bytes_written":22327,"bytes_read":1054,"client":{"ip":"172.29.0.1","port":53260},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.000","upstream_connect_time":"","upstream_response_time":"","upstream_header_time":""}}}
labelstudio_nginx  | {"timestamp":"1723489914286","http":{"method":"GET","request_id":"db455d098636e6e9b8dcab9a783d1960","status_code":200,"content_type":"","useragent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0","referrer":"","x_forwarded_for":"","url":"/sw.js","version":"HTTP/1.1","connection":"9","connection_requests":"5"},"network":{"bytes_written":7656,"bytes_read":974,"client":{"ip":"172.29.0.1","port":53260},"destination":{"ip":"172.29.0.4","port":8086},"nginx":{"request_time":"0.283","upstream_connect_time":"0.001","upstream_response_time":"0.283","upstream_header_time":"0.283"}}}
^CGracefully stopping... (press Ctrl+C again to force)

mkrupczak3 avatar Aug 12 '24 19:08 mkrupczak3

g new HTTPS connection (1): pypi.org:443 https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

And actually, the earlier label-studio 1.9.0 runs fine while any later versions seem to choke on the data due to the following:

django.db.utils.ProgrammingError: column htx_user.is_deleted does not exist

mkrupczak3 avatar Aug 12 '24 19:08 mkrupczak3

This makes sense; the column discussed was added and then removed, so a version of LS that predates the column will also work. Your logs from Docker show the backend seemingly working okay with 1.11, so let's proceed from there. Do you see anything on the js console when you're running 1.11 and try to open the app?

jombooth avatar Aug 12 '24 19:08 jombooth

JS console shows a 404 error upon page load:

image

I should note I am accessing the server using an SSH tunnel, unsure if this is affecting it in any way

mkrupczak3 avatar Aug 12 '24 19:08 mkrupczak3

Could you try this in the container while running 1.11, much like we did before?

$ docker compose up -d
$ docker exec -it label-studio-app-1 bash
$ cd label_studio
$ python3 manage.py collectstatic

jombooth avatar Aug 12 '24 19:08 jombooth

Here's the output from that command:

[mwk@sisyphus label-studio]$ docker exec -it label-studio-app-1 bash
groups: cannot find name for group ID 968
I have no name!@bb385964aae4:~$ cd label_studio/
I have no name!@bb385964aae4:~/label_studio$ python3 manage.py collectstatic
=> Database and media directory: /label-studio/data
=> Static URL is set to: /static/
Read environment variables from: /label-studio/data/.env
get 'SECRET_KEY' casted as '<class 'str'>' with default ''
[Tracing] Create new propagation context: {'trace_id': 'b4164a462b2c4d31b1b5add989c61cd7', 'span_id': 'a30f55185d4723d6', 'parent_span_id': None, 'dynamic_sampling_context': None}
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32487

   ╔══════════════════════════════════════╗
   ║                                      ║
   ║   Update available 1.11.0 → 1.13.0   ║
   ║   Run pip install -U label-studio    ║
   ║                                      ║
   ╚══════════════════════════════════════╝


You have requested to collect static files at the destination
location as specified in your settings:

    /label-studio/label_studio/core/static_build

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes
Found another file with the destination path 'drf-yasg/redoc/redoc.min.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
....
encountered file is collected. If this is not what you want, make sure every static file has a unique path.

0 static files copied to '/label-studio/label_studio/core/static_build', 333 unmodified, 105 post-processed.

mkrupczak3 avatar Aug 12 '24 22:08 mkrupczak3

Chatted with a coworker about this, he suggested setting LABEL_STUDIO_HOST= (that is, having the variable be empty). Could you give that a shot?

jombooth avatar Aug 13 '24 15:08 jombooth

Will try when I get back to my desk later today

mkrupczak3 avatar Aug 13 '24 15:08 mkrupczak3

I tried setting LABEL_STUDIO_HOST to empty for both the app and the database container, however it did not resolve the issue

mkrupczak3 avatar Aug 14 '24 21:08 mkrupczak3

This issue was fixed in 1.12.1, so please consider upgrade to this version or to the latest: 1.13.0

farioas avatar Aug 14 '24 22:08 farioas

@farioas I just tried using 1.13.0, it had the same issue as previous versions. The UI is completely blank on any version later than 1.9.0

mkrupczak3 avatar Aug 15 '24 22:08 mkrupczak3

Kind of at my wit's end with this issue

mkrupczak3 avatar Aug 15 '24 22:08 mkrupczak3

I got the same error, ended up cloning the repo and running "docker build path" locally and using that docker image for running. Now its gone if I use the newest build (1.13.2 beta). If I build locally using 1.13.1 I get the same error.

punnerud avatar Aug 26 '24 11:08 punnerud

I have the same issue. I didn't have it before. just suddenly happened. I tried all suggestions above nothing worked.

fsalmasri avatar Aug 26 '24 12:08 fsalmasri

Guys, you're trying to mix a lot of different issues without providing much details.

@mkrupczak3 I see you're doing an override of nginx file, please provide this file:

      - /theta/projects/label-studio/nginx.conf:/etc/nginx/nginx.conf

farioas avatar Aug 26 '24 13:08 farioas

Here is my running docker.

Attaching to label-studio, nginx, postgres postgres | 2024-08-26 13:27:17.987 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 postgres | 2024-08-26 13:27:17.987 UTC [1] LOG: listening on IPv6 address "::", port 5432 postgres | 2024-08-26 13:27:17.993 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" postgres | 2024-08-26 13:27:18.035 UTC [23] LOG: database system was shut down at 2024-08-26 13:27:13 UTC postgres | 2024-08-26 13:27:18.047 UTC [1] LOG: database system is ready to accept connections label-studio | ./deploy/docker-entrypoint.sh: Looking for init scripts in /label-studio/deploy/docker-entrypoint.d/app/ label-studio | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/11-configure-custom-cabundle.sh label-studio | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/20-wait-for-db.sh label-studio | => Waiting for postgres... label-studio | => Postgres is up. label-studio | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/30-run-db-migrations.sh label-studio | => Do database migrations... nginx | ./deploy/docker-entrypoint.sh: Looking for init scripts in /label-studio/deploy/docker-entrypoint.d/nginx/ nginx | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/nginx/10-configure-nginx.sh nginx | => Copy nginx config file... nginx | => Configure system resolver... nginx | => Skipping replace nginx certs. nginx | => Replacing app endpoint... nginx | => Successfully replaced app endpoint. nginx | => Skipping adding subpath to nginx config. nginx | ./deploy/docker-entrypoint.sh: Configuration complete; ready for start up label-studio | => Database and media directory: /label-studio/data label-studio | => Static URL is set to: /static/ label-studio | Read environment variables from: /label-studio/data/.env label-studio | get 'SECRET_KEY' casted as '<class 'str'>' with default '' label-studio | [Tracing] Create new propagation context: {'trace_id': '61cf78e3e8084995a32fdb3b5941524e', 'span_id': 'be01106efd2d2da2', 'parent_span_id': None, 'dynamic_sampling_context': None} label-studio | Starting new HTTPS connection (1): pypi.org:443 label-studio | https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32786 label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_create" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_view" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_change" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_delete" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | Operations to perform: label-studio | Apply all migrations: admin, auth, authtoken, contenttypes, core, data_export, data_import, data_manager, django_rq, io_storages, labels_manager, ml, ml_model_providers, ml_models, organizations, projects, sessions, tasks, users, webhooks label-studio | Running migrations: label-studio | No migrations to apply. label-studio | => Migrations completed. label-studio | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/31-run-label-studio-init.sh label-studio | => Run label-studio init... label-studio | => Database and media directory: /label-studio/data label-studio | => Static URL is set to: /static/ label-studio | => Database and media directory: /label-studio/data label-studio | => Static URL is set to: /static/ label-studio | Read environment variables from: /label-studio/data/.env label-studio | get 'SECRET_KEY' casted as '<class 'str'>' with default '' label-studio | [Tracing] Create new propagation context: {'trace_id': '67d8d942cb9645b0afc036435c73c2b2', 'span_id': 'bcaaa3058cdfb47d', 'parent_span_id': None, 'dynamic_sampling_context': None} label-studio | Starting new HTTPS connection (1): pypi.org:443 label-studio | https://pypi.org:443 "GET /pypi/label-studio/json HTTP/1.1" 200 32786 postgres | 2024-08-26 13:27:28.993 UTC [33] ERROR: duplicate key value violates unique constraint "htx_user_email_key" postgres | 2024-08-26 13:27:28.993 UTC [33] DETAIL: Key (email)=([email protected]) already exists. postgres | 2024-08-26 13:27:28.993 UTC [33] STATEMENT: INSERT INTO "htx_user" ("password", "last_login", "is_superuser", "last_activity", "username", "email", "first_name", "last_name", "phone", "avatar", "is_staff", "is_active", "date_joined", "activity_at", "active_organization_id", "allow_newsletters") VALUES ('pbkdf2_sha256$260000$VqeBfltkDJaRdhZCfV43VU$1Lfhzg4iHNOg6ky9zMs2qNM7zs1WyUbk+ZQ1RCmJMXo=', NULL, false, '2024-08-26T13:27:28.737140+00:00'::timestamptz, '', '[email protected]', '', '', '', '', false, true, '2024-08-26T13:27:28.737187+00:00'::timestamptz, '2024-08-26T13:27:28.991661+00:00'::timestamptz, NULL, NULL) RETURNING "htx_user"."id" label-studio | User [email protected] already exists label-studio | label-studio | Label Studio has been successfully initialized. label-studio | => label-studio init completed. label-studio | ./deploy/docker-entrypoint.sh: Configuration complete; ready for start up label-studio | [uWSGI] getting INI configuration from /label-studio/deploy/uwsgi.ini label-studio | [log-encoder] registered format:applogger ${msg} label-studio | [log-encoder] registered json:default {"timestamp": "${strftime:%d/%b/%Y:%H:%M:%S %z}", "source": "uwsgi", "levelname": "INFO", "message": "${msg}"} label-studio | [log-encoder] registered nl label-studio | *** Starting uWSGI 2.0.26 (64bit) on [Mon Aug 26 13:27:29 2024] *** label-studio | label-studio | compiled with version: 11.4.0 on 19 August 2024 13:11:35 label-studio | label-studio | os: Linux-6.8.0-1014-aws #15-Ubuntu SMP Thu Aug 8 19:13:06 UTC 2024 label-studio | label-studio | nodename: d7e661f25ac8 label-studio | label-studio | machine: x86_64 label-studio | label-studio | clock source: unix label-studio | label-studio | detected number of CPU cores: 2 label-studio | label-studio | current working directory: /label-studio label-studio | label-studio | writing pidfile to /tmp/uwsgi.pid label-studio | label-studio | detected binary path: /usr/local/bin/uwsgi label-studio | label-studio | !!! no internal routing support, rebuild with pcre support !!! label-studio | label-studio | chdir() to /label-studio/label_studio label-studio | label-studio | your memory page size is 4096 bytes label-studio | label-studio | detected max file descriptor number: 1048576 label-studio | label-studio | lock engine: pthread robust mutexes label-studio | label-studio | thunder lock: enabled label-studio | label-studio | uWSGI http bound on :8000 fd 8 label-studio | label-studio | uwsgi socket 0 bound to TCP address 127.0.0.1:35173 (port auto-assigned) fd 7 label-studio | label-studio | Python version: 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] label-studio | label-studio | Python main interpreter initialized at 0x61a7d3d1e3f0 label-studio | label-studio | python threads support enabled label-studio | label-studio | your server socket listen backlog is limited to 100 connections label-studio | label-studio | your mercy for graceful operations on workers is 3 seconds label-studio | label-studio | mapped 712755 bytes (696 KB) for 4 cores label-studio | label-studio | *** Operational MODE: preforking *** label-studio | label-studio | spawned uWSGI master process (pid: 1) label-studio | label-studio | spawned uWSGI worker 1 (pid: 35, cores: 1) label-studio | label-studio | spawned uWSGI worker 2 (pid: 36, cores: 1) label-studio | label-studio | spawned uWSGI worker 3 (pid: 37, cores: 1) label-studio | label-studio | spawned uWSGI worker 4 (pid: 38, cores: 1) label-studio | label-studio | *** Stats server enabled on :1717 fd: 22 *** label-studio | label-studio | spawned uWSGI http 1 (pid: 39) label-studio | label-studio | => Database and media directory: /label-studio/data label-studio | label-studio | => Static URL is set to: /static/ label-studio | label-studio | Read environment variables from: /label-studio/data/.env label-studio | label-studio | get 'SECRET_KEY' casted as '<class 'str'>' with default '' label-studio | label-studio | [Tracing] Create new propagation context: {'trace_id': '589761ab5f5b46bba58cab0aec484480', 'span_id': '988fe7c5e1890fc6', 'parent_span_id': None, 'dynamic_sampling_context': None} label-studio | label-studio | => Database and media directory: /label-studio/data label-studio | label-studio | => Static URL is set to: /static/ label-studio | label-studio | => Database and media directory: /label-studio/data label-studio | label-studio | => Static URL is set to: /static/ label-studio | label-studio | => Database and media directory: /label-studio/data label-studio | label-studio | => Static URL is set to: /static/ label-studio | label-studio | Read environment variables from: /label-studio/data/.env label-studio | label-studio | Read environment variables from: /label-studio/data/.env label-studio | label-studio | get 'SECRET_KEY' casted as '<class 'str'>' with default '' label-studio | label-studio | get 'SECRET_KEY' casted as '<class 'str'>' with default '' label-studio | label-studio | Read environment variables from: /label-studio/data/.env label-studio | label-studio | get 'SECRET_KEY' casted as '<class 'str'>' with default '' label-studio | label-studio | [Tracing] Create new propagation context: {'trace_id': '8410281c9f654a5b93241f8cae231a4d', 'span_id': 'b4eb8afe63e3283b', 'parent_span_id': None, 'dynamic_sampling_context': None} label-studio | label-studio | [Tracing] Create new propagation context: {'trace_id': 'e73f73847ed74e4591da55b2f6751877', 'span_id': 'b1d26daf13fe3f5b', 'parent_span_id': None, 'dynamic_sampling_context': None} label-studio | label-studio | [Tracing] Create new propagation context: {'trace_id': 'feb974f406f844c08293dc77f4257d07', 'span_id': 'bd135e5ced9b713a', 'parent_span_id': None, 'dynamic_sampling_context': None} label-studio | label-studio | WSGI app 0 (mountpoint='') ready in 13 seconds on interpreter 0x61a7d3d1e3f0 pid: 35 (default app) label-studio | label-studio | WSGI app 0 (mountpoint='') ready in 13 seconds on interpreter 0x61a7d3d1e3f0 pid: 38 (default app) label-studio | label-studio | WSGI app 0 (mountpoint='') ready in 13 seconds on interpreter 0x61a7d3d1e3f0 pid: 36 (default app) label-studio | label-studio | WSGI app 0 (mountpoint='') ready in 14 seconds on interpreter 0x61a7d3d1e3f0 pid: 37 (default app) label-studio | label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_create" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_view" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_change" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | label-studio | /usr/local/lib/python3.10/dist-packages/pydantic/_internal/fields.py:160: UserWarning: Field "model_provider_connection_delete" has conflict with protected namespace "model". label-studio | label-studio | You may be able to resolve this warning by setting model_config['protected_namespaces'] = (). label-studio | warnings.warn( label-studio | label-studio | {"asctime": "26/Aug/2024:13:27:45 +0000", "name": "core.utils.common", "funcName": "custom_exception_handler", "lineno": 91, "levelname": "ERROR", "user_id": null, "message": "2b23cccf-9b06-47dc-98ed-ea90ee607ae9 Authentication credentials were not provided.", "exc_info": "Traceback (most recent call last):\n File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 497, in dispatch\n self.initial(request, *args, **kwargs)\n File "/usr/local/lib/python3.10/dist-packages/sentry_sdk/integrations/django/init.py", line 305, in sentry_patched_drf_initial\n return old_drf_initial(self, request, *args, **kwargs)\n File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 415, in initial\n self.check_permissions(request)\n File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 333, in check_permissions\n self.permission_denied(\n File "/usr/local/lib/python3.10/dist-packages/rest_framework/views.py", line 174, in permission_denied\n raise exceptions.NotAuthenticated()\nrest_framework.exceptions.NotAuthenticated: Authentication credentials were not provided.", "request_id": null} label-studio | label-studio | {"asctime": "26/Aug/2024:13:27:45 +0000", "name": "django.request", "funcName": "log_response", "lineno": 224, "levelname": "WARNING", "user_id": null, "message": "Unauthorized: /api/projects/", "status_code": 401, "request": "<WSGIRequest: GET '/api/projects/?page=1%26page%5fsize=30%26include=id%2ctitle%2ccreated%5fby%2ccreated%5fat%2ccolor%2cis%5fpublished%2cassignment%5fsettings'>", "request_id": null} label-studio | label-studio | {"asctime": "26/Aug/2024:13:27:45 +0000", "name": "django.request", "funcName": "log_response", "lineno": 224, "levelname": "WARNING", "user_id": null, "message": "Unauthorized: /api/projects/", "status_code": 401, "request": "<WSGIRequest: GET '/api/projects/?page=1%26page%5fsize=30%26include=id%2ctitle%2ccreated%5fby%2ccreated%5fat%2ccolor%2cis%5fpublished%2cassignment%5fsettings'>", "request_id": null} label-studio | nginx | {"timestamp":"1724678865110","http":{"method":"GET","request_id":"2d52dbf6f04597fbe854101f031ec5cc","status_code":401,"content_type":"","useragent":"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36","referrer":"","x_forwarded_for":"","url":"/api/projects?page=1%26page%5fsize=30%26include=id%2ctitle%2ccreated%5fby%2ccreated%5fat%2ccolor%2cis%5fpublished%2cassignment%5fsettings","version":"HTTP/1.1","connection":"1","connection_requests":"1"},"network":{"bytes_written":1360,"bytes_read":312,"client":{"ip":"205.169.39.12","port":31538},"destination":{"ip":"172.22.0.4","port":80},"nginx":{"request_time":"0.350","upstream_connect_time":"0.001","upstream_response_time":"0.350","upstream_header_time":"0.350"}}} nginx | 2024/08/26 13:27:45 [info] 19#19: *1 client 205.169.39.12 closed keepalive connection

Here is my compose file:

services:

  nginx:
    image: heartexlabs/label-studio:latest
    container_name: nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "8080:8085"
      - "8081:8086"
    depends_on:
      - app
    env_file:
      - env.list
    volumes:
      - ./mydata:/label-studio/data:rw
      - ./deploy/nginx/certs:/certs:ro
      - ./deploy/my.conf:/etc/nginx/nginx.conf
    command: nginx

  app:
    stdin_open: true
    tty: true
    image: heartexlabs/label-studio:1.13.1
    container_name: label-studio
    restart: unless-stopped
    expose:
      - "8000"
    depends_on:
      - db
    env_file:
      - env.list
    volumes:
      - ./mydata:/label-studio/data:rw
    command: label-studio-uwsgi

  db:
    image: postgres:11.5
    container_name: postgres
    hostname: db
    restart: unless-stopped
    env_file:
      - env.list
    volumes:
      - ${POSTGRES_DATA_DIR:-./postgres-data}:/var/lib/postgresql/data
      - ./deploy/pgsql/certs:/var/lib/postgresql/certs:ro

Everything was working normally. suddenly I have this now: image

fsalmasri avatar Aug 26 '24 13:08 fsalmasri

Please upgrade to the latest LS version - 1.13.1. It happens after the chrome browser update.

makseq avatar Aug 26 '24 13:08 makseq

Please upgrade to the latest LS version - 1.13.1. It happens after the chrome browser update.

Already updates. Tested on three browsers. didn't work.

fsalmasri avatar Aug 26 '24 13:08 fsalmasri