Skip to content

Commit

Permalink
Merge pull request #293 from Studio-Yandex-Practicum/develop
Browse files Browse the repository at this point in the history
Pre-release v2.0-alpha
  • Loading branch information
NiKuma0 authored Dec 7, 2023
2 parents 4534eaa + 4641b48 commit 2c83593
Show file tree
Hide file tree
Showing 127 changed files with 7,684 additions and 0 deletions.
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

### **Why?**

*Зачем выполняется реализация задачи и какую проблему она решает.*

### **How To Do?**

*Как мы выполняем реализацию данной задачи, какие действия нужны для достижения цели.*

### **Where?**

*Где делаем реализацию задачи, какие сервисы задействованы, ссылка на требования, сcылка на API, скриншоты.*
131 changes: 131 additions & 0 deletions .github/workflows/deploy_stage.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: Stage backend build and deploy

concurrency:
group: ${{ github.ref }}
cancel-in-progress: true

on:
push:
branches:
- master
- develop

workflow_dispatch:

env:
REGISTRY: ghcr.io
REP_OWNER: studio-yandex-practicum
IMAGE_NAME: procharity_back_2.0_backend
DEPLOY_PATH: /procharity2/full
WORK_DIR: /app

defaults:
run:
working-directory: .

jobs:
build-and-push-image-to-github-packages:
name: Push backend Docker image to GitHub Packages
runs-on: ubuntu-latest
environment:
name: deploy
permissions:
contents: read
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Checkout
uses: actions/checkout@v3
with:
ref: develop
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Sanitize repo slug
uses: actions/github-script@v6
id: repo_slug
with:
result-encoding: string
script: return 'ghcr.io/${{ github.repository }}'.toLowerCase()
- name: Push Stage to GitHub Container Registry
uses: docker/build-push-action@v4
with:
context: "{{defaultContext}}"
push: true
tags: ${{ steps.repo_slug.outputs.result }}:stage

deploy:
name: Deploy
runs-on: ubuntu-latest
needs: build-and-push-image-to-github-packages
environment:
name: deploy
steps:
- name: Check out repository
uses: actions/checkout@v2

- name: Copy docker-compose and nginx files
uses: appleboy/scp-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
source: "infra/docker-compose.swag.yml, infra/nginx/*.conf"
target: ${{ env.DEPLOY_PATH }}
- name: Get SHORT_SHA
run: echo "SHORT_SHA=`echo ${{ github.sha }} | cut -c1-8`" >> $GITHUB_ENV
- name: Get COMMIT_DATE
run: echo COMMIT_DATE=$(git show -s --format=%ci ${{ env.SHORT_SHA }}) >> $GITHUB_ENV
- name: Create .env file
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
script: |
cd ${{ env.DEPLOY_PATH }}
mv infra/docker-compose.swag.yml infra/docker-compose.yaml
rm -f .env
cat > .env <<- EOM
POSTGRES_DB=${{ secrets.POSTGRES_DB }}
POSTGRES_USER=${{ secrets.POSTGRES_USER }}
POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}
DB_HOST=${{ secrets.DB_HOST }}
DB_PORT=${{ secrets.DB_PORT }}
BOT_TOKEN=${{ secrets.TELEGRAM_BOT_TOKEN }}
BOT_WEBHOOK_MODE=${{ secrets.BOT_WEBHOOK_MODE }}
APPLICATION_URL=${{ secrets.APPLICATION_URL }}
SECRET_KEY=${{ secrets.SECRET_KEY }}
ROOT_PATH=${{ secrets.ROOT_PATH }}
MAIL_SERVER=${{ secrets.MAIL_SERVER }}
MAIL_LOGIN=${{ secrets.MAIL_LOGIN }}
MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }}
ORGANIZATIONS_EMAIL=${{ secrets.ORGANIZATIONS_EMAIL }}
EMAIL_ADMIN=${{ secrets.EMAIL_ADMIN }}
LAST_COMMIT=${{ env.SHORT_SHA }}
COMMIT_DATE=${{ env.COMMIT_DATE }}
EOM
start_application:
name: Start application
runs-on: ubuntu-latest
environment:
name: deploy
needs: deploy
steps:
- name: Start application
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
script: |
cd ${{ env.DEPLOY_PATH }}/infra
docker compose --file docker-compose.yaml --env-file ../.env pull backend -q
docker compose --file docker-compose.yaml --env-file ../.env up -d --wait
docker system prune -f || true
docker compose --env-file ../.env exec -Tw ${{ env.WORK_DIR }} backend bash -c "alembic upgrade head"
47 changes: 47 additions & 0 deletions .github/workflows/push_front.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Stage bot frontend

on:
push:
branches:
- master
- develop
paths:
- 'front/**'

workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME_FRONT: procharity_bot_front
OWNER_LC: studio-yandex-practicum


jobs:
build_and_push_to_ghcr:
name: Push front Docker image to Github Container Registry
runs-on: ubuntu-latest
environment:
name: stage_deploy
permissions:
contents: read
packages: write
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Checkout
uses: actions/checkout@v3
with:
ref: develop
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push Front to ghcr.io
uses: docker/build-push-action@v2
with:
context: "{{defaultContext}}"
file: ./infra/Dockerfile_front
push: true
tags: ${{ env.REGISTRY }}/${{ env.OWNER_LC }}/${{ env.IMAGE_NAME_FRONT }}:prod
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
Expand Down Expand Up @@ -127,3 +134,13 @@ dmypy.json

# Pyre type checker
.pyre/

# vscode
.vscode/
.devcontainer/

# logs
logs/

.DS_Store
src/.DS_Store
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "front"]
path = front
url = https://github.com/ProCharity/procharity-front
33 changes: 33 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: check-added-large-files
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]
- id: check-merge-conflict
- id: mixed-line-ending
- id: no-commit-to-branch
args: [--branch, master, --branch, develop]

- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
args: [--profile, black]

- repo: https://github.com/psf/black
rev: 23.10.0
hooks:
- id: black
args: [--line-length=120]

- repo: https://github.com/pycqa/flake8
rev: 6.1.0
hooks:
- id: flake8
additional_dependencies:
- flake8-docstrings
args: [--config, setup.cfg]
13 changes: 13 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM python:3.11

RUN mkdir /app

WORKDIR /app

COPY requirements.txt /app

RUN pip3 install -r /app/requirements.txt --no-cache-dir

COPY . .

CMD ["uvicorn", "src:app", "--host", "0.0.0.0", "--port", "8000", "--proxy-headers"]
35 changes: 35 additions & 0 deletions MIGRATIONS_GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Восстановление базы данных и применение миграций

Этот README-файл содержит инструкции по восстановлению базы данных из дампа и применению миграций с использованием Docker и Alembic.


## Шаги по восстановлению данных из дампа

1. Очистите существующие данные и таблицы в базе данных:

```
docker exec -it infra-postgres-1 psql -U postgres -d procharity_back_db_local -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
```

2. Загрузите данные из дампа SQL:

```
docker exec -i infra-postgres-1 psql -U postgres procharity_back_db_local < name_dump.sql
```

## Шаги по применению миграций с использованием Alembic

1. Удалите таблицу alembic_version из базы данных:

```
docker exec -it infra-postgres-1 psql -U postgres -d procharity_back_db_local -c "DROP TABLE alembic_version;"
```


2. Примените миграции с помощью Alembic:

```
alembic upgrade head
```

3. Восстановление базы данных и применение миграций завершено.
Loading

0 comments on commit 2c83593

Please sign in to comment.