Re: Proposal for changes in official Docker image

From: Максим Кольцов <kolmax94(at)gmail(dot)com>
To: Dave Page <dpage(at)pgadmin(dot)org>
Cc: pgadmin-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Proposal for changes in official Docker image
Date: 2018-03-31 16:54:03
Message-ID: CAB_KkxzrkTMQZMBW_qKnW3Y+-rTWXEnpsnpqR8jYmDjy2sqbEA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

2018-03-19 17:55 GMT+03:00 Dave Page <dpage(at)pgadmin(dot)org>:
> Hi
>
> On Mon, Mar 19, 2018 at 11:19 AM, Dave Page <dpage(at)pgadmin(dot)org> wrote:
>>
>> Hi
>>
>> On Fri, Mar 16, 2018 at 8:52 PM, Максим Кольцов <kolmax94(at)gmail(dot)com>
>> wrote:
>>>
>>>
>>> I've switched to Gunicorn, adding SSL support. It has the same
>>> interface as the original container: PGADMIN_ENABLE_TLS,
>>> /certs/server.key and /certs/server.cert.
>>> I also incorporated building of sphinx manual in Dockerfile, so now
>>> the image should be complete.
>>
>>
>> Nice!
>>
>>>
>>>
>>> I noticed that I can't use gunicorn forking worker with pgadmin4, this
>>> is probably caused by session implementation, but I'm not sure. You
>>> can investigate this by using e.g. `-w 4` in entrypoint.sh, otherwise
>>> it's working fine with single-process threaded worker.
>>
>>
>> This is expected, and the reason why is explained here:
>> https://www.pgadmin.org/docs/pgadmin4/2.x/server_deployment.html#requirements
>>
>>>
>>>
>>> I will make my work into a patch and send it to the mail list soon.
>>> Meanwhile, it'd be great if you tested the updated image at
>>> https://hub.docker.com/r/maksbotan/pgadmin4/
>>
>>
>> I'll try to take a look later in the week (busy prepping for a release at
>> the moment).
>
>
> I actually found some time for this today. It's looking pretty good - TLS
> vs. non-TLS seems to work well. The couple of things I did notice were:
>
> - PGADMIN_SERVER_NAME doesn't appear to be supported. This was added at user
> request, for security reasons (to help ensure the connection is going where
> expected). I'm not entirely convinced of the value of that, but if it's
> fairly painless to add, it may well be worth it.

Can you explain the meaning of this option, or maybe give me a link to
original feature request?
As far as I understand, Apache uses this to identify virtual hosts
based on HTTP Host header,
but there are no virtual hosts in Gunicorn, so no need for this.

> - If you don't map /var/lib/pgadmin (in my case, to a directory already
> containing a config), then I was seeing the following error. I would expect
> it to init within the container if the config directory isn't mapped:
>
> piranha:web dpage$ docker logs affectionate_spence
> sh: -z: unknown operand
> NOTE: Configuring authentication for SERVER mode.
>
> Enter the email address and password to use for the initial pgAdmin user
> account:
>
> Traceback (most recent call last):
> File "run_pgadmin.py", line 4, in <module>
> from pgAdmin4 import app
> File "/pgadmin4/pgAdmin4.py", line 67, in <module>
> app = create_app()
> File "/pgadmin4/pgadmin/__init__.py", line 306, in create_app
> db_upgrade(app)
> File "/pgadmin4/pgadmin/setup/db_upgrade.py", line 25, in db_upgrade
> flask_migrate.upgrade(migration_folder)
> File "/usr/local/lib/python3.6/site-packages/flask_migrate/__init__.py",
> line 244, in upgrade
> command.upgrade(config, revision, sql=sql, tag=tag)
> File "/usr/local/lib/python3.6/site-packages/alembic/command.py", line
> 254, in upgrade
> script.run_env()
> File "/usr/local/lib/python3.6/site-packages/alembic/script/base.py", line
> 427, in run_env
> util.load_python_file(self.dir, 'env.py')
> File "/usr/local/lib/python3.6/site-packages/alembic/util/pyfiles.py",
> line 81, in load_python_file
> module = load_module_py(module_id, path)
> File "/usr/local/lib/python3.6/site-packages/alembic/util/compat.py", line
> 83, in load_module_py
> spec.loader.exec_module(module)
> File "/pgadmin4/pgadmin/setup/../../migrations/env.py", line 94, in
> <module>
> run_migrations_online()
> File "/pgadmin4/pgadmin/setup/../../migrations/env.py", line 87, in
> run_migrations_online
> context.run_migrations()
> File "<string>", line 8, in run_migrations
> File
> "/usr/local/lib/python3.6/site-packages/alembic/runtime/environment.py",
> line 836, in run_migrations
> self.get_context().run_migrations(**kw)
> File
> "/usr/local/lib/python3.6/site-packages/alembic/runtime/migration.py", line
> 330, in run_migrations
> step.migration_fn(**kw)
> File "/pgadmin4/migrations/versions/fdc58d9bd449_.py", line 112, in
> upgrade
> email, password = user_info()
> File "/pgadmin4/pgadmin/setup/user_info.py", line 55, in user_info
> email = input("Email address: ")
> EOFError: EOF when reading a line
> [2018-03-19 14:50:59 +0000] [1] [INFO] Starting gunicorn 19.7.1
> [2018-03-19 14:50:59 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
> [2018-03-19 14:50:59 +0000] [1] [INFO] Using worker: threads
> [2018-03-19 14:50:59 +0000] [14] [INFO] Booting worker with pid: 14
> [2018-03-19 14:50:59 +0000] [14] [ERROR] Exception in worker process
> Traceback (most recent call last):
> File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line
> 578, in spawn_worker
> worker.init_process()
> File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/gthread.py",
> line 109, in init_process
> super(ThreadWorker, self).init_process()
> File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py",
> line 126, in init_process
> self.load_wsgi()
> File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py",
> line 135, in load_wsgi
> self.wsgi = self.app.wsgi()
> File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line
> 67, in wsgi
> self.callable = self.load()
> File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py",
> line 65, in load
> return self.load_wsgiapp()
> File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py",
> line 52, in load_wsgiapp
> return util.import_app(self.app_uri)
> File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352,
> in import_app
> __import__(module)
> File "/pgadmin4/run_pgadmin.py", line 4, in <module>
> from pgAdmin4 import app
> File "/pgadmin4/pgAdmin4.py", line 67, in <module>
> app = create_app()
> File "/pgadmin4/pgadmin/__init__.py", line 309, in create_app
> schema_version = version.value
> AttributeError: 'NoneType' object has no attribute 'value'
> [2018-03-19 14:50:59 +0000] [14] [INFO] Worker exiting (pid: 14)
> [2018-03-19 14:50:59 +0000] [1] [INFO] Shutting down: Master
> [2018-03-19 14:50:59 +0000] [1] [INFO] Reason: Worker failed to boot.

Yeah, that was shell quoting issue, should be fixed.

I will send a patch for review later this evening.

>
> Thanks!
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Максим Кольцов 2018-03-31 17:49:49 [pgAdmin4][Patch] Remake Docker container packaging
Previous Message Murtuza Zabuawala 2018-03-31 06:53:46 Re: [pgAdmin4][RM#3154] Update modules to latest version