mediacms-io / mediacms

MediaCMS is a modern, fully featured open source video and media CMS, written in Python/Django and React, featuring a REST API.
https://mediacms.io
GNU Affero General Public License v3.0
2.52k stars 459 forks source link

POSTGRES_USER seemingly not used by migrations scripts #947

Closed working-name closed 6 months ago

working-name commented 6 months ago

Describe the issue I changed the username and password for postgresql in docker-compose.yml and they're properly set under migrations.environment but on first start-up the migrations container is still trying to log in using pgsql username mediacms, which is not what the POSTGRES_USER is set to.

The container itself has the right env value:

root@ed7430e248bd:/# echo $POSTGRES_USER
differentUser

Logs:

mediacms-db-1             | 2024-01-05 14:36:04.739 EST [160] FATAL:  password authentication failed for user "mediacms"
mediacms-db-1             | 2024-01-05 14:36:04.739 EST [160] DETAIL:  Role "mediacms" does not exist.

mediacms-migrations-1     | Traceback (most recent call last):
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
mediacms-migrations-1     |     self.connect()
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
mediacms-migrations-1     |     return func(*args, **kwargs)
mediacms-migrations-1     |            ^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 270, in connect
mediacms-migrations-1     |     self.connection = self.get_new_connection(conn_params)
mediacms-migrations-1     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
mediacms-migrations-1     |     return func(*args, **kwargs)
mediacms-migrations-1     |            ^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
mediacms-migrations-1     |     connection = self.Database.connect(**conn_params)
mediacms-migrations-1     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/psycopg/connection.py", line 728, in connect
mediacms-migrations-1     |     raise ex.with_traceback(None)
mediacms-migrations-1     | psycopg.OperationalError: connection failed: FATAL:  password authentication failed for user "mediacms"
mediacms-migrations-1     |
mediacms-migrations-1     | The above exception was the direct cause of the following exception:
mediacms-migrations-1     |
mediacms-migrations-1     | Traceback (most recent call last):
mediacms-migrations-1     |   File "/home/mediacms.io/mediacms/manage.py", line 13, in <module>
mediacms-migrations-1     |     execute_from_command_line(sys.argv)
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
mediacms-migrations-1     |     utility.execute()
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/core/management/__init__.py", line 436, in execute
mediacms-migrations-1     |     self.fetch_command(subcommand).run_from_argv(self.argv)
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/core/management/base.py", line 412, in run_from_argv
mediacms-migrations-1     |     self.execute(*args, **cmd_options)
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/core/management/base.py", line 458, in execute
mediacms-migrations-1     |     output = self.handle(*args, **options)
mediacms-migrations-1     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/core/management/base.py", line 106, in wrapper
mediacms-migrations-1     |     res = handle_func(*args, **kwargs)
mediacms-migrations-1     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 117, in handle
mediacms-migrations-1     |     executor = MigrationExecutor(connection, self.migration_progress_callback)
mediacms-migrations-1     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/migrations/executor.py", line 18, in __init__
mediacms-migrations-1     |     self.loader = MigrationLoader(self.connection)
mediacms-migrations-1     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/migrations/loader.py", line 58, in __init__
mediacms-migrations-1     |     self.build_graph()
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/migrations/loader.py", line 235, in build_graph
mediacms-migrations-1     |     self.applied_migrations = recorder.applied_migrations()
mediacms-migrations-1     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations
mediacms-migrations-1     |     if self.has_table():
mediacms-migrations-1     |        ^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/migrations/recorder.py", line 57, in has_table
mediacms-migrations-1     |     with self.connection.cursor() as cursor:
mediacms-migrations-1     |          ^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
mediacms-migrations-1     |     return func(*args, **kwargs)
mediacms-migrations-1     |            ^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 330, in cursor
mediacms-migrations-1     |     return self._cursor()
mediacms-migrations-1     |            ^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 306, in _cursor
mediacms-migrations-1     |     self.ensure_connection()
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
mediacms-migrations-1     |     return func(*args, **kwargs)
mediacms-migrations-1     |            ^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 288, in ensure_connection
mediacms-migrations-1     |     with self.wrap_database_errors:
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
mediacms-migrations-1     |     raise dj_exc_value.with_traceback(traceback) from exc_value
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
mediacms-migrations-1     |     self.connect()
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
mediacms-migrations-1     |     return func(*args, **kwargs)
mediacms-migrations-1     |            ^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/base/base.py", line 270, in connect
mediacms-migrations-1     |     self.connection = self.get_new_connection(conn_params)
mediacms-migrations-1     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
mediacms-migrations-1     |     return func(*args, **kwargs)
mediacms-migrations-1     |            ^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
mediacms-migrations-1     |     connection = self.Database.connect(**conn_params)
mediacms-migrations-1     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mediacms-migrations-1     |   File "/home/mediacms.io/lib/python3.11/site-packages/psycopg/connection.py", line 728, in connect
mediacms-migrations-1     |     raise ex.with_traceback(None)
mediacms-migrations-1     | django.db.utils.OperationalError: connection failed: FATAL:  password authentication failed for user "mediacms"

Relevant docker-compose.yml section:

migrations:
    image: mediacms/mediacms:latest
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: "1g"
    volumes:
      - ./:/home/mediacms.io/mediacms/
    environment:
      ENABLE_UWSGI: 'no'
      ENABLE_NGINX: 'no'
      ENABLE_CELERY_SHORT: 'no'
      ENABLE_CELERY_LONG: 'no'
      ENABLE_CELERY_BEAT: 'no'
      ADMIN_USER: 'admin'
      ADMIN_EMAIL: 'redacted'
      ADMIN_PASSWORD: 'redacted'
      POSTGRES_USER: differentUser
      POSTGRES_PASSWORD: 'redacted'
      POSTGRES_DB: mediacms
...

To Reproduce Steps to reproduce the issue:

  1. clone repo
  2. update docker-compose.yml to desired values, and also change POSTGRES_USER to something else.
  3. run it and wait until migrations start.

Expected behavior migrations container should pick up on the environment variables.

Screenshots If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

working-name commented 6 months ago

🤦 nevermind. deploy/local_settings.py needs to be updated also.

Might be worth pulling the vars in if they exist, else go to defaults?