• На сколько хорошо нужно знать JS, для того что бы перейти к изучению Node js?

    @de1m
    чтобы перейти к изучению Node.js, надо просто перейти к изучению node.js
    Блин любят люди огороды городить, придумываешь проект и понёсся, в непонятных местах (в начале будет много либо всё непонятно) читаешь теорию.
    От всего остального типа асинхронности и типов данных ты никуда не уйдёшь и они придут по ходу выполнения проекта.

    Может быть не очень очевидный пункт для новичка (да и для многих остальных тоже) в ноде можно писать не только что-то для веба, но и просто консольные программы. Я уже для бэкапа кое-что писал и для мониторинга. У нас на фирме node.js стандартный язык для написания всяких скриптов.
    Это я всё к тому, что не надо зацикливаться только на вебе, когда говорят про node.js.
    Ответ написан
    Комментировать
  • Как исправить ошибку при запуске docker и какой пароль используется в контейнере ubuntu-upstart?

    @de1m
    Там на последней картинке написано, что не найден ssh ключ и вообще у вас куча ошибок, как я понял, кто-то не может присоединиться к докеру, может быть поможет от администратора это всё запустить.
    Ответ написан
  • Какие технологии лучше использовать для HA кластера?

    @de1m
    Непонятно, что у вас имеется ввиду под подсистемами - у вас в каждой получается 4 сервера?

    Для галеры нужно три сервера, на двух будет работать до следующего перезапуска сервера, у меня во всяком случае так было.
    Для ваших "nginx + php + nodejs + мелкие штуки для очередей, тасков и так далее" нужно общедоступное место, где все узлы смогут хранить свои данные. Я бы посоветовал cephfs. Я с ней уже работаю второй год, проблем небыло.
    Чтобы было "Цель: быстрое и простое развертывание и администрирование." нужно делать обязательно с докером. Если ко всему этому добавите ещё и kubernetes, то будет лучше, но надо будет для начала разобраться. В kubernetese есль свой load balancer. Немогу правда сказать, насколько он хорош. Так же можно выставлять количество реплик и в целом ещё куча полезных вещей.
    Ответ написан
    Комментировать
  • Как правильно сохранять mongoose документ в данном случае?

    @de1m
    В таком случае надо делать очередь, когда приходят два запроса, то последний встаёт в очередь и ждёт пока первый полностью выполнится(пошлёт свой статус клиенту) и лишь после этого начинает работать второй.
    Ответ написан
    2 комментария
  • SSH ошибка - Permission denied (publickey)., если создавать соединее без пользователя. Как сделать правильно?

    @de1m Автор вопроса
    Владимир я пробывал, это не помогает. Как я уже выше писал, putty похоже сперва соединяется с сервером, а потом уже пишет имя. Просто обычно быстро происходит и пользователь этого не замечает.

    Может быть лог поможет
    adm1@op1:~$ ssh -i ukey 10.0.0.13 -vvv
    OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: /etc/ssh/ssh_config line 19: Applying options for *
    debug2: resolving "10.0.0.13" port 22
    debug2: ssh_connect_direct: needpriv 0
    debug1: Connecting to 10.0.0.13 [10.0.0.13] port 22.
    debug1: Connection established.
    debug1: key_load_public: No such file or directory
    debug1: identity file ukey type -1
    debug1: key_load_public: No such file or directory
    debug1: identity file ukey-cert type -1
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
    debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
    debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 pat OpenSSH* compat 0x04000000
    debug2: fd 3 setting O_NONBLOCK
    debug1: Authenticating to 10.0.0.13:22 as 'adm1'
    debug3: hostkeys_foreach: reading file "/home/adm1/.ssh/known_hosts"
    debug3: record_hostkey: found key type ECDSA in file /home/adm1/.ssh/known_hosts:2
    debug3: load_hostkeys: loaded 1 keys from 10.0.0.13
    debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
    debug3: send packet: type 20
    debug1: SSH2_MSG_KEXINIT sent
    debug3: receive packet: type 20
    debug1: SSH2_MSG_KEXINIT received
    debug2: local client KEXINIT proposal
    debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c
    debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
    debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
    debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
    debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: compression ctos: none,zlib@openssh.com,zlib
    debug2: compression stoc: none,zlib@openssh.com,zlib
    debug2: languages ctos:
    debug2: languages stoc:
    debug2: first_kex_follows 0
    debug2: reserved 0
    debug2: peer server KEXINIT proposal
    debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
    debug2: host key algorithms: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
    debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
    debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
    debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: compression ctos: none,zlib@openssh.com
    debug2: compression stoc: none,zlib@openssh.com
    debug2: languages ctos:
    debug2: languages stoc:
    debug2: first_kex_follows 0
    debug2: reserved 0
    debug1: kex: algorithm: curve25519-sha256@libssh.org
    debug1: kex: host key algorithm: ecdsa-sha2-nistp256
    debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: compression: none
    debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: compression: none
    debug3: send packet: type 30
    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
    debug3: receive packet: type 31
    debug1: Server host key: ecdsa-sha2-nistp256 SHA256:OZyug3GHOzPctio8LZ1efN746GO9ZNvowq3if2aVwOM
    debug3: hostkeys_foreach: reading file "/home/adm1/.ssh/known_hosts"
    debug3: record_hostkey: found key type ECDSA in file /home/adm1/.ssh/known_hosts:2
    debug3: load_hostkeys: loaded 1 keys from 10.0.0.13
    debug1: Host '10.0.0.13' is known and matches the ECDSA host key.
    debug1: Found key in /home/adm1/.ssh/known_hosts:2
    debug3: send packet: type 21
    debug2: set_newkeys: mode 1
    debug1: rekey after 134217728 blocks
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug3: receive packet: type 21
    debug2: set_newkeys: mode 0
    debug1: rekey after 134217728 blocks
    debug1: SSH2_MSG_NEWKEYS received
    debug2: key: ukey ((nil)), explicit
    debug3: send packet: type 5
    debug3: receive packet: type 7
    debug1: SSH2_MSG_EXT_INFO received
    debug1: kex_input_ext_info: server-sig-algs=
    debug3: receive packet: type 6
    debug2: service_accept: ssh-userauth
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug3: send packet: type 50
    debug3: receive packet: type 51
    debug1: Authentications that can continue: publickey
    debug3: start over, passed a different list publickey
    debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
    debug3: authmethod_lookup publickey
    debug3: remaining preferred: keyboard-interactive,password
    debug3: authmethod_is_enabled publickey
    debug1: Next authentication method: publickey
    debug1: Trying private key: ukey
    debug3: sign_and_send_pubkey: RSA SHA256:vJfpcOigrr4UtutZ7Aj2x7GlvWEq813pR9mTDD9BYrM
    debug3: send packet: type 50
    debug2: we sent a publickey packet, wait for reply
    debug3: receive packet: type 51
    debug1: Authentications that can continue: publickey
    debug2: we did not send a packet, disable method
    debug1: No more authentication methods to try.
    Permission denied (publickey).
    Ответ написан
    Комментировать
  • Что делать, если nodemon постоянно пересобирает проект?

    @de1m
    я скачал, у меня то же самое, может стоит попробывать supervisor? Я обычно им пользуюсь, делает вроде бы то же самое.
    Ответ написан
  • Почему handlebars возвращает true?

    @de1m
    может быть из-за этой проверки?
    {{#if user.facebook}}
    Ответ написан
  • Почему возникает ошибка при подключении к socket io?

    @de1m
    Посмотрите вот этот пример. Сам по себе пример может и не очень, но сокет приделан хорошо.
    Нужно по возможности стараться использовать страндартные порты (80,443), так как все остальные могут быть заблокированны у клиента. В примере используются порты 5000,5001, но их можно легко поменять на нужные.
    Ответ написан
    Комментировать
  • Как эффективно деплоить приложения?

    @de1m
    мы используем git runner, который через rsync заливает весь гит репозиторий на сервер. Думаю, что по похожему принципу можно и для нескольких серверов сделать.
    Ответ написан
    Комментировать
  • Как убрать стандартное меню в новом окне?

    @de1m
    Если я правильно понял, то вам надо та строка, которя жырным написана.
    mainWindow = new BrowserWindow({
        resizable: true,
        width: 1200,
        height: 55,
        icon: __dirname + '/img/logo.png',
        autoHideMenuBar: true,
        frame: false,
        show: false
      });


    autoHideMenuBar: true
    Ответ написан
    2 комментария
  • Как уйти от callback hell в node.js?

    @de1m
    Раз тут идёт речь про всю это лапшу, то может мне кто-то может объяснить.
    У меня есть несколько слудующих друг за другом действий, причём надо дождаться, пока завершится предыдущая операция, прежде чем можно делать дальше.
    1. Проверить, работает ли ssh соеденение
    2. Проверить, работает ли ssh соеденение к другому серверу
    3. Выполнить следующий шаг

    Функция:
    backupRun.prototype.checkSSHConnection = async function (serverName) {
        var self = this;
        var exec = self.bConfig.clientserver[self.eServer]
        var client = self.bConfig.clientserver[serverName]
    
        return new Promise((resolve, reject) => {
            self.runUnderSSH("hostname", self.sshkey, exec, client)
                .then((sshOutput) => {
                    return resolve(sshOutput);
                }, (sshOutputErr) => {
                    return reject(sshOutputErr)
                })
        })
    
    };


    Чтобы пройти все три шага у меня сделанно так
    backupJob.checkSSHConnection(program.exec) //check ssh to exec server
              .then((response) => {
                logger.debug("SSH test connection to exec " + program.exec + " successfull");
    
                backupJob.checkSSHConnection(program.server) //check ssh connection to backup server
                  .then((response) => {
                    logger.debug("SSH test connection to backup server " + program.exec + " successfull");
    
                    backupJob.createBackupPrePostCommands('prerun') //create backup server prerun commands
                      .then((backupPreRun) => {
                        logger.debug("Create backup prerun commands");
                              }, (err) => {
                                logger.error("Error: config array was not generated " + err);
                              })
                          })
                      })
                  }, (error) => {
                    logger.error("SSH test connection to backup server " + program.exec + " failed: " + error);
                  })
              }, (error) => {
                logger.error("SSH test connection to exec " + program.exec + " failed: " + error);
              });


    То есть та же лапша, но только с async/await.
    Теперь собственно вопрос, можно это как-то по другому сделать или от этого никуда не уйти? Причём это всё выглядит при callback, promise и async/await примерно одинаково.
    Всю это полностью можно увидеть тут
    Ответ написан
  • Как с помощью Winston указать путь выполняемого файла в консоли?

    @de1m
    Не совсем понятен вопрос, как я понял выхотите получить путь к файлу *.js который как-раз выполняется.
    var path = require('path');
    ...
    var scriptdir = path.dirname(process.argv[1]); //get dir of scripts
    Ответ написан
  • Как запустить коллбек после асинхронных функций?

    @de1m
    В данном случае они не очень сильно помогут, там будут такие же вложения, может быть немого более читаемо.
    Я похожее делал через async/await, но там тоже надо было дождаться выполнения предыдущей команды, обработать результат и передать дальше. Тоже что-то такое получается, посмотрите вот тут с 180 строки
    Ответ написан
    Комментировать
  • Как передать параметр в Promise?

    @de1m
    Я не тестировал, но должно быть как-то так:
    var getFilename = function (partFilename) {
        return new Promise((resolve, reject) => {
            var files = fs.readdirSync(uploadPath);
            files.forEach(file => {
                var comparedPart = file.split('.')[0];
                if (comparedPart == partFilename) {
                    resolve(file);
                }
            });
            reject(new Error('404'));
        });
    }

    Но вообще, я бы асинхронную функцию тут использовал
    var getFilename = function (partFilename) {
        return new Promise((resolve, reject) => {
            var files = fs.readdir(uploadPath, (err, files) => {
                if (err) {
                    reject(new Error('404'));
                } else {
                    files.forEach(file => {
                        var comparedPart = file.split('.')[0];
                        if (comparedPart == partFilename) {
                            resolve(file);
                        }
                    });
                }
            })
        });
    }
    Ответ написан
  • Правильный способ бэкапа всей ОС с настройками Linux Ubuntu?

    @de1m
    У нас раньше был сервер на hetzner'e и они там использовали tartarus. Я им там тоже пользовался, и один раз пришлось востанавливать данные, нормально всё получилось вместе с системой. Надо только cубд отдельно сохранять.
    Ответ написан
    Комментировать
  • С чего начать электронику?

    @de1m
    Придумываешь вещь, которая тебе интересна и чтобы можно было другим показать (очень важный, но часто упускаемый момент) и делаешь. Смотришь книги к теме если надо, читаешь форумы. Вообщем собираешь на тему информацию.
    Не учи тупо теорию, она без практической части бесполезна. Не думай, что если прочитаешь несколько(или много) книг, то будет всё понятно.
    Я по похожему пути иду. )
    Ответ написан
    Комментировать
  • Можно ли вынести SIM-карту с модема?

    @de1m
    Может быть наооборот? Модем опустить на 7 метров, а то, из-за чего он должен быть так высоко, вывести либо оставить наверху?
    Ответ написан
    Комментировать
  • Как присоединить JSON файл к JADE/PUG?

    @de1m
    Можно через
    require('./file.json')

    Либо тупа как перменную
    fs.readFile('./file.json', function read(err, data) {
    //...
    });

    Можно также readFileSync использовать.
    Ответ написан
    9 комментариев
  • Почему не запускается pm2 без root прав?

    @de1m
    тут по-моему может быть две причины
    1. Ошибка говорит, что не может подсоедениться к /home/node/.pm2/rpc.sock и ниже у вас в правах написано, что только рут может. Попробуёте перед запуском поменять права вручную на "node:node" для rpc.sock.
    2. Если у вас где-то в скрпипте открывается сетевой порт до 1024, то нужны права рут.
    Ответ написан
  • Как в linux mint установить nodejs версии > 6?

    @de1m
    Вот тут написано, как надо устанавливать.
    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    Ответ написан