This commit is contained in:
ErickSkrauch 2020-01-25 11:22:08 +03:00
parent df700ba408
commit 6f30b9d352
4 changed files with 90 additions and 207 deletions

View File

@ -2,15 +2,13 @@
## Application environment ## Application environment
YII_DEBUG=true YII_DEBUG=true
YII_ENV=dev YII_ENV=dev
DOMAIN=https://account.ely.by DOMAIN=http://localhost
AUTHSERVER_HOST=authserver.ely.by
EMAILS_RENDERER_HOST=http://emails-renderer:3000 EMAILS_RENDERER_HOST=http://emails-renderer:3000
## Security params ## Security params
JWT_USER_SECRET= JWT_USER_SECRET=replace_me_for_production
JWT_ENCRYPTION_KEY= JWT_ENCRYPTION_KEY=thisisadummyvalue32latterslength
JWT_PUBLIC_KEY_PATH=
JWT_PRIVATE_KEY_PATH=
JWT_PRIVATE_KEY_PASS=
## External services ## External services
RECAPTCHA_PUBLIC= RECAPTCHA_PUBLIC=
@ -37,25 +35,13 @@ REDIS_DATABASE=0
REDIS_PASSWORD= REDIS_PASSWORD=
## StatsD metrics params ## StatsD metrics params
STATSD_HOST=statsd.ely.by STATSD_HOST=
STATSD_PORT=8125 STATSD_PORT=8125
# This value can be blank # This value can be blank
STATSD_NAMESPACE= STATSD_NAMESPACE=
## Dev-only params ## Xdebug configuration params
XDEBUG_CONFIG=remote_host=10.254.254.254 XDEBUG_CONFIG=remote_host=10.254.254.254
PHP_IDE_CONFIG=serverName=docker # Use the next line if you're using Docker on Windows or Mac:
# XDEBUG_CONFIG=remote_host=host.docker.internal
PHP_IDE_CONFIG=serverName=accounts-elyby
# Web
VIRTUAL_HOST=account.ely.by,authserver.ely.by
AUTHSERVER_HOST=authserver.ely.by
# LETSENCRYPT_HOST=account.ely.by
# LETSENCRYPT_EMAIL=erickskrauch@ely.by
# MariaDB
ALLOW_EMPTY_PASSWORD=yes
MARIADB_ROOT_PASSWORD=
MARIADB_DATABASE=ely_accounts
MARIADB_USER=ely_accounts_user
MARIADB_PASSWORD=ely_accounts_password

118
README.md
View File

