@laravel_pro

Страница 1433 из 2014
Alexander
02.06.2018
19:25:48
На практике оказалось что мускуль, нгинкс, апач конечно могут быть в этой "виртуалке" но это разные контейнеры. И это отстрелило крышу. Мое приложение это один контейнер, веб сервер это другой. Веб сервисов, в теории, может быть 100500, но как они будут там работать, если веб сервер один?

Попутно вопрос. Вот у меня приложение на ларке зашифровано кубом. И это совсем не публичное приложение. От слова вообще. Я его продаю желающим за не 5 копеек. Насколько это дружит с идеологией докера? Если я правильно понял, имадж моего приложения должен быть публичным и он по сути содержит все мое приложение?

Ну т.е. какбы понятно что у меня есть ключи и без ключей приложение не стартует, но по сути я дают доступ для взлома всем желающим, а не тем кто купил его за денежку, тем самым увеличивая вероятность успешного взлома

Google
Alexander
02.06.2018
19:31:14
докер это про файлы приложения. Они зашифрованы мной.

Антон
02.06.2018
19:31:16
если ты стартуешь свое приложение без докера, то что то меняется?

докер не расшифровывает их. он это контейнеризация сервисов инфраструктуры

во вторых он позволяет версионировать твою инфраструктуру

Ivan
02.06.2018
19:33:09
Ну т.е. какбы понятно что у меня есть ключи и без ключей приложение не стартует, но по сути я дают доступ для взлома всем желающим, а не тем кто купил его за денежку, тем самым увеличивая вероятность успешного взлома
не надо свое приложение засовывать в публичный докер контейнер в докере ты просто пишешь конфиг, какие контейнеры надо запустить (ngix, mysql и др) и они скачиываются и поднимаются

Alexander
02.06.2018
19:33:45
ну вот как бы отсюда вопрос. каким боком я могу использовать докер лично в моем случае?

т.е. получается что докер мне нужен для того, чтобы поднять нужные приложения

нужных версий

и свое приложение я пропихиваю в определенный каталог и юзаю его

так?

Ivan
02.06.2018
19:34:18
написать конфиг который поднимет нужные сервисы для приложения

laradoc - посмотри что это такое

тебе нужна его "обрезаная версия" что бы продавать клиентам

Google
Ivan
02.06.2018
19:35:41
т.е. качаеш laradoс - смотришь какие контейнеры не нужны (выпиливаешь их) и все конфигурируешь под свое приложени, в итоге рабочий продукт

Антон
02.06.2018
19:35:47
так?
если ты продаешь что то платное, то продавай вместе с инфраструктурой.

а она будет на твоей стороне

Ivan
02.06.2018
19:36:54
это не годится для прода. там много лишнего
выпиливай что тебе не нужно, кто запрещает редактирвоать то

Антон
02.06.2018
19:37:21
выпилить в 90% случаев придется чуть меньше чем полностью. проще свое написать

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

перед использованием докера на проде стоит сначала подумать нужен ли он. Если кажется что все решается без него, значит не нужен

Denis
02.06.2018
19:41:33
Ок, можно я тупые вопросы по SleepingOwl позадаю?

Alexander
02.06.2018
19:42:41
Я правильно понимаю, что нужно под каждый отдельный процесс конфигурировать свой контейнер? nginx = контейнер php + laravel = контейнер mysql = контейнер rabbitmq = контейнер supervisor = контейнер ?

Антон
02.06.2018
19:42:44
вот мой реальный кейс. у меня приложение на сервере которое использует mysql 5.5, а мне надо обновиться на 5.7. Но я не могу остановить приложение. Я поднимаю докер контейнер с 5.7, мигрирую туда данные. Делаю репликацию, и когда данные становятся синхронны переключаю настройки приложения на докер. Практически нулевой простой

Denis
02.06.2018
19:43:59
Если кому не впадлу ответить :)

Alexander
02.06.2018
19:44:08
Как в таком случае поставлять обновления на продакшн? Сейчас вручную арендую серверы и накатываю необходимый софт, потом через deployer заливаю и поставляю им же обновления

Alexander
02.06.2018
19:45:18
но ведь там все в своей виртуализации

Антон
02.06.2018
19:45:20
у нас вообще ансибл все делает. там плейбуки с тасками

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

Alexander
02.06.2018
19:46:12
деплоер цепляется к серверу по ssh и тянет обновления с гита, накатывает потом необходимые заранее прописанные команды и все работает

Google
Alexander
02.06.2018
19:46:13
Alexander
02.06.2018
19:46:57
в случае с докером надо будет научить деплоер цепляться к контейнеру приложения и потом туда тянуть всё это

Alexander
02.06.2018
19:47:43
вот и предоставляй клиенту облачное решение
не все клиенты хотят облако. беспокоятся за свои данные, к которым я имею в этом случае доступ

