Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bumble version 1.0.0 #54

Merged
merged 78 commits into from
Feb 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
a366114
Task 11 - React Router, Task 23 - error page
evdoshchenko Nov 28, 2022
f193538
Task 22 API для работы с аватаркой (#3)
Andrey-A-A Nov 28, 2022
cf0ec53
task-13 Стартовая страница (#4)
kvitkina Nov 29, 2022
7e0f880
task-14-15 add signin and signup pages
evorobyevaa Nov 29, 2022
4bfae59
fix
evorobyevaa Nov 30, 2022
5521ed0
Merge pull request #5 from wordrunners/task-14-15-signin-signup-pages
evorobyevaa Dec 3, 2022
c8545bc
task-27 - add error boundary, task-1 - add rules (#6)
kvitkina Dec 3, 2022
61d32c6
Task 7 - Игровой движок (#10)
evdoshchenko Dec 6, 2022
a4a5dba
Task 21 компонент аватар (#7)
Andrey-A-A Dec 6, 2022
89dfbb0
Task 20 passwordApi (#8)
Andrey-A-A Dec 6, 2022
3f3ad65
Task 18 profile (#9)
Andrey-A-A Dec 6, 2022
f174803
Task 24 leaderboard (#11)
kvitkina Dec 7, 2022
b99f837
task-2-16 add signin and signup api
evorobyevaa Dec 7, 2022
4a9eb80
fix
evorobyevaa Dec 7, 2022
e0146e4
Merge pull request #14 from wordrunners/task-2-16-auth-api
evorobyevaa Dec 7, 2022
b78389f
Task 26 forum (#13)
Andrey-A-A Dec 7, 2022
38483c9
task 58 add useAuth hook
evorobyevaa Dec 16, 2022
4a5e134
task-55-add service worker (#15)
kvitkina Dec 16, 2022
f99f724
fix
evorobyevaa Dec 17, 2022
6bfb506
fix
evorobyevaa Dec 17, 2022
580f048
delete console.log
evorobyevaa Dec 17, 2022
ab75d5b
Merge branch 'dev' into task-58-add-useAuth-hook
evorobyevaa Dec 17, 2022
df65be3
fix
evorobyevaa Dec 18, 2022
272627c
Merge branch 'task-58-add-useAuth-hook' of https://github.com/wordrun…
evorobyevaa Dec 18, 2022
952a835
Merge pull request #17 from wordrunners/task-58-add-useAuth-hook
evorobyevaa Dec 19, 2022
821b428
Task 57 API профиля (#18)
Andrey-A-A Dec 19, 2022
be32074
Task 59 game beatiful (#16)
evdoshchenko Dec 19, 2022
599d06a
Task 59 game beatiful (#20)
evdoshchenko Dec 19, 2022
c0bd693
add logout btn
evorobyevaa Dec 20, 2022
0b3aba6
fix auth
evorobyevaa Dec 20, 2022
0c77fff
Task Add logout btn (#21)
evorobyevaa Dec 20, 2022
69dab8e
task 61 (#19)
Andrey-A-A Dec 21, 2022
7087cfc
Merge branch 'dev' of https://github.com/wordrunners/bumble into task…
evorobyevaa Dec 21, 2022
4b96efe
fix sw (#23)
kvitkina Dec 21, 2022
88f76f9
Merge branch 'dev' of https://github.com/wordrunners/bumble into task…
evorobyevaa Dec 21, 2022
ed6ef7e
Task 35 - Тесты компонентов (#22)
evdoshchenko Dec 21, 2022
01f80c9
add cards (#24)
evdoshchenko Dec 21, 2022
0ba3099
Merge branch 'task-58-profile-state-fix' of https://github.com/wordru…
evorobyevaa Dec 23, 2022
182e76d
fix state
evorobyevaa Dec 23, 2022
670134f
Merge pull request #25 from wordrunners/task-58-profile-state-fix
evorobyevaa Dec 23, 2022
adc65d9
Task 38 Настроить Express для Server Side Rendering (#26)
evdoshchenko Jan 13, 2023
e3b85f9
task-09 (#30)
Andrey-A-A Jan 15, 2023
0edb8ce
readme SSR from empty folder (#31)
evdoshchenko Jan 15, 2023
22e1f8c
Task 25/leaderboard api (#29)
kvitkina Jan 16, 2023
0e0fc95
fix leaderboard and update cardsData (#33)
kvitkina Jan 17, 2023
d31bd39
add oauth
evorobyevaa Jan 17, 2023
23983f2
add env.sample
evorobyevaa Jan 17, 2023
3092829
fix naming
evorobyevaa Jan 18, 2023
59baf03
Merge pull request #34 from wordrunners/task-40-add-oauth
evorobyevaa Jan 19, 2023
4a790c4
Task 43 Memoryleaks (#35)
evdoshchenko Jan 20, 2023
61f7e0e
WRDRN-37 Добавить WEB API (кроме Canvas, Fetch). (#28)
pritornyi Jan 24, 2023
cc706dd
Different fix (#36)
evdoshchenko Jan 24, 2023
97ba75b
add theme
evorobyevaa Jan 26, 2023
3998a81
fix
evorobyevaa Jan 26, 2023
83d6689
Task 41 forum (#37)
evdoshchenko Jan 26, 2023
103c78b
Make pretty backend, add handles for board(forum functional)
pritornyi Jan 28, 2023
f769870
Add handles to route
pritornyi Jan 28, 2023
1c3e2a2
Merge branch 'dev' into task-46-add-theme
evorobyevaa Jan 30, 2023
0160a06
Merge pull request #38 from wordrunners/task-46-add-theme
evorobyevaa Jan 30, 2023
29e3130
add loader and topics styles (#42)
kvitkina Jan 30, 2023
da37e55
Закрытие API форума авторизацией (#41)
Andrey-A-A Jan 31, 2023
4d66c06
Remove user_id column from the project, add check on successful user …
pritornyi Feb 1, 2023
3dacfd5
Merge branch 'dev' into marchenkoar/wrdrn-66-реализует-функционал-фор…
pritornyi Feb 1, 2023
385dc47
Task 69 forum comments (#44)
kvitkina Feb 1, 2023
9a59f61
xss-server (#45)
Andrey-A-A Feb 3, 2023
cf57e18
theme-server (#46)
evdoshchenko Feb 3, 2023
4586f21
fix leaderboard avatar (#47)
kvitkina Feb 4, 2023
3e55c2f
Merge branch 'dev' into marchenkoar/wrdrn-66-реализует-функционал-фор…
pritornyi Feb 14, 2023
206590b
Task 66 Рефакторинг, доработка и формализация кода бэкэнда.
pritornyi Feb 14, 2023
2a3c1a2
Revert "Task 66 Рефакторинг, доработка и формализация кода бэкэнда." …
evdoshchenko Feb 14, 2023
8587297
add one more web api
evorobyevaa Feb 17, 2023
0c4f0b2
Merge branch 'task-72-add-web-api' of https://github.com/wordrunners/…
evorobyevaa Feb 17, 2023
01da432
Task 51 deploy to cloud (#50)
evdoshchenko Feb 20, 2023
288e315
Task check list (#52)
kvitkina Feb 20, 2023
0ef7163
csp (#49)
Andrey-A-A Feb 20, 2023
8a2da7c
Merge branch 'dev' into task-72-add-web-api
evorobyevaa Feb 20, 2023
22cfcd5
Merge pull request #51 from wordrunners/task-72-add-web-api
evorobyevaa Feb 20, 2023
cc1f542
Readme, fixes (#53)
evdoshchenko Feb 21, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
5 changes: 4 additions & 1 deletion .env.sample
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
CLIENT_PORT=3000
SERVER_PORT=3001
SERVER_PORT=5000
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres
POSTGRES_PORT=5432
[email protected]
PGADMIN_PASSWORD=secret
API_ENDPOINT=https://ya-praktikum.tech/api/v2
2 changes: 2 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,7 @@ module.exports = {
plugins: ['@typescript-eslint'],
rules: {
'@typescript-eslint/ban-ts-comment': 1,
"@typescript-eslint/no-non-null-assertion": 0,
},
ignorePatterns: ['**/client/dist', '**/client/ssr-dist', '**/server/dist', '*.css', '*.scss', '*.json'],
}
40 changes: 40 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Push To Yandex Cloud CR

on:
push:
branches:
- deploy
- deploy-test
- task-51-deploy-to-cloud
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Yandex Cloud CR "Login" Action for GitHub Actions
uses: yc-actions/[email protected]
with:
yc-sa-json-credentials: ${{ secrets.YC_SA_JSON_CREDENTIALS }}

- name: Build, tag, and push image to Yandex Cloud Container Registry
env:
CR_REGISTRY: ${{ secrets.CR_REGISTRY }}
CR_REPOSITORY: bumble
IMAGE_TAG: ${{ github.sha }}
CLIENT_PORT: 3000
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
POSTGRES_PORT: 5432
SERVER_NAME: wordrunners-bumble-20.ya-praktikum.tech
SERVER_PORT: 5000
run: |
docker compose build
docker tag practicum-client:latest cr.yandex/$CR_REGISTRY/practicum-client:latest
docker push cr.yandex/$CR_REGISTRY/practicum-client:latest
docker tag practicum-server:latest cr.yandex/$CR_REGISTRY/practicum-server:latest
docker push cr.yandex/$CR_REGISTRY/practicum-server:latest
16 changes: 15 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,18 @@ node_modules/
.idea
.vscode
dist
tmp
ssr-dist
tmp
.yarnrc
yarn
yarn-1.22.19.cjs

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
yarn.lock
6 changes: 3 additions & 3 deletions Dockerfile.client
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG NODE_VERSION=16
ARG CLIENT_PORT=3001
ARG CLIENT_PORT=3000

FROM node:$NODE_VERSION-buster as base

Expand All @@ -12,7 +12,7 @@ RUN yarn install --frozen-lockfile

COPY . .

RUN yarn lerna bootstrap
RUN yarn bootstrap
RUN rm -rf /app/packages/server/dist/ && yarn build --scope=client


Expand All @@ -23,4 +23,4 @@ COPY --from=builder /app/packages/client/dist/ /app/
COPY --from=builder /app/packages/client/nginx.conf /etc/nginx/nginx.conf

EXPOSE $CLIENT_PORT
CMD [ "nginx", "-g", "daemon off;" ]
CMD [ "nginx", "-g", "daemon off;" ]
33 changes: 33 additions & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
ARG NODE_VERSION=16
ARG SERVER_PORT=5000

FROM node:$NODE_VERSION-buster as base

WORKDIR /app

FROM base as builder

COPY package.json yarn.lock
RUN yarn install --frozen-lockfile

COPY . .

RUN yarn bootstrap
RUN rm -rf /app/packages/server/dist/ && yarn build --scope=server


FROM node:$NODE_VERSION-buster-slim as production
WORKDIR /app

COPY --from=builder /app/packages/client/ /client/
COPY --from=builder /app/packages/server/dist/ /app/
COPY --from=builder /app/packages/server/package.json /app/package.json
COPY --from=builder /app/packages/server/utils/wait-for.sh /app/utils/wait-for.sh

RUN apt-get -q update && apt-get -qy install netcat
RUN chmod +x /app/utils/wait-for.sh

RUN sed -i 's/"client": "0.0.0"/"client": "file:..\/client"/g' /app/package.json \
&& yarn install --production=true

EXPOSE $SERVER_PORT
11 changes: 7 additions & 4 deletions Dockerfile.server
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG NODE_VERSION=16
ARG SERVER_PORT=3001
ARG SERVER_PORT=5000

FROM node:$NODE_VERSION-buster as base

Expand All @@ -12,16 +12,19 @@ RUN yarn install --frozen-lockfile

COPY . .

RUN yarn lerna bootstrap
RUN yarn bootstrap
RUN rm -rf /app/packages/server/dist/ && yarn build --scope=server


FROM node:$NODE_VERSION-buster-slim as production
WORKDIR /app

COPY --from=builder /app/packages/client/ /client/
COPY --from=builder /app/packages/server/dist/ /app/
COPY --from=builder /app/packages/server/package.json /app/package.json
RUN yarn install --production=true

RUN sed -i 's/"client": "0.0.0"/"client": "file:..\/client"/g' /app/package.json \
&& yarn install --production=true

EXPOSE $SERVER_PORT
CMD [ "node", "/app/index.js" ]
CMD [ "node", "/app/index.js" ]
30 changes: 30 additions & 0 deletions MEMORYLEAKS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## Используя Devtools:

### Вкладка Memory

В пункте Select JavaScript VM instance

Показатель Total JS heap size на страницах:
```
Start, Forum, LeaderBoard около 11МБ
Game около 13МБ
```

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

Созданы моментальные снимки после загрузки страницы, и после использования. Состояние снимков приблизительно одинаковое.

### Вкладка Recorder

Сделаны записи с чекбоксом Memory.

```
Старт записи: запуск приложения
Окончание записи: после перехода всех страниц
```

График с данными о используемой памяти не показывает периодических скачков в памяти или роста.

### Вывод:

Утечек в памяти не обнаружено
79 changes: 31 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,59 @@
### Как запускать?
## Bumble

1. Убедитесь что у вас установлен `node` и `docker`
2. Выполните команду `yarn bootstrap` - это обязательный шаг, без него ничего работать не будет :)
3. Выполните команду `yarn dev`
3. Выполните команду `yarn dev --scope=client` чтобы запустить только клиент
4. Выполните команду `yarn dev --scope=server` чтобы запустить только server
Это игра в слова!

Нужно собрать слово из букв за минуту.
Чем длиннее - тем лучше.

За каждую букву начисляются победные баллы.

### Как добавить зависимости?
В этом проекте используется `monorepo` на основе [`lerna`](https://github.com/lerna/lerna)
## Deploy
https://wordrunners-bumble-20.ya-praktikum.tech/

Чтобы добавить зависимость для клиента
```yarn lerna add {your_dep} --scope client```
## Stack:

Для сервера
```yarn lerna add {your_dep} --scope server```
TypeScript, Canvas API, React, Redux, nginx, Git, GitHub Actions, Docker, Vite, HTML5, SASS, Express, Node.JS, Postgresql, Sequelize, jest

И для клиента и для сервера
```yarn lerna add {your_dep}```
## Основные функции:
- Игра в слова Bumble
- Авторизация / регистрация (по логин/пароль и oAuth)
- Редактирование данных профиля
- Создание тем форума
- Создание сообщений, ответов и добавление реакций в форуме
- Сохранение результата в Лидерборде
- Переключение темы оформления

## Основные команды

Если вы хотите добавить dev зависимость, проделайте то же самое, но с флагом `dev`
```yarn lerna add {your_dep} --dev --scope server```
### Как собрать и запустить Сервер и БД в Docker?
```yarn docker:build```

### Как начать разрабатывать в hot-reload режиме с БД в Docker?
По умолчанию запуститься на localhost:5000. После сборки Docker сервисов. В отдельных терминалах:

### Тесты
```yarn docker:db```
```yarn dev```

Для клиента используется [`react-testing-library`](https://testing-library.com/docs/react-testing-library/intro/)
### Как собрать Клиент с nginx и Сервер в prod?
```yarn docker:prod```

### Тесты
Для клиента используется [`react-testing-library`](https://testing-library.com/docs/react-testing-library/intro/)
```yarn test```

### Линтинг

```yarn lint```

### Форматирование prettier

```yarn format```

### Production build

```yarn build```

И чтобы посмотреть что получилось


`yarn preview --scope client`
`yarn preview --scope server`

## Хуки
В проекте используется [lefthook](https://github.com/evilmartians/lefthook)
Если очень-очень нужно пропустить проверки, используйте `--no-verify` (но не злоупотребляйте :)

## Ой, ничего не работает :(

Откройте issue, я приду :)

## Автодеплой статики на vercel
Зарегистрируйте аккаунт на [vercel](https://vercel.com/)
Следуйте [инструкции](https://vitejs.dev/guide/static-deploy.html#vercel-for-git)
В качестве `root directory` укажите `packages/client`

Все ваши PR будут автоматически деплоиться на vercel. URL вам предоставит деплоящий бот

## Production окружение в докере
### Production окружение в докере
Перед первым запуском выполните `node init.js`


`docker compose up` - запустит три сервиса
1. nginx, раздающий клиентскую статику (client)
2. node, ваш сервер (server)
3. postgres, вашу базу данных (postgres)

Если вам понадобится только один сервис, просто уточните какой в команде
`docker compose up {sevice_name}`, например `docker compose up server`
`docker compose up {sevice_name}`, например `docker compose up server`
65 changes: 65 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
version: '3.9'

services:
server:
container_name: practicum-server
image: practicum-server
build:
context: .
dockerfile: Dockerfile.dev
args:
SERVER_PORT: ${SERVER_PORT}
restart: always
ports:
- '${SERVER_PORT}:${SERVER_PORT}'
environment:
POSTGRES_HOST: 'postgres'
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
SERVER_PORT: ${SERVER_PORT}
networks:
- awesome
depends_on:
- postgres
command:
./utils/wait-for.sh postgres:${POSTGRES_PORT} -- node /app/index.js

postgres:
image: postgres:14
restart: always
ports:
- '${POSTGRES_PORT}:${POSTGRES_PORT}'
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- pg-data:/var/lib/postgresql/data
networks:
- awesome

pgadmin:
image: dpage/pgadmin4:6.19
env_file:
./.env
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
PGADMIN_LISTEN_PORT: 80
ports:
- '8080:80'
volumes:
- pgadmin-data:/var/lib/pgadmin
depends_on:
- postgres
networks:
- awesome

networks:
awesome:
driver: bridge

volumes:
pg-data:
pgadmin-data:
Loading