IPFS no servidor. Hospedar sites de um laptop



Muitas vezes, preciso publicar uma página ou site estático, uma demonstração com um formulário ou layout da web. Despejar em algum lugar como o Jsfiddle nem sempre é conveniente, e a edição de estática em um host local é muito mais rápida e agradável. Os problemas começam quando preciso que alguém mostre meu trabalho ou simplesmente abra a mesma página no telefone. Temos que hospedar todas essas infinitas opções de trabalho e esboços, para cada upload de arquivos novamente, que se dane.

Usando o IPFS, você pode hospedar sites na Internet diretamente do seu laptop, todas as atualizações de arquivos locais serão aplicadas imediatamente na Internet e não precisam ser carregadas em algum lugar. Quando o laptop estiver desconectado da rede, o site ainda estará disponível. O IPFS é como o Bittorrent, apenas para a web.

No artigo, implantaremos o nó IPFS no servidor e tentaremos essa tecnologia na prática.

O que é o IPFS?


O IPFS é uma rede p2p grande e descentralizada, usada como serviço de compartilhamento de arquivos, arquivo da web ou substituição do Bittorrent . Todos os exemplos interessantes de uso do IPFS em projetos reais podem ser encontrados no hall da fama no site oficial awesome.ipfs.io .

Resumidamente, funciona assim: os arquivos armazenados obtêm sua multicash e são divididos em blocos espalhados por todos os nós interessados. O DHT é sincronizado nos nós; quando um arquivo é baixado, os blocos são coletados de diferentes nós (em teoria, os mais próximos). Além disso, para acessar o arquivo ou diretório em que você não precisa aumentar seu nó, todos eles são acessíveis a partir do navegador, o que nos leva ao recurso popular: você pode hospedar sites no IPFS gratuitamente. Mas apenas estática, a atualização de dados mais de uma vez a cada poucos minutos é inconveniente devido aos mesmos hashes que formam um link e são alterados toda vez que você altera o arquivo (existe um sistema de nomes IPNS permanente, mas é lento). No entanto, isso não impediu que os caras do Orbitdb atualizassem o banco de dados para o IPFS , mas existem algumas nuances. Leia mais sobre o dispositivo de rede aqui..


Suponha que eu tenha um nó com o qual distribuo sites estáticos gratuitamente, eu mesmo os visitei e, às vezes, convido meus colegas a procurar. A quantidade total de dados é limitada apenas pelo tamanho do meu disco e pela velocidade de download pela Internet doméstica, o que poderia ser melhor? Mas há uma série de problemas. Em primeiro lugar, o próprio IPFS precisa de bastante Internet e uma parte sólida do processador, e mesmo sem tráfego, ele sempre utiliza alguns dos recursos para sincronização DHT. Em segundo lugar, trabalho principalmente com um laptop e mantenho todos os arquivos nele; portanto, está longe de sempre ter uma fibra caseira de meio gigabyte em mãos. Pausas curtas para IPFS não são um problema, ele mantém o cache no DHT por várias horas, mas custa um local para sair por alguns dias e agora todos os seus projetos estão saindo da rede. Você pode pisar ("lembrar") arquivos na área de trabalho, mas isso pelo menos dobrará o tráfego,o que também não é comum. O que fazer? Tentei aumentar o nó no servidor para descarregar o laptop, mas ainda precisava carregar os arquivos manualmente, como em uma hospedagem comum. Como resultado, fumei docas e APIs e escrevi um utilitário simples para sincronizar minhas estatísticas locais com o servidor.



O IPFS possui duas implementações separadas: go-ipfs e js-ipfs. JS está mais perto de mim, então eu escrevi sobre isso. Eu queria que o utilitário pudesse buscar pastas nos meus sites e enviá-las regularmente para a rede enquanto trabalho. O lado do servidor deve capturar os hashes das pastas e chutá-los para que os arquivos não sejam perdidos.

Instalação e lançamento


npm install ipfs -g

O Js-ipfs tem um tutorial bastante detalhado com exemplos , portanto:

git clone https://github.com/ipfs/js-ipfs.git
cd js-ipfs
npm install
npm run build

O nó é executado em várias linhas:

const IPFS = require('ipfs')
async function main () {
  const node = await IPFS.create()
}
main()

As configurações e sementes para isso são registradas ali, mas isso é suficiente para começar.

Nós escrevemos funcionalidade


Em seguida, você precisa transferir os arquivos para o nó e enviá-los para o IPFS. Para fazer isso, use node.addcom a opção { recursive: true }de pastas. O endereço pode ser passado em argumentos na inicialização e salvo por comando. É importante registrar apenas o último hash - é da pasta raiz:



A pasta inteira foi acessada com êxito na rede. O site será aberto por meio do link e a própria pasta poderá ser verificada no webmord IPFS:



Em seguida, para facilitar o processo de salvamento, adicionei o salvamento com o número da versão e a publicação no IPNS vianode.name.publish. Mas salvar manualmente é chato! Quero poder assistir ao site atualizado o mais rápido que vejo as alterações no host local, o que significa que a atualização deve ocorrer automaticamente. E se de repente eu esquecer de salvar algo, desligar o laptop e voltar para casa, a versão atual será salva não apenas no editor, mas também na rede. Por padrão, salvaremos automaticamente a cada 10 minutos, com a capacidade de alterar o intervalo para diferentes taxas de trabalho. A propósito, se os arquivos não foram alterados desde o último salvamento, o hash também não será alterado.



Legal, mas até agora estamos distribuindo todos os arquivos da máquina local. É hora de conectar o nó do servidor! Pegamos o pubsub experimental , obtemos o tópico dos argumentos na inicialização e tentamos fornecer o hash de salvamento:



Hurrah! O pequeno é fazer o servidor armazenar todos os hashes recebidos e chutá-los (node.pin.add) e ensine o cliente a reduzir seu nó quando não for necessário ( node.stop).


Esta é a lista de downloads no nó do servidor

Qual é o resultado?


  • Quando me sento para escrever um código, ele é salvo automaticamente no IPFS
  • Todas as versões estão sempre disponíveis através de links pessoais / ipfs / Qm ...
  • Posso publicar o site no IPNS para não enviar um monte de links para o cliente
  • O nó local acorda apenas para fazer upload de arquivos e entrar em contato com o servidor e depois adormece.
  • Localmente, tenho apenas uma cópia do site, o tráfego para downloads únicos de novas versões é muito menor que o tráfego em segundo plano do nó IPFS
  • Finalmente posso trabalhar em um host local sem dor de cabeça com controle de versão

Toda essa felicidade me custa o preço do VPS mais barato, embora haja recursos suficientes e deva ser suficiente em outro lugar durante um ano, depois do qual será possível comprar outro servidor ou arquivar o antigo.

Em geral, usando o IPFS, você pode fazer coisas muito mais interessantes. Eu definitivamente quero trazer esse utilitário à mente e escrever um novo, com pegajoso. Enquanto isso, mantenha o site que escrevemos e hospedamos esse tempo todo:

https://ipfs.slipner.ru/ - com o domínio
https://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFS
https : // gt / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / - IPNS através do portão oficial

Navegador Opera com suporte a IPFS




Apenas alguns dias atrás, a Opera Software lançou o primeiro navegador com suporte IPFS nativo. Até agora, no entanto, apenas na versão móvel para Android. Isso significa que ele pode acessar diretamente a rede IPFS sem gateways da web! Estamos aguardando o suporte ser adicionado à versão desktop.




All Articles