mosquito / pypi-server

Tornado based server like pypi.python.org. With caching from pypi.
MIT License
120 stars 38 forks source link

Mysql does not work #54

Open vlastocom opened 3 years ago

vlastocom commented 3 years ago

I tried to set up this container with mysql database and could not make it work.

My dockerfile:

version: '3.7'
services:
  db:
    image: mysql:${MYSQL_VERSION}
    restart: always
    environment:
      MYSQL_DATABASE: pypi-server
      MYSQL_USER: pypi-user
      MYSQL_PASSWORD: ${DB_USER_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - "pypi-data:/var/lib/mysql:rw"
    ports:
      - 49997:3306
    networks:
      pypi-network: {}
  server:
    image: mosquito/pypi-server:${PYPI_VERSION}
    restart: always
    environment:
      DB: "mysql://pypi-user:${DB_USER_PASSWORD}@db/pypi-server"
      PYPI_SERVER: https://pypi.python.org
    volumes:
      - ./packages:/var/lib/pypi-server
    ports:
      - 49996:80
    networks:
      pypi-network: {}
networks:
  pypi-network:
    driver: bridge
    # Need this to set firewalls on my system
    ipam:
      config:
        - subnet: 192.168.31.0/24
volumes:
  pypi-data:

My .env file for docker-compose looks something like this:

MYSQL_VERSION=8.0.25
PYPI_VERSION=0.4.10
... (the rest of the file removed)

Error I am getting is this:

[I 210720 07:58:38 __init__:52] Database initialized as 'pypi-server'. Checking migrations...
[C 210720 07:58:38 server:204] Exception on main loop:
[E 210720 07:58:38 server:205] MySQLdb or PyMySQL must be installed.
    Traceback (most recent call last):
      File "/usr/share/python/app/lib/python3.7/site-packages/pypi_server/server.py", line 158, in run
        io_loop.run_sync(lambda: init_db(options.database))
      File "/usr/share/python/app/lib/python3.7/site-packages/tornado/ioloop.py", line 458, in run_sync
        return future_cell[0].result()
      File "/usr/share/python/app/lib/python3.7/site-packages/tornado/concurrent.py", line 238, in result
        raise_exc_info(self._exc_info)
      File "<string>", line 4, in raise_exc_info
      File "/usr/share/python/app/lib/python3.7/site-packages/tornado/ioloop.py", line 436, in run
        result = func()
      File "/usr/share/python/app/lib/python3.7/site-packages/pypi_server/server.py", line 158, in <lambda>
        io_loop.run_sync(lambda: init_db(options.database))
      File "/usr/share/python/app/lib/python3.7/site-packages/pypi_server/db/__init__.py", line 90, in init_db
        DB.create_tables([Migrations], safe=True)
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 3917, in create_tables
        create_model_tables(models, fail_silently=safe)
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 5356, in create_model_tables
        m.create_table(**create_table_kwargs)
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 5028, in create_table
        if fail_silently and cls.table_exists():
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 5024, in table_exists
        return cls._meta.db_table in cls._meta.database.get_tables(**kwargs)
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 4321, in get_tables
        return [row for row, in self.execute_sql('SHOW TABLES')]
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 3828, in execute_sql
        cursor = self.get_cursor()
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 3774, in get_cursor
        return self.get_conn().cursor()
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 3763, in get_conn
        self.connect()
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 3738, in connect
        self._local.conn = self._create_connection()
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 3768, in _create_connection
        return self._connect(self.database, **self.connect_kwargs)
      File "/usr/share/python/app/lib/python3.7/site-packages/peewee.py", line 4310, in _connect
        raise ImproperlyConfigured('MySQLdb or PyMySQL must be installed.')
    peewee.ImproperlyConfigured: MySQLdb or PyMySQL must be installed.

I believe this is caused by the docker container not having all dependencies installed, but am not sure.

P.S.: I also tried to use Postgres configuration, but am consistently getting #45 , basically this container does not seem to be operating well with any of the database systems which I would put close to production.