• Как настроить адресацию и развёртывание игровых серверов в kubernetes?

    1. Можно использовать service discovery, к примеру, Consul
    2.a Я бы подумал о том, чтобы сделать сервера stateless – состояние хранить во внешней БД (напр. Redis) и подхватывать состояние из него новым инстансом при Rolling Update.
    2.б Другой вариант – Gracefull Shutdown. Перехватив сигнал и настроив достаточно продолжительный grace-period можно добиться тго что сервер дождется завершения сессии и только затем завершится
    Ответ написан
    Комментировать
  • Какой стек использовать для организации деплоймента и кластеризации такого проекта?

    @vitaly_il1
    DevOps Consulting
    1.
    лучше и проще всего
    - дело субъективное. Для меня проще без K8S, но наверняка молодежь скажет что с ним легче.

    Скорее всего хватит одного реального сервера под frontend, одного под api и одного под базу данных (по началу вообще всё на одном сервере будет)

    Если все-таки хочется кластеризации, то наверно все-таки посмотреть на K8S. Его преимущество в том, что архитектура будет очень похожа и на одном реальном сервере сегодня, и на кластере в будущем. Один раз помучаться и настроить ingres - и потом относительно легко можно мигрировать куда-нибудь.
    Если для начала хотим быстро развернуть все на одном сервере - то конечно без, просто поставить nginx, API engine, Database and Redis.

    Кстати, если фронтенд это angular/react и т.п., то проще деплоить их на сервис для статических страниц - S3 и т.д. (если облака рассматриваются).

    2. Надо смотреть на конкретный балансировщик и app server.
    Общая идея такая:
    а) помечаем сервер как неактивный
    б) ждем пока закончатся все сессии
    в) обновляем
    г) возвращаем в балансировщик
    е) переходим к следующему серверу
    Ответ написан
    Комментировать
  • Как организовать внешние ip адреса для виртуальных серверов на домашнем сервере?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Покупка VPS.
    А как вы будете доставлять пакеты, приходящие на ip адрес VPS - на ваш домашний сервер, с помощью NAT или по VPN каналу - дело второе.
    Ответ написан
    Комментировать
  • Как организовать внешние ip адреса для виртуальных серверов на домашнем сервере?

    Вы неправильно ставите вопрос по моему, а правильный вопрос - где бы раздобыть второй "белый" статический адрес в данной конфигурации. А уже когда у вас будет решение этого вопроса, то возникнет вопрос из темы.

    На ум приходит два варианта -
    1. VPS с белым адресом и поднятием VPN сервера, но если бы у вас был VPS, думаю вы бы не задавали такой вопрос.
    2. покупка впн с белым адресом и подключение по нему второй ВМ.
    Ответ написан
    3 комментария
  • Как организовать внешние ip адреса для виртуальных серверов на домашнем сервере?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    заведите себе внешний сервер и поставьте nginx пусть себе ходит к вам
    Ответ написан
    Комментировать
  • Можно ли обойтись без префиксов в именах компонентов Vue.js?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Конечно можно избежать, правила нужны для того чтоб их нарушать.)
    Лично мне нравится называть файлы в kebab-case и в kebab-case же использовать компоненты внутри шаблонов. Просто потому, что это эстетически смотрится куда приятнее и вписывается в структуру html.

    На коллизии можно было бы спокойно плюнуть: если вы назвали свой компонент также как какой-то новомодный html-тэг, о котором вы и не слышали, значит этот тэг вам и не нужен, однако это могло бы поломать сторонние компоненты.
    Я лично просто использую однобуквенный префикс.

    Энфорсить же имена файлов на уровне проекта можно например с помощью плагинов для eslint: eslint-plugin-filenames.

    P.S. Единственное что: даже если вы используете PascalCase для именования компонента - Vue всё равно будет искать также и kebab-case версию, что сделано для удобства. Так что как способ избегания коллизий - это не сработает.
    Ответ написан
    Комментировать
  • Зачем нужен refresh token?

    sarapinit
    @sarapinit
    Точу водой камень
    Определение токена в RFC
    Refresh tokens are credentials used to obtain access tokens. Refresh
    tokens are issued to the client by the authorization server and are
    used to obtain a new access token when the current access token
    becomes invalid or expires, or to obtain additional access tokens
    with identical or narrower scope (access tokens may have a shorter
    lifetime and fewer permissions than authorized by the resource
    owner). Issuing a refresh token is optional at the discretion of the
    authorization server.

    примерно соответствует вашим рассуждениям о нем. Единственное что явно не запрещено повторное использование refresh_token. Обычно это опция которую можно установить для конкретного клиента OAuth2.0.
    Использовать refresh_token в браузере не рекомендуется, потому что нельзя безопасно его хранить. Обычно он используется в десктоп или мобильных приложениях, которые позволяют реализовать защищенное хранение токена.

    https://tools.ietf.org/html/rfc6749#section-1.5
    Ответ написан
    Комментировать
  • Как использовать this в стрелочной функции в typescript?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Бессмысленно указывать тип this для стрелочной функции, потому что ts сам его прекрасно видит - там тупо не может быть никаких вариантов и разночтений: this для стрелочной функции задаётся прямо на месте её создания и принимать никаких иных значений не может.
    В PR вы попутали, там this используется не в стрелочной функции, а в типе свойства.
    Ответ написан
    1 комментарий
  • Как использовать this в стрелочной функции в typescript?

    Xuxicheta
    @Xuxicheta
    инженер
    Судя по данному PR в typescript можно использовать this в стрелочных функциях

    эм.. я может не туда смотрю, но там написано как раз что это бессмысленно. И ни одного примера типизации this в стрелочных нет.
    This formulation is OK because lambda (=>) doesn't bind this, so this comes from the class instead of from the implementing function.


    А вообще можно объявив сначала тип для функции, вот так
    https://www.typescriptlang.org/play/?noImplicitThi...
    Но оно тоже работает криво.
    А зачем вам вообще это понадобилось?
    Ответ написан
    6 комментариев
  • Что использовать вместо http basic auth?

    dimap101
    @dimap101
    ИП, разработка АИС, микроконтроллеры
    А зачем авторизацию на Apache возлагать ? Может проще на бекэнде соорудить (php или еще что у вас) обычную систему авторизации на базе сессий ?

    Хранить пароль в cookie (даже шифрованный) - плохой вариант. Обычно через форму логин/пароль идут на сервер, в ответ сервер создает сессию и в cookie сохраняется номер сессии.
    Ответ написан
    Комментировать
  • Почему возникает ошибка Forbidden You don't have permission to access this resource?

    @dodo512
    Проверить загружен ли mod_proxy_wstunnel.

    //l27.0.0

    Там в трёх строках вместо цифры стоит латинская буква "l".
    Ответ написан
    1 комментарий
  • Как в VSCode увеличить отступ подпапок( и подфайлов) в дереве файлов?

    @yes_body
    Заходи в настройки. В поиске введи "tree indent" и меняй значение
    Ответ написан
    Комментировать
  • Как реализовать анимацию раскрытия элемента в модалку?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Основная фишка — элемент не трансформируется в реальную модалку.
    Сначала вычисляется положение элемента и модалки.
    Далее анимация элемента (положение, размеры)
    И на месте элемента отображается модалка.
    Для большей плавности можно добавить фэйд эффектов. Отобразить модалку сжатую на месте элемента прозрачную. Потом синхронно с элементом анимировать до реального положения. Во время анимации прозрачность модалки увеличивается, прозрачность элемента уменьшается.
    Ответ написан
    Комментировать
  • Как избежать сверхреактивности vuex?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Вы брикпойнты по ресайзу что ли пересчитываете? Это мрак.
    Попробуйте использовать matchMedia
    Такие брикопойнты отлично уживаются с реактивностью. Проверено.

    На примере одного пойнта (в App.mounted()):

    const mqDesktop = window.matchMedia('(min-width: 992px)');
    const mqMobile  = window.matchMedia('(max-width: 991px)');
    mqDesktop.addListener(e => { if (e.matches) this.setBreakpoint('desktop');});
    mqMobile.addListener(e => { if (e.matches) this.setBreakpoint('mobile'); });
    if (mqDesktop.matches) this.setBreakpoint('desktop');
    if (mqMobile.matches) this.setBreakpoint('mobile');


    Здесь this.setBreakpoint() — это мутация вьюкса.
    Ответ написан
    6 комментариев
  • Что случилось с CSS Custom Filters (CSS Shaders)?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Можно загуглить обсуждения того, почему эту технологию в 2014 решили убрать из WebKit. Речь там в основном идет о том, что у CSS Custom Filters были проблемы с безопасностью -> ввели ограничения на их использование -> оказалось, что область применения при таком раскладе очень узкая и по факту они не особо то и нужны -> разработчики хрома остановили разработку на пол года, а в других браузерах по сути и не начинали реализовывать все это. Плюс высказывалась мысль, что лучше сделать набор готовых фильтров. Вот и заглохла идея. На сегодняшний день мы можем использовать WebGL в чистом виде, вне CSS, чтобы решать некоторые из задач, для которых вся эта тема затевалась. Эффекты для картинок можно делать руками, а также есть инструменты вроде HTML-GL, позволяющие накладывать эффекты "как бы на страницу" (там страница с некоторыми ограничениями рендерится в контексте WebGL, ну а дальше все так же, как и с картинками).
    Ответ написан
    Комментировать
  • Безопасно ли использовать секретный поддомен для dev версии проекта?

    ну все просто подобное использую и я
    1.
    делаем маску в nginx для всех дев сайтов
    2. закрываем их паролем
    3. открываем свои айпи
    4. открываем бэкэнды и апи ( дабы автаризация не мешала а пароль там не нужен поскольку файлы и так закрыты)

    пример конфига

    server {
    ######################################################################
    ## Server configuration
    ######################################################################
            listen *:80;
            server_name 1nnm.ru www.1nnm.ru  ;
            root /var/www/1nnm.ru/web;
    
    
    ######################################################################
    ## Enable gzip for proxied requests and static files
    ######################################################################
        # Enable gzip for proxied requests and static files
        gzip on;
        gzip_proxied any;
        gzip_vary on;
        gzip_http_version 1.1;
        gzip_types application/javascript application/json text/css text/xml;
        gzip_comp_level 4;
    
    ######################################################################
    ## Log configuration
    ######################################################################
    #Все логи отключены
            error_log /dev/null crit;
            access_log off;
    
    ######################################################################
    ## 555 Еrror requires password password
    ######################################################################
    # Дев сайты закрыты htpass  login:dev pass:dev (второй кусок ниже)
            error_page 555 = @pass;
            location @pass {
                    auth_basic      "Unauthorized";
                    auth_basic_user_file    /var/www/dev_htpasswd;
                    proxy_pass              http://127.0.0.1:82;
                    proxy_set_header        Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                                    }
    ######################################################################
    ## Errors send to apache2
    ######################################################################
    # у апача своих алиасов куча,  а так же некоторая статика отдается
    # средствамси php, по этому все ошибки обрабатывать только apache2
            error_page 401 403 404 405 500 502 503 = @fallback;
            location @fallback {
                    proxy_pass              http://127.0.0.1:82;
                    proxy_set_header        Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    
                    }
    
    ######################################################################
    ## Locations configuration
    ######################################################################
    #Отключаем логирование ошибок No such file or directory
    ## Disable .htaccess files
    
            location ~ /\.ht {
                    deny all;
    
                    access_log off;
                    log_not_found off;
            }
            ##
            location = /favicon.ico {
                    log_not_found off;
                    access_log off;
            }
            ##
            location = /robots.txt {
                    allow all;
                    log_not_found off;
                    access_log off;
            }
            ##
    
    
    ######################################################################
    # сервисы  на сайте phpmyadmin почта и letxencrypt
            location /phpmyadmin/ {
                    deny all;
                    # поставить пароль на phpmyadmin
                    return 555;
                    root  /usr/share/phpmyadmin/;
            }
            ##
            location /webmail/ {
                    rewrite ^/(.*)$ https://$http_host:8080/$1 permanent;
            }
            # letsencrypt
             location /.well-known/acme-challenge/ {
                    alias /usr/local/ispconfig/interface/acme/;
                    default_type text/plain;
    
             }
    # static content
    # Отдаем статику напрямую с nginx
            location ~* ^.+\.(jpg|jpeg|svg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|mp3)$ {
                    root  /var/www/1nnm.ru/web;
                    access_log off;
                    expires max;
                    gzip_static on;
            }
    
    # default location
            location / {
                    index index.php index.html index.htm;
                    proxy_pass              http://127.0.0.1:82;
                    proxy_set_header        Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                            ######################################################################
                    ## Dev site Protection Requests in location /
                    ######################################################################
                    # Дабы дев сайты не индексировались поисковиками, принудительно
                    # Ставим пароли на них,  все что начинается с dev,old. или домен ks03
                            if ($http_host ~* "^(dev|old|www.old|www.dev)\..*\..{2,8}$"){
                                    return 555;
                                    }
                                    if ($http_host ~* "^.*\.ks03\.ru$"){
                                    return 555;
                                    }
    
                                    include /etc/nginx/locations.d/*.conf;
                    }
    
    }
    Ответ написан
    1 комментарий
  • Безопасно ли использовать секретный поддомен для dev версии проекта?

    @ar2rsoft
    PHP-developer
    Как один из вариантов, если дев версию смотрят ограниченное количество людей, можно днсы не прописывать, а прописать айпи в hosts, у тех, кому нужен доступ.
    Ответ написан
    Комментировать
  • Безопасно ли использовать секретный поддомен для dev версии проекта?

    @mikluha
    ANSI C, Perl, Erlang. FreeBSD, Linux, Mac OS.
    Как минимум провайдер сможет.
    Если у тебя подгружаются скрипты/css/картинки с внешних ресурсов - админы этих ресурсов могут увидеть адрес твоего сервера.
    А действительно ли это так страшно, что твой dev сайт кто-то найдет?
    Ответ написан
    1 комментарий
  • Безопасно ли использовать секретный поддомен для dev версии проекта?

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

    Если авторизация чем-то мешает, то просто можно средствами веб-сервера блокировать доступ не с ип адресов разработчика (.htaccess, nginx.conf), либо организовать cookies, которая будет проверяться перед отдачей контента.
    Ответ написан
    3 комментария