Documentação da infraestrutura: mudanças entre as edições
m (→Ver também) |
|||
(6 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 52: | Linha 52: | ||
| ''Microservices'' (API) server | | ''Microservices'' (API) server | ||
| '''[https://postgrest.org/en/stable/ PostgREST]''' | | '''[https://postgrest.org/en/stable/ PostgREST]''' | ||
| v8 stable | | [https://github.com/PostgREST/postgrest/releases/tag/v8.0.0 v8 stable] | ||
| [https:// | | [https://github.com/PostgREST/postgrest/releases/tag/v9.0.0 v9 stable] | ||
| [https:// | | [https://github.com/PostgREST/postgrest/releases/latest latest] [https://hub.docker.com/layers/postgrest/postgrest/latest/images/sha256-ded2f8ecea6853f73af1c679cdc6f9b8564978b9a028695bcce001b0a7f7fe3a?context=explore containerized] | ||
| [https://github.com/PostgREST/postgrest/releases/latest latest] [https://hub.docker.com/layers/postgrest/postgrest/latest/images/sha256-ded2f8ecea6853f73af1c679cdc6f9b8564978b9a028695bcce001b0a7f7fe3a?context=explore containerized] | |||
|- | |- | ||
| Framework, website | | Framework, website | ||
Linha 97: | Linha 97: | ||
| | | | ||
| [https://github.com/OSGeo/gdal/pkgs/container/gdal/128539391?tag=latest containerized] | | [https://github.com/OSGeo/gdal/pkgs/container/gdal/128539391?tag=latest containerized] | ||
| | | gdal-bin | ||
|- | |- | ||
|`du -sh * | sort -hr | head -n10` ou ncdu v2 | |`du -sh * | sort -hr | head -n10` ou ncdu v2 | ||
Linha 163: | Linha 163: | ||
== Máquina virtual Ubuntu 22.04 == | == Máquina virtual Ubuntu 22.04 == | ||
Aqui utilizamos [https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine KVM] e imagem cloud do [https://cloud-images.ubuntu.com/releases/jammy/release Ubuntu 22.04] num hospedeiro [https://www.debian.org Debian 12]. | |||
=== Instalação no hospedeiro === | === Instalação no hospedeiro === | ||
Linha 257: | Linha 257: | ||
<syntaxhighlight lang="sh">sudo apt-get update | <syntaxhighlight lang="sh">sudo apt-get update | ||
sudo apt-get install -y --no-install-recommends \ | |||
sudo apt-get install -y postgresql-14 postgis postgresql-14-postgis-3 postgresql-postgis | postgresql-14 postgis postgresql-14-postgis-3 postgresql-postgis \ | ||
postgresql-plpython3-14 python3-pip \ | |||
gdal-bin proj-bin \ | |||
git make vim wget zip unzip p7zip p7zip-rar p7zip-full jq parallel \ | |||
bash-completion tmux silversearcher-ag | |||
sudo pip3 install chevron</syntaxhighlight> | |||
sudo | |||
== Configuração do banco de dados == | == Configuração do banco de dados == | ||
Linha 291: | Linha 282: | ||
com | com | ||
<syntaxhighlight lang="sh">cat /etc/postgresql/14/main/pg_hba.conf | <syntaxhighlight lang="sh">sudo cat /etc/postgresql/14/main/pg_hba.conf | ||
sed -E -i 's/local(\s+)all(\s+)postgres(\s+)peer/local\1all\2postgres\3trust/' /etc/postgresql/14/main/pg_hba.conf | sudo sed -E -i 's/local(\s+)all(\s+)postgres(\s+)peer/local\1all\2postgres\3trust/' /etc/postgresql/14/main/pg_hba.conf | ||
sed -E -i 's/local(\s+)all(\s+)all(\s+)peer/local\1all\2all\3trust/' /etc/postgresql/14/main/pg_hba.conf | sudo sed -E -i 's/local(\s+)all(\s+)all(\s+)peer/local\1all\2all\3trust/' /etc/postgresql/14/main/pg_hba.conf | ||
sed -E -i 's;host(\s+)all(\s+)all(\s+)127.0.0.1/32(\s+)scram-sha-256;host\1all\2all\3127.0.0.1/32\4trust;' /etc/postgresql/14/main/pg_hba.conf | sudo sed -E -i 's;host(\s+)all(\s+)all(\s+)127.0.0.1/32(\s+)scram-sha-256;host\1all\2all\3127.0.0.1/32\4trust;' /etc/postgresql/14/main/pg_hba.conf | ||
sudo service postgresql restart | sudo service postgresql restart | ||
cat /etc/postgresql/14/main/pg_hba.conf</syntaxhighlight> | sudo cat /etc/postgresql/14/main/pg_hba.conf</syntaxhighlight> | ||
== Criar diretórios, grupos == | == Criar diretórios, grupos == | ||
Linha 322: | Linha 313: | ||
sudo mkdir -p /tmp/{sandbox,pg_io} | sudo mkdir -p /tmp/{sandbox,pg_io} | ||
sudo chown -R postgres:www-data | sudo chown -R postgres:www-data /tmp/{sandbox,pg_io}</syntaxhighlight> | ||
== Clonar repositórios == | == Clonar repositórios == | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh">pushd /var/gits/_a4a | ||
git clone git@github.com:AddressForAll/WS.git | |||
git clone git@github.com:AddressForAll/pg_pubLib-v1.git | |||
pushd /var/gits/_dg | |||
git clone git@github.com:digital-guard/licenses.git | |||
git clone git@github.com:digital-guard/preserv.git | |||
git clone git@github.com:digital-guard/preserv-AR.git | |||
git clone git@github.com:digital-guard/preserv-BO.git | |||
git clone git@github.com:digital-guard/preserv-BR.git | |||
git clone git@github.com:digital-guard/preserv-CL.git | |||
git clone git@github.com:digital-guard/preserv-CM.git | |||
git clone git@github.com:digital-guard/preserv-CO.git | |||
git clone git@github.com:digital-guard/preserv-EC.git | |||
git clone git@github.com:digital-guard/preserv-PE.git | |||
git clone git@github.com:digital-guard/preserv-PY.git | |||
git clone git@github.com:digital-guard/preserv-SR.git | |||
git clone git@github.com:digital-guard/preserv-UY.git | |||
git clone git@github.com:digital-guard/preserv-VE.git | |||
git clone git@github.com:digital-guard/preserv-MX.git</syntaxhighlight> | |||
== Ajustar permissões == | == Ajustar permissões == | ||
Edição atual tal como às 20h38min de 9 de agosto de 2024
Esta página pode ser desmembrada em subpáginas. Por hora consolidar e revisar.
Infraestrutura do Instituto AddressForAll
O termo infraestrutura pode ser referente a:
- infraestrutura básica: ambientes "em produção". Vinculada à manutenção e preservação do patrimônio. Exemplo: gestão técnica dos nomes de domínio, gestão das contas de e-mail
fulano@openstreetmap.com.br
, gestão dos servidores-web e dos bancos de dados de uso comum (institucionais ou sendo reutilizados para mais de um projeto). - infraestrutura de desenvolvimento: todos os projetos ativos em repositórios git AddressForAll de desenvolvimento de software, servidores-web de teste, bancos de dados temporários, etc.
- infraestrutura de comunicação: ambientes de comunicação do AddressForAll, por hora apenas Comunidade aberta, blogs, caixas postais, e websites presentes nos nossos domínios.
Quando, na documentação, issues ou contratos, o termo infraestrutura não vier especificado, refere-se ao "caso geral", dado pela união dos casos listados acima.
Ambientes e ferramentas de uso geral
Designamos de "ambiente" o sistema operacional, as linguagens de programação e os frameworks de uso geral. Cada um deles deve ser mantido em conformidade com a respectiva versão estável (long term support - LTS). Ambientes que formam o núcleo da infraestrutura AddressForAll:
Ambiente | Nome | em 2021 | em 2022 | atualmente | futuramente |
---|---|---|---|---|---|
Sistema Operacional (server) | Ubuntu | 20.04 LTS | 22.04 LTS | 22.04 LTS | 24.04 LTS |
Banco de dados (SQL server) | PostgreSQL | v12 | v14 | v14 | v16 |
Banco de dados | PostGIS | v3.4.0 | v3.4.2 | ||
Web Server | NGINX | v1.21 | v1.22 | v1.18 | |
Microservices (API) server | PostgREST | v8 stable | v9 stable | latest containerized | latest containerized |
Framework, website | ReactJS | v17 stable | v18 stable | v18 stable | |
Framework, website, language | NodeJS (instalação) | v16 LTS | v16 LTS | v18 LTS | |
Framework, server-side scripts, low-level language | GNU Bash | v4 | v5 | v5 | |
Framework, server-side scripts, high-level language | Python | v3.8 | v3.9 | v3.9 | |
Framework, server-side orchestration | GNU makefile | v4 | v4 | v4 | |
GDAL | containerized | gdal-bin | |||
sort -hr | head -n10` ou ncdu v2 | ncdu | v2 | v2 | v2 |
Backup de uma base
... apesar do controle de versões por git, se houver alguma confusão, a implementação oficial é aquela que estiver rodando no servidor de produção. Vale o dump, por exemplo pg_dump --schema-only -f dl05_dump_test.sql dl05
. Ver dump AFAcodes e sup:Wiki-backup.
Produção
Atualmente, 2024, a máquina Digital Ocean addressforall
(IP 165.227.5.135) é o servidor de produção do AFAcodes e o servidor-old de AddressForAll. Nele podemos conferir:
- porta padrão 5432 e versão do PostgreSQL: pelo comando
pg_lsclusters
temos a porta padrão apontando para versão 14, cluster "main" usuário postgres, pasta/var/lib/postgresql/14/main
e logs em/var/log/postgresql/postgresql-14-main.log
. Demais não deviam estar ocupando espaço, poderiam ser removidos.
Teste e ingestão
... descrever subdomínios e situação .. e máquinas DEV de teste e ingestão...
Se o seu servidor DEV está com PostgreSQL v16 na porta padrão 5432, convém pelo menos deixar instalado um PG de versão 14. Em geral a instalação Ubuntu PostgreSQL oferece o seguinte resultado default para pg_lsclusters
:
14 main 5433 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log 16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
Para chamar usando URI na forma postgres[ql]://[username[:password]@][host[:port],]/database
temos as seguintes situações típicas:
- Para chamar o padrão,
psql postgresql://postgres@localhost/base
oupsql postgres://localhost/dl05s_main
oupsql dl05s_main
- Para chamar a v14,
psql postgresql://postgres@localhost:5433/base
Servidores de trabalho
Para trabalhos de ingestão (ETL) podem ser usadas as máquinas de produção (ainda DigitalOcean) e a remota i7.
Acesso via tailscale
Windows:
Faça download na url https://tailscale.com/download/windows
Instale o tailscale e no icone perto do relógio, clique nele e depois no conect
passe a Url para Carlos Rebollo. Seria bom agendar uma hora para falar sobre a VPN e acesso ao servidor.
Linux: Executar os comandos como root
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
irá gerar uma url
enviar para Carlos Rebollo. Seria bom agendar uma hora para falar sobre a VPN e acesso ao servidor.
Ambiente de trabalho local
Documentação em construção.
Máquina virtual Ubuntu 22.04
Aqui utilizamos KVM e imagem cloud do Ubuntu 22.04 num hospedeiro Debian 12.
Instalação no hospedeiro
Exemplo (adaptar à situação local e o valor de $USER).
sudo apt install libvirt-daemon-system qemu-system-x86 qemu-utils virtinst --no-install-recommends
sudo apt install dnsmasq virt-manager virt-viewer gir1.2-spiceclientgtk-3.0 --no-install-recommends
sudo adduser $USER libvirt
Criação da VM
# diretórios para imagens
DIRVM_TEMPLATES='~/libvirt/images/templates'
DIRVM_IMAGES='~/libvirt/images'
# chave pública para acessar a vm
SSH_PUB_KEY='XXXXXX'
# link para download da imagem
IMAGE_LINK='http://cloud-images.ubuntu.com/minimal/releases/jammy/release/ubuntu-22.04-minimal-cloudimg-amd64.img'
SHASUM='http://cloud-images.ubuntu.com/minimal/releases/jammy/release/SHA256SUMS'
# download e verificação da imagem
cd $DIRVM_TEMPLATES
wget ${IMAGE_LINK} && wget ${SHASUM}{.gpg,}
gpg --verify ${SHASUM/*\/}{.gpg,}
sha256sum -c SHA256SUMS --ignore-missing
# ver infos da imagem
file ${IMAGE_LINK/*\/}
qemu-img info ${IMAGE_LINK/*\/}
# metadados da imagem
VM_NAME='servera4a'
VM_DISK="${VM_NAME}_disk.qcow2"
VM_DISK_SIZE='20G'
VM_VCPUS='2'
VM_RAM='3072'
VM_MAC='52:54:00:00:00:46'
VM_BRIDGE='virbr0'
# VM_BRIDGE='br0'
VM_OS_VARIANT='ubuntu22.04'
VM_METADATA='meta-data.yaml'
VM_USERDATA='user-data.yaml'
cat > ${VM_METADATA} <<EOF
instance-id: $VM_NAME
local-hostname: $VM_NAME
EOF
cat > ${VM_USERDATA} <<EOF
#cloud-config
users:
- name: x
password: xyz
ssh-authorized-keys:
- $SSH_PUB_KEY
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
EOF
# resize da imagem
sudo qemu-img convert -f qcow2 -O qcow2 ${DIRVM_TEMPLATES}/${IMAGE_LINK/*\/} ${DIRVM_IMAGES}/${VM_DISK}
sudo qemu-img resize ${DIRVM_IMAGES}/${VM_DISK} ${VM_DISK_SIZE}
# ver infos da imagem
qemu-img info ${DIRVM_IMAGES}/${VM_DISK}
virt-df -h ${DIRVM_IMAGES}/${VM_DISK}
sudo virt-filesystems --long -h --all -a ${DIRVM_IMAGES}/${VM_DISK}
# criar vm
sudo virt-install \
--name ${VM_NAME} \
--disk ${DIRVM_IMAGES}/${VM_DISK},device=disk,bus=virtio \
--cloud-init meta-data=${VM_METADATA},user-data=${VM_USERDATA} \
--virt-type kvm \
--graphics none \
--vcpus ${VM_VCPUS} \
--memory ${VM_RAM} \
--os-variant=${VM_OS_VARIANT} \
--network network=default,model=virtio,bridge=${VM_BRIDGE},mac=${VM_MAC} \
--import \
# obtem ip da vm
sudo virsh domifaddr servera4a
ssh ipdamaquina
Software suficiente para realizar a maior parte das ingestões
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
postgresql-14 postgis postgresql-14-postgis-3 postgresql-postgis \
postgresql-plpython3-14 python3-pip \
gdal-bin proj-bin \
git make vim wget zip unzip p7zip p7zip-rar p7zip-full jq parallel \
bash-completion tmux silversearcher-ag
sudo pip3 install chevron
Configuração do banco de dados
No arquivo /etc/postgresql/14/main/pg_hba.conf
Ajustar as linhas
local all postgres peer local all all peer host all all 127.0.0.1/32 scram-sha-256
para
local all postgres trust local all all trust host all all 127.0.0.1/32 trust
com
sudo cat /etc/postgresql/14/main/pg_hba.conf
sudo sed -E -i 's/local(\s+)all(\s+)postgres(\s+)peer/local\1all\2postgres\3trust/' /etc/postgresql/14/main/pg_hba.conf
sudo sed -E -i 's/local(\s+)all(\s+)all(\s+)peer/local\1all\2all\3trust/' /etc/postgresql/14/main/pg_hba.conf
sudo sed -E -i 's;host(\s+)all(\s+)all(\s+)127.0.0.1/32(\s+)scram-sha-256;host\1all\2all\3127.0.0.1/32\4trust;' /etc/postgresql/14/main/pg_hba.conf
sudo service postgresql restart
sudo cat /etc/postgresql/14/main/pg_hba.conf
Criar diretórios, grupos
# cria grupo
sudo groupadd www-data
# adiciona usuário corrente aos grupos
sudo usermod -aG www-data $USER
sudo usermod -aG postgres $USER
cat /etc/group
cat /etc/passwd
# cria diretórios e atualiza permissoes
sudo mkdir -p /var/gits/_{a4a,dg,osmc}
ls -la /var/gits
sudo chown -R postgres:www-data /var/gits
sudo chmod -R g+w /var/gits
sudo chmod -R o-x /var/gits
ls -la /var/gits
sudo mkdir -p /tmp/{sandbox,pg_io}
sudo chown -R postgres:www-data /tmp/{sandbox,pg_io}
Clonar repositórios
pushd /var/gits/_a4a
git clone git@github.com:AddressForAll/WS.git
git clone git@github.com:AddressForAll/pg_pubLib-v1.git
pushd /var/gits/_dg
git clone git@github.com:digital-guard/licenses.git
git clone git@github.com:digital-guard/preserv.git
git clone git@github.com:digital-guard/preserv-AR.git
git clone git@github.com:digital-guard/preserv-BO.git
git clone git@github.com:digital-guard/preserv-BR.git
git clone git@github.com:digital-guard/preserv-CL.git
git clone git@github.com:digital-guard/preserv-CM.git
git clone git@github.com:digital-guard/preserv-CO.git
git clone git@github.com:digital-guard/preserv-EC.git
git clone git@github.com:digital-guard/preserv-PE.git
git clone git@github.com:digital-guard/preserv-PY.git
git clone git@github.com:digital-guard/preserv-SR.git
git clone git@github.com:digital-guard/preserv-UY.git
git clone git@github.com:digital-guard/preserv-VE.git
git clone git@github.com:digital-guard/preserv-MX.git
Ajustar permissões
pushd /var/gits/_dg/preserv/src
make fix_permissions
popd
Criar e popular bases
pushd /var/gits/_dg/preserv/src
make
make ini_ingest pg_db=ingest42
make ini_datalake pg_datalake=dl05s_main
popd
wget https://www.addressforall.org/_private/dump.zip
unzip dump.zip
ls
cd dumptabelas
PROD_DB='dl05s_main'
# 05. carregar dump de jurisdiction (futuro: carregar de stable)
# psql postgres://postgres@localhost/${PROD_DB} -c"ALTER TABLE optim.jurisdiction DISABLE TRIGGER ALL;"
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_jurisdiction.sql
# psql postgres://postgres@localhost/${PROD_DB} -c"ALTER TABLE optim.jurisdiction ENABLE TRIGGER ALL;"
# 06. carregar tabelas de geometrias (futuro: carregar de stable)
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_jurisdiction_geom.sql
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_jurisdiction_eez.sql
# 07. carregar tabelas de abreviações (futuro: carregar de stable)
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_jurisdiction_abbrev_ref.sql
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_jurisdiction_abbrev_option.sql
# 08. carregar dados de donor e donatePack
psql postgres://postgres@localhost/${PROD_DB} -c"SELECT optim.insert_donor_pack(t) FROM unnest(ARRAY['BO','BR','CL','CO','EC','PE','PY','SR','UY','VE']) t;"
psql postgres://postgres@localhost/${PROD_DB} -c"SELECT optim.insert_codec_type();"
# 09. Carregar dados de componentes de pacotes (que já foram publicados e disponiveis para publicar)
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_donated_packcomponent.sql
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_donated_packcomponent_not_approved.sql
# 10. Carregar links dos arquivos filtrados
psql postgres://postgres@localhost/${PROD_DB} < pg_dump_donated_packcomponent_cloudcontrol.sql
Exemplo de ingestão
# semente makefile
pushd /var/gits/_dg/preserv-BR/src/
make all
popd
pushd /var/gits/_dg/preserv-BR/data/AC/RioBranco/_pk0042.01/
make me pg_db=ingest42 orig=/tmp
make all_layers pg_db=ingest42 orig=/tmp
...
Ver também
- Documentação da infraestrutura/DigitalOcean (linux servers)
- Documentação da infraestrutura/Oracle (linux servers)