Can't start WebODM on Linux (WSL2)

Hello, I’m trying to install WebODM on Kali Linux (WSL2) with Docker.
However, when I start WebODM it gives me this error:

webapp      | Something doesn't look right! ¯\_(ツ)_/¯
webapp      | The server returned a status code of 502 when we tried to reach it.
webapp      | ==========================
webapp      |
webapp      | Check if WebODM is running, maybe we tried to reach it too soon.
webapp      |
webapp      | Open a web browser and navigate to http://localhost:8000
webapp      |
webapp      | NOTE: Windows users using docker should replace localhost with the IP of their docker machine's IP. To find what that is, run: docker-machine ip
db          | FATAL:  database "webodm_dev" does not exist
worker      | [2023-03-09 12:51:22,950: ERROR/ForkPoolWorker-1] Task worker.tasks.process_pending_tasks[aba94951-9eae-4d87-896f-50355f6a0747] raised unexpected: OperationalError('FATAL:  database "webodm_dev" does not exist\n')
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | psycopg2.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
worker      |
worker      | The above exception was the direct cause of the following exception:
worker      |
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 385, in trace_task
worker      |     R = retval = fun(*args, **kwargs)
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 650, in __protected_call__
worker      |     return self.run(*args, **kwargs)
worker      |   File "/webodm/worker/tasks.py", line 161, in process_pending_tasks
worker      |     for task in tasks:
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 274, in __iter__
worker      |     self._fetch_all()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 1242, in _fetch_all
worker      |     self._result_cache = list(self._iterable_class(self))
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 55, in __iter__
worker      |     results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/sql/compiler.py", line 1140, in execute_sql
worker      |     cursor = self.connection.cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 256, in cursor
worker      |     return self._cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 233, in _cursor
worker      |     self.ensure_connection()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/utils.py", line 89, in __exit__
worker      |     raise dj_exc_value.with_traceback(traceback) from exc_value
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | django.db.utils.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
db          | FATAL:  database "webodm_dev" does not exist
worker      | [2023-03-09 12:51:27,919: ERROR/ForkPoolWorker-1] Task worker.tasks.process_pending_tasks[1878477a-c35e-44f7-aa4d-d15dde4c320c] raised unexpected: OperationalError('FATAL:  database "webodm_dev" does not exist\n')
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | psycopg2.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
worker      |
worker      | The above exception was the direct cause of the following exception:
worker      |
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 385, in trace_task
worker      |     R = retval = fun(*args, **kwargs)
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 650, in __protected_call__
worker      |     return self.run(*args, **kwargs)
worker      |   File "/webodm/worker/tasks.py", line 161, in process_pending_tasks
worker      |     for task in tasks:
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 274, in __iter__
worker      |     self._fetch_all()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 1242, in _fetch_all
worker      |     self._result_cache = list(self._iterable_class(self))
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 55, in __iter__
worker      |     results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/sql/compiler.py", line 1140, in execute_sql
worker      |     cursor = self.connection.cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 256, in cursor
worker      |     return self._cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 233, in _cursor
worker      |     self.ensure_connection()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/utils.py", line 89, in __exit__
worker      |     raise dj_exc_value.with_traceback(traceback) from exc_value
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | django.db.utils.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
db          | FATAL:  database "webodm_dev" does not exist
worker      | [2023-03-09 12:51:32,920: ERROR/ForkPoolWorker-1] Task worker.tasks.process_pending_tasks[f119a5f6-f214-4c7e-a29c-643b35e3f3ac] raised unexpected: OperationalError('FATAL:  database "webodm_dev" does not exist\n')
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | psycopg2.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
worker      |
worker      | The above exception was the direct cause of the following exception:
worker      |
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 385, in trace_task
worker      |     R = retval = fun(*args, **kwargs)
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 650, in __protected_call__
worker      |     return self.run(*args, **kwargs)
worker      |   File "/webodm/worker/tasks.py", line 161, in process_pending_tasks
worker      |     for task in tasks:
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 274, in __iter__
worker      |     self._fetch_all()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 1242, in _fetch_all
worker      |     self._result_cache = list(self._iterable_class(self))
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 55, in __iter__
worker      |     results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/sql/compiler.py", line 1140, in execute_sql
worker      |     cursor = self.connection.cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 256, in cursor
worker      |     return self._cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 233, in _cursor
worker      |     self.ensure_connection()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/utils.py", line 89, in __exit__
worker      |     raise dj_exc_value.with_traceback(traceback) from exc_value
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | django.db.utils.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
db          | FATAL:  database "webodm_dev" does not exist
worker      | [2023-03-09 12:51:37,919: ERROR/ForkPoolWorker-1] Task worker.tasks.process_pending_tasks[0d82e3b0-9988-4b4a-a345-ea83856ceba1] raised unexpected: OperationalError('FATAL:  database "webodm_dev" does not exist\n')
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | psycopg2.OperationalError: FATAL:  database "webodm_dev" does not exist
worker      |
worker      |
worker      | The above exception was the direct cause of the following exception:
worker      |
worker      | Traceback (most recent call last):
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 385, in trace_task
worker      |     R = retval = fun(*args, **kwargs)
worker      |   File "/usr/local/lib/python3.9/dist-packages/celery/app/trace.py", line 650, in __protected_call__
worker      |     return self.run(*args, **kwargs)
worker      |   File "/webodm/worker/tasks.py", line 161, in process_pending_tasks
worker      |     for task in tasks:
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 274, in __iter__
worker      |     self._fetch_all()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 1242, in _fetch_all
worker      |     self._result_cache = list(self._iterable_class(self))
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/query.py", line 55, in __iter__
worker      |     results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/models/sql/compiler.py", line 1140, in execute_sql
worker      |     cursor = self.connection.cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 256, in cursor
worker      |     return self._cursor()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 233, in _cursor
worker      |     self.ensure_connection()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/utils.py", line 89, in __exit__
worker      |     raise dj_exc_value.with_traceback(traceback) from exc_value
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 217, in ensure_connection
worker      |     self.connect()
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/base/base.py", line 195, in connect
worker      |     self.connection = self.get_new_connection(conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
worker      |     connection = Database.connect(**conn_params)
worker      |   File "/usr/local/lib/python3.9/dist-packages/psycopg2/__init__.py", line 127, in connect
worker      |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
worker      | django.db.utils.OperationalError: FATAL:  database "webodm_dev" does not exist

The log is so long I can’t paste it all.

1 Like

Welcome!

Can you please try on Ubuntu WSL or Alpine WSL?

Unfortunately I don’t have much disk space.
The reason I’m running it in WSL2 is that with the Windows version I can’t get my GPU to work with it. It always says that it is unavailable and uses CPU instead.

1 Like

That usually means you need to resize your images down, if you have a compatible NVIDIA card.

What NVIDIA cards are supported?

1 Like

GTX 9x era and newer.

I have GTX 1050 Ti.
I don’t know how to install Cuda for it though.

It is provided as a Runtime in the driver release NVIDIA make.

I had limited success with my 1050TIs above 12MP, so try resizing down a bit if your images are 12MP or larger.

Keep in mind that your GPU will most likely still be used later in the processing pipeline for pointcloud work, which is where more time is usually spent.

I installed Ubuntu WSL, and WebODM actually started. But it only started twice, the node wasn’t active, so I shut it down and did ./webodm.sh update and now it doesn’t start.

Here’s the error:

[email protected]:~/Documents/GitHub/WebODM# ./webodm.sh start --gpu
GPU_NVIDIA has been found
Checking for docker...   OK
Checking for docker-compose...   OK
Starting WebODM...

Using the following environment:
================================
Host: localhost
Port: 8000
Media directory: appmedia
SSL: NO
SSL key:
SSL certificate:
SSL insecure port redirect: 80
Celery Broker: redis://broker
Default Nodes: 1
================================
Make sure to issue a ./webodm.sh down if you decide to change the environment.

docker-compose -f docker-compose.yml -f docker-compose.nodeodm.gpu.nvidia.yml up --scale node-odm=1
Removing webodm_node-odm_1
Recreating 71aff01593ca_webodm_node-odm_1 ...
Starting broker                           ... done
Starting db                               ... done
Starting worker                           ... done

ERROR: for 71aff01593ca_webodm_node-odm_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)

ERROR: for node-odm  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

My internet isn’t slow (800 Mbps symmetrical, and I can ping websites from the terminal).

1 Like

I have to mention that this only happens when running with --gpu flag.

1 Like

So to be clear, without the GPU node you can work properly consistently/

1 Like

Without the GPU it can start 99% of the time, and if it doesn’t, restarting the docker service seems to fix it. I even tried to process some images and it generates a 3D map, so with the CPU it works.

But with the GPU flag it gets stuck at some point with that message before it starts.

1 Like

Are you able to run it again with the --verbose argument so we can get more details?