Git Product home page Git Product logo

tabby-web's Introduction

Tabby Web

This is the Tabby terminal, served as a web app. It also provides the config sync service for the Tabby app.

How it works

Tabby Web serves the Tabby Terminal as a web application while managing multiple config files, authentication, and providing TCP connections via a separate gateway service.

Requirements

  • Python 3.7+
  • A database server supported by Django (MariaDB, Postgres, SQLite, etc.)
  • Storage for distribution files - local, S3, GCS or others supported by fsspec

Quickstart (using docker-compose)

You'll need:

  • OAuth credentials from GitHub, GitLab, Google or Microsoft for authentication.
  • For SSH and Telnet: a tabby-connection-gateway to forward traffic.
  • Docker BuildKit: export DOCKER_BUILDKIT=1
    docker-compose up -e SOCIAL_AUTH_GITHUB_KEY=xxx -e SOCIAL_AUTH_GITHUB_SECRET=yyy

will start Tabby Web on port 9090 with MariaDB as a storage backend.

For SSH and Telnet, once logged in, enter your connection gateway address and auth token in the settings.

Environment variables

  • DATABASE_URL (required).
  • APP_DIST_STORAGE: a file://, s3://, or gcs:// URL to store app distros in.
  • SOCIAL_AUTH_*_KEY & SOCIAL_AUTH_*_SECRET: social login credentials, supported providers are GITHUB, GITLAB, MICROSOFT_GRAPH and GOOGLE_OAUTH2.

Adding Tabby app versions

  • docker-compose run tabby /manage.sh add_version 1.0.163

You can find the available version numbers here.

Development setup

Put your environment vars (DATABASE_URL, etc.) in the .env file in the root of the repo.

For the frontend:

cd frontend
yarn
yarn run build # or yarn run watch

For the backend:

cd backend
poetry install
./manage.py migrate # set up the database
./manage.py add_version 1.0.156-nightly.2 # install an app distribution
PORT=9000 poetry run gunicorn # optionally with --reload

Security

  • When using Tabby Web for SSH/Telnet connectivity, your traffic will pass through a hosted gateway service. It's encrypted in transit (HTTPS) and the gateway servers authenticate themselves with a certificate before connections are made. However there's a non-zero risk of a MITM if a gateway service is compromised and the attacker gains access to the service's private key.
  • You can alleviate this risk by hosting your own gateway service, or your own copy of Tabby Web altogether.

tabby-web's People

Contributors

capriciousduck avatar dependabot[bot] avatar eugeny avatar maxwaldorf avatar qaziqarta avatar tennox avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

tabby-web's Issues

Google Login

Hello,
I am trying to connect tabby.sh via google login. However it returns "Server Error (500)".

F

helm chart

I wrote 2 helm charts for this and it's working pretty well for me in k8s with github oauth login.

I have one chart for tabby-web that includes standalone mariadb and another chart for the connection-gateway. I'm using https://bjw-s.github.io/helm-charts/docs/ library chart. All sensitive env settings come from secrets and app-dist and mariadb have persistent pvc's for data.

If you're interested in hosting the charts I would be happy to send you a PR.

docker image not building

Stumbled upon this and would love to give it a try. But my docker image won't build. Looks like a python issue ...
Anyone successfully build this lately?

Docker version 20.10.21, build baeda1f
Docker Compose version v2.12.2

`#0 29.47 build/temp.linux-x86_64-cpython-37/_openssl.c: In function '_cffi_d_EVP_PKEY_CTX_set0_rsa_oaep_label':
#0 29.47 build/temp.linux-x86_64-cpython-37/_openssl.c:22582:1: warning: control reaches end of non-void function [-Wreturn-type]
#0 29.47 22582 | }
#0 29.47 | ^
#0 29.47 error: command '/usr/bin/gcc' failed with exit code 1
#0 29.47 [end of output]
#0 29.47
#0 29.47 note: This error originates from a subprocess, and is likely not a problem with pip.
#0 29.47 ERROR: Failed building wheel for cryptography
#0 29.47 Failed to build cryptography
#0 29.47 ERROR: Could not build wheels for cryptography, which is required to install pyproject.toml-based projects
#0 29.48 WARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.
#0 29.48 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.

failed to solve: executor failed running [/bin/sh -c pip install -U setuptools 'cryptography>=3.0,<3.1' poetry==1.1.7]: exit code: 1
`

private key ed25519 ?

When I use an ECDSA key, I can connect to my server without any issues, but when I use an Ed25519 key, I keep getting an error message saying "All configured authentication methods failed."
The same Ed25519 key works fine when using Tabby Windows client or Xshell.

docker-compose

image
I tried to use docker-compose to deploy this service, but I still reported an error when running. I want to know the corresponding versions of docker and compose at runtime. It is still very difficult for me to use

Using latest docker image, unable to load bundled distribution

The latest docker image is bugged.
Error on clean installation:

tabby-web  | WARNING Not Found: /app-dist/1.0.187-nightly.1/tabby-web-container/dist/preload.js
tabby-web  | WARNING Not Found: /app-dist/1.0.187-nightly.1/tabby-web-container/dist/bundle.js
tabby-web  | WARNING Not Found: /app-dist/1.0.187-nightly.1/tabby-web-container/dist/preload.js

Even if I add my own distribution version using manage.sh, I get the same error. Any help would be appreciated!

psycopg2 error

Getting No module found psycopg2 error when using PostgreSQL database.

Network Error When Connecting to Gateway Container

I have been trying to get Tabby Web setup and cannot for the life of me figure out how to get Web to work with the gateway. All three containers (web, database, gateway) spin up without error, but when I tried to add the gateway I get the following error:

Connection failed; AxiosError: Network Error

image

