pixels_project_deploy

所属分类:Docker
开发工具:Python
文件大小:0KB
下载次数:0
上传日期:2023-12-21 23:43:15
上 传 者sh-1993
说明:  GoIT,Python WEB,项目。FastAPI。PostgreSQL。码头工人。REST API。ORM SQL炼金术。Pydantic公司。引导CSS。金加。阿伦比克。OAuth2.JWT。雷迪斯。Cloudinary(云)。限制
(GoIT, Python WEB, Project. FastAPI. PostgreSQL. Docker. REST API. ORM SQLAlchemy. Pydantic. Bootstraps CSS. Jinga. Alembic. OAuth2. JWT. Redis. Cloudinary. Limits)

文件列表:
alembic/
doc/
docs/
scripts/
src/
static/
templates/
tests/
Dockerfile
alembic.ini
docker-compose-project.yml
docker-compose-pytest.yml
docker-compose.yml
env-example
env_prod-example
main.py
pyproject.toml
requirements.txt
requirements_stud.txt
run.sh
runtime.txt

# pixels_project # Технчне завдання на створення застосунку “PhotoShare” (REST API) ## Основний функцонал для REST API виконаний на FastAPI ### Аутентифкаця - Механзм аутентифкац. JWT токени. - Користувач мають три рол. Звичайний користувач, модератор, та адмнстратор. Перший користувач в систем завжди адмнстратор - Для реалзац рзних рвнв доступу (звичайний користувач, модератор адмнстратор) використовуються декоратори FastAPI для переврки токена рол користувача. ### Робота з свтлинами - Користувач можуть завантажувати свтлини з описом (POST). - Користувач можуть видаляти свтлини (DELETE). - Користувач можуть редагувати опис свтлини (PUT). - Користувач можуть отримувати свтлину за ункальним посиланням (GET). - Можливсть додавати до 5 тегв пд свтлину. Додавання тегу не обов'язкове при завантаженн свтлини. - Теги ункальн для всього застосунку. Тег передаться на сервер по мен. Якщо такого тега не сну, то вн створються, якщо сну, то для свтлини береться тег що сну з такою назвою. - Користувач можуть виконувати базов операц над свтлинами, як дозволя сервс Cloudinary (https://cloudinary.com/documentation/image_transformations). Можливо вибрати обмежений набр трансформацй над свтлинами для свого застосунку з Cloudinary. - Користувач можуть створювати посилання на трансформоване зображення для перегляду свтлини в вигляд URL та QR-code (https://pypi.org/project/qrcode/). Операця POST, оскльки створються окреме посилання на трансформоване зображення, яке збергаться в баз даних - Створен посилання збергаються на сервер через мобльний телефон ми можемо вдсканувати QR-code та побачити зображення - Адмнстратори можуть робить вс CRUD операц з свтлинами користувачв ### Коментування - Пд кожною свтлиною, блок з коментарями. Користувач можуть коментувати свтлину один одного - Користувач може редагувати свй коментар, але не видаляти - Адмнстратори та модератори можуть видаляти коментар. - Для коментарв обов'язково збергати час створення та час редагування коментаря в баз даних. Для реалзац функцональност коментарв, ми можемо використовувати вдношення "один до багатьох" мж свтлинами коментарями в баз даних. Для тимчасового маркування коментарв, використовувати стовпц "created_at" "updated_at" у таблиц коментарв. ### Додатковий функцонал - Створити маршрут для профля користувача за його ункальним юзернеймом. Повинна повертатися вся нформаця про користувача. мя, коли зарестрований, кльксть завантажених фото тощо - Користувач може редагувати нформацю про себе, та бачити нформацю про себе. Це мають бути рзн маршрути з профлем користувача. Профль для всх користувачв, а нформаця для себе - це те що можна редагувати - Адмнстратор може робити користувачв неактивними (банити). Неактивн користувач не можуть заходити в застосунок ### Додатково по можливост реалзувати наступн задач, якщо дозволя час. - Реалзувати механзм виходу користувача з застосунку через logout. Access token повинен бути добавлений на час його снування в чорний список. - Рейтинг - Користувач можуть виставляти рейтинг свтлин вд 1 до 5 зрок. Рейтинг обчислються як середн значення оцнок всх користувачв. - Можна тльки раз виставляти оцнку свтлин для користувача. - Не можливо оцнювати сво свтлини. - Модератори та адмнстратори можуть переглядати та видаляти оцнки користувачв. - Пошук та фльтраця - Користувач може здйснювати пошук свтлин за ключовим словом або тегом. Псля пошуку користувач може вдфльтрувати результати за рейтингом або датою додавання. - Модератори та адмнстратори можуть виконувати пошук та фльтрацю за користувачами, як додали свтлини. # Виконання ## Спльна робота ### Органзацйн процеси #### Склад команди розробникв 1. [Team Lead](https://github.com/SVcheburator) @ SVcheburator 1. [Scrum Master](https://github.com/AlexanderBgit) @AlexanderBgit 1. [Developer](https://github.com/OleksiiHladkov) @OleksiiHladkov 1. [Developer](https://github.com/lexxai) @lexxai #### Trello Розподлення задач мд розробниками ![](doc/softskill-trelo-01.png) ![](doc/softskill-trelo-02.png) ### Спльний робочий простр розробки Git #### Розподлення git brach мж розробниками - Основна глка розробки - built - main - фнальна для релзв - кожному розробнику створена власна глка, котру розробник синхронзу з built ![](doc/deploy-github-branch-01.png) #### Захист git branch - main - merge only owner - build - merge require approval by 1 developer ![](doc/deploy-github-protect-01.png) ![](doc/deploy-github-protect-02.png) #### Переврка перед merge - Git Action - Python Build (СI) (pytest) ![GitHub Action](doc/deploy-github-action-01.png) ![GitHub Action](doc/deploy-github-action-02.png) ## Роздли завдань ## Встановлення ### Завантаження прокту ``` git clone https://github.com/SVcheburator/pixels_project cd ./pixels_project git checkout *developer_branch* ``` ### Створення змнних оточення для прокту - На овнов `env-example` створюмо новий файл `.env` - На овнов `env_prod-example` створюмо новий файл `.env_prod` ### Docker ``` docker-compose --file docker-compose-project.yml --env-file .env_prod up -d [+] Building 0.0s (0/0) docker:default [+] Running 3/3 Container pixels-redis-1 Started 0.0s Container pixels-pg-1 Started 0.0s Container pixels-code-1 Started 0.0s ``` ### Середовище розробника ##### Вртуальне оточення прокту - venv ``` python -m venv venv ./venv/Script/activate pip install -r requirements.txt ``` - poetry ``` poetry init poetry shell poetry update ``` ##### Запуск прокту ``` python ./main.py INFO: Will watch for changes in these directories: ['...\\Project_group_5\\pixels_project'] INFO: Uvicorn running on http://0.0.0.0:9000 (Press CTRL+C to quit) INFO: Started reloader process [19228] using WatchFiles INFO: Started server process [18616] INFO: Waiting for application startup. INFO: Application startup complete. ``` ##### Пдключення до прокту Вдкрити браузер за посиланням http://localhost:9000 ## Роздли FastAPI реалзац FastAPI docs (Swagger) - http://localhost:9000/docs ### Аутентифкаця ![](/doc/api-auth-03.png) ![](/doc/api-auth-04.png) ![](/doc/api-auth-01.png) ![](/doc/api-auth-02.png) ### Користувач ![](/doc/api-users-01.png) ##### Користувач пдтвердження Email ![](/doc/auth-02.png) ![](/doc/auth-01.png) ![](/doc/auth-03.png) ### Робота з свтлинами ![](/doc/api-images-01.png) #### Додавання свтлини для поточного користувача ![post-add](/doc/api-post-01.png) #### Список свтлин за id користувача ![post-list](/doc/api-post-02.png) ### Коментування ![](/doc/api-comments-01.png) #### Додавання коментаря до свтлини за id ![comm-add](/doc/api-comments-02.png ) #### Список коментарв до свтлини за id ![comm-list](/doc/api-comments-03.png ) ### Додатковий функцонал ## Тестування. Простий Front end. STATIC HTML / JavaScript Auth client. ![](doc/web-index-01.png) ![](doc/web-js-01.png) JavaScript Client with automatic token update. ![](doc/web-js-02.png) ## DEPLOY ### DOCKER COMPOSE PROJECT PIXELS #### DOCKER BUILD `docker-compose --file docker-compose-project.yml --env-file .env_prod build` ``` 2023/12/08 22:49:34 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed [+] Building 93.9s (14/14) FINISHED docker:default => [code internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.17kB 0.0s => [code internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [code internal] load metadata for docker.io/library/python:3.11 2.2s => [code auth] library/python:pull token for registry-1.docker.io 0.0s => [code 1/8] FROM docker.io/library/python:3.11@sha256:0698431f4610b4cad4ccea2b3e2754dfbb61ac4c553bbd2b044d716a917f2cdc 0.0s => [code internal] load build context 4.4s => => transferring context: 49.90MB 4.3s => CACHED [code 2/8] WORKDIR /app 0.0s => [code 3/8] COPY . . 1.1s => [code 4/8] COPY run.sh run.sh 0.1s => [code 5/8] COPY src/ src/ 0.1s => [code 6/8] COPY main.py main.py 0.1s => [code 7/8] COPY requirements.txt requirements.txt 0.1s => [code 8/8] RUN pip install -r requirements.txt 84.3s => [code] exporting to image 1.3s => => exporting layers 1.3s => => writing image sha256:3be444c0e7e6e2131beb8716bc56e072a303b805e08294d247a4e824e764e1e3 0.0s => => naming to docker.io/library/pixels-code 0.0s ``` #### DOCKER RUN `docker-compose --file docker-compose-project.yml --env-file .env_prod up` ``` [+] Building 0.0s (0/0) docker:default [+] Running 3/3 Container pixels-pg-1 Created 0.0s Container pixels-redis-1 Created 0.0s Container pixels-code-1 Recreated 0.8s Attaching to pixels-code-1, pixels-pg-1, pixels-redis-1 pixels-redis-1 | 1:C 12 Dec 2023 18:34:26.534 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. pixels-redis-1 | 1:C 12 Dec 2023 18:34:26.535 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo pixels-redis-1 | 1:C 12 Dec 2023 18:34:26.535 * Redis version=7.2.3, bits=64, commit=00000000, modified=0, pid=1, just started pixels-redis-1 | 1:C 12 Dec 2023 18:34:26.535 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.536 * monotonic clock: POSIX clock_gettime pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.536 * Running mode=standalone, port=6379. pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.560 * Server initialized pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.561 * Loading RDB produced by version 7.2.3 pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.561 * RDB age 8 seconds pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.561 * RDB memory usage when created 0.83 Mb pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.561 * Done loading RDB, keys loaded: 0, keys expired: 0. pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.561 * DB loaded from disk: 0.000 seconds pixels-redis-1 | 1:M 12 Dec 2023 18:34:26.561 * Ready to accept connections tcp pixels-code-1 | Sleep 5... pixels-pg-1 | pixels-pg-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization pixels-pg-1 | pixels-pg-1 | 2023-12-12 18:34:31.299 UTC [1] LOG: starting PostgreSQL 12.17 (Debian 12.17-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit pixels-pg-1 | 2023-12-12 18:34:31.300 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 pixels-pg-1 | 2023-12-12 18:34:31.301 UTC [1] LOG: listening on IPv6 address "::", port 5432 pixels-pg-1 | 2023-12-12 18:34:31.486 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" pixels-pg-1 | 2023-12-12 18:34:31.714 UTC [27] LOG: database system was shut down at 2023-12-12 18:34:18 UTC pixels-pg-1 | 2023-12-12 18:34:31.867 UTC [1] LOG: database system is ready to accept connections pixels-code-1 | INFO [alembic.runtime.migration] Context impl PostgresqlImpl. pixels-code-1 | INFO [alembic.runtime.migration] Will assume transactional DDL. pixels-code-1 | INFO [alembic.runtime.migration] Running upgrade -> d1f389de1cc3, 'Init' pixels-code-1 | INFO [alembic.runtime.migration] Running upgrade d1f389de1cc3 -> 16cee3a17066, BanList pixels-code-1 | INFO: Started server process [9] pixels-code-1 | INFO: Waiting for application startup. pixels-code-1 | INFO: Application startup complete. pixels-code-1 | INFO: Uvicorn running on http://0.0.0.0:9000 (Press CTRL+C to quit) pixels-code-1 | INFO: 127.0.0.1:35428 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:35586 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:34896 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET / HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /docs/ HTTP/1.1" 307 Temporary Redirect pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /docs HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /openapi.json HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /favicon.ico HTTP/1.1" 404 Not Found pixels-code-1 | INFO: 172.30.0.1:58140 - "POST /api/auth/login HTTP/1.1" 401 Unauthorized pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /client/index.html?error=login HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET / HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:58194 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /docs/ HTTP/1.1" 307 Temporary Redirect pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /docs HTTP/1.1" 200 OK pixels-code-1 | INFO: 172.30.0.1:58140 - "GET /openapi.json HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:53348 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:34928 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:60840 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:55090 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:35110 - "GET /api/healthchecker HTTP/1.1" 200 OK pixels-code-1 | INFO: 127.0.0.1:41156 - "GET /api/healthchecker HTTP/1.1" 200 OK Gracefully stopping... (pr ... ...

近期下载者

相关文件


收藏者