• Как ускорить работу вентилятора Macbook Air в Linux Mint?

    @kiranananda
    Спустя много времени, нашел решение для своего air https://github.com/linux-on-mac/mbpfan
    Ответ написан
    Комментировать
  • Lenovo B570e debian 11 и uefi?

    @kiranananda Автор вопроса
    Решение таки было поставить убунту. В моем случае самый простой вариант...
    Ответ написан
    Комментировать
  • Получить новый размер после вращение изображения?

    @kiranananda Автор вопроса
    Вообщем решил просто так :). Не знаю уж насколько это коряво но работает :)
    let na = Math.abs(angle)
            if (na > 90) na = 90 - (na - 90)
            let an = Math.PI * na / 180
    
            let nwl = width * Math.cos(an)
            let nhl = width * Math.sin(an)
            let nhu = height * Math.cos(an)
            let nwr = height * Math.sin(an)
    
            return [nwl + nwr, nhu + nhl]
    Ответ написан
    Комментировать
  • Apache php-fpm изолирование сайтов?

    @kiranananda Автор вопроса
    Для себя все таки решил через докер. По мне более надежно и гораздо удобнее работать с фтп. Каждый сайт отдельный контейнер. Думаю теперь можно спать спокойно. Заодно и почтовик туда засунул, что бы мололи...
    Ответ написан
  • Linux два канала не работает mark?

    @kiranananda Автор вопроса
    Вся эта тема заработала вот после такого извращения. Пришлось добавить дефолт в основную таблицу маршрутизации на резервный канал, тобишь продублировать его...

    default via 1.1.1.1 table 100                                                                                                       
    default via 1.1.1.1 metric 200
    Ответ написан
    Комментировать
  • Exim и несколько внешних адресов, какой выберет?

    @kiranananda Автор вопроса
    Всем спасибо за ответы!

    Сейчас взял да и проверил указав имя второго IP (vrrp). То есть он уже отличен от адреса отправителя. Все отлично прошло. Гугль, Маил, Яндекс. Единственно при тесте выдал ошибку "No connectable MX" . Это один из проверяльщиков, не знаю насколько это актуально сейчас ибо у меня только отправка, может потом сделаю MX на яндексе...
    Ответ написан
    Комментировать
  • Как правильно реализовать кэширование модели для rules?

    @kiranananda Автор вопроса
    Реализовал так, поправьте если можно проще или правильнее...
    Сервис провайдер
    class DriverLoginServiceProvider extends ServiceProvider
    {
    	// protected $defer = true;
    	
        public function register()
        {
        	$this->app->singleton(DriverLogin::class, function ($app) {
    	    	return DriverLogin::where('phone', Request::input('phone', 'none'))->first();
    		});
        }
    
        public function provides()
        {
            return [DriverLogin::class];
        }    
    }

    Контроллер
    public function loginCheckPhone(CheckDriver $request, DriverLogin $driver)
        {
        	// Проверяем можно ли делать повторную отправку.
        	if ( ($checkSend = Sms::checkSend($driver->verify_code)) !== true ) {
        		return response()->json( $checkSend, 403);
        	}
    
        	$driver->verify_code = Sms::send($driver->phone, 'Ваш код авторизации в личном кабинете: %code');
    
        	$driver->save();
        }

    Самое правило валидации
    public function passes($attribute, $value)
        {	
           return (app()->get(DriverLogin::class)) ? true : false;
        }

    Наследовение оригинальной модели. У меня 2 сервис провайдера, один при входе, другой уже когда человек авторизовался. Вот для этого наследование.
    <?php
    
    namespace App\Models;
    
    class DriverLogin extends \Backend\Driver\Models\Driver
    {
    
    }
    
    ?>


    В итоге эта схема чуть сложна для данной ситуации, в реале сделал просто так вот

    <?php
    
    namespace App\Services;
    
    use Backend\Driver\Models\Driver;
    use Request;
    
    class DriverLogin
    {
    	private static $model = null;
    
    	public static function get() 
    	{
    		if (DriverLogin::$model === null ) {
    			$phone = Request::input('phone', '');
    			DriverLogin::$model = (iconv_strlen($phone) != 12) 
    				? false 
    				: Driver::where('phone', $phone)->first();
    		}
        	return DriverLogin::$model;
      	}
    }
    
    ?>


    И из нужных мест получаю резултат запроса...
    Ответ написан
  • Mysql отстает реплика или почему-то сервер работает очень медленно?

    @kiranananda Автор вопроса
    Все решил. Проблема была в медленной скорости записи на диск. Снес линух пересобрал рэйд, установил на этот раз дебиан 10 и все стало отлично :).

    Всем кто помогал огромное спасибо!
    Ответ написан
    Комментировать
  • Как в nomad передать каталог с конфигурацией для задачи?

    @kiranananda Автор вопроса
    В данный момент добавили конфиги в докер Image. Ну и наследование имаджей от базовой соответсвенно.
    Ответ написан
    Комментировать
  • Docker swarm overlay и конец сварму :(?

    @kiranananda Автор вопроса
    Еще добавлю consul + nomad. Тоже хорошо
    Ответ написан
    Комментировать
  • Docker registry авторизация или фильтрация по ip для push?

    @kiranananda Автор вопроса
    Вообщем то решил вопрос.

    Для начала мы поднимаем nginx и в нем создаем 2 секции server. Одна секция на 5000 порту, вторая на 5001.
    В первой секции мы обрубаем все запросы кроме GET и HEAD, это будет порт на получение образов внутри кластера. Во второй же секции мы добавляем авторизацию. я выложу готовые конфиги вдруг кому пригодится...

    user nginx;
    
    events {
        worker_connections  1024;
    }
    
    http {
    
      upstream docker-registry {
        server registry:5000;
      }
    
      ## Set a variable to help us decide if we need to add the
      ## 'Docker-Distribution-Api-Version' header.  
      ## The registry always sets this header.
      ## In the case of nginx performing auth, the header is unset
      ## since nginx is auth-ing before proxying.   
      map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
        '' 'registry/2.0';
      }
    
    #------------------------READ ONLY ACCESS-------------------------
      server {
        listen 5000;
    
        client_max_body_size 0;
    
        chunked_transfer_encoding on;
    
        location /v2/ {
          if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
            return 404;
          }
    
          #Доступ только на чтение
          if ($request_method !~* ^(GET|HEAD)$ ) {  
            return 403;
          }
    
          add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
    
          proxy_pass                          http://registry:5000;
          proxy_set_header  Host              $http_host;   # required for docker client's sake
          proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
          proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
          proxy_set_header  X-Forwarded-Proto $scheme;
          proxy_read_timeout                  900;  
        }
      }
    
    
    #---------------------------WRITE ACCESS-----------------------------
      server {
        listen 5001;
        client_max_body_size 0;
        chunked_transfer_encoding on;
    
        location /v2/ {
          if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
            return 404;
          }
    
          auth_basic "Registry realm";
          auth_basic_user_file /run/secrets/passwd; 
    
          allow 172.18.0.1;
          deny  all;
    
          add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
    
          proxy_pass                          http://registry:5000;
          proxy_set_header  Host              $http_host;   # required for docker client's sake
          proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
          proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
          proxy_set_header  X-Forwarded-Proto $scheme;
          proxy_read_timeout                  900;  
        }
      }
    }


    И сам docker-compose.yml

    version: '3.4'
    services:
      nginx:
        image: nginx
        ports:
          - target: 5000
            published: 5000
            mode: host
    
          - target: 5001
            published: 5001
            mode: host
        configs:
          - source: nginx
            target: /etc/nginx/nginx.conf
        secrets:
          - passwd
    
        networks:
          registry_network:
    
        deploy:
            replicas: 1
            resources:
               limits:
                  cpus: '0.25'
                  memory: 256M
            placement:
               constraints: [node.labels.registry == true]
        logging:
            driver: syslog
            options:
                tag: registry-nginx
                syslog-address: "udp://10.92.60.151:514"
    
      registry:
        image: registry:2
        networks:
          registry_network:
            aliases:
              - registry
        volumes:
          - /srv/registry:/var/lib/registry   
        deploy:
              replicas: 1
              resources:
                limits:
                  cpus: '0.25'
                  memory: 256M
              placement:
                constraints: [node.labels.registry == true]
        logging:
            driver: syslog
            options:
                tag: registry
                syslog-address: "udp://10.92.60.151:514"
    
    secrets:
      passwd:
        file: ./nginx/passwd
    
    configs:
      nginx:
        file: ./nginx/nginx.conf
    
    networks:
      registry_network:
        driver: overlay


    Ну и не забываем в конфиге докера "insecure-registries" : ["10.92.60.151:5001"]

    Ах да, так же удалось не использовать лишние сертификаты, в моем случае.

    Для ввода пароля используем команду docker login 10.92.60.151:5001

    Теперь если есть желание у 5000 порта можно убрать mode: host и в имаджах указывать 127.0.0.1:5000, в этом случае не нужно на нодах делать запись "insecure-registries" : ["10.92.60.151:5000"]
    Ответ написан
    Комментировать
  • Docker блокировка трафика, как сделать?

    @kiranananda Автор вопроса
    А вроде разобрался, самый быстрый способ, написать сюда и сразу приходят идеи :)...

    Хитриые dnat-ы и прочие штуки, плюс еще раз прочтение доков. Вообщем фильтровать надо в цепочке
    DOCKER-USER . Тогда все гуд :)
    Ответ написан
    Комментировать
  • Docker swarm контейнер рестарт?

    @kiranananda Автор вопроса
    Эх опять доку не дочитал :)

    #Через какое время по таймауту контейнер убить
        stop_grace_period: 3m
        #Сигнал для убийства сервиса, в данном случае апач будет ждать завершения сессий.
        stop_signal: WINCH
    Ответ написан
    Комментировать
  • Docker swarm не доступа по портам?

    @kiranananda Автор вопроса
    Ответ найден, убил часов 5. Решил заново виртуалки накатить. Думаю вдруг что не так. И так и было.
    Для смены имени хоста в убунту во всех доках написано править файл /etc/cloud/cloud.cfg в частности строчку
    preserve_hostname: false
    изменить на true.
    После этого все работать перестает. Досконально не разбирался с этим, но для решения проблемы достаточно :)...
    Ответ написан
    Комментировать
  • Js pushState странности в chrome?

    @kiranananda Автор вопроса
    Проблемку таки удалось победить, вчера что то совсем не додумался. Но ответ может помочь кому нибудь.

    В ларавел в контроллере идет проверка на тип запроса и если запрос аjax, то возвращается массив, иначе возвращаем html код. Выглядит это так

    if ( Request::ajax() ) return $this->dataReturn;
    
            return view($templite, [ 'data' => $this->dataReturn ]);


    Но вот браузеры по разным на то причинам, может кэш последнего запроса по Ajax с такими же параметры заставляет хром отправить запрос с заголовком XMLHttpRequest. Может еще как. На самом деле в сафари тоже появлялись проблемки, но уже в другом :).
    Ну думаю ладно, не хотите по-хорошему добавлю к урлу параметр и в коде уже буду на него смотреть, а не на заголовки.

    Делаю так
    axios.get(url, { 
                        params: {
                            _ajax: true
                        }
                    })


    Ну думаю дай посмотрю в консоль, а оно все заработало. Видимо, когда я добавил параметр, запрос пошел уже не из кэша браузера со всеми заголовками, а тот который нужен и проверка заголовка на Ajax заработала... Даже не пришлось проверять на параметр _ajax
    Ответ написан
    Комментировать
  • Memcached кластер в docker?

    @kiranananda Автор вопроса
    Вроде появилось решение внезапно :)...
    Если в докере я поднимаю 2 мемкэша с разными именами. И цепляюсь к ним из приложения по именам. В таком случае при падении одной из нод на которых есть мемкэш, он просто мигрирует на другую вообщем то и все. Просто честно говоря я не крутил этого всего, пока в теории. Но вроде должно пройти... :)
    Ответ написан
  • Laravel mail inline img?

    @kiranananda Автор вопроса
    Решение таки найдено на просторах инета :) . Нужно в конце вызвать код $this->view([], []); Тога функция $message->setBody() начнет работать. Не знаю насколько это вообще где то документировано и не поломают ли разработчики в дальнейшем этот код, но пока работает :)
    Ответ написан
    Комментировать
  • Почему vue-router удаляет компонент при переходе?

    @kiranananda Автор вопроса
    Куда то делся ответ :). Да keep-alive помог. Рыл не в том месте :) Спасибо!
    Ответ написан
  • Laravel mail attach и кодировки имени файла?

    @kiranananda Автор вопроса
    Вообщем косяк в том, что даже если из под мака отправить себе самому письмо с русскими именами файлов, то кодировка тоже корявая. Но тот же яндекс веб клиент отправляет и имена файлов по русски... Но он немного по другому заголовки делает.
    Но переписывать библиотеку совсем нет желания, так что пока остановились на латинице...
    Ответ написан
    Комментировать
  • Связь между компонентами через vuex?

    @kiranananda Автор вопроса
    Вообщем не стал морочиться, сделал вот так.
    Vue.prototype.$bus = new Vue();
    Соответсвенно код выглядит как то так.
    created () {
                this.$bus.$on('UploadEditFile', this.getData)
            },
            beforeDestroy(){
                this.$bus.$off('UploadEditFile');
            },
            methods: {
                getData(id)
                {
                    $('#UploadEditModal').modal('show');
                     ...............
                }
            }


    А генерация события
    this.$bus.$emit('UploadEditFile', file.id);
    Ответ написан
    Комментировать