From 0923015894fc5482cd3d0fb8e38b4e56e51fd854 Mon Sep 17 00:00:00 2001 From: Artem Litvinov Date: Fri, 22 Sep 2023 16:56:00 +0100 Subject: [PATCH 1/3] ci: nginx templates --- src/fastapi_app/.env.example | 1 + src/fastapi_app/Dockerfile | 15 +++++++----- src/fastapi_app/docker-compose.dev.yml | 17 ++++++++------ src/fastapi_app/docker-compose.yml | 23 +++++++++++-------- src/fastapi_app/nginx/conf.d/site.conf | 10 -------- src/fastapi_app/nginx/nginx.conf | 4 +--- .../nginx/templates/api.conf.template | 11 +++++++++ src/fastapi_app/poetry.lock | 6 ++--- 8 files changed, 49 insertions(+), 38 deletions(-) delete mode 100644 src/fastapi_app/nginx/conf.d/site.conf create mode 100644 src/fastapi_app/nginx/templates/api.conf.template diff --git a/src/fastapi_app/.env.example b/src/fastapi_app/.env.example index d557292..61ef779 100644 --- a/src/fastapi_app/.env.example +++ b/src/fastapi_app/.env.example @@ -4,6 +4,7 @@ DB_USER=user DB_PASSWORD=Qwe123 DB_NAME=api_db +NGINX_PORT=80 SERVER_HOST=0.0.0.0 SERVER_PORT=8000 diff --git a/src/fastapi_app/Dockerfile b/src/fastapi_app/Dockerfile index 3435e50..468ce62 100644 --- a/src/fastapi_app/Dockerfile +++ b/src/fastapi_app/Dockerfile @@ -1,14 +1,17 @@ FROM python:3.11 +RUN mkdir --parents /opt/app +COPY pyproject.toml /opt/app/pyproject.toml +COPY poetry.lock /opt/app/poetry.lock +COPY poetry.toml /opt/app/poetry.toml + WORKDIR /opt/app -ENV PYTHONPATH '/opt/app' - -COPY pyproject.toml ./ RUN pip install poetry \ && poetry install --no-dev -COPY bin bin -COPY lib lib -COPY entrypoint.sh . +COPY bin /opt/app/bin +COPY lib /opt/app/lib +COPY entrypoint.sh /opt/app/entrypoint.sh + RUN chmod +x /opt/app/entrypoint.sh diff --git a/src/fastapi_app/docker-compose.dev.yml b/src/fastapi_app/docker-compose.dev.yml index 043620c..603f921 100644 --- a/src/fastapi_app/docker-compose.dev.yml +++ b/src/fastapi_app/docker-compose.dev.yml @@ -3,6 +3,7 @@ version: "3" services: db: image: postgres:15.2 + restart: always environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} @@ -13,7 +14,6 @@ services: - "${DB_PORT}:${DB_PORT}" volumes: - postgres_data:/var/lib/postgresql/data/ - restart: always networks: - backend_network @@ -24,24 +24,27 @@ services: image: fastapi_app restart: always entrypoint: ["/opt/app/entrypoint.sh"] + env_file: + - .env ports: - "${SERVER_PORT}:${SERVER_PORT}" depends_on: - db - env_file: - - .env networks: - backend_network - api_network nginx: - image: nginx:1.23.4 + image: nginx:1.25.1 + env_file: + - .env + ports: + - "${NGINX_PORT}:${NGINX_PORT}" volumes: - - ./nginx:/etc/nginx/:ro + - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - ./nginx/templates:/etc/nginx/templates depends_on: - api - ports: - - "80:80" networks: - api_network diff --git a/src/fastapi_app/docker-compose.yml b/src/fastapi_app/docker-compose.yml index d9879bf..807be7f 100644 --- a/src/fastapi_app/docker-compose.yml +++ b/src/fastapi_app/docker-compose.yml @@ -3,17 +3,17 @@ version: "3" services: db: image: postgres:15.2 + restart: always environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_NAME} env_file: - .env - ports: - - "127.0.0.1:${DB_PORT}:${DB_PORT}" + expose: + - "${DB_PORT}" volumes: - postgres_data:/var/lib/postgresql/data/ - restart: always networks: - backend_network @@ -24,22 +24,27 @@ services: image: fastapi_app restart: always entrypoint: ["/opt/app/entrypoint.sh"] - depends_on: - - db env_file: - .env + expose: + - "${SERVER_PORT}" + depends_on: + - db networks: - backend_network - api_network nginx: - image: nginx:1.23.4 + image: nginx:1.25.1 + env_file: + - .env + ports: + - "${NGINX_PORT}:${NGINX_PORT}" volumes: - - ./nginx:/etc/nginx/:ro + - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - ./nginx/templates:/etc/nginx/templates depends_on: - api - ports: - - "80:80" networks: - api_network diff --git a/src/fastapi_app/nginx/conf.d/site.conf b/src/fastapi_app/nginx/conf.d/site.conf deleted file mode 100644 index e3ed60f..0000000 --- a/src/fastapi_app/nginx/conf.d/site.conf +++ /dev/null @@ -1,10 +0,0 @@ -server { - listen 80 default_server; - listen [::]:80 default_server; - server_name _; - - location /api { - proxy_pass http://api:8000/api; - } - -} diff --git a/src/fastapi_app/nginx/nginx.conf b/src/fastapi_app/nginx/nginx.conf index 8732367..3af90b5 100644 --- a/src/fastapi_app/nginx/nginx.conf +++ b/src/fastapi_app/nginx/nginx.conf @@ -31,7 +31,5 @@ http { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - include conf.d/site.conf; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } diff --git a/src/fastapi_app/nginx/templates/api.conf.template b/src/fastapi_app/nginx/templates/api.conf.template new file mode 100644 index 0000000..e89cfac --- /dev/null +++ b/src/fastapi_app/nginx/templates/api.conf.template @@ -0,0 +1,11 @@ +server { + listen ${NGINX_PORT} default_server; + listen [::]:${NGINX_PORT} default_server; + server_name _; + + location /api { + proxy_pass http://api:${SERVER_PORT}/api; + proxy_set_header X-Request-Id $request_id; + } + +} \ No newline at end of file diff --git a/src/fastapi_app/poetry.lock b/src/fastapi_app/poetry.lock index 45fff5c..ac09217 100644 --- a/src/fastapi_app/poetry.lock +++ b/src/fastapi_app/poetry.lock @@ -937,13 +937,13 @@ pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] [[package]] name = "pyupgrade" -version = "3.11.1" +version = "3.12.0" description = "A tool to automatically upgrade syntax for newer versions." optional = false python-versions = ">=3.8.1" files = [ - {file = "pyupgrade-3.11.1-py2.py3-none-any.whl", hash = "sha256:6e9dd362394b3068123e06ca268de5845d41e2bb29f387b38323cc1009fb3100"}, - {file = "pyupgrade-3.11.1.tar.gz", hash = "sha256:3e6c7689d2f3ae418c6a60ee981477fe9130eccaed3e33dac6c21274cf7d45f4"}, + {file = "pyupgrade-3.12.0-py2.py3-none-any.whl", hash = "sha256:c6f9c129560b9538e75b93fb0aee20508faae454714e8373d462e408985bd96a"}, + {file = "pyupgrade-3.12.0.tar.gz", hash = "sha256:defc292ffaf402942b8fccaa97491964063e343fc1993230e44890b971dc1234"}, ] [package.dependencies] From 8dead13cc2fd3fd719a8aa9d48ef282673d8a617 Mon Sep 17 00:00:00 2001 From: Artem Litvinov Date: Sat, 23 Sep 2023 19:21:32 +0100 Subject: [PATCH 2/3] fix: docker files & minor fixes --- src/fastapi_app/Dockerfile | 6 ++++++ src/fastapi_app/docker-compose.dev.yml | 4 ++-- src/fastapi_app/docker-compose.yml | 4 ++-- src/fastapi_app/entrypoint.sh | 6 ++---- src/fastapi_app/lib/app/split_settings/__init__.py | 2 +- src/fastapi_app/nginx/templates/api.conf.template | 2 +- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/fastapi_app/Dockerfile b/src/fastapi_app/Dockerfile index 468ce62..202c1a7 100644 --- a/src/fastapi_app/Dockerfile +++ b/src/fastapi_app/Dockerfile @@ -1,5 +1,11 @@ FROM python:3.11 +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive \ + && apt-get install -y net-tools netcat-traditional curl \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + RUN mkdir --parents /opt/app COPY pyproject.toml /opt/app/pyproject.toml COPY poetry.lock /opt/app/poetry.lock diff --git a/src/fastapi_app/docker-compose.dev.yml b/src/fastapi_app/docker-compose.dev.yml index 82b5a73..4305528 100644 --- a/src/fastapi_app/docker-compose.dev.yml +++ b/src/fastapi_app/docker-compose.dev.yml @@ -1,7 +1,7 @@ version: "3" services: - db: + postgres: image: postgres:15.2 restart: always environment: @@ -29,7 +29,7 @@ services: ports: - "${API_PORT}:${API_PORT}" depends_on: - - db + - postgres networks: - backend_network - api_network diff --git a/src/fastapi_app/docker-compose.yml b/src/fastapi_app/docker-compose.yml index acac81e..d46c390 100644 --- a/src/fastapi_app/docker-compose.yml +++ b/src/fastapi_app/docker-compose.yml @@ -1,7 +1,7 @@ version: "3" services: - db: + postgres: image: postgres:15.2 restart: always environment: @@ -29,7 +29,7 @@ services: expose: - "${API_PORT}" depends_on: - - db + - postgres networks: - backend_network - api_network diff --git a/src/fastapi_app/entrypoint.sh b/src/fastapi_app/entrypoint.sh index 85adc64..fe288b7 100644 --- a/src/fastapi_app/entrypoint.sh +++ b/src/fastapi_app/entrypoint.sh @@ -1,7 +1,5 @@ #!/bin/bash -while ! (echo > /dev/tcp/db/5432) >/dev/null 2>&1; do - sleep 1 -done +while ! nc -z postgres 5432; do sleep 1; done; -exec .venv/bin/python -m bin +exec .venv/bin/python -m bin \ No newline at end of file diff --git a/src/fastapi_app/lib/app/split_settings/__init__.py b/src/fastapi_app/lib/app/split_settings/__init__.py index 627e186..4d3b87b 100644 --- a/src/fastapi_app/lib/app/split_settings/__init__.py +++ b/src/fastapi_app/lib/app/split_settings/__init__.py @@ -6,7 +6,7 @@ from .project import * __all__ = [ "ApiSettings", "LoggingSettings", - "get_logging_config", "PostgresSettings", "ProjectSettings", + "get_logging_config", ] diff --git a/src/fastapi_app/nginx/templates/api.conf.template b/src/fastapi_app/nginx/templates/api.conf.template index e89cfac..847d018 100644 --- a/src/fastapi_app/nginx/templates/api.conf.template +++ b/src/fastapi_app/nginx/templates/api.conf.template @@ -4,7 +4,7 @@ server { server_name _; location /api { - proxy_pass http://api:${SERVER_PORT}/api; + proxy_pass http://api:${API_PORT}/api; proxy_set_header X-Request-Id $request_id; } From d85c3ec3230ad9d892148b95893478556bcd2b1e Mon Sep 17 00:00:00 2001 From: Artem Litvinov Date: Sat, 23 Sep 2023 20:28:21 +0100 Subject: [PATCH 3/3] fix: nginx conf --- src/fastapi_app/nginx/nginx.conf | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/fastapi_app/nginx/nginx.conf b/src/fastapi_app/nginx/nginx.conf index 3af90b5..b075088 100644 --- a/src/fastapi_app/nginx/nginx.conf +++ b/src/fastapi_app/nginx/nginx.conf @@ -5,18 +5,19 @@ events { } http { + server_tokens off; include mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; + '"$http_user_agent" "$http_x_forwarded_for" "$request_id"'; - server_tokens off; + access_log /dev/stdout main; sendfile on; tcp_nodelay on; tcp_nopush on; client_max_body_size 200m; - + gzip on; gzip_comp_level 3; gzip_min_length 1000; @@ -27,9 +28,12 @@ http { application/x-javascript text/xml text/javascript; - + + add_header X-Request-Id $request_id; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + include conf.d/api.conf; }