I can see in the logs for the containers that the gateway says "INFO:websockets.server:connection failed (400 Bad Request). If I enter the same address into my browser, I get a 426 error:

image

I suspect I'm dramatically misunderstanding how I need to have this all setup. My intentions were to have this only available locally, but do I need to have a public DNS entry and allow connections in from the outside for GitHub Authentication to work? And is that why the connection fails? If so, I do not currently have that configured.

Instructions for self hosting

Hi, I'm looking to self host tabby-web. However the instructions given in README are supposed to be used with docker. Can you update it with instructions for hosting natively without any github/Oauth authentication? (Ex: similar to apache guacamole)

Question - GitHub Callback URL

Hello, I'm trying to register an Oauth app from Github for Tabby Web and I don't know what to put here, what is the link to the api?
image

Gateways api forbidden error

Hello,

Using "https://app.tabby.sh/" and when I try to ssh to a connection, I see below error.

Http failure response for https://api.tabby.sh/api/1/gateways/choose: 403

I am not sure if it is "yabby-connection-gateway" issue or not. If so, please close the issue.

Thank you.

F

Asking Vault Password

Hi. I am prompted for vault password repeatedly even if I set it to remember for 7 days. I don't know what's wrong.

Web-Version not working

Hi,
I wanted to try tabby-web on the test-page https://tabby.sh/app , but it's not working.
Tested with Chrome and Firefox, on Linux and Windows - but there are just a lot of errors in the browsers dev-console.

[Feature request] Local Authentication

Hello,

Thanks for making the app. I just realize I can only login via oauth. I really need the feature to authenticate without 3rd party though... Please implement it in the future.

Can't understand how to generate/connect with Oauth

Hi,

Just installed and run with docker-compose but can't understand how to log-in :

Through Github I have a 404 page on github :
https://github.com/login/oauth/authorize?client_id=None&redirect_uri=http://my_own_url.domain.tld/api/1/auth/social/complete/github/&state=Cm9I0zPfzUpjjGZZlXeWLcFiKXAx1G4e&response_type=code&scope=read:user,user:email

so how/where to get these please ? :
-e SOCIAL_AUTH_GITHUB_KEY=xxx -e SOCIAL_AUTH_GITHUB_SECRET=yyy

Through Microsoft :

I have a message telling :
AADSTS700016: Application with identifier 'None' was not found in the directory 'my_company'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant.

Through Google I have :
Erreur d'autorisation
Erreur 401 : invalid_client
The OAuth client was not found.

Thanks for help !

Regards,

Laurent

Service Unavailable: /api/1/gateways/choose(503)

I don't know why, is there any configuration I missed? I built through docker, this is build statement

docker build --force-rm -t tabby-web:20230228204228 -f /usr/local/tabby/tabby-web/Dockerfile .

this is my docker run

docker run -d -m 2048M --memory-swap 4096M --log-opt max-size=500M --log-opt max-file=1 \ --name tabby-web \ -e 'DATABASE_URL=mysql://tabby:[email protected]:10025/tabby-web' \ -e 'PORT=80' \ -e 'DEBUG=false' \ -e 'ENABLE_HOMEPAGE=true' \ -e 'APP_DIST_STORAGE=file:///app-dist' \ -e 'DOCKERIZE_ARGS="-wait tcp://10.21.19.72:10025 -timeout 60s"' \ -v /usr/local/tabby/app:/app \ -v /usr/local/tabby/app-dist:/app-dist \ -p 9090:80 \ --network tabby --ip 172.32.0.2 \ --restart always tabby-web:20230228204228

when I make an ssh connection
image

request : /api/1/gateways/choose (503 Service Unavailable)

image

I don't know what I did wrong. I'd like to get a hint. thanks.

cannot connect to the windows-opensshd

Tabby-web default encryption method, cannot connect to the windows-opensshd service, but tabby clients can

 SSH   !  Agent auth selected, but no running agent is detected
 SSH  Host key fingerprint:
 SSH   ecdsa-sha2-nistp256  tRCa/jIbYZE36swTQNf0+LiYStXTJbOGzQZsT31bHss= 
 X  All configured authentication methods failed
 SSH   X  Remote rejected opening a shell channel: Error: Not connected

Keycloak support

For a great open source commitment, add support for Keycloak (oidc).

How to add private Key

Great job on the app

I have been trying to use the Tabby web app, and even though I am able to import and sync the config from my desktop, how do I add the private keys for the login to the Tabby web, I have been searching for the same, I checked the tabby web hosted also i don't find an option to add ssh keys to the app. can you please tell me how to that.

Unknown message digest

Hello Eugeny,

first I wanna thank you for your amazing project.

I've successfully installed the selfhosted version of Tabby-web in our environment even with the selfhosted version of the gateway. Everything looks great except the last bit with SSH connections. I've tried many of our internal servers (private key, password interactive) and all connections ends with:

image

And honestly I don't know where to look further maybe you can give me some hint what can be wrong with my setup :)

Thanks, Sicco

ARM64 - Not working

continuing #43


