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.add
com 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íniohttps://ipfs.io/ipfs/QmeV7MVFSiWJr8u4dhXzEAoJgbVJsHvSUqjsbQyNL4WrD2 - IPFShttps : // gt / ipns / QmTjKBMJS8owPUXQFSMjoR4kqFNXXVKB7DqNGgyqibxuff / - IPNS através do portão oficialNavegador 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.