@ -1,97 +1,85 @@
# Accounts Ely.by # Accounts Ely.by
## Развёртывание dev [backend] Сервис управления Аккаунтами Ely.by, предоставляющий единую точку входа для наших и внешних сервисов по протоколу
OAuth2, а также реализующий сервер авторизации для серверов Minecraft и частично реализующий совместимое с API Mojang
для получения информации об аккаунтах.
Предварительно нужно установить [git](https://git-scm.com/downloads), **Предупреждение**: этот проект не предназначен для использования вне экосистемы сервисов Ely.by.
[docker](https://docs.docker.com/engine/installation/) и его
[docker-compose](https://docs.docker.com/compose/install/).
За тем нужно установить, настроить и запустить [nginx-proxy](https://gitlab.com/elyby/nginx-proxy) ## Разработка
контейнер. Это делается один раз в рамках системы и в дальнейшем используется и для других проектов.
Также необходимо иметь доступ к `registry.ely.by`. Для этого выполнить команду `docker login registry.ely.by`, Проект ориентирован на работу в Docker окружении, так что для полноценной работы проекта запускать его следует именно в
ввести свой логин и пароль. Если доступа нету, то нужно его попросить у кого-нибудь, кто может его выдать. окружении Docker-контейнера. Ссылки на установки:
- [Docker](https://docs.docker.com/install/)
- [docker-compose](https://docs.docker.com/compose/install/)
За тем сливаем репозиторий: Далее необходимо создать форк репозитория, а после клонировать его:
```sh ```sh
git clone git@gitlab.ely.by:elyby/accounts.git account.ely.by git clone git@github.com:<your_username>/accounts.git
cd account.ely.by cd accounts
``` ```
Далее нужно создать `.env`, `docker-compose.yml` и `id_rsa` файлы: Затем необходимо создать локальные файлы `.env` и `docker-compose.yml`:
```sh ```sh
cp .env-dist .env cp .env.dist .env
cp docker-compose.dev.yml docker-compose.yml cp docker-compose.dist.yml docker-compose.yml
cp ~/.ssh/id_rsa id_rsa # Использовать ссылку нельзя
``` ```
**Касательно файла id_rsa**: часть зависимостей находятся в наших приватных репозиториях, получить Скопированные файлы можно изменить под условия локальной среды разработки, но в общем случае они пригодны для
доступ куда можно только в том случае, если в контейнере окажется ключ, который имеет доступ к этим использования без вашего вмешательства.
репозиториям.
Все вышеперечисленные файлы находятся под gitignore, так что с конечными файлами можно произвести Контейнеры не умеют автоматически устанавливать зависимости, так что их нужно установить самостоятельно. Если у вас в
все необходимые манипуляции под конкретную задачу разработки. **В файле `.env` обязательно следует системе установлен `php` и `composer`, то можно установить зависимости через команду `composer install`. Вы также всегда
задать `JWT_USER_SECRET`, иначе авторизация на бекенде не заработает.** можете установить зависимости с помощью контейнера:
После этого просто выполняем старт всех контейнеров: ```sh
docker-compose run --rm --no-deps app composer install
```
При первом запуске произойдёт процесс загрузки и построения необходимых образов, после чего все контейнеры начнут
свою работу, и вы сможете приступить к разработке.
Для запуска всех контейнеров, используйте следующую команду:
```sh ```sh
docker-compose up -d docker-compose up -d
``` ```
Контейнеры автоматически сбилдятся и начнут свою работу. По умолчанию, в `docker-compose.yml` указан `80` порт для самого сервиса, а также `8080` порт для подключения
к phpMyAdmin. Если сервисы `web` и `phpmyadmin` выбросят ошибку, связанную с занятостью портов, то необходимо или
освободить необходимые порты (`80` и `8080`), или же изменить их, после чего заново выполнить команду
`docker-compose up -d`.
## Развёртывание dev [frontend] ### Пользовательский интерфейс
Чтобы поднять сборку frontend приложения, необходимо иметь установленный в системе [Node.js](https://nodejs.org) Этот репозиторий содержит в себе только код для API бекенда, в то время как интерфейс находится в
версии 5.x или 6.x, а так же npm 3-ей версии (`npm i -g npm` для обновления). [соседнем репозитории](https://github.com/elyby/accounts-frontend). Пользователи Linux и Mac могут использовать
следующий скрипт, чтобы получить последнюю версию пользовательского интерфейса:
За тем переходим в папку `frontend` и устанавливаем зависимости: ```bash
curl -s https://api.github.com/repos/elyby/accounts-frontend/releases/latest \
```sh | grep "browser_download_url.*tar.gz" \
cd frontend | cut -d : -f 2,3 \
npm i | tr -d \" \
| xargs curl -sLo /tmp/accounts-frontend.tar.gz \
&& rm -rf frontend \
&& mkdir -p frontend \
&& tar -zxf /tmp/accounts-frontend.tar.gz -C frontend \
&& rm -f /tmp/accounts-frontend.tar.gz
``` ```
После того, как все зависимости будут установлены, можно поднять dev-сервер. Здесь есть 2 пути: можно, следуя Если этот скрипт не сработал для вас, то вы можете самостоятельно перейти на
инструкции выше, поднять backend на своей машине через Docker. Если же разработка не привязывается к специфичной [страницу релизов](https://github.com/elyby/accounts-frontend/releases), скачать подходящий `build`-архив и
версии backend, то более быстрым и удобным способ будет использовать наш dev-сервер, расположенный под адресу разархивировать всё его содержимое в папку `frontend`.
https://dev.account.ely.by.
В любом из случаев необходимо в папке `frontend/config` скопировать файл `template.env.js` в `env.js` (находится ### Как войти в работающий контейнер
под .gitignore) и указать в параметре `apiHost` или свой локальный сервер (тот хост, что был указан в .env
как `VIRTUAL_HOST`), или указав просто `https://dev.account.ely.by`.
После того, как это будет сделано, запускаем dev-сервер (находясь в папке frontend): Начиная с версии `docker-compose` 1.9.0, была добавлена команда `docker-compose exec`, которая позволяет выполнить
на работающем контейнере произвольную команду, основываясь на имени сервиса в compose-файле. Так, например, чтобы
``` войти в shell контейнера `app`, используйте следующую команду:
npm start
```
dev-сервер поднимется на 8080 порту и будет доступен по адресу http://localhost:8080.
### Как влезть в работающий контейнер
Начиная с версии docker-compose 1.9.0, появилась команда `docker-compose exec`, которая позволяет выполнить
на работающем контейнере произвольную команду, основываясь на имени сервиса в compose файле.
``` ```
docker-compose exec app bash docker-compose exec app bash
``` ```
------------------------
_// Старый вариант_
Сперва, с помощью команды `docker ps` мы увидим все запущенные контейнеры. Нас интересуют значения
из первой колонки CONTAINER ID или NAMES. Узнать, чему они соответствуют можно прочитав название IMAGE
из 2 колонки. Чтобы выполнить команду внутри работабщего контейнера, нужно выполнить:
```
docker exec -it accountelyby_app_1 bash
```
Где `accountelyby_app_1` - одно из значений CONTAINER ID или NAMES. Для выхода из контейнера
используем `exit`.

View File

@ -1,7 +1,7 @@
version: '3.4' version: '3.4'
services: services:
web: web:
image: registry.ely.by/elyby/accounts-nginx:latest image: elyby/accounts/nginx:local
build: build:
context: . context: .
target: web target: web
@ -11,14 +11,13 @@ services:
- app - app
- emails-renderer - emails-renderer
env_file: .env env_file: .env
ports:
- 80:80
volumes: volumes:
- ./:/var/www/html - ./:/var/www/html
networks:
- default
- nginx-proxy
app: app:
image: registry.ely.by/elyby/accounts:dev image: elyby/accounts:local
build: build:
context: . context: .
target: app target: app
@ -36,7 +35,7 @@ services:
- php - php
worker: worker:
image: registry.ely.by/elyby/accounts:dev image: elyby/accounts:local
build: build:
context: . context: .
target: app target: app
@ -51,7 +50,7 @@ services:
env_file: .env env_file: .env
cron: cron:
image: registry.ely.by/elyby/accounts:dev image: elyby/accounts:local
build: build:
context: . context: .
target: app target: app
@ -70,17 +69,23 @@ services:
image: elyby/emails-renderer:dev image: elyby/emails-renderer:dev
db: db:
image: elyby/accounts/mariadb:local
build: build:
context: . context: .
target: db target: db
args: args:
build_env: dev build_env: dev
env_file: .env
volumes: volumes:
- ./data/mysql:/bitnami/mariadb - ./data/mariadb:/bitnami/mariadb
environment:
ALLOW_EMPTY_PASSWORD: "yes"
MARIADB_ROOT_PASSWORD: ""
MARIADB_DATABASE: ely_accounts
MARIADB_USER: ely_accounts_user
MARIADB_PASSWORD: ely_accounts_password
redis: redis:
image: redis:3.0-alpine image: redis:5.0-alpine
volumes: volumes:
- ./data/redis:/data - ./data/redis:/data
@ -113,33 +118,31 @@ services:
# ], # ],
# ]; # ];
# #
# 2) Clone api/tests/functional.suite.dist.yml into api/test/functional.suite.yml # 2) Uncomment the next 2 services (testdb and testredis):
# and adjust Redis module host value to the "testredis".
#
# 3) Uncomment the next 2 services (testdb and testredis):
# #
# testdb: # testdb:
# image: elyby/accounts/mariadb:local
# build: # build:
# context: . # context: .
# target: db # target: db
# args: # args:
# build_env: dev # build_env: dev
# volumes: # volumes:
# - ./data/mysql-test:/var/lib/mysql # - ./data/mariadb-test:/bitnami/mariadb
# environment: # environment:
# - MYSQL_ALLOW_EMPTY_PASSWORD=yes # ALLOW_EMPTY_PASSWORD: "yes"
# - MYSQL_ROOT_PASSWORD= # MARIADB_ROOT_PASSWORD: ""
# - MYSQL_DATABASE=test # MARIADB_DATABASE: test
# - MYSQL_USER=test # MARIADB_USER: test
# - MYSQL_PASSWORD=test # MARIADB_PASSWORD: test
# #
# testredis: # testredis:
# image: redis:3.0-alpine # image: redis:5.0-alpine
# volumes: # volumes:
# - ./data/redis-test:/data # - ./data/redis-test:/data
# #
# 4) To run migrations on tests database you must execute slightly adjusted # 4) To run migrations on tests' database you must execute slightly adjusted
# migrate command: env YII_ENV=test yii migrate # migrate command: "env YII_ENV=test yii migrate"
phpmyadmin: phpmyadmin:
build: ./docker/phpmyadmin build: ./docker/phpmyadmin
@ -147,14 +150,7 @@ services:
- PMA_ARBITRARY=1 - PMA_ARBITRARY=1
- PMA_USER=root - PMA_USER=root
- PMA_PASSWORD= - PMA_PASSWORD=
- VIRTUAL_HOST=pma.account.ely.by.local # Feel free to adjust this domain
depends_on: depends_on:
- db - db
networks: ports:
- default - 8080:80
- nginx-proxy
networks:
nginx-proxy:
external:
name: nginx-proxy

View File

@ -1,87 +0,0 @@
version: '3.4'
x-logging:
&default-logging
options:
max-size: 50m
services:
web:
image: registry.ely.by/elyby/accounts-nginx:latest
restart: always
depends_on:
- app
- emails-renderer
env_file: .env
volumes:
- ./frontend:/var/www/html/frontend
networks:
- default
- nginx-proxy
logging: *default-logging
app:
image: registry.ely.by/elyby/accounts:latest
restart: always
depends_on:
- db
- redis
env_file: .env
volumes:
- certs-storage:/var/www/html/data/certs
networks:
default:
aliases:
- php
logging: *default-logging
worker:
image: registry.ely.by/elyby/accounts:latest
restart: always
command: ['php', 'yii', 'queue/listen', '-v']
depends_on:
- db
- redis
env_file: .env
logging: *default-logging
cron:
image: registry.ely.by/elyby/accounts:latest
restart: always
command: ['crond', '-s', '/etc/cron.d', '-f', '-L', '/var/log/cron.log']
stop_signal: SIGKILL
depends_on:
- db
- redis
env_file: .env
logging: *default-logging
emails-renderer:
image: elyby/emails-renderer:dev
logging: *default-logging
db:
image: registry.ely.by/elyby/accounts-mariadb:latest
restart: always
env_file: .env
volumes:
- ./data/mysql:/bitnami/mariadb
redis:
image: redis:3.0-alpine
restart: always
volumes:
- ./data/redis:/data
volumes:
certs-storage:
driver: local
driver_opts:
type: none
device: $PWD/data/certs
o: bind
networks:
nginx-proxy:
external:
name: nginx-proxy