Сергей
02.06.2018
19:54:57
подскажите как оптимизировать запрос такой можно? уж очень сильно олго отрабатывает( $current_task = Lesson::find($this->id); $current_lesson = $current_task->section; $current_level = $current_lesson->level; $next_task = $current_lesson->lessons() ->where('sort', '>', $current_task->sort) ->first();

.
02.06.2018
20:03:47
Максимальное количество одновременных подключений (max_user_connections) - 30 ....... что это означает ? это только 30 людей могут быть в сайте одновременно ,

Сергей
02.06.2018
20:03:51
дебаг панель говорит что долго?
Ну я удаляю код и на 10 сек быстрее апи приходит)

дебаг панель говорит что долго?
именно первые 3 строки тормозят жестко(

Антон
02.06.2018
20:05:19
$current_task = Lesson::with('section.level')->where('id', $this->id)->get(); получить сразу

Антон
02.06.2018
20:06:11
или даже first

Да через ssh
ну так поднять в докере ssh и стучаться так же к нему деплоером

Alexander
02.06.2018
20:06:50
херасе какие вещи можно мутить))

Сергей
02.06.2018
20:09:21
Антон
02.06.2018
20:10:03
а как его видеть если у меня апи только)
тогда поставь в мускуле дебаг медленных запросов

Google
Сергей
02.06.2018
20:10:16
Антон
02.06.2018
20:10:21
ну и попробуй мой вариант, с помощью ленивой загрузки.

Сергей
02.06.2018
20:10:59
гугл
это именно в мускуле или в фреймворке?

Антон
02.06.2018
20:11:08
именно в мускуле

Антон
02.06.2018
20:13:55
$next_task = $current_lesson->lessons() ->where('sort', '>', $current_task->sort) ->first(); уверен что не здесь?

Сергей
02.06.2018
20:14:32
$next_task = $current_lesson->lessons() ->where('sort', '>', $current_task->sort) ->first(); уверен что не здесь?
ну я удалял по конструкции кода и когда дошел до тех строк, то там по 3-4 секунды сразу уходило)

$next_task = $current_lesson->lessons() ->where('sort', '>', $current_task->sort) ->first(); уверен что не здесь?
просто этот код выпоняется при каждом запросе сущности)

а их 150 в моем тесте

Антон
02.06.2018
20:16:16
замечательно

Сергей
02.06.2018
20:16:41
замечательно
ну есть такое)

Антон
02.06.2018
20:16:57
я бы задумался над тем что что то не так если бы общее количество запросов было более 30

а у тебя сколько?

Сергей
02.06.2018
20:18:05
не правильно наверно выразился) у меня выводится 150 сущностей и каждая сущность выполняет этот код для определения id слудующей за ней сущности)

последовательность не по id просто должна быть

Антон
02.06.2018
20:18:59
а 150 сущностей одним запросом выбираешь?

Сергей
02.06.2018
20:19:36
Да

Google
Сергей
02.06.2018
20:19:49
а 150 сущностей одним запросом выбираешь?
return TaskResourceStatus::collection(Lesson::all()->sortBy('sort'));

Антон
02.06.2018
20:20:09
т.е. у тебя проблема получения для каждой сущности ее следующей

Сергей
02.06.2018
20:20:40
т.е. у тебя проблема получения для каждой сущности ее следующей
я вынес логику получения слудующего id в класс отдельный и каждый раз вызываю при формировании json через Resource

т.е. у тебя проблема получения для каждой сущности ее следующей
я вот думаю если вынести эту логику в модель, то может быстрее будет?)

Антон
02.06.2018
20:24:21
я вот думаю если вынести эту логику в модель, то может быстрее будет?)
дело же в sql, я хз что у тебя за логика выбора следующего

и почему ты так много сразу получаешь записей

Сергей
02.06.2018
20:25:35
дело же в sql, я хз что у тебя за логика выбора следующего
у меня берется поле сорт текущего и из всего списка берется просто первый который больше настоящего по значению)

Антон
02.06.2018
20:27:10
ну как будто бы да

Alexander
02.06.2018
20:31:43
Попробую вмешаться: а может быть можно подтянуть необходимые сущности через appends? У меня это довольно быстро работает

Сергей
02.06.2018
20:34:59
Попробую вмешаться: а может быть можно подтянуть необходимые сущности через appends? У меня это довольно быстро работает
Да здесь больше трабла в том что это вызывается каждый раз при формировании объекта)

Антон
02.06.2018
20:35:28
но кажется что это не поможет

dev
02.06.2018
20:36:30
может перепиши кусок кода и все

Сергей
02.06.2018
20:36:34
так ты не делай запрос там, вынеси
у меня запрос вынесен в другой класс) я ейчас только понял что 150 раз он делает запрос в базу с 150 сущностями и проходится заного

dev
02.06.2018
20:36:44
выгребай сразу все лесонсы с сексиями и задачами

Антон
02.06.2018
20:40:10
все?

а если у него 10 миллионов записей. ему надо 150 выбрать, и для каждого из 150 связанный по какому то критерию

видимо он расписание состовляет какое то по дням. Я бы вообще тогда вводил новую сущность Day

StudyDay::with('lessons')->where(['code', '=', 'monday'])->get();

Страница 1433 из 2014