mirror of
https://github.com/elyby/accounts.git
synced 2024-11-30 02:32:26 +05:30
Merge branch 'access_tokens_auto_cleanup' into develop
This commit is contained in:
commit
e0c6787e16
@ -1,4 +1,8 @@
|
||||
FROM registry.ely.by/elyby/accounts-php:1.0.0
|
||||
FROM registry.ely.by/elyby/accounts-php:1.1.0
|
||||
|
||||
# Вносим конфигурации для крона и воркеров
|
||||
COPY docker/cron/* /etc/cron.d/
|
||||
COPY docker/supervisor/* /etc/supervisor/conf.d/
|
||||
|
||||
COPY id_rsa /root/.ssh/id_rsa
|
||||
|
||||
|
@ -1,4 +1,8 @@
|
||||
FROM registry.ely.by/elyby/accounts-php:1.0.0-dev
|
||||
FROM registry.ely.by/elyby/accounts-php:1.1.0-dev
|
||||
|
||||
# Вносим конфигурации для крона и воркеров
|
||||
COPY docker/cron/* /etc/cron.d/
|
||||
COPY docker/supervisor/* /etc/supervisor/conf.d/
|
||||
|
||||
COPY id_rsa /root/.ssh/id_rsa
|
||||
|
||||
|
54
README.md
54
README.md
@ -1,6 +1,6 @@
|
||||
# Accounts Ely.by
|
||||
|
||||
## Развёртывание dev
|
||||
## Развёртывание dev [backend]
|
||||
|
||||
Предварительно нужно установить [git](https://git-scm.com/downloads),
|
||||
[docker](https://docs.docker.com/engine/installation/) и его
|
||||
@ -15,8 +15,8 @@
|
||||
За тем сливаем репозиторий:
|
||||
|
||||
```sh
|
||||
git clone git@gitlab.com:elyby/account.git account.ely.by
|
||||
cd account.ely.by.local
|
||||
git clone git@gitlab.ely.by:elyby/accounts.git account.ely.by
|
||||
cd account.ely.by
|
||||
```
|
||||
|
||||
Далее нужно создать `.env`, `docker-compose.yml` и `id_rsa` файлы:
|
||||
@ -27,12 +27,12 @@ cp docker-compose.dev.yml docker-compose.yml
|
||||
cp ~/.ssh/id_rsa id_rsa # Использовать ссылку нельзя
|
||||
```
|
||||
|
||||
Касательно файла id_rsa: часть зависимостей находятся в наших приватных репозиториях, получить
|
||||
**Касательно файла id_rsa**: часть зависимостей находятся в наших приватных репозиториях, получить
|
||||
доступ куда можно только в том случае, если в контейнере окажется ключ, который имеет доступ к этим
|
||||
репозиториям.
|
||||
|
||||
Все вышеперечисленные файла находятся под gitignore, так что с полученными файлами можно произвести
|
||||
все необходимые манипуляции под конкретный кейс использования. **В файле `.env` обязательно следует
|
||||
Все вышеперечисленные файлы находятся под gitignore, так что с конечными файлами можно произвести
|
||||
все необходимые манипуляции под конкретную задачу разработки. **В файле `.env` обязательно следует
|
||||
задать `JWT_USER_SECRET`, иначе авторизация на бекенде не заработает.**
|
||||
|
||||
После этого просто выполняем старт всех контейнеров:
|
||||
@ -41,10 +41,50 @@ cp ~/.ssh/id_rsa id_rsa # Использовать ссылку нельзя
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
Они автоматически сбилдятся и начнут свою работу.
|
||||
Контейнеры автоматически сбилдятся и начнут свою работу.
|
||||
|
||||
## Развёртывание dev [frontend]
|
||||
|
||||
Чтобы поднять сборку frontend приложения, необходимо иметь установленный в системе [Node.js](https://nodejs.org)
|
||||
версии 5.x или 6.x, а так же npm 3-ей версии (`npm i -g npm` для обновления).
|
||||
|
||||
За тем переходим в папку `frontend` и устанавливаем зависимости:
|
||||
|
||||
```sh
|
||||
cd frontend
|
||||
npm i
|
||||
```
|
||||
|
||||
После того, как все зависимости будут установлены, можно поднять dev-сервер. Здесь есть 2 пути: можно, следуя
|
||||
инструкции выше, поднять backend на своей машине через Docker. Если же разработка не привязывается к специфичной
|
||||
версии backend, то более быстрым и удобным способ будет использовать наш dev-сервер, расположенный под адресу
|
||||
https://dev.account.ely.by.
|
||||
|
||||
В любом из случаев необходимо в папке `frontend/config` скопировать файл `template.env.js` в `env.js` (находится
|
||||
под .gitignore) и указать в параметре `apiHost` или свой локальный сервер (тот хост, что был указан в .env
|
||||
как `VIRTUAL_HOST`), или указав просто `https://dev.account.ely.by`.
|
||||
|
||||
После того, как это будет сделано, запускаем dev-сервер (находясь в папке frontend):
|
||||
|
||||
```
|
||||
npm start
|
||||
```
|
||||
|
||||
dev-сервер поднимется на 8080 порту и будет доступен по адресу http://localhost:8080.
|
||||
|
||||
### Как влезть в работающий контейнер
|
||||
|
||||
Начиная с версии docker-compose 1.9.0, появилась команда `docker-compose exec`, которая позволяет выполнить
|
||||
на работающем контейнере произвольную команду, основываясь на имени сервиса в compose файле.
|
||||
|
||||
```
|
||||
docker-compose exec app bash
|
||||
```
|
||||
|
||||
------------------------
|
||||
|
||||
_// Старый вариант_
|
||||
|
||||
Сперва, с помощью команды `docker ps` мы увидим все запущенные контейнеры. Нас интересуют значения
|
||||
из первой колонки CONTAINER ID или NAMES. Узнать, чему они соответствуют можно прочитав название IMAGE
|
||||
из 2 колонки. Чтобы выполнить команду внутри работабщего контейнера, нужно выполнить:
|
||||
|
22
console/controllers/CleanupController.php
Normal file
22
console/controllers/CleanupController.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
namespace console\controllers;
|
||||
|
||||
use common\models\OauthAccessToken;
|
||||
use yii\console\Controller;
|
||||
|
||||
class CleanupController extends Controller {
|
||||
|
||||
public function actionAccessTokens() {
|
||||
$accessTokens = OauthAccessToken::find()
|
||||
->andWhere(['<', 'expire_time', time()])
|
||||
->each(1000);
|
||||
|
||||
foreach($accessTokens as $token) {
|
||||
/** @var OauthAccessToken $token */
|
||||
$token->delete();
|
||||
}
|
||||
|
||||
return self::EXIT_CODE_NORMAL;
|
||||
}
|
||||
|
||||
}
|
2
docker/cron/cleanup
Normal file
2
docker/cron/cleanup
Normal file
@ -0,0 +1,2 @@
|
||||
# https://crontab.guru/every-hour
|
||||
0 * * * * php /var/www/html/yii cleanup/access-tokens >/dev/null 2>&1
|
@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -n "$API_TOKEN" ]
|
||||
then
|
||||
php /usr/local/bin/composer.phar config -g github-oauth.github.com $API_TOKEN
|
||||
fi
|
||||
|
||||
exec php /usr/local/bin/composer.phar "$@"
|
@ -1,38 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd /var/www/html
|
||||
|
||||
if [ "$1" = "bash" ] || [ "$1" = "composer" ]
|
||||
then
|
||||
exec "$@"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Переносим vendor, если его нету или он изменился (или затёрся силами volume)
|
||||
if ! cmp -s ./../vendor/autoload.php ./vendor/autoload.php
|
||||
then
|
||||
echo "vendor have diffs..."
|
||||
echo "removing exists vendor"
|
||||
rm -rf ./vendor
|
||||
echo "copying new one"
|
||||
cp -r ./../vendor ./vendor
|
||||
fi
|
||||
|
||||
# Переносим dist, если его нету или он изменился (или затёрся силами volume)
|
||||
if ! cmp -s ./../dist/index.html ./frontend/dist/index.html
|
||||
then
|
||||
echo "frontend dist have diffs..."
|
||||
echo "removing exists dist"
|
||||
rm -rf ./frontend/dist
|
||||
echo "copying new one"
|
||||
cp -r ./../dist ./frontend/dist
|
||||
fi
|
||||
|
||||
if [ "$YII_ENV" != "test" ]
|
||||
then
|
||||
wait-for-it db:3306 -s -- "php /var/www/html/yii migrate/up --interactive=0"
|
||||
else
|
||||
wait-for-it testdb:3306 -s -- "php /var/www/html/tests/codeception/bin/yii migrate/up --interactive=0"
|
||||
fi
|
||||
|
||||
exec "$@"
|
@ -1,2 +0,0 @@
|
||||
error_reporting = E_ALL;
|
||||
display_errors = On;
|
@ -1,36 +0,0 @@
|
||||
[supervisord]
|
||||
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
|
||||
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
|
||||
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
|
||||
loglevel=info ; (log level;default info; others: debug,warn,trace)
|
||||
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
|
||||
nodaemon=false ; (start in foreground if true;default false)
|
||||
minfds=1024 ; (min. avail startup file descriptors;default 1024)
|
||||
minprocs=200 ; (min. avail process descriptors;default 200)
|
||||
user=root
|
||||
|
||||
; the below section must remain in the config file for RPC
|
||||
; (supervisorctl/web interface) to work, additional interfaces may be
|
||||
; added by defining them in separate rpcinterface: sections
|
||||
[rpcinterface:supervisor]
|
||||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||||
|
||||
[supervisorctl]
|
||||
serverurl=unix:///dev/shm/supervisor.sock ; use a unix:// URL for a unix socket
|
||||
|
||||
[program:php-fpm]
|
||||
command=php-fpm
|
||||
autostart=true
|
||||
autorestart=true
|
||||
priority=5
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
[program:account-queue-worker]
|
||||
directory=/var/www/html
|
||||
command=wait-for-it rabbitmq:5672 -- php yii account-queue
|
||||
autostart=true
|
||||
autorestart=true
|
||||
priority=10
|
6
docker/supervisor/account-queue-worker.conf
Normal file
6
docker/supervisor/account-queue-worker.conf
Normal file
@ -0,0 +1,6 @@
|
||||
[program:account-queue-worker]
|
||||
directory=/var/www/html
|
||||
command=wait-for-it rabbitmq:5672 -- php yii account-queue
|
||||
autostart=true
|
||||
autorestart=true
|
||||
priority=10
|
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
namespace tests\codeception\common\fixtures;
|
||||
|
||||
use common\models\OauthAccessToken;
|
||||
use yii\test\ActiveFixture;
|
||||
|
||||
class OauthAccessTokenFixture extends ActiveFixture {
|
||||
|
||||
public $modelClass = OauthAccessToken::class;
|
||||
|
||||
public $dataFile = '@tests/codeception/common/fixtures/data/oauth-access-tokens.php';
|
||||
|
||||
public $depends = [
|
||||
OauthSessionFixture::class,
|
||||
];
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
return [
|
||||
'admin-ely' => [
|
||||
'access_token' => '07541285-831e-1e47-e314-b950309a6fca',
|
||||
'session_id' => 1,
|
||||
'expire_time' => time() + 3600,
|
||||
],
|
||||
'admin-ely-expired' => [
|
||||
'access_token' => '2977ec21-3022-96f8-544db-2e1df936908',
|
||||
'session_id' => 1,
|
||||
'expire_time' => time() - 3600,
|
||||
],
|
||||
];
|
@ -6,7 +6,7 @@ return [
|
||||
'name' => 'Ely.by',
|
||||
'description' => 'Всем знакомое елуби',
|
||||
'redirect_uri' => 'http://ely.by',
|
||||
'account_id' => NULL,
|
||||
'account_id' => null,
|
||||
'is_trusted' => 0,
|
||||
'created_at' => 1455309271,
|
||||
],
|
||||
@ -16,7 +16,7 @@ return [
|
||||
'name' => 'TLauncher',
|
||||
'description' => 'Лучший альтернативный лаунчер для Minecraft с большим количеством версий и их модификаций, а также возмоностью входа как с лицензионным аккаунтом, так и без него.',
|
||||
'redirect_uri' => '',
|
||||
'account_id' => NULL,
|
||||
'account_id' => null,
|
||||
'is_trusted' => 0,
|
||||
'created_at' => 1455318468,
|
||||
],
|
||||
|
@ -1,3 +1,10 @@
|
||||
<?php
|
||||
return [
|
||||
'admin-ely' => [
|
||||
'id' => 1,
|
||||
'owner_type' => 'user',
|
||||
'owner_id' => 1,
|
||||
'client_id' => 'ely',
|
||||
'client_redirect_uri' => 'http://ely.by/authorization/oauth',
|
||||
],
|
||||
];
|
||||
|
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
namespace codeception\console\unit\controllers;
|
||||
|
||||
use common\models\OauthAccessToken;
|
||||
use console\controllers\CleanupController;
|
||||
use tests\codeception\common\fixtures\OauthAccessTokenFixture;
|
||||
use tests\codeception\console\unit\TestCase;
|
||||
use Yii;
|
||||
|
||||
class CleanupControllerTest extends TestCase {
|
||||
|
||||
public function _fixtures() {
|
||||
return [
|
||||
'accessTokens' => OauthAccessTokenFixture::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function testActionAccessTokens() {
|
||||
/** @var OauthAccessToken $validAccessToken */
|
||||
$validAccessToken = $this->tester->grabFixture('accessTokens', 'admin-ely');
|
||||
/** @var OauthAccessToken $expiredAccessToken */
|
||||
$expiredAccessToken = $this->tester->grabFixture('accessTokens', 'admin-ely-expired');
|
||||
|
||||
$controller = new CleanupController('cleanup', Yii::$app);
|
||||
$this->assertEquals(0, $controller->actionAccessTokens());
|
||||
|
||||
$this->tester->canSeeRecord(OauthAccessToken::class, ['access_token' => $validAccessToken->access_token]);
|
||||
$this->tester->cantSeeRecord(OauthAccessToken::class, ['access_token' => $expiredAccessToken->access_token]);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user