/usr/local/bin/dockerize: line 1: syntax error: unexpected word (expecting ")")
--
Thu, Jan 27 2022 1:20:12 pm | Traceback (most recent call last):
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
Thu, Jan 27 2022 1:20:12 pm | self.connect()
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Thu, Jan 27 2022 1:20:12 pm | return func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 200, in connect
Thu, Jan 27 2022 1:20:12 pm | self.connection = self.get_new_connection(conn_params)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Thu, Jan 27 2022 1:20:12 pm | return func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection
Thu, Jan 27 2022 1:20:12 pm | connection = Database.connect(**conn_params)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
Thu, Jan 27 2022 1:20:12 pm | return Connection(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
Thu, Jan 27 2022 1:20:12 pm | super().__init__(*args, **kwargs2)
Thu, Jan 27 2022 1:20:12 pm | MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
Thu, Jan 27 2022 1:20:12 pm |  
Thu, Jan 27 2022 1:20:12 pm | The above exception was the direct cause of the following exception:
Thu, Jan 27 2022 1:20:12 pm |  
Thu, Jan 27 2022 1:20:12 pm | Traceback (most recent call last):
Thu, Jan 27 2022 1:20:12 pm | File "./manage.py", line 22, in <module>
Thu, Jan 27 2022 1:20:12 pm | main()
Thu, Jan 27 2022 1:20:12 pm | File "./manage.py", line 18, in main
Thu, Jan 27 2022 1:20:12 pm | execute_from_command_line(sys.argv)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
Thu, Jan 27 2022 1:20:12 pm | utility.execute()
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 413, in execute
Thu, Jan 27 2022 1:20:12 pm | self.fetch_command(subcommand).run_from_argv(self.argv)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 354, in run_from_argv
Thu, Jan 27 2022 1:20:12 pm | self.execute(*args, **cmd_options)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 398, in execute
Thu, Jan 27 2022 1:20:12 pm | output = self.handle(*args, **options)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 89, in wrapped
Thu, Jan 27 2022 1:20:12 pm | res = handle_func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 75, in handle
Thu, Jan 27 2022 1:20:12 pm | self.check(databases=[database])
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 423, in check
Thu, Jan 27 2022 1:20:12 pm | databases=databases,
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/checks/registry.py", line 76, in run_checks
Thu, Jan 27 2022 1:20:12 pm | new_errors = check(app_configs=app_configs, databases=databases)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/checks/database.py", line 13, in check_database_backends
Thu, Jan 27 2022 1:20:12 pm | issues.extend(conn.validation.check(**kwargs))
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/validation.py", line 9, in check
Thu, Jan 27 2022 1:20:12 pm | issues.extend(self._check_sql_mode(**kwargs))
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode
Thu, Jan 27 2022 1:20:12 pm | if not (self.connection.sql_mode & {'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES'}):
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/functional.py", line 48, in __get__
Thu, Jan 27 2022 1:20:12 pm | res = instance.__dict__[self.name] = self.func(instance)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 405, in sql_mode
Thu, Jan 27 2022 1:20:12 pm | sql_mode = self.mysql_server_data['sql_mode']
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/functional.py", line 48, in __get__
Thu, Jan 27 2022 1:20:12 pm | res = instance.__dict__[self.name] = self.func(instance)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 366, in mysql_server_data
Thu, Jan 27 2022 1:20:12 pm | with self.temporary_connection() as cursor:
Thu, Jan 27 2022 1:20:12 pm | File "/usr/local/lib/python3.7/contextlib.py", line 112, in __enter__
Thu, Jan 27 2022 1:20:12 pm | return next(self.gen)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 603, in temporary_connection
Thu, Jan 27 2022 1:20:12 pm | with self.cursor() as cursor:
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Thu, Jan 27 2022 1:20:12 pm | return func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 259, in cursor
Thu, Jan 27 2022 1:20:12 pm | return self._cursor()
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 235, in _cursor
Thu, Jan 27 2022 1:20:12 pm | self.ensure_connection()
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Thu, Jan 27 2022 1:20:12 pm | return func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
Thu, Jan 27 2022 1:20:12 pm | self.connect()
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
Thu, Jan 27 2022 1:20:12 pm | raise dj_exc_value.with_traceback(traceback) from exc_value
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
Thu, Jan 27 2022 1:20:12 pm | self.connect()
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Thu, Jan 27 2022 1:20:12 pm | return func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 200, in connect
Thu, Jan 27 2022 1:20:12 pm | self.connection = self.get_new_connection(conn_params)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Thu, Jan 27 2022 1:20:12 pm | return func(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection
Thu, Jan 27 2022 1:20:12 pm | connection = Database.connect(**conn_params)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
Thu, Jan 27 2022 1:20:12 pm | return Connection(*args, **kwargs)
Thu, Jan 27 2022 1:20:12 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
Thu, Jan 27 2022 1:20:12 pm | super().__init__(*args, **kwargs2)
Thu, Jan 27 2022 1:20:12 pm | django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [9] [INFO] Starting gunicorn 20.1.0
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [9] [INFO] Listening at: http://0.0.0.0:80 (9)
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [9] [INFO] Using worker: sync
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [11] [INFO] Booting worker with pid: 11
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [12] [INFO] Booting worker with pid: 12
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [13] [INFO] Booting worker with pid: 13
Thu, Jan 27 2022 1:20:15 pm | [2022-01-27 12:20:15 +0000] [14] [INFO] Booting worker with pid: 14

Questions about commands and installation

Hi

I'm having trouble deploying the service locally (self-hosted) and some doubts due to my lack of docker experience. My first question is about docker-compose.yml in the db part that I configure eg MARIADB_USER with my user from my local machine?

image

My second question regarding commands related to docker-compose, the only command to use is docker-compose up -e SOCIAL_AUTH_GITHUB_KEY=xxx -e SOCIAL_AUTH_GITHUB_SECRET=yyy.
Because if the only command used doesn't generate a result.

image

Where am I making a mistake?
Thanks in advance and forgive my english

Gateway Error

I am getting this error: All connection gateways are unavailable right now

How to fix?

Unknown Message Digest

As the title says, I'm getting "Unknown Message Digest" when connecting to a server via SSH.

Keep Alive

Keep alive settings are not working. Do you have a temporary work around for this? I've seen fixes in previous issues but they didn't work.

Config Sync

Hi. I self-hosted the app and it is running very smoothly and the UI is beautiful!

By the way, I couldn't understand one thing. What is config sync? Is my config not saved when I log in through my Google or Github account?

Heroku

Can Tabby Web run on Heroku? Will there be any problems if I try to run on it?

Paste

Hi @Eugeny

Right-click and paste is not working. Neither Ctrl + V or Ctrl + Shift + V. What do I do?

Unable to use Postgres DB

When trying to self host Tabby (including TCG, web, and a postgres DB), I get an error regarding psycopg2

Reproduction steps

  1. Create docker-compose.yml with the following contents
version: '3'

services:
  tcg:
    image: ghcr.io/eugeny/tabby-connection-gateway:master
    environment:
      TABBY_AUTH_TOKEN: tabby_auth_token
    command: --token-auth --host 0.0.0.0

  db:
    image: postgres:13.4
    environment:
      PGDATA: /var/lib/postgresql/data/tabby
      POSTGRES_DB: tabby
      POSTGRES_PASSWORD: password123
      POSTGRES_USER: tabby_web

  web:
    image: ghcr.io/eugeny/tabby-web:master
    depends_on:
      - db
      - tcg
    environment:
      DATABASE_URL: 'postgresql://tabby_web:password123@db/tabby'
  1. Run docker compose up
  2. Observe the error
tabby-web-1  | Traceback (most recent call last):
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 25, in <module>
tabby-web-1  |     import psycopg2 as Database
tabby-web-1  | ModuleNotFoundError: No module named 'psycopg2'
tabby-web-1  | 
tabby-web-1  | During handling of the above exception, another exception occurred:
tabby-web-1  | 
tabby-web-1  | Traceback (most recent call last):
tabby-web-1  |   File "./manage.py", line 22, in <module>
tabby-web-1  |     main()
tabby-web-1  |   File "./manage.py", line 18, in main
tabby-web-1  |     execute_from_command_line(sys.argv)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
tabby-web-1  |     utility.execute()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
tabby-web-1  |     django.setup()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
tabby-web-1  |     apps.populate(settings.INSTALLED_APPS)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
tabby-web-1  |     app_config.import_models()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/apps/config.py", line 301, in import_models
tabby-web-1  |     self.models_module = import_module(models_module_name)
tabby-web-1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
tabby-web-1  |     return _bootstrap._gcd_import(name[level:], package, level)
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
tabby-web-1  |   File "<frozen importlib._bootstrap_external>", line 728, in exec_module
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/contrib/auth/models.py", line 3, in <module>
tabby-web-1  |     from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 48, in <module>
tabby-web-1  |     class AbstractBaseUser(models.Model):
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/models/base.py", line 122, in __new__
tabby-web-1  |     new_class.add_to_class('_meta', Options(meta, app_label))
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/models/base.py", line 326, in add_to_class
tabby-web-1  |     value.contribute_to_class(cls, name)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/models/options.py", line 207, in contribute_to_class
tabby-web-1  |     self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/connection.py", line 15, in __getattr__
tabby-web-1  |     return getattr(self._connections[self._alias], item)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/connection.py", line 62, in __getitem__
tabby-web-1  |     conn = self.create_connection(alias)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/utils.py", line 204, in create_connection
tabby-web-1  |     backend = load_backend(db['ENGINE'])
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/utils.py", line 111, in load_backend
tabby-web-1  |     return import_module('%s.base' % backend_name)
tabby-web-1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
tabby-web-1  |     return _bootstrap._gcd_import(name[level:], package, level)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 29, in <module>
tabby-web-1  |     raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
tabby-web-1  | django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'
tabby-web-1  | Traceback (most recent call last):
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 25, in <module>
tabby-web-1  |     import psycopg2 as Database
tabby-web-1  | ModuleNotFoundError: No module named 'psycopg2'
tabby-web-1  | 
tabby-web-1  | During handling of the above exception, another exception occurred:
tabby-web-1  | 
tabby-web-1  | Traceback (most recent call last):
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/bin/gunicorn", line 8, in <module>
tabby-web-1  |     sys.exit(run())
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 67, in run
tabby-web-1  |     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/app/base.py", line 231, in run
tabby-web-1  |     super().run()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/app/base.py", line 72, in run
tabby-web-1  |     Arbiter(self).run()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/arbiter.py", line 58, in __init__
tabby-web-1  |     self.setup(app)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/arbiter.py", line 118, in setup
tabby-web-1  |     self.app.wsgi()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
tabby-web-1  |     self.callable = self.load()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
tabby-web-1  |     return self.load_wsgiapp()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
tabby-web-1  |     return util.import_app(self.app_uri)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/gunicorn/util.py", line 359, in import_app
tabby-web-1  |     mod = importlib.import_module(module)
tabby-web-1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
tabby-web-1  |     return _bootstrap._gcd_import(name[level:], package, level)
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
tabby-web-1  |   File "<frozen importlib._bootstrap_external>", line 728, in exec_module
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
tabby-web-1  |   File "/app/tabby/wsgi.py", line 7, in <module>
tabby-web-1  |     application = get_wsgi_application()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
tabby-web-1  |     django.setup(set_prefix=False)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
tabby-web-1  |     apps.populate(settings.INSTALLED_APPS)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
tabby-web-1  |     app_config.import_models()
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/apps/config.py", line 301, in import_models
tabby-web-1  |     self.models_module = import_module(models_module_name)
tabby-web-1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
tabby-web-1  |     return _bootstrap._gcd_import(name[level:], package, level)
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
tabby-web-1  |   File "<frozen importlib._bootstrap_external>", line 728, in exec_module
tabby-web-1  |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/contrib/auth/models.py", line 3, in <module>
tabby-web-1  |     from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 48, in <module>
tabby-web-1  |     class AbstractBaseUser(models.Model):
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/models/base.py", line 122, in __new__
tabby-web-1  |     new_class.add_to_class('_meta', Options(meta, app_label))
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/models/base.py", line 326, in add_to_class
tabby-web-1  |     value.contribute_to_class(cls, name)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/models/options.py", line 207, in contribute_to_class
tabby-web-1  |     self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/connection.py", line 15, in __getattr__
tabby-web-1  |     return getattr(self._connections[self._alias], item)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/connection.py", line 62, in __getitem__
tabby-web-1  |     conn = self.create_connection(alias)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/utils.py", line 204, in create_connection
tabby-web-1  |     backend = load_backend(db['ENGINE'])
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/utils.py", line 111, in load_backend
tabby-web-1  |     return import_module('%s.base' % backend_name)
tabby-web-1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
tabby-web-1  |     return _bootstrap._gcd_import(name[level:], package, level)
tabby-web-1  |   File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 29, in <module>
tabby-web-1  |     raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
tabby-web-1  | django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'

MySQL Database

How much database storage is recommended? I am searching for a free cloud based MySQL database.

failed to deploy on remote server

image

cannot find the js:

http://xxxxx/app-dist/1.0.163/tabby-web-container/dist/preload.js
http://xxxxx/app-dist/1.0.163/tabby-web-container/dist/bundle.js

running cmd:

docker run -d --name tabby      -e DATABASE_URL=sqlite:////app-dist/database.sqlite3   -p 30000:80   -e PORT=80 -e DEBUG=True -e APP_DIST_STORAGE=file:///app-dist -e ENABLE_HOMEPAGE=False  -e SOCIAL_AUTH_GITHUB_KEY=xxxxx -e SOCIAL_AUTH_GITHUB_SECRET=xxxxx    ghcr.io/eugeny/tabby-web:master sh -c "/manage.sh add_version 1.0.163 && cd /app && /start.sh"

Just got '{"detail":"Not found."}'

Following the [Development setup] instructions:

PORT=9000 poetry run gunicorn

[$HOME]/.cache/pypoetry/virtualenvs/tabby-web-h7w7wFtx-py3.8/lib/python3.8/site-packages/whitenoise/base.py:115: UserWarning: No directory at: [$HOME]/tabby-web/backend/public/
warnings.warn(u"No directory at: {}".format(root))

In the web browser and just got {"detail":"Not found."}

Is there anyone's Tabby-web works properly on 1.0.197-nighyly.1?

I've deploy tabby-web 1.0.189-nightly.2 by docker-compose on my server. But soon I found it cannot PASTE properly. So I tried to update the version of tabby-web. And then I tried 1.0.197-nightly.0&1, but I found it stucks in ProgressBar of 'Tabby alpha', like this:
b38ed5bd681a7ae14fd9bb419e27ad22.png
Then I tried to install 1.0.197 on a new server, it doesn't work as well

[good first issue] Improperly configured

Hello, with a high possibility it's me who didn't configure it correctly. But i can't figure out where did i take a wrong step.

backend logs:

Traceback (most recent call last):
  File "./manage.py", line 22, in <module>
    main()
  File "./manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 89, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 92, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/loader.py", line 53, in __init__
    self.build_graph()
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/loader.py", line 220, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
    if self.has_table():
  File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 55, in has_table
    with self.connection.cursor() as cursor:
  File "/usr/local/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 259, in cursor
    return self._cursor()
  File "/usr/local/lib/python3.7/site-packages/django/db/backends/dummy/base.py", line 20, in complain
    raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

frontend logs:

Node Express server listening on http://localhost:80
Node Express server listening on http://localhost:80
Node Express server listening on http://localhost:80
Node Express server listening on http://localhost:80
http://localhost:9091
ERROR TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'XMLHttpRequest'
    |     property 'upload' -> object with constructor 'XMLHttpRequestUpload'
    --- property '_request' closes the circle
    at JSON.stringify (<anonymous>)
    at readableObjectToString (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:1016:1)
    at resolvePromise (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:1183:1)
    at resolvePromise (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:1137:1)
    at /app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:1249:1
    at ZoneDelegate.invokeTask (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:434:1)
    at Object.onInvokeTask (/app/build-server/webpack:/tabby-web/node_modules/@angular/core/__ivy_ngcc__/esm2015/src/zone/ng_zone.js:295:1)
    at ZoneDelegate.invokeTask (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:433:1)
    at Zone.runTask (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:205:1)
    at drainMicroTaskQueue (/app/build-server/webpack:/tabby-web/node_modules/zone.js/dist/zone-node.js:620:1) {
  rejection: HttpErrorResponse {
    headers: HttpHeaders {
      normalizedNames: Map {},
      lazyUpdate: null,
      headers: Map {}
    },
    status: 0,
    statusText: 'Unknown Error',
    url: 'http://localhost:9091/api/1/instance-info',
    ok: false,
    name: 'HttpErrorResponse',
    message: 'Http failure response for http://localhost:9091/api/1/instance-info: 0 Unknown Error',
    error: ProgressEvent {
      type: 'error',
      target: [XMLHttpRequest],
      currentTarget: [XMLHttpRequest],
      lengthComputable: false,
      loaded: 0,
      total: 0
    }
  },
  promise: ZoneAwarePromise [Promise] {
    __zone_symbol__state: 0,
    __zone_symbol__value: HttpErrorResponse {
      headers: [HttpHeaders],
      status: 0,
      statusText: 'Unknown Error',
      url: 'http://localhost:9091/api/1/instance-info',
      ok: false,
      name: 'HttpErrorResponse',
      message: 'Http failure response for http://localhost:9091/api/1/instance-info: 0 Unknown Error',
      error: [ProgressEvent]
    }
  },
  zone: Zone {
    _parent: Zone {
      _parent: null,
      _name: '<root>',
      _properties: {},
      _zoneDelegate: [ZoneDelegate]
    },
    _name: 'angular',
    _properties: { isAngularZone: true },
    _zoneDelegate: ZoneDelegate {
      _taskCounts: [Object],
      zone: [Circular],
      _parentDelegate: [ZoneDelegate],
      _forkZS: null,
      _forkDlgt: null,
      _forkCurrZone: null,
      _interceptZS: null,
      _interceptDlgt: null,
      _interceptCurrZone: null,
      _invokeZS: [Object],
      _invokeDlgt: [ZoneDelegate],
      _invokeCurrZone: [Circular],
      _handleErrorZS: [Object],
      _handleErrorDlgt: [ZoneDelegate],
      _handleErrorCurrZone: [Circular],
      _scheduleTaskZS: [Object],
      _scheduleTaskDlgt: [ZoneDelegate],
      _scheduleTaskCurrZone: [Circular],
      _invokeTaskZS: [Object],
      _invokeTaskDlgt: [ZoneDelegate],
      _invokeTaskCurrZone: [Circular],
      _cancelTaskZS: [Object],
      _cancelTaskDlgt: [ZoneDelegate],
      _cancelTaskCurrZone: [Circular],
      _hasTaskZS: [Object],
      _hasTaskDlgt: [ZoneDelegate],
      _hasTaskDlgtOwner: [Circular],
      _hasTaskCurrZone: [Circular]
    }
  },
  task: ZoneTask {
    _zone: Zone {
      _parent: [Zone],
      _name: 'angular',
      _properties: [Object],
      _zoneDelegate: [ZoneDelegate]
    },
    runCount: 0,
    _zoneDelegates: null,
    _state: 'notScheduled',
    type: 'microTask',
    source: 'Promise.then',
    data: ZoneAwarePromise [Promise] {
      __zone_symbol__state: 0,
      __zone_symbol__value: [HttpErrorResponse]
    },
    scheduleFn: undefined,
    cancelFn: undefined,
    callback: [Function],
    invoke: [Function]
  }
}

It doesn't work on port 80, but if i go to 9090, it half-works, with the blank black page and following in console:

ERROR Error: Uncaught (in promise): u: {"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":"http://localhost:9091/api/1/instance-info","ok":false,"name":"HttpErrorResponse","message":"Http failure response for http://localhost:9091/api/1/instance-info: 0 Unknown Error","error":{"isTrusted":true}}

homepage embed of app.tabby.sh fails because of deprecated X-Frame-Options header

Invalid X-Frame-Options header was found when loading “https://app.tabby.sh/demo”: “ALLOW-FROM https://tabby.sh/” is not a valid directive.

The loading of “https://app.tabby.sh/terminal” in a frame is denied by “X-Frame-Options“ directive set to “SAMEORIGIN“

Looking at MDN docs:

ALLOW-FROM=url Deprecated
This is an obsolete directive that no longer works in modern browsers. (Using it will give the same behavior as omitting the header.) Don't use it. The Content-Security-Policy HTTP header has a frame-ancestors directive which you can use instead.

[feature request] LDAP auth and shared sessions

Hello!

  1. Do you plan to implement LDAP authentication?
  2. And what about shared sessions for users? Is there any such plans?
    Thank you!
    UPD: I see farther - different preset sessions for different users! Default session, locked for everyone and many more, my imagination can't stop... 😀

[arm64] docker image issue

Hello,

x64 image works fine but arm64 image needs tuning:

Wed, Jan 26 2022 11:02:41 pm | /wait: line 1: �ELF����: not found
Wed, Jan 26 2022 11:02:41 pm | /wait: line 1: syntax error: unterminated quoted string
Wed, Jan 26 2022 11:02:45 pm | Traceback (most recent call last):
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
Wed, Jan 26 2022 11:02:45 pm | self.connect()
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Wed, Jan 26 2022 11:02:45 pm | return func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 200, in connect
Wed, Jan 26 2022 11:02:45 pm | self.connection = self.get_new_connection(conn_params)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Wed, Jan 26 2022 11:02:45 pm | return func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection
Wed, Jan 26 2022 11:02:45 pm | connection = Database.connect(**conn_params)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
Wed, Jan 26 2022 11:02:45 pm | return Connection(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
Wed, Jan 26 2022 11:02:45 pm | super().__init__(*args, **kwargs2)
Wed, Jan 26 2022 11:02:45 pm | MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
Wed, Jan 26 2022 11:02:45 pm |  
Wed, Jan 26 2022 11:02:45 pm | The above exception was the direct cause of the following exception:
Wed, Jan 26 2022 11:02:45 pm |  
Wed, Jan 26 2022 11:02:45 pm | Traceback (most recent call last):
Wed, Jan 26 2022 11:02:45 pm | File "./manage.py", line 22, in <module>
Wed, Jan 26 2022 11:02:45 pm | main()
Wed, Jan 26 2022 11:02:45 pm | File "./manage.py", line 18, in main
Wed, Jan 26 2022 11:02:45 pm | execute_from_command_line(sys.argv)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
Wed, Jan 26 2022 11:02:45 pm | utility.execute()
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/__init__.py", line 413, in execute
Wed, Jan 26 2022 11:02:45 pm | self.fetch_command(subcommand).run_from_argv(self.argv)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 354, in run_from_argv
Wed, Jan 26 2022 11:02:45 pm | self.execute(*args, **cmd_options)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 398, in execute
Wed, Jan 26 2022 11:02:45 pm | output = self.handle(*args, **options)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 89, in wrapped
Wed, Jan 26 2022 11:02:45 pm | res = handle_func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 75, in handle
Wed, Jan 26 2022 11:02:45 pm | self.check(databases=[database])
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/management/base.py", line 423, in check
Wed, Jan 26 2022 11:02:45 pm | databases=databases,
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/checks/registry.py", line 76, in run_checks
Wed, Jan 26 2022 11:02:45 pm | new_errors = check(app_configs=app_configs, databases=databases)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/core/checks/database.py", line 13, in check_database_backends
Wed, Jan 26 2022 11:02:45 pm | issues.extend(conn.validation.check(**kwargs))
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/validation.py", line 9, in check
Wed, Jan 26 2022 11:02:45 pm | issues.extend(self._check_sql_mode(**kwargs))
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode
Wed, Jan 26 2022 11:02:45 pm | if not (self.connection.sql_mode & {'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES'}):
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/functional.py", line 48, in __get__
Wed, Jan 26 2022 11:02:45 pm | res = instance.__dict__[self.name] = self.func(instance)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 405, in sql_mode
Wed, Jan 26 2022 11:02:45 pm | sql_mode = self.mysql_server_data['sql_mode']
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/functional.py", line 48, in __get__
Wed, Jan 26 2022 11:02:45 pm | res = instance.__dict__[self.name] = self.func(instance)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 366, in mysql_server_data
Wed, Jan 26 2022 11:02:45 pm | with self.temporary_connection() as cursor:
Wed, Jan 26 2022 11:02:45 pm | File "/usr/local/lib/python3.7/contextlib.py", line 112, in __enter__
Wed, Jan 26 2022 11:02:45 pm | return next(self.gen)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 603, in temporary_connection
Wed, Jan 26 2022 11:02:45 pm | with self.cursor() as cursor:
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Wed, Jan 26 2022 11:02:45 pm | return func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 259, in cursor
Wed, Jan 26 2022 11:02:45 pm | return self._cursor()
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 235, in _cursor
Wed, Jan 26 2022 11:02:45 pm | self.ensure_connection()
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Wed, Jan 26 2022 11:02:45 pm | return func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
Wed, Jan 26 2022 11:02:45 pm | self.connect()
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
Wed, Jan 26 2022 11:02:45 pm | raise dj_exc_value.with_traceback(traceback) from exc_value
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
Wed, Jan 26 2022 11:02:45 pm | self.connect()
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Wed, Jan 26 2022 11:02:45 pm | return func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/base/base.py", line 200, in connect
Wed, Jan 26 2022 11:02:45 pm | self.connection = self.get_new_connection(conn_params)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/utils/asyncio.py", line 33, in inner
Wed, Jan 26 2022 11:02:45 pm | return func(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 234, in get_new_connection
Wed, Jan 26 2022 11:02:45 pm | connection = Database.connect(**conn_params)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
Wed, Jan 26 2022 11:02:45 pm | return Connection(*args, **kwargs)
Wed, Jan 26 2022 11:02:45 pm | File "/venv/tabby-web-9TtSrW0h-py3.7/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
Wed, Jan 26 2022 11:02:45 pm | super().__init__(*args, **kwargs2)
Wed, Jan 26 2022 11:02:45 pm | django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [10] [INFO] Starting gunicorn 20.1.0
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [10] [INFO] Listening at: http://0.0.0.0:80 (10)
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [10] [INFO] Using worker: sync
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [12] [INFO] Booting worker with pid: 12
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [13] [INFO] Booting worker with pid: 13
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [14] [INFO] Booting worker with pid: 14
Wed, Jan 26 2022 11:02:47 pm | [2022-01-26 22:02:47 +0000] [15] [INFO] Booting worker with pid: 15

I tried to build the image locally:

shows a couple issues:

warning " > @fortawesome/[email protected]" has incorrect peer dependency "@angular/core@^11.0.0".
warning " > @ng-bootstrap/[email protected]" has incorrect peer dependency "@angular/common@^11.0.0".
warning " > @ng-bootstrap/[email protected]" has incorrect peer dependency "@angular/core@^11.0.0".
warning " > @ng-bootstrap/[email protected]" has incorrect peer dependency "@angular/forms@^11.0.0".
warning " > @ng-bootstrap/[email protected]" has unmet peer dependency "@angular/localize@^11.0.0".
warning " > @ng-bootstrap/[email protected]" has incorrect peer dependency "rxjs@^6.5.5".
warning " > @nguniversal/[email protected]" has incorrect peer dependency "@angular/common@^12.2.12".
warning " > @nguniversal/[email protected]" has incorrect peer dependency "@angular/core@^12.2.12".
warning " > @nguniversal/[email protected]" has incorrect peer dependency "@angular/platform-server@^12.2.12".
warning "@nguniversal/express-engine > @nguniversal/[email protected]" has incorrect peer dependency "@angular/common@^12.2.12".
warning "@nguniversal/express-engine > @nguniversal/[email protected]" has incorrect peer dependency "@angular/core@^12.2.12".
warning " > [email protected]" has unmet peer dependency "@popperjs/core@^2.9.2".
warning " > [email protected]" has incorrect peer dependency "@angular/common@^9.0.1".
warning " > [email protected]" has incorrect peer dependency "@angular/core@^9.0.1".
warning " > [email protected]" has unmet peer dependency "tslib@^1.10.0".
warning " > [email protected]" has incorrect peer dependency "pug@^2.0.0".
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.

Cannot create configs

Hello,

I appriciate your hard work on the project! I installed the project with docker-compose like this:

services:
    tabby:
        image: ghcr.io/eugeny/tabby-web:master
        restart: always
        ports:
        - 9190:80
        volumes:
        - /home/XXX/docker/Tabby/data:/app-dist
        environment:
        - DATABASE_URL=sqlite:////app-dist/database.sqlite3
        - PORT=80
        - ENABLE_HOMEPAGE=False
        - DEBUG=True
        - APP_DIST_STORAGE=file:///app-dist
        - SOCIAL_AUTH_GITHUB_KEY=XXX
        - SOCIAL_AUTH_GITHUB_SECRET=XXX

    gateway:
        image: ghcr.io/eugeny/tabby-connection-gateway:master
        restart: always
        ports:
        - 9191:80
        environment:
        - TABBY_AUTH_TOKEN=XXX
        command: "--host 0.0.0.0 --port 80 --token-auth"

Github authentication working 🆗
Gateway server started 🆗

When I login and I click on the + New Config button, nothing happens, on the Firefox browser console:

<empty string> common.service.ts:21:12
ERROR Error: Uncaught (in promise): TypeError: this.getLatestStableVersion() is undefined
49760/createNewConfig/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:627715
49760/_/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:627045
T@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:604967
_@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:626790
createNewConfig@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:627546
49760/init/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:629600
i@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:626847
invoke@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:593654
onInvoke@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:312991
invoke@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:593594
run@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:589062
93103/</x/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:603894
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594272
onInvokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:312809
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594193
runTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:589677
v@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:596292
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:595377
g@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:607302
y@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:607641
    Angular 2
    a login.service.ts:7
    Angular 13
errors.js:22:12
ERROR Error: Uncaught (in promise): TypeError: this.getLatestStableVersion() is undefined
49760/createNewConfig/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:627715
49760/_/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:627045
T@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:604967
_@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:626790
createNewConfig@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:627546
56189/createNewConfig/<@https://[IP_ADDRESS]/static/app.bundle.js:2:18271
56189/ft/<@https://[IP_ADDRESS]/static/app.bundle.js:2:15888
T@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:604967
ft@https://[IP_ADDRESS]/static/app.bundle.js:2:15633
createNewConfig@https://[IP_ADDRESS]/static/app.bundle.js:2:18203
56189/template/<@https://[IP_ADDRESS]/static/app.bundle.js:2:20068
y@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:176935
s@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:177140
pe/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:639291
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594272
onInvokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:312809
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594193
runTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:589677
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:595348
g@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:607302
y@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:607562
EventListener.handleEvent*93103/Q/_/T<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:608518
scheduleTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594035
onScheduleTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:591256
scheduleTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:593933
scheduleTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:590231
scheduleEventTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:590614
93103/Q/_/N/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:610164
addEventListener@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:643760
addEventListener@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:636569
listen@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:642007
listen@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:724316
g@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:176302
p@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:175532
template@https://[IP_ADDRESS]/static/app.bundle.js:2:20037
Se@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:194335
De@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:192054
tt@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:205561
51757/De/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:192257
De@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:192266
create@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:148453
_createFromComponent@https://[IP_ADDRESS]/static/780.bundle.js:2:27855
_getContentRef@https://[IP_ADDRESS]/static/780.bundle.js:2:27397
open@https://[IP_ADDRESS]/static/780.bundle.js:2:26001
open@https://[IP_ADDRESS]/static/780.bundle.js:2:29747
56189/openConfig/<@https://[IP_ADDRESS]/static/app.bundle.js:2:23023
56189/Tt/<@https://[IP_ADDRESS]/static/app.bundle.js:2:20718
T@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:604967
Tt@https://[IP_ADDRESS]/static/app.bundle.js:2:20463
openConfig@https://[IP_ADDRESS]/static/app.bundle.js:2:22968
56189/template/<@https://[IP_ADDRESS]/static/app.bundle.js:2:24282
y@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:176935
s@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:177140
pe/<@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:639291
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594272
onInvokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:312809
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:594193
runTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:589677
invokeTask@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:595348
g@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:607302
y@https://[IP_ADDRESS]/static/index.js?42251cd2b15bbf20fd68:2:607562
    Angular 2
        S
        C
    r settingsModal.component.pug:1
    Angular 26
        invoke
        onInvoke
        invoke
        run
        x
        invokeTask
        onInvokeTask
        invokeTask
        runTask
        v
        invokeTask
        g
        y
        T
        scheduleTask
        onScheduleTask
        scheduleTask
        scheduleTask
        scheduleEventTask
        N
        addEventListener
        addEventListener
        listen
        listen
        g
        p
    template configModal.component.pug:1
    Angular 6
        Se
        De
        tt
        De
        De
        create
    _createFromComponent modal-stack.js:143
    _getContentRef modal-stack.js:123
    open modal-stack.js:60
    open modal.js:34
    openConfig main.component.ts:93
    Tt configModal.component.pug:1
    T Angular
    Tt configModal.component.pug:1
    openConfig main.component.ts:92
    template main.component.pug:1
    Angular 10
        y
        s
        pe
        invokeTask
        onInvokeTask
        invokeTask
        runTask
        invokeTask
        g
        y
errors.js:22:12
    Angular 3
    RxJS 4
    Angular 26
    template configModal.component.pug:1
    Angular 6
    _createFromComponent modal-stack.js:143
    _getContentRef modal-stack.js:123
    open modal-stack.js:60
    open modal.js:34
    openConfig main.component.ts:93
    Tt configModal.component.pug:1
    T Angular
    Tt configModal.component.pug:1
    openConfig main.component.ts:92
    template main.component.pug:1
    Angular 10

Can you help me out please?

Thank you in advance!

Question: running self-host version

I would like to run tabby-web on a private network. To simplify the deployment, could I achieve the following?

  1. deploy tabby-web with embedded SQLite without dedicated DB service
  2. run tabby without auth, since I already have a reverse proxy which handles the authentication

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.