Re: Proposal for changes in official Docker image

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

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.

- 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.

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 Joao De Almeida Pereira 2018-03-19 15:11:37 [pgadmin4][patch] Update karma to 2.0 #3222
Previous Message Dave Page 2018-03-19 13:23:32 pgAdmin 4 commit: Use a common function for sever setup in the testsuit