Documentação da infraestrutura: mudanças entre as edições
Linha 106: | Linha 106: | ||
| | | | ||
|} | |} | ||
=== Produção === | |||
Atualmente, 2024, a máquina Digital Ocean <code>addressforall</code> (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 <code>pg_lsclusters</code> temos a porta padrão apontando para versão 14, cluster "main" usuário postgres, pasta <code>/var/lib/postgresql/14/main</code> e logs em <code>/var/log/postgresql/postgresql-14-main.log</code>. 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. | |||
= Servidores de trabalho = | = Servidores de trabalho = |
Edição das 21h33min de 2 de junho 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 | v11.2.1 stable 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 | ||||
sort -hr | head -n10` ou ncdu v2 | ncdu | v2 | v2 | v2 |
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.
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
Utilizamos KVM e imagem cloud do Ubuntu 22.04 num hospedeiro Debian 12.Etapa opcional se já estiver rodando um Ubuntu 22.04.
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
# postgresql e postgis
sudo apt-get install -y postgresql-14 postgis postgresql-14-postgis-3 postgresql-postgis --no-install-recommends
# Extensão plpython
sudo apt-get install -y postgresql-plpython3-14 --no-install-recommends
# gdal e proj
sudo apt-get install -y gdal-bin proj-bin --no-install-recommends
# chevron para Mustache
sudo apt-get install python3-pip --no-install-recommends
sudo pip3 install chevron
# ferramentas diversas
sudo apt-get install -y git make vim wget zip unzip p7zip p7zip-rar p7zip-full --no-install-recommends
# opcionais
#sudo apt-get install -y bash-completion tmux silversearcher-ag --no-install-recommends
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
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
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 service postgresql restart
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}
sudo chmod -R o-x /tmp/{sandbox,pg_io}
Clonar repositórios
for repo in \
a4a/WS \
a4a/pg_pubLib-v1 \
dg/licenses \
dg/preserv \
dg/preserv-AR \
dg/preserv-BO \
dg/preserv-BR \
dg/preserv-CL \
dg/preserv-CM \
dg/preserv-CO \
dg/preserv-EC \
dg/preserv-PE \
dg/preserv-PY \
dg/preserv-SR \
dg/preserv-UY \
dg/preserv-VE \
dg/preserv-MX \
dg/preservDataViz \
dg/stats \
osmc/benchmark \
osmc/BR_new \
osmc/CO_new \
osmc/CM \
osmc/EC_new \
osmc/GGeohash \
osmc/UY_new \
osmc/WS \
osmc/NaturalCodes
do
echo /var/gits/_${repo%%/*}
if [[ ${repo%%/*} == 'dg' ]]
then
project='digital-guard'
fi
if [[ ${repo%%/*} == 'a4a' ]]
then
project='AddressForAll'
fi
if [[ ${repo%%/*} == 'osmc' ]]
then
project='osm-codes'
fi
echo ${project}
if [ -d "/var/gits/_${repo}" ]; then
pushd /var/gits/_${repo}
git pull
popd
else
pushd /var/gits/_${repo%%/*}
git clone git@github.com:${project}/${repo##*/}.git
#git clone https://github.com/${project}/${repo##*/}.git
popd
fi
done
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
...