NPDD/Baobáxia/Arquitetura
m (→API / Rotas de acesso) |
|||
Linha 1: | Linha 1: | ||
+ | = Conceitos gerais = | ||
+ | |||
+ | Baobáxia pode ser compreendida como uma plataforma de compartilhamento de '''saberes''' de comunidades dentro de uma rota de confiança. | ||
+ | |||
+ | Este artigo apresenta os principais conceitos da Baobáxia, tanto do ponto de vista de usuáries quando do ponto de vista técnico. | ||
+ | |||
+ | |||
+ | :'''Tecnicamente falando''', Baobáxia é uma aplicação desenvolvida em Python que gerencia repositórios Git de forma descentralizada, distribuindo conteúdo entre instâncias a partir da criação de rotas de confiança, atuando de forma descentralizada, federada e rizomática. | ||
+ | |||
+ | |||
+ | == Saberes == | ||
+ | |||
+ | São conhecimentos da comunidade representados dentro da plataforma, como seu acervo cultural ou um artigo escrito por seus integrantes. Um saber pode conter em si informações, arquivos e até mesmo outros saberes. | ||
+ | |||
+ | |||
+ | :'''Tecnicamente falando''', Saber se apresenta como uma pasta e um arquivo de metadados (chamado de ".baobaxia") em formato JSON. O arquivo de metadados contém informações gerais de identificação e específicas de acordo com o tipo de saber. Por exemplo, se o saber é um item de um acervo cultural, precisará de título, descrição, conjunto de tags e outras informações que facilitem sua organização. Dentro da pasta do saber também podem ser armazenados arquivos anexos (gerenciados pelo git-annex), como a mídia correspondente ao item de acervo, no exemplo anterior. A pasta também pode conter arquivos de hipertexto, por exemplo, se o saber é um artigo, com o conteúdo do artigo. Pode haver ali também outros saberes criando uma relação de composição. | ||
+ | |||
+ | |||
+ | == Mucuas == | ||
+ | |||
+ | São as unidades que compõe a Baobáxia, as instâncias que rodam a plataforma e nas quais usuáries conectam-se para acessar a rede. Podem ser compreendidas como parte de um território digital. Além de acessar e gerenciar saberes da pŕopria comunidade, as mucuas também refletem os saberes de outras mucuas. | ||
+ | |||
+ | |||
+ | :'''Tecnicamente falando''', Mucua pode ser compreendida tanto como uma instância da Baobáxia rodando em uma infraestrutura de rede quanto como conjunto de dados tutelados através daquela instância. A mucua é também um saber, tendo sua pasta específico com o arquivo de metadados e os saberes que constituem aquele conjunto de dados. | ||
+ | |||
+ | |||
+ | == Balaios == | ||
+ | |||
+ | São grupos de mucuas definidos como universos de saberes. Por exemplo, o balaio chamado Rede Mocambos pode agregar mucuas das diversas comunidades envolvidas na luta desta rede. Além disso, uma mucua pode participar de mais do que um balaio. Assim, a mucua Abdias pode fazer parte do balaio Rede Mocambos e também de um outro chamado Rota dos Baobás, por exemplo. Em cada balaio, a mucua terá saberes específicos que pode não compartilhar em outros balaios. | ||
+ | |||
+ | |||
+ | :'''Tecnicamente falando''', Balaio é um repositório git + git-annex compartilhado entre um grupo de instâncias. Também são saberes e portanto possuem metadados em uma pasta (a pasta do repositório) onde estarão as pastas das mucuas. Dessa forma, cada mucua tem sua pasta específica dentro do repositório. | ||
+ | |||
+ | |||
+ | == Rotas == | ||
+ | |||
+ | São conexões entre mucuas de um mesmo balaio. Por exemplo, a mucua DPadua, também dentro do balaio Rede Mocambos, possui uma rota para a mucua Abdias. Desta forma, a mucua DPadua pode conectar a mucua Abdias para fazer a troca de saberes. A partir daí, Abdias e DPadua passam a compartilhar saberes uma da outra. Assim, se houver uma rota de Abdias para a mucua Oyá, esta última poderá receber o conteúdo de DPádua, mesmo sem que haja uma rota direta entre as duas. | ||
+ | |||
+ | |||
+ | :'''Tecnicamente falando''', Rotas são conexões SSH previamente autorizadas por chave pública que são criadas para fazer a sincronização (pull e push) entre instâncias do mesmo repositório (balaio). A mucua que possui a rota (autorização e dados de conexão) conecta outra mucua e faz as operações, de modo que a segunda mucua não precisa conhecer aquela rota ou estar autorizada para conectar a primeira mucua. | ||
+ | |||
+ | |||
+ | |||
+ | = Documentação antiga = | ||
== Configuração do Repositório == | == Configuração do Repositório == | ||
Edição das 19h19min de 2 de fevereiro de 2024
Conteúdo |
Conceitos gerais
Baobáxia pode ser compreendida como uma plataforma de compartilhamento de saberes de comunidades dentro de uma rota de confiança.
Este artigo apresenta os principais conceitos da Baobáxia, tanto do ponto de vista de usuáries quando do ponto de vista técnico.
- Tecnicamente falando, Baobáxia é uma aplicação desenvolvida em Python que gerencia repositórios Git de forma descentralizada, distribuindo conteúdo entre instâncias a partir da criação de rotas de confiança, atuando de forma descentralizada, federada e rizomática.
Saberes
São conhecimentos da comunidade representados dentro da plataforma, como seu acervo cultural ou um artigo escrito por seus integrantes. Um saber pode conter em si informações, arquivos e até mesmo outros saberes.
- Tecnicamente falando, Saber se apresenta como uma pasta e um arquivo de metadados (chamado de ".baobaxia") em formato JSON. O arquivo de metadados contém informações gerais de identificação e específicas de acordo com o tipo de saber. Por exemplo, se o saber é um item de um acervo cultural, precisará de título, descrição, conjunto de tags e outras informações que facilitem sua organização. Dentro da pasta do saber também podem ser armazenados arquivos anexos (gerenciados pelo git-annex), como a mídia correspondente ao item de acervo, no exemplo anterior. A pasta também pode conter arquivos de hipertexto, por exemplo, se o saber é um artigo, com o conteúdo do artigo. Pode haver ali também outros saberes criando uma relação de composição.
Mucuas
São as unidades que compõe a Baobáxia, as instâncias que rodam a plataforma e nas quais usuáries conectam-se para acessar a rede. Podem ser compreendidas como parte de um território digital. Além de acessar e gerenciar saberes da pŕopria comunidade, as mucuas também refletem os saberes de outras mucuas.
- Tecnicamente falando, Mucua pode ser compreendida tanto como uma instância da Baobáxia rodando em uma infraestrutura de rede quanto como conjunto de dados tutelados através daquela instância. A mucua é também um saber, tendo sua pasta específico com o arquivo de metadados e os saberes que constituem aquele conjunto de dados.
Balaios
São grupos de mucuas definidos como universos de saberes. Por exemplo, o balaio chamado Rede Mocambos pode agregar mucuas das diversas comunidades envolvidas na luta desta rede. Além disso, uma mucua pode participar de mais do que um balaio. Assim, a mucua Abdias pode fazer parte do balaio Rede Mocambos e também de um outro chamado Rota dos Baobás, por exemplo. Em cada balaio, a mucua terá saberes específicos que pode não compartilhar em outros balaios.
- Tecnicamente falando, Balaio é um repositório git + git-annex compartilhado entre um grupo de instâncias. Também são saberes e portanto possuem metadados em uma pasta (a pasta do repositório) onde estarão as pastas das mucuas. Dessa forma, cada mucua tem sua pasta específica dentro do repositório.
Rotas
São conexões entre mucuas de um mesmo balaio. Por exemplo, a mucua DPadua, também dentro do balaio Rede Mocambos, possui uma rota para a mucua Abdias. Desta forma, a mucua DPadua pode conectar a mucua Abdias para fazer a troca de saberes. A partir daí, Abdias e DPadua passam a compartilhar saberes uma da outra. Assim, se houver uma rota de Abdias para a mucua Oyá, esta última poderá receber o conteúdo de DPádua, mesmo sem que haja uma rota direta entre as duas.
- Tecnicamente falando, Rotas são conexões SSH previamente autorizadas por chave pública que são criadas para fazer a sincronização (pull e push) entre instâncias do mesmo repositório (balaio). A mucua que possui a rota (autorização e dados de conexão) conecta outra mucua e faz as operações, de modo que a segunda mucua não precisa conhecer aquela rota ou estar autorizada para conectar a primeira mucua.
Documentação antiga
Configuração do Repositório
- configuração da dpadua
# mkdir /data/repositories # mkdir /data/repositories/mocambos # adduser exu # chown root:exu /data/repositiores/mocambos # chmod 775 root:exu /data/repositiores/mocambos # su exu $ cd /data/repositories/mocambos $ git config --global user.name "Exu do BBX" $ git config --global user.email exu@mocambos.org $ git init . $ git annex init dpadua
- fazer no acotirene
$ git clone --bare ssh://dpadua... $ git remote rm origin
- no dpadua
$ cd /data/repositiores/mocambos $ mkdir dpadua $ mkdir dpadua/mocambolas
django-bbx no debian com Gunicorn + Supervisord + Nginx
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
instalação do baobaxia na mucua dpadua
$ su exu $ cd /srv $ git clone http://github.com/RedeMocambos/baobaxia $ cd baobaxia $ sudo su # apt-get install pip-python # pip install virtualenv # mkdir /srv/envs # chown root:exu /srv/envs # chmod 775 envs # sqlite
criar virtualenv
# su exu $ cd /srv/envs $ virtualenv bbx $ source /srv/envs/bbx/bin/activate $ pip install -r /srv/baobaxia/app/django-bbx/requirements.txt
configurar settings.py
$ python manage.py syncdb - (primeira vez vai dar erro)
criar conta de email admin do django
exu@[nomemucua].mocambos.net email: exu@mocambos.org
fixtures das mucuas:
$ python manage.py syncdb --no-input $ python manage.py migrate --all
Gunicorn
# chmod +x /srv/baobaxia/app/django-bbx/bin/guinicorn_start.sh #
Nginx
# apt-get install nginx
Supervisor
# apt-get install supervisor
Sincronização
O git-annex implementa umas serie de funcionalidades que podem ser reaproveitadas para a logica de sincronização e triagem dos conteúdos.
Em especial o BBX faz uso dos grupos e das policias de "preferred content" como base de comunicação, dessa forma:
Grupos
Grupo | Numero de copias | Notas |
---|---|---|
nucleo | 3 | Cada conteudo è disponivel por padrao em 3 mucuas (as mais proximas por conexão seja fisica ou internet) |
sync | 2 | Para garantis o transito dos conteudos, mantem o dado em pelo menos duas mucuas moveis. |
online | 1 | Disponibilidade para babilonia ;) |
Backend
Para identificar os arquivos no sistema temos o SHA / CHAVES que o git-annex gera.
Middleware
Temos dois entidades/objetos:
- mucua
- media
- usuario
- repositorio (acervo, bruto, outras redes)
- etiqueta
API / Rotas de acesso
# autenticacao /login /[repo]/[mucua]/login /logout /[repo]/[mucua]/logout /register /[repo]/[mucua]/register /lost_password /[repo]/[mucua]/lost_password # mocambola /[repo]/[mucua]/mocambola/[user] {get} # get mocambola (profile) /[repo]/[mucua]/mocambola/[user] {put, delete} # update/delete mocambola (edit) # mucua /[repo]/[mucua] {get} # home da mucua /[repo]/[mucua] {put} # atualiza /[repo]/[mucua]/info # ver + infos sobre a mucua /[repo]/[mucua]/requests # ver requisições da mucua /[repo]/[mucua]/addgroup/[groupname] # add mucua to [groupname] /[repo]/[mucua]/delgroup/[groupname] # remove mucua from [groupname] /[repo]/[mucua]/getgroups (sem t:) - todos os grupos da mucua /[repo]/[mucua]/getterritory (somente t:) - todos os territórios da mucua /mucua/ # get default mucua /mucua/list # get list of mucuas # home da rede /rede /rede/info # funcionalidades media /[repo]/[mucua]/media {post} # insere media /[repo]/[mucua]/media/[uuid] {get} # get media /[repo]/[mucua]/media/[uuid] {put, delete} # update/delete media /[repo]/[mucua]/media/last {get} # pega últimas medias adicionadas /[repo]/[mucua]/media/[uuid]/url # pega url (web/api) do arquivo /[repo]/[mucua]/media/[uuid]/[width]x[height].[format] # get image of media /[repo]/[mucua]/media/[uuid]/related # get related media to [uuid] # funcionalidades básicas para definição de escopo /repository/list # lista repositorios disponíveis (buggy) /repository/* # get default repository /[repository]/mucuas # get mucuas /[repo]/getterritories - todos os territórios dentro do repositório atual /[repo]/getgroups - todos os grupos dentro do repositório atual # busca /[repo]/[mucua]/bbx/search/[arg1]/[arg2]/.../[sortby]/[sort1]/[asc|desc]/[sort2].../[limit]/[num]/[offset] # busca por args
proposta 22/01/14
(ANTIGA)
Nova proposta das rotas, padronizando no esquema REST (22/01/2014)
# sufixo de [localização] /[repo]/[mucua] # mucua /[repo]/[mucua]/mucua # get data from mucua # mocambola /[repo]/[mucua]/mocambola/[user] {get} # get mocambola /[repo]/[mucua]/mocambola/[user] {put, delete} # update/delete mocambola # funcionalidades media /[repo]/[mucua]/media {post} # insere media /[repo]/[mucua]/media/[uuid] {get} # get media /[repo]/[mucua]/media/[uuid] {put, delete} # update/delete media /[repo]/[mucua]/media/last {get} # pega últimas medias adicionadas # funcionalidades bbx /[repo]/[mucua]/bbx/[comando]/[args] /[repo]/[mucua]/bbx/localsync # sync direto /[repo]/[mucua]/bbx/netsync # sync net /[repo]/[mucua]/bbx/syncqueue # mostra lista de sync /[repo]/[mucua]/bbx/init # inicializa mucua /[repo]/[mucua]/bbx/remote {post, put, delete) # add/update/del git remote /[repo]/[mucua]/bbx/viewmucuas {get} # lista mucuas /[repo]/[mucua]/bbx/diffmucuas/:mucua2 {get} # diff mucuaatual/mucua2) # funcionalidades básicas para definição de escopo /repository/list # lista repositorios disponíveis /repository/* # get default repository /[repo]/mucuas # get mucuas /mucua/ # get default mucua /mucua/list # get list of mucuas # busca /[repo]/[mucua]/bbx/search/[arg1]/[arg2]/... # busca por args # admin / usuário /[repo]/[mucua]/login /login /logout /admin/[...]
API / Rotas de acesso (proposta anterior)
Outra proposta sobre as rotas, simplificada, do ponto de vista da API:
# sufixo de [localização] /[repo]/[nomemucua] # mucua /[repo]/local # alias para [mucua] /[repo]/externo # mucuas externas /[repo]/rede # todas mucuas # funcionalidades media /[repo]/[localizacao]/media {post} # insere media (media_detail) /[repo]/[localizacao]/media/[uuid] {get} # get media (media_list) /[repo]/[localizacao]/media/[uuid] {put, delete} # update/delete media (media_detail) # funcionalidades bbx /[repo]/[localizacao]/bbx/[comando]/[args] /[repo]/[localizacao]/bbx/localsync # sync direto /[repo]/[localizacao]/bbx/netsync # sync net /[repo]/[localizacao]/bbx/syncqueue # mostra lista de sync /[repo]/[localizacao]/bbx/init # inicializa mucua /[repo]/[localizacao]/bbx/remote {post, put, delete) # add/update/del git remote /[repo]/[localizacao]/bbx/viewmucuas {get} # lista mucuas /[repo]/mucuaatual/bbx/diffmucuas/:mucua2 {get} # diff mucuaatual/mucua2) # busca /[repo]/[localizacao]/bbx/search/[arg1]/[arg2]/... # busca por args # admin / usuário /[repo]/[localizacao]/login /login /logout /admin/[...]
Listagem anterior da API / Rotas
Abaixo, listamos um rascunho dos links de acesso a fucionalidades. O texto abaixo é um exercício de listar caminhos, acesso a funções e variáveis.
/[repositorio]/[mucua] /[repositorio]/local (alias pra mucua atual) /[repositorio]/externo (alias para outras mucuas exceto atual) /[repositorio]/rede (todos) /[repositorio]/kalakuta /mocambos/local/ /[repositorio]/[mucua]/etiqueta1/etiqueta2/etiqueta3 /[repositorio]/[mucua]/mocambola1/etiqueta1 /[repositorio]/[mucua]/mocambola/mocambola1 /[repositorio]/[mucua]/mocambola/vince/etiqueta/documentário /[repositorio]/[mucua]/etiqueta/documentario/mocambola/vince /[repositorio]/[mucua]/etiqueta/:etiqueta/mocambola/:mocambola /[repositorio]/[mucua]/mocambola/:mocambola/etiqueta/:etiqueta /[repositorio]/[mucua]/etiqueta/:historia/:video /mocambos/[mucua]/bbx/search/q=video&alcântara&encontro (busca geral em todos metadados) /[repositorio]/[mucua]/media/:uuid -> getFile(uuid) {get} /[repositorio]/[mucua]/media/ {post,put,delete} -> publishFile() /[repositorio]/[mucua]/media/cfb8e07e-49ab-489b-a4da-70ff8f715640 -> get(arquivo TAL - hash) /mocambos/[mucua]/bbx/localsync {post} /mocambos/[mucua]/bbx/netsync {post} /mocambos/[mucua]/bbx/syncqueue {post} /mocambos/[mucua]/bbx/init {post} /mocambos/[mucua]/bbx/remote {post, put, delete) /mocambos/[local]/bbx/viewmucuas {get} /mocambos/[externo]/bbx/viewmucuas {get} /mocambos/[mucua]/bbx/diffmucuas/:mucua2 {get} (entre atual e mucua 2) /mocambos/[mucua]/bbx/availability/:qtd {get} /mocambos/taina/bbx/status {taina} -> infos da mucua taina /mocambos/rede/bbx/status {rede} -> infos das mucuas