{"id":85605,"date":"2020-06-17T13:42:57","date_gmt":"2020-06-17T11:42:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/iz-autsorsa-v-razrabotku-chast-2"},"modified":"2020-06-17T13:42:57","modified_gmt":"2020-06-17T11:42:57","slug":"iz-autsorsa-v-razrabotku-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/iz-autsorsa-v-razrabotku-chast-2","title":{"rendered":"Da terceiriza\u00e7\u00e3o para o desenvolvimento (Parte 2)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Em <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/audit-telecom\/blog\/504376\/\">artigo anterior<\/a><\/noindex>, falei sobre a hist\u00f3ria da cria\u00e7\u00e3o da Veliam e sobre a decis\u00e3o de sua distribui\u00e7\u00e3o atrav\u00e9s do sistema SaaS. Neste artigo, vou contar o que foi necess\u00e1rio fazer para que o produto deixasse de ser local e se tornasse p\u00fablico. Sobre como come\u00e7amos a distribui\u00e7\u00e3o e quais problemas enfrentamos.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Planejamento<\/h3>\n<p>\nA parte atual do servidor para os usu\u00e1rios estava em Linux. Quase toda organiza\u00e7\u00e3o possui servidores Windows, o que n\u00e3o se pode dizer sobre o Linux. O principal ponto forte da Veliam \u00e9 o acesso remoto a servidores e equipamentos de rede por tr\u00e1s de NAT. Mas essa funcionalidade estava muito rigidamente atrelada ao fato de o roteador ter que ser obrigatoriamente um MikroTik. E isso claramente n\u00e3o satisfaria muitos. Eu inicialmente comecei a pensar em adicionar suporte a roteadores dos fornecedores mais comuns. Mas eu entendia que seria uma corrida sem fim para expandir a lista de empresas suportadas. Al\u00e9m disso, mesmo aquelas que j\u00e1 eram suportadas poderiam ter um conjunto diferente de comandos para modificar as regras de NAT de modelo para modelo. A \u00fanica solu\u00e7\u00e3o vi\u00e1vel parecia ser o VPN. <\/p>\n<p>Como decidimos distribuir o produto, mas n\u00e3o como open source, n\u00e3o pod\u00edamos incluir v\u00e1rias bibliotecas com licen\u00e7as abertas como a GPL. Esse \u00e9 um tema \u00e0 parte; ap\u00f3s a decis\u00e3o de vender o produto, tivemos que reavaliar metade das bibliotecas porque eram GPL. Quando est\u00e1vamos desenvolvendo para uso pr\u00f3prio, isso era aceit\u00e1vel. Mas n\u00e3o serve para distribui\u00e7\u00e3o. O primeiro VPN que vem \u00e0 mente \u00e9 o OpenVPN. Mas ele \u00e9 GPL. Outra op\u00e7\u00e3o seria usar o SoftEther VPN japon\u00eas. Sua licen\u00e7a permitia inclu\u00ed-lo no nosso produto. Ap\u00f3s alguns dias de testes para integrar isso de maneira que o usu\u00e1rio n\u00e3o precisasse configurar nada ou saber sobre o SoftEther VPN, conseguimos um prot\u00f3tipo. Estava tudo como deveria estar. Mas, por alguma raz\u00e3o, essa abordagem ainda nos incomodava e, no final, decidimos abandon\u00e1-la. Mas, naturalmente, fizemos isso apenas depois de encontrar outra solu\u00e7\u00e3o. No final, tudo foi feito com conex\u00f5es TCP comuns. Parte das conex\u00f5es funciona atrav\u00e9s de um coordenador, parte diretamente atrav\u00e9s da tecnologia Nat Hole Punching (NHP), que tamb\u00e9m foi implementada em Free Pascal. Devo dizer que eu nunca tinha ouvido falar de NHP antes. N\u00e3o conseguia imaginar que poderia conectar dois dispositivos de rede, ambos atr\u00e1s de NAT, diretamente. Estudei o tema, compreendi o princ\u00edpio de funcionamento e comecei a programar. O que foi planejado foi realizado; o usu\u00e1rio se conecta a um dispositivo atr\u00e1s do NAT com apenas um clique atrav\u00e9s de RDP, SSH ou Winbox, sem inserir senhas ou configurar VPN. Grande parte dessas conex\u00f5es passa direto pelo nosso coordenador, o que beneficia a lat\u00eancia e o custo de manuten\u00e7\u00e3o dessas conex\u00f5es.<\/p>\n<h3>Migra\u00e7\u00e3o da parte do servidor de Linux para Windows<\/h3>\n<p>\nHouve v\u00e1rios problemas ao fazer a transi\u00e7\u00e3o para o Windows. O primeiro foi que o wmic embutido no Windows n\u00e3o permite fazer consultas WQL. E no nosso sistema, tudo j\u00e1 estava baseado nisso. Havia tamb\u00e9m outra quest\u00e3o, mas agora n\u00e3o consigo lembrar o motivo pelo qual decidimos abrir m\u00e3o de seu uso. Talvez as diferen\u00e7as entre as vers\u00f5es do Windows. E o segundo problema foi a multitarefa. N\u00e3o encontrando uma boa ferramenta de terceiros com uma licen\u00e7a 'aceit\u00e1vel' para n\u00f3s, reiniciei o IDE Lazarus e escrevi a ferramenta necess\u00e1ria. O input \u00e9 uma lista de objetos e as consultas que precisam ser feitas, e em resposta recebo os dados. E tudo isso em modo multitarefa. Excelente.<\/p>\n<p>Depois que configurei pthreads para PHP no Windows, pensei que tudo funcionaria perfeitamente, mas n\u00e3o foi bem assim. Ap\u00f3s algum tempo de depura\u00e7\u00e3o, percebi que o pthreads parecia funcionar, mas especificamente em nosso sistema, n\u00e3o funcionava. Ficou claro que havia alguma particularidade no funcionamento do pthreads no Windows. E era isso mesmo. Li a documenta\u00e7\u00e3o e l\u00e1 estava escrito que, para o Windows, o n\u00famero de threads \u00e9 limitado, e, pelo que me lembro, isso n\u00e3o estava expl\u00edcito. Isso se tornou um problema. Quando comecei a reduzir o n\u00famero de threads em que o aplicativo funcionava, ele executava as tarefas muito lentamente. Novamente, abri a IDE e na mesma utilidade, foi adicionado um recurso para pings multithread de objetos. E para completar, tamb\u00e9m adicionei a varredura de portas. Na verdade, depois disso, a necessidade do pthreads para PHP desapareceu, e ele passou a n\u00e3o ser mais utilizado. Em seguida, essa utilidade recebeu mais algumas funcionalidades e permanece em uso at\u00e9 hoje. Depois disso, foi criado um instalador para Windows que inclu\u00eda Apache, PHP, MariaDB, o pr\u00f3prio aplicativo PHP e um conjunto de utilit\u00e1rios para intera\u00e7\u00e3o com o sistema, escritos em Free Pascal. Quanto ao instalador, pensei que resolveria essa quest\u00e3o rapidamente, pois \u00e9 algo extremamente comum e necess\u00e1rio para praticamente todo software. Ou eu n\u00e3o procurei da maneira certa, ou algo assim. Mas eu constantemente encontrava produtos que eram ou pouco flex\u00edveis, ou caros e tamb\u00e9m inflex\u00edveis. E ainda assim, encontrei um instalador gratuito que permite prever qualquer necessidade. Esse \u00e9 o InnoSetup. Estou escrevendo sobre isso aqui porque tive que pesquisar, talvez eu possa economizar tempo de algu\u00e9m.<\/p>\n<h3>Abandono do plugin em favor do meu cliente<\/h3>\n<p>\nEu escrevi anteriormente que a parte cliente era um navegador com um \"plugin\". Houve tempos em que o Chrome atualizava e o layout ficava um pouco desorganizado, ou ent\u00e3o o Windows atualizava e o esquema de URI personalizado se perdia. N\u00e3o queria ter esse tipo de surpresas na vers\u00e3o p\u00fablica do produto. Al\u00e9m disso, o URI personalizado come\u00e7ou a se perder ap\u00f3s cada atualiza\u00e7\u00e3o do Windows. A Microsoft simplesmente removia todos os seus ramos na se\u00e7\u00e3o necess\u00e1ria. Al\u00e9m disso, o Google Chrome agora n\u00e3o permite salvar a escolha de abrir ou n\u00e3o o aplicativo a partir do URI personalizado, e faz essa pergunta a cada clique no objeto de monitoramento. De modo geral, era necess\u00e1rio ter uma intera\u00e7\u00e3o normal com o sistema local do usu\u00e1rio, algo que o navegador n\u00e3o oferece. A solu\u00e7\u00e3o mais simples nessa situa\u00e7\u00e3o parecia ser criar o pr\u00f3prio navegador, como muitos est\u00e3o fazendo agora atrav\u00e9s do Electron. Mas muitas coisas j\u00e1 haviam sido escritas em Free Pascal, incluindo a parte do servidor, ent\u00e3o decidimos fazer o cliente na mesma linguagem, em vez de criar um 'zool\u00f3gico' de tecnologias. Assim foi escrito o cliente com Chromium a bordo. Depois disso, ele come\u00e7ou a se expandir com diversas funcionalidades.<\/p>\n<h3>Lan\u00e7amento<\/h3>\n<p>\nFinalmente escolhemos um nome para o sistema. Passamos por v\u00e1rias op\u00e7\u00f5es enquanto faz\u00edamos a transi\u00e7\u00e3o da vers\u00e3o local para o SaaS. Como inicialmente planej\u00e1vamos expandir para al\u00e9m do mercado interno, o principal crit\u00e9rio para a escolha do nome foi a disponibilidade de um dom\u00ednio livre ou n\u00e3o muito caro na extens\u00e3o \u201c.com\u201d. Algumas fun\u00e7\u00f5es\/m\u00f3dulos ainda n\u00e3o haviam sido portados da vers\u00e3o local para o Veliam, mas decidimos que lan\u00e7ar\u00edamos com a funcionalidade atual, com o resto sendo adicionado em atualiza\u00e7\u00f5es futuras. Na primeira vers\u00e3o n\u00e3o havia HelpDesk, Veliam Connector, n\u00e3o era poss\u00edvel alterar os limites de acionamento dos gatilhos de notifica\u00e7\u00e3o e muito mais. Compramos um Certificado de Assinatura de C\u00f3digo e assinamos as partes do cliente e do servidor. Criamos um site para o produto e iniciamos os processos de registro de software, marca registrada, etc. Enfim, estamos prontos para come\u00e7ar. Uma leve euforia pela trabalho realizado e pelo fato de que, possivelmente, algu\u00e9m poderia usar seu produto, embora n\u00e3o tiv\u00e9ssemos d\u00favidas sobre isso. E ent\u00e3o, par\u00e1mos. O parceiro disse que n\u00e3o poder\u00edamos entrar no mercado sem notifica\u00e7\u00f5es nos mensageiros. Poder\u00edamos deixar muita coisa de lado, mas n\u00e3o isso. Ap\u00f3s discuss\u00f5es breves, foi adicionada a integra\u00e7\u00e3o com o Telegram, que nos satisfez. Entre os mensageiros atuais, este \u00e9 o \u00fanico que oferece acesso \u00e0 sua API gratuitamente e sem burocracias complicadas. O pr\u00f3prio WhatsApp sugere que se entre em contato com provedores que cobram uma quantia consider\u00e1vel por seus servi\u00e7os, todos os e-mails solicitando acesso direto foram ignorados. Quanto ao Viber... N\u00e3o sei quem ainda o utiliza, pois o spam e a publicidade l\u00e1 s\u00e3o excessivos. No final de dezembro, ap\u00f3s uma s\u00e9rie de testes internos e testes entre amigos, abrimos o registro para todos e disponibilizamos o software para download. <\/p>\n<h3>In\u00edcio da dissemina\u00e7\u00e3o<\/h3>\n<p>\nDesde o in\u00edcio, entend\u00edamos que precisar\u00edamos de um pequeno fluxo de usu\u00e1rios do sistema para que eles testassem o produto em um ambiente real e nos dessem algum feedback inicial. Alguns posts pagos no VK trouxeram resultados. Come\u00e7aram as primeiras inscri\u00e7\u00f5es. <\/p>\n<p>Aqui \u00e9 importante dizer que entrar no mercado sem um nome famoso e, ao mesmo tempo, fornecer uma funcionalidade de monitoramento sem agente, na qual \u00e9 necess\u00e1rio inserir credenciais de seus servidores e esta\u00e7\u00f5es de trabalho, \u00e9 muito dif\u00edcil. Isso assusta muitas pessoas. Desde o in\u00edcio, entendemos que enfrentar\u00edamos problemas e est\u00e1vamos prontos para isso, t\u00e9cnica e moralmente. Todas as conex\u00f5es remotas, embora RDP e SSH j\u00e1 sejam criptografados por padr\u00e3o, s\u00e3o adicionalmente criptografadas pelo nosso software com padr\u00e3o AES. Todos os dados dos servidores locais s\u00e3o enviados para a nuvem via HTTPS. As credenciais s\u00e3o armazenadas de forma criptografada. As chaves de criptografia para todos os subsistemas de todos os clientes s\u00e3o individuais. Para conex\u00f5es remotas, s\u00e3o utilizados chaves de criptografia de sess\u00e3o. <\/p>\n<p>Tudo o que podemos fazer nesta situa\u00e7\u00e3o para tranquilizar as pessoas \u00e9 ser o mais transparentes poss\u00edvel, trabalhar na seguran\u00e7a e n\u00e3o nos cansar de responder \u00e0s preocupa\u00e7\u00f5es delas. <\/p>\n<p>Para muitos, a conveni\u00eancia e a funcionalidade do software superam o medo, e eles acabam se registrando. Algumas pessoas em postagens publicadas no VK escreveram que este software n\u00e3o deve ser utilizado, pois \u00e9 um coletor de senhas e uma empresa completamente desconhecida. \u00c9 preciso dizer que essa opini\u00e3o n\u00e3o era isolada. Muitos simplesmente n\u00e3o entendem que, ao instalar outro software propriet\u00e1rio no servidor, que opera como um servi\u00e7o, ele tem plenos direitos no sistema e n\u00e3o precisa de credenciais para realizar a\u00e7\u00f5es il\u00edcitas (\u00e9 claro que \u00e9 poss\u00edvel alterar o usu\u00e1rio a partir do qual o servi\u00e7o \u00e9 iniciado, mas aqui tamb\u00e9m, qualquer conta de usu\u00e1rio pode ser inserida). Na verdade, as preocupa\u00e7\u00f5es das pessoas s\u00e3o compreens\u00edveis. Instalar software em um servidor \u00e9 algo comum, mas inserir credenciais j\u00e1 \u00e9 um pouco assustador e \u00edntimo, j\u00e1 que boa parte das pessoas usa a mesma senha para todos os servi\u00e7os, e criar uma conta separada mesmo para testes d\u00e1 pregui\u00e7a. Mas atualmente, existem muitos servi\u00e7os nos quais as pessoas confiam suas credenciais e n\u00e3o apenas isso. E buscamos tornar-nos um deles. <\/p>\n<p>Muitos coment\u00e1rios foram nesse sentido, de que n\u00f3s ter\u00edamos roubado isso de algum lugar. Isso nos surpreendeu um pouco. Bem, \u00e9 a opini\u00e3o de uma pessoa, mas esse tipo de coment\u00e1rio apareceu em v\u00e1rias publica\u00e7\u00f5es de diferentes pessoas. Inicialmente, n\u00e3o sab\u00edamos como reagir a isso. Se fic\u00e1vamos tristes pelo fato de algumas pessoas acharem que na R\u00fassia ningu\u00e9m pode fazer nada por conta pr\u00f3pria, mas s\u00f3 pode roubar, ou se t\u00ednhamos que nos alegrar por acreditarem que algo assim s\u00f3 pode ser roubado. <\/p>\n<p>Agora conclu\u00edmos o processo de obten\u00e7\u00e3o do Certificado de Assinatura de C\u00f3digo EV. Para obt\u00ea-lo, \u00e9 necess\u00e1rio passar por uma s\u00e9rie de verifica\u00e7\u00f5es e enviar uma s\u00e9rie de documentos da empresa, alguns dos quais precisam ser autenticados por um advogado. Obter o certificado de assinatura de c\u00f3digo EV durante a pandemia \u00e9, na verdade, um t\u00f3pico \u00e0 parte para um artigo. O processo se arrastou por um m\u00eas. E foi um m\u00eas de solicita\u00e7\u00f5es constantes de documentos adicionais, n\u00e3o de espera. Pode ser que a pandemia n\u00e3o tenha nada a ver com isso, e todos estejam passando por um processo t\u00e3o longo? Compartilhe.<\/p>\n<p>Alguns dizem que n\u00e3o vamos usar porque n\u00e3o temos o certificado do FSTEK. Precisamos explicar que n\u00e3o podemos obt\u00ea-lo e n\u00e3o vamos, porque para conseguir esse certificado, a criptografia precisa estar de acordo com o GOST, e planejamos distribuir o software n\u00e3o apenas na R\u00fassia e usamos AES.<\/p>\n<p>Todos esses coment\u00e1rios geraram uma certa inseguran\u00e7a sobre a possibilidade de promover um produto que exige a inser\u00e7\u00e3o de contas, sem estar em evid\u00eancia. Mesmo considerando que sab\u00edamos que haveria aqueles que seriam muito negativos a respeito disso. Ap\u00f3s o n\u00famero de registros ultrapassar mil, paramos de pensar nisso. Especialmente depois que, al\u00e9m das cr\u00edticas de quem nem sequer experimentou o produto, come\u00e7aram a surgir resenhas muito positivas. \u00c9 importante mencionar que essas avalia\u00e7\u00f5es positivas s\u00e3o o maior motivador para o desenvolvimento do produto.<\/p>\n<h3>Adi\u00e7\u00e3o de funcionalidade de acesso remoto para funcion\u00e1rios<\/h3>\n<p>\nUma das tarefas frequentes dos clientes \u00e9 \"fornecer ao Vanya acesso ao computador dele de casa\". Configuramos um VPN no Mikrotik e criamos contas para os usu\u00e1rios. Mas isso realmente se torna um problema. Os usu\u00e1rios n\u00e3o conseguem seguir o manual e realizar o passo a passo para se conectar via VPN. Existem diferentes vers\u00f5es do Windows. Em um Windows tudo conecta bem, em outro \u00e9 necess\u00e1rio um protocolo diferente. E, no geral, isso sempre esteve relacionado \u00e0 reconfigura\u00e7\u00e3o do equipamento de rede que atuava como servidor VPN, e nem todos os funcion\u00e1rios t\u00eam acesso a ele, o que se torna inconveniente. <\/p>\n<p>Mas j\u00e1 temos conex\u00f5es remotas a servidores e equipamentos de rede. Por que n\u00e3o aproveitar o transporte pronto e criar uma pequena utilidade que possa ser simplesmente fornecida ao usu\u00e1rio para conex\u00e3o? A ideia era apenas fazer com que o usu\u00e1rio n\u00e3o precisasse inserir informa\u00e7\u00f5es complexas. Apenas um bot\u00e3o \"conectar\". Mas como essa utilidade saber\u00e1 para onde conectar, se s\u00f3 tiver um bot\u00e3o? Tinha a ideia de construir online o aplicativo necess\u00e1rio em nossos servidores. O administrador do sistema clica no bot\u00e3o \"baixar atalho\", e um comando \u00e9 enviado para o nosso cloud para compilar um bin\u00e1rio individual com as informa\u00e7\u00f5es de conex\u00e3o para o servidor ou computador necess\u00e1rio via RDP. Em geral, isso poderia ser feito. Mas leva tempo, o administrador teria que esperar primeiro o bin\u00e1rio ser compilado e depois baix\u00e1-lo. Claro, poder\u00edamos simplesmente adicionar um segundo arquivo com a configura\u00e7\u00e3o, mas seriam 2 arquivos, e para simplicidade, o usu\u00e1rio precisa de um s\u00f3. Um arquivo, um bot\u00e3o e nenhum instalador. Depois de ler um pouco na vastid\u00e3o do Google, cheguei \u00e0 conclus\u00e3o de que, se adicionar alguma informa\u00e7\u00e3o ao final do \"exe\" compilado, ele n\u00e3o se danifica (quase). Pode-se at\u00e9 adicionar \"Guerra e Paz\", e ele funcionar\u00e1 normalmente. Seria um desperd\u00edcio n\u00e3o aproveitar isso. Agora podemos descompactar o aplicativo, que ali\u00e1s se chama Veliam Connector, diretamente no cliente e simplesmente adicionar ao final as informa\u00e7\u00f5es necess\u00e1rias para a conex\u00e3o. E o pr\u00f3prio aplicativo sabe o que fazer com isso. Por que escrevi \"quase\" entre par\u00eanteses? Porque essa conveni\u00eancia tem um custo: o aplicativo perde sua assinatura de certifica\u00e7\u00e3o digital. Mas, neste est\u00e1gio, acreditamos que esse \u00e9 um pequeno pre\u00e7o a pagar por uma conveni\u00eancia t\u00e3o grande. <\/p>\n<h3>Licen\u00e7as de m\u00f3dulos de terceiros<\/h3>\n<p>\nEu j\u00e1 mencionei acima que, ap\u00f3s decidirmos tornar o produto de acesso p\u00fablico, em vez de apenas para uso interno, tivemos que trabalhar bastante e procurar alternativas para alguns m\u00f3dulos que n\u00e3o permitiam sua inclus\u00e3o em nosso produto. Mas, logo ap\u00f3s o lan\u00e7amento, descobrimos um problema bastante desagrad\u00e1vel. No Veliam Server, que estava do lado do cliente, havia um banco de dados MariaDB. E ele tem a licen\u00e7a GPL. A licen\u00e7a GPL exige que o software seja open source, e se nosso produto inclui o MariaDB, que possui essa licen\u00e7a, ent\u00e3o nosso produto tamb\u00e9m deve estar sob essa licen\u00e7a. Mas, felizmente, a finalidade dessa licen\u00e7a \u00e9 o c\u00f3digo aberto, e n\u00e3o punir judicialmente aqueles que cometem um erro acidental. Se o detentor dos direitos apresentar uma reclama\u00e7\u00e3o, ele deve notificar o infrator por escrito e este deve corrigir a viola\u00e7\u00e3o dentro de 30 dias. N\u00f3s mesmos descobrimos nosso erro e n\u00e3o recebemos cartas e imediatamente come\u00e7amos a considerar op\u00e7\u00f5es para resolver o problema. A sa\u00edda se tornou \u00f3bvia \u2014 a migra\u00e7\u00e3o para SQLite. Este banco de dados n\u00e3o tem restri\u00e7\u00f5es de licenciamento. A maioria dos navegadores modernos utiliza SQLite, assim como uma s\u00e9rie de outros programas. Encontrei na internet informa\u00e7\u00f5es de que o SQLite \u00e9 considerado o banco de dados mais amplamente utilizado no mundo, justamente por causa dos navegadores, mas n\u00e3o busquei provas, ent\u00e3o essa informa\u00e7\u00e3o pode n\u00e3o ser precisa. Comecei a estudar o que a migra\u00e7\u00e3o para SQLite pode acarretar.<\/p>\n<p>Isso se torna uma tarefa n\u00e3o trivial quando h\u00e1 v\u00e1rias centenas de servidores com MariaDB instalados nos clientes e dados neles. Alguns recursos do MariaDB n\u00e3o est\u00e3o dispon\u00edveis no SQLite. Por exemplo, no c\u00f3digo, utilizamos consultas do tipo <\/p>\n<pre><code class=\"sql\">Select * FROM `table` WHERE `id`&gt;1000 FOR UPDATE\n<\/code><\/pre>\n<p>\nEssa constru\u00e7\u00e3o n\u00e3o apenas realiza uma sele\u00e7\u00e3o da tabela, mas tamb\u00e9m bloqueia as linhas de dados. E v\u00e1rias outras constru\u00e7\u00f5es tamb\u00e9m precisaram ser reescritas. Mas al\u00e9m de ter que reescrever muitas consultas, tamb\u00e9m tivemos que inventar um mecanismo que, ao atualizar o Veliam Server no cliente, portasse todos os dados para o novo banco de dados e removesse o antigo. Al\u00e9m disso, as transa\u00e7\u00f5es n\u00e3o funcionavam no SQLite, e isso era um problema real. Mas, depois de ler sobre isso na vasta rede mundial, encontrei sem problemas que as transa\u00e7\u00f5es no SQLite podem ser habilitadas, passando um simples comando ao se conectar. <\/p>\n<pre><code class=\"sql\">PRAGMA journal_mode=WAL;<\/code><\/pre>\n<p>\nNo fim, a tarefa foi conclu\u00edda e agora a parte do servidor dos clientes funciona em SQLite. N\u00e3o notamos mudan\u00e7as na opera\u00e7\u00e3o do sistema.<\/p>\n<h3>Novo HelpDesk<\/h3>\n<p>\nEra necess\u00e1rio portar o sistema HelpDesk da vers\u00e3o interna para a vers\u00e3o SaaS, mas com algumas altera\u00e7\u00f5es. A primeira coisa que quer\u00edamos fazer era a integra\u00e7\u00e3o com o dom\u00ednio do cliente no que diz respeito \u00e0 autoriza\u00e7\u00e3o transparente dos usu\u00e1rios no sistema. Agora, para acessar o HelpDesk e deixar um pedido, o usu\u00e1rio simplesmente clica no atalho na \u00e1rea de trabalho e o navegador se abre. O usu\u00e1rio n\u00e3o insere nenhuma credencial. O m\u00f3dulo para Apache SSPI, que faz parte do Veliam Server, autoriza automaticamente o usu\u00e1rio com a conta de dom\u00ednio. Para deixar um pedido no sistema, quando o usu\u00e1rio est\u00e1 fora da rede corporativa, ele clica em um bot\u00e3o e recebe um link por e-mail, pelo qual ele se autentica no sistema HelpDesk sem senhas. Se o usu\u00e1rio for desativado ou removido do dom\u00ednio, a conta no HelpDesk tamb\u00e9m deixar\u00e1 de funcionar. Assim, o administrador do sistema n\u00e3o precisa monitorar as contas tanto no dom\u00ednio quanto no HelpDesk. Se um funcion\u00e1rio se demitir, ele desativa a conta no dom\u00ednio e pronto, ele n\u00e3o conseguir\u00e1 acessar o sistema nem da rede corporativa, nem pelo link. Para implementar essa integra\u00e7\u00e3o, o administrador do sistema precisa criar uma GPO que <noindex><a rel=\"nofollow\" href=\"https:\/\/veliam.com\/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F\/helpdesk\/%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0-%D0%B2-%D0%B7%D0%BE%D0%BD%D1%83\/\">adiciona o site interno \u00e0 zona de intranet<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/veliam.com\/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F\/helpdesk\/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%8F%D1%80%D0%BB%D1%8B%D0%BA%D0%B0-helpdesk-%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8-gpo\/\">distribui o atalho para todos os usu\u00e1rios na \u00e1rea de trabalho<\/a><\/noindex>. <\/p>\n<p>A segunda coisa que consideramos extremamente necess\u00e1ria para sistemas HelpDesk, pelo menos para n\u00f3s mesmos, \u00e9 a conex\u00e3o com o solicitante diretamente do pedido com um clique. Al\u00e9m disso, as conex\u00f5es devem ser poss\u00edveis mesmo que o administrador do sistema esteja em outra rede. Para terceiriza\u00e7\u00e3o, isso \u00e9 essencial, e para administradores de sistema internos, muitas vezes \u00e9 tamb\u00e9m muito necess\u00e1rio. J\u00e1 existem v\u00e1rios produtos que lidam muito bem com a tarefa de conex\u00f5es remotas. E decidimos fazer integra\u00e7\u00f5es para eles. Atualmente, fizemos uma integra\u00e7\u00e3o para VNC e no futuro planejamos adicionar Radmin e TeamViewer. Usando nosso transporte de rede para conex\u00f5es remotas \u00e0 infraestrutura, tornamos poss\u00edvel que o VNC se conecte a esta\u00e7\u00f5es de trabalho remotas por tr\u00e1s de NAT. O mesmo ser\u00e1 feito para Radmin. Agora, para se conectar a um usu\u00e1rio, basta clicar no bot\u00e3o \u201cconectar ao solicitante\u201d na pr\u00f3pria solicita\u00e7\u00e3o. O cliente VNC se abre e se conecta ao solicitante, independentemente de voc\u00ea estar na mesma rede ou em casa de chinelos. Previamente, o administrador do sistema deve instalar o VNC Server em todas as esta\u00e7\u00f5es de trabalho usando as ferramentas de GPO. <\/p>\n<p>Atualmente, estamos migrando para um novo HelpDesk e utilizando a integra\u00e7\u00e3o com o dom\u00ednio e o VNC. Isso \u00e9 muito conveniente para n\u00f3s. Agora podemos evitar pagar pelo TeamViewer, que utilizamos por mais de tr\u00eas anos para o funcionamento do nosso suporte t\u00e9cnico.<\/p>\n<h3>O que planejamos fazer a seguir<\/h3>\n<p>\nQuando lan\u00e7amos o produto, n\u00e3o criamos planos pagos, apenas limitamos o plano gratuito a 50 objetos de monitoramento. Cinquenta dispositivos de rede e servidores deveriam ser suficientes para todos, pensamos n\u00f3s. E ent\u00e3o come\u00e7aram a chegar solicita\u00e7\u00f5es para aumentar o limite. Dizer que ficamos um pouco surpresos \u00e9 pouco. Ser\u00e1 que nosso software chamou a aten\u00e7\u00e3o de empresas com tantos servidores? Expandimos gratuitamente o limite para aqueles que fizeram tais solicita\u00e7\u00f5es. Em alguns casos, perguntamos em resposta ao pedido por que precisavam de tantos, ser\u00e1 que tinham uma quantidade t\u00e3o grande de servidores e equipamentos de rede? E descobrimos que os administradores de sistema come\u00e7aram a usar o sistema de uma maneira que n\u00e3o planejamos de forma alguma. Tudo se revelou simples - come\u00e7aram a monitorar n\u00e3o apenas servidores, mas tamb\u00e9m esta\u00e7\u00f5es de trabalho. Da\u00ed vieram tantas solicita\u00e7\u00f5es para aumentar os limites. Agora j\u00e1 introduzimos planos pagos e os limites podem ser aumentados de forma aut\u00f4noma. <\/p>\n<p>Os servidores quase sempre operam com armazenamento em rede ou com discos locais em um array RAID. E n\u00f3s inicialmente criamos o produto para eles. O monitoramento SMART n\u00e3o era interessante para essa tarefa. Mas considerando que as pessoas adaptaram o software para monitorar esta\u00e7\u00f5es de trabalho, surgiram pedidos para implementar o monitoramento SMART. Em breve o implementaremos. <\/p>\n<p>Com a chegada do Veliam Connector, n\u00e3o \u00e9 mais necess\u00e1rio implantar um servidor VPN na rede corporativa, ou criar um RDGW, ou simplesmente encaminhar portas para as m\u00e1quinas necess\u00e1rias para conex\u00e3o via RDP. Muitas pessoas utilizam nosso sistema apenas para essas conex\u00f5es remotas. O Veliam Connector est\u00e1 dispon\u00edvel apenas para Windows, e alguns usu\u00e1rios de empresas se conectam a esta\u00e7\u00f5es de trabalho ou terminais na rede corporativa de seus laptops pessoais com MacOS. E o resultado \u00e9 que o administrador de sistema \u00e9 for\u00e7ado, por causa de alguns usu\u00e1rios, a voltar \u00e0 quest\u00e3o do encaminhamento ou VPN. Portanto, j\u00e1 estamos finalizando a vers\u00e3o do Veliam Connector para MacOS. Usu\u00e1rios de sua querida m\u00e1quina da Apple tamb\u00e9m ter\u00e3o a oportunidade de se conectar \u00e0 infraestrutura corporativa com um clique.<\/p>\n<p>Gosto muito do fato de que, tendo um grande n\u00famero de usu\u00e1rios no sistema, n\u00e3o precisamos quebrar a cabe\u00e7a sobre o que as pessoas precisam e o que seria mais conveniente. Elas mesmas escrevem suas solicita\u00e7\u00f5es, ent\u00e3o h\u00e1 muitos planos de desenvolvimento para o futuro pr\u00f3ximo.<\/p>\n<p>Paralelamente, estamos planejando agora traduzir o sistema para o ingl\u00eas e expandi-lo para o exterior. N\u00e3o sabemos ainda como faremos a distribui\u00e7\u00e3o do produto fora do nosso pa\u00eds, estamos em busca de op\u00e7\u00f5es. Talvez mais tarde haja um artigo separado sobre isso. Pode ser que algu\u00e9m que leu este artigo consiga sugerir a dire\u00e7\u00e3o certa, ou que j\u00e1 saiba como fazer isso e ofere\u00e7a seus servi\u00e7os. Agradeceremos pela ajuda.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/audit-telecom\/blog\/505678\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Veliam \u0438 \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0435 SaaS. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u0442\u0430\u043b \u043d\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c, \u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c. \u041e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0431\u044b\u043b\u0430 \u043d\u0430 Linux. \u041f\u043e\u0447\u0442\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-85605","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Veliam \u0438 \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0435 SaaS.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/iz-autsorsa-v-razrabotku-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0437 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 (\u0427\u0430\u0441\u0442\u044c 2) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Veliam \u0438 \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0435 SaaS.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/iz-autsorsa-v-razrabotku-chast-2\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-17T11:42:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-17T11:42:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Do outsourcing para o desenvolvimento (Parte 2) | ProHoster","description":"No artigo anterior, falei sobre a hist\u00f3ria da cria\u00e7\u00e3o do Veliam e sobre a decis\u00e3o de sua distribui\u00e7\u00e3o atrav\u00e9s do sistema SaaS.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/iz-autsorsa-v-razrabotku-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0437 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 (\u0427\u0430\u0441\u0442\u044c 2) | ProHoster","og:description":"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Veliam \u0438 \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0435 SaaS.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/iz-autsorsa-v-razrabotku-chast-2","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-17T11:42:57+00:00","article:modified_time":"2020-06-17T11:42:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"85605","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:33:42","updated":"2022-09-28 15:54:11","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/85605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=85605"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/85605\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=85605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=85605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=85605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}