Add dockerfile for backend, configure docker-compose, fix models (#11)

This commit is contained in:
Eugene Yurtsev
2024-03-01 13:44:56 -05:00
committed by GitHub
parent 83a7624c4e
commit c33042e41e
6 changed files with 85 additions and 22 deletions
+3
View File
@@ -160,3 +160,6 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.DS_Store
# Local env file
.local.env
+45
View File
@@ -0,0 +1,45 @@
# All directory paths for COPY commands are relative to the build context
# Ensure this python version stays in sync with CI
FROM python:3.11-slim as base
WORKDIR /backend
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV POETRY_HOME="/opt/poetry"
ENV MYPYPATH="/app/src/stubs"
# Use bash as the shell for the build
# https://github.com/docker/for-linux/issues/408#issuecomment-414748815
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN set -eux && \
apt-get update && \
apt-get install -y \
build-essential \
# to install poetry
curl \
# to install psycopg2
libpq-dev python3-dev
# https://python-poetry.org/docs/master/#installing-with-the-official-installer
RUN curl -sSL https://install.python-poetry.org | python -
ENV PATH="$POETRY_HOME/bin:$PATH"
# install deps before copying project files so the cache is only invalidated
# when the deps change
COPY ./backend/pyproject.toml ./backend/poetry.lock .
RUN poetry config virtualenvs.create false
RUN poetry install --no-root --only main
COPY ./backend .
EXPOSE 8000
###
# development image
###
FROM base as development
ENTRYPOINT ["bash", "./scripts/local_entry_point.sh"]
-10
View File
@@ -66,16 +66,6 @@ class Extractor(TimestampedModel):
server_default="",
comment="The name of the extractor.",
)
created_at = Column(
DateTime(timezone=True),
server_default=func.now(),
comment="Time when this extracted was originally created.",
)
modified_at = Column(
DateTime(timezone=True),
onupdate=func.now(),
comment="Last time this was modified.",
)
schema = Column(
JSONB,
nullable=False,
+10
View File
@@ -0,0 +1,10 @@
# -e: fail on any nonzero exit status
# -u: fail if any referenced variables are not set
# -x: print commands before running them
# -o pipefail: fail if a command in a pipe has a nonzero exit code
set -euxo pipefail
# For now just create the db if it doesn't exist
python -m scripts.run_migrations create
uvicorn server.main:app --host 0.0.0.0 --port 8000 --reload
+4 -2
View File
@@ -1,5 +1,7 @@
from __future__ import annotations
import os
from langchain_openai import ChatOpenAI
from sqlalchemy.engine import URL
@@ -9,12 +11,12 @@ CHUNK_SIZE = int(4_096 * 0.8)
MAX_CONCURRENCY = 1
def get_postgres_url():
def get_postgres_url() -> URL:
url = URL.create(
drivername="postgresql",
username="langchain",
password="langchain",
host="localhost",
host=os.environ.get("PG_HOST", "localhost"),
database="langchain",
port=5432,
)
+23 -10
View File
@@ -1,4 +1,4 @@
version: "3"
version: "3.8"
name: langchain-extract
services:
@@ -7,24 +7,37 @@ services:
# Make sure to keep in sync with CI
# version if being tested on CI.
image: postgres:16
expose:
- "5432"
ports:
- "5432:5432"
environment:
POSTGRES_DB: langchain
POSTGRES_USER: langchain
POSTGRES_PASSWORD: langchain
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U langchain -d langchain -W langchain" ]
interval: 10s
timeout: 5s
retries: 5
volumes:
- postgres_data:/var/lib/postgresql/data
# For rely on docker compose to spin up postgres
# but developer using docker
# Add backend when we actually need it
# backend:
# build: ./backend
# ports:
# - "8000:8000"
# depends_on:
# - postgres
backend:
build:
context: .
dockerfile: ./backend/Dockerfile
target: development
env_file:
- .local.env
environment:
- PG_HOST=postgres
ports:
- "8000:8000" # Backend is accessible on localhost:8100
depends_on:
- postgres
volumes:
- ./backend:/backend
volumes:
postgres_data: