From ced2950b60861ede87b27685248f8befad37ce1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Katariina=20J=C3=A4rvenm=C3=A4ki?= Date: Wed, 4 Mar 2026 10:47:06 +0200 Subject: [PATCH] Dockerizing the project --- .dockerignore | 6 ++++++ .gitignore | 3 ++- Dockerfile | 13 +++++++++++++ README.md | 6 ++++++ app/utils.py | 9 --------- docker-compose.yml | 30 ++++++++++++++++++++++++++++++ requirements.txt | 9 +++++++++ 7 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile delete mode 100644 app/utils.py create mode 100644 docker-compose.yml create mode 100644 requirements.txt diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..babefb6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +venv +__pycache__ +*.pyc +*.db +.git +.env \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1bbc918..1cd01d9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ __pycache__ .pytest_cache/ venv/ test.txt -diff.txt \ No newline at end of file +diff.txt +test.db \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6de4317 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 8000 + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/README.md b/README.md index 5dc2252..56118da 100644 --- a/README.md +++ b/README.md @@ -30,4 +30,10 @@ python -m pytest --cov=app --cov-report=term-missing ```bash cd /opt/kjc/int/URL-shortener alembic revision --autogenerate -m "create urls table" +``` + +## Running project in Docker container +```bash +cd /opt/kjc/int/URL-shortener +docker compose up --build ``` \ No newline at end of file diff --git a/app/utils.py b/app/utils.py deleted file mode 100644 index efe5e4f..0000000 --- a/app/utils.py +++ /dev/null @@ -1,9 +0,0 @@ -# app/utils.py - -import string -import random - -def generate_short_code(length=6): - characters = string.ascii_letters + string.digits - return ''.join(random.choice(characters) for _ in range(length)) - \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..67eea49 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +version: "3.9" + +services: + db: + image: postgres:16 + container_name: url_shortener_db + restart: always + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: url_db + volumes: + - postgres_data:/var/lib/postgresql/data + + app: + build: . + container_name: url_shortener_app + depends_on: + - db + environment: + DATABASE_URL: postgresql+psycopg2://postgres:postgres@db:5432/url_db + BASE_URL: http://localhost:8000 + ports: + - "8000:8000" + command: > + sh -c "alembic upgrade head && + uvicorn app.main:app --host 0.0.0.0 --port 8000" + +volumes: + postgres_data: \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0c2599e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +fastapi==0.124.4 +uvicorn[standard]==0.33.0 +sqlalchemy==2.0.47 +psycopg2-binary==2.9.10 +alembic==1.14.1 +pydantic-settings==2.8.1 + +pytest==8.3.5 +pytest-cov==5.0.0 \ No newline at end of file