From bafb76403783c073e69fdad9bfa101fff2921fda Mon Sep 17 00:00:00 2001 From: David Gomes Date: Wed, 8 Apr 2026 12:41:53 -0700 Subject: [PATCH] Migrate database from MySQL to PostgreSQL in Docker setup --- backend/.env.docker | 4 ++-- backend/Dockerfile | 6 +++--- backend/requirements.txt | 2 +- docker-compose.yml | 17 ++++++++--------- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/backend/.env.docker b/backend/.env.docker index 813046c..9c87c95 100644 --- a/backend/.env.docker +++ b/backend/.env.docker @@ -4,5 +4,5 @@ DJANGO_DEBUG=True DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,backend CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173 -# MariaDB connection (matches the db service in docker-compose.yml) -DATABASE_URL=mysql://cheatsheet_user:cheatsheet_pass@db:3306/cheatsheet_db +# PostgreSQL connection (matches the db service in docker-compose.yml) +DATABASE_URL=postgres://cheatsheet_user:cheatsheet_pass@db:5432/cheatsheet_db diff --git a/backend/Dockerfile b/backend/Dockerfile index a2e22b3..603f00f 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -11,10 +11,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ tar \ fontconfig \ - default-libmysqlclient-dev \ + libpq-dev \ pkg-config \ gcc \ - default-mysql-client \ + postgresql-client \ && rm -rf /var/lib/apt/lists/* # Download and extract the appropriate Tectonic binary @@ -35,4 +35,4 @@ COPY . . EXPOSE 8000 -CMD ["sh", "-c", "until mysqladmin ping -hdb -ucheatsheet_user -pcheatsheet_pass --ssl=0 --silent; do sleep 2; done && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] +CMD ["sh", "-c", "until pg_isready -h db -U cheatsheet_user; do sleep 2; done && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] diff --git a/backend/requirements.txt b/backend/requirements.txt index 2507cd0..aa8992f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -3,7 +3,7 @@ djangorestframework>=3.15 django-cors-headers>=4.4 python-dotenv>=1.0,<2.0 dj-database-url>=2.1 -mysqlclient>=2.2 +psycopg2-binary>=2.9 # Testing pytest>=8.0 diff --git a/docker-compose.yml b/docker-compose.yml index 58ea4aa..f6725ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,15 @@ services: db: - image: mysql:8.0 + image: postgres:15 restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD: rootpass - MYSQL_DATABASE: cheatsheet_db - MYSQL_USER: cheatsheet_user - MYSQL_PASSWORD: cheatsheet_pass + POSTGRES_DB: cheatsheet_db + POSTGRES_USER: cheatsheet_user + POSTGRES_PASSWORD: cheatsheet_pass # ports: comment out for now we'e not using atm - # - "3306:3306" + # - "5432:5432" volumes: - - mysql_data:/var/lib/mysql + - postgres_data:/var/lib/postgresql/data backend: build: ./backend ports: @@ -18,7 +17,7 @@ services: env_file: - ./backend/.env.docker environment: - - DATABASE_URL=mysql://cheatsheet_user:cheatsheet_pass@db:3306/cheatsheet_db + - DATABASE_URL=postgres://cheatsheet_user:cheatsheet_pass@db:5432/cheatsheet_db volumes: - ./backend:/app depends_on: @@ -41,4 +40,4 @@ services: backend: condition: service_healthy volumes: - mysql_data: + postgres_data: