- Requisitos: Ubuntu 16.04 ou 18.04
- Common
- Catalog
- Archiver
- Dispatcher
- Scheduler
- Dashboard
- Arrebol
- Workers
- Testes NOP
- Atachando volume ao nfs
- Crontab
- Logrotate
- Esse repositório é necessário para:
- Instale o JDK, Maven, Git
sudo apt-get update sudo apt-get -y install openjdk-8-jdk sudo apt-get -y install maven sudo apt-get -y install git
- Clone e instale as dependencias
git clone https://github.com/ufcg-lsd/saps-common ~/saps-common cd ~/saps-common sudo mvn install
- $catalog_user=catalog_user
- $catalog_passwd=catalog_passwd
- $catalog_db_name=catalog_db_name
- $installed_version= Verifique a sua versão do PostgreSQL
-
Configure o saps-common
-
Clone e instale as dependencias
git clone https://github.com/ufcg-lsd/saps-catalog ~/saps-catalog cd ~/saps-catalog sudo mvn install
-
Instale o postgres
sudo apt-get install -y postgresql
-
Instale o pip e o pandas
sudo apt install python3-pip pip3 install pandas pip3 install tqdm
-
Configure o Catalog
sudo su postgres export catalog_user=catalog_user export catalog_passwd=catalog_passwd export catalog_db_name=catalog_db_name psql -c "CREATE USER $catalog_user WITH PASSWORD '$catalog_passwd';" psql -c "CREATE DATABASE $catalog_db_name OWNER $catalog_user;" psql -c "GRANT ALL PRIVILEGES ON DATABASE $catalog_db_name TO $catalog_user;" exit
-
Adicione a senha como exigencia para acesso ao PostgreSQL
- Esse passo irá fazer com que qualquer usuário cadastrado no postgresql precise de uma senha para acessar o banco de dados
sudo su export installed_version=`ls /etc/postgresql` sed -i 's/peer/md5/g' /etc/postgresql/$installed_version/main/pg_hba.conf echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/$installed_version/main/pg_hba.conf sed -i "$ a\listen_addresses = '*'" /etc/postgresql/$installed_version/main/postgresql.conf service postgresql restart exit
-
Teste o acesso do Catalog
psql -h <catalog_ip_address> -p 5432 $catalog_db_name $catalog_user
- Exemplo:
psql -h localhost -p 5432 catalog_db_name catalog_user
- Exemplo:
-
Configure o Dispatcher
Para rodar o script do landsat é necessário que o dispatcher esteja rodando.
- Execute o script /scripts/fetch_landsat_data.sh (ele demora um pouco)
cd ~/saps-catalog/scripts
sudo bash fetch_landsat_data.sh
- $nfs_server_folder_path=/nfs
- Configure o saps-common
- Instale as dependencias do saps-catalog
git clone https://github.com/ufcg-lsd/saps-catalog ~/temp/saps-catalog cd ~/temp/saps-catalog sudo mvn install cd - sudo rm -rf ~/temp/saps-catalog sudo rm -d ~/temp/
- Clone e instale as dependencias
git clone https://github.com/ufcg-lsd/saps-archiver ~/saps-archiver cd ~/saps-archiver sudo mvn install
- Crie e configure uma pasta compartilhada para armazenar os arquivos de cada etapa de processamento
-
OBS: Caso o espaço para armazenamento seja pequeno, você pode atachar um volume ao nfs
-
NFS (Opção 1)
- Configurando
sudo su apt-get install -y nfs-kernel-server export nfs_server_folder_path=/nfs mkdir -p $nfs_server_folder_path echo $nfs_server_folder_path '*(rw,insecure,no_subtree_check,async,no_root_squash)' >> /etc/exports exportfs -arvf service nfs-kernel-server enable service nfs-kernel-server restart exit
- Testando
showmount -e localhost
-
SWIFT (Opção 2)
TODO
- Configure apache (necessário para acesso aos dados por email)
-
(Seria legal migrar isso pra nginx)
-
Instale o apache
sudo apt-get install -y apache2
-
Modifique o arquivo sites-available/default-ssl.conf
sudo vim /etc/apache2/sites-available/default-ssl.conf
- Mude o DocumentRoot para o diretorio do nfs (default = /nfs)
DocumentRoot $nfs_server_folder_path # Exemplo: DocumentRoot /nfs
- Mude o DocumentRoot para o diretorio do nfs (default = /nfs)
-
Modifique o arquivo sites-available/000-default.conf
sudo vim /etc/apache2/sites-available/000-default.conf
- Mude o DocumentRoot e adicione as linhas em sequencia
DocumentRoot $nfs_server_folder_path # Exemplo: DocumentRoot /nfs Options +Indexes <Directory $nfs_server_folder_path> # Exemplo: <Directory /nfs> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
- Mude o DocumentRoot e adicione as linhas em sequencia
-
Modifique o arquivo sites-available/000-default.conf
sudo vim /etc/apache2/apache2.conf
- Mude o FilesMatch
<FilesMatch ".+\.(txt|TXT|nc|NC|tif|TIF|tiff|TIFF|csv|CSV|log|LOG|metadata)$"> ForceType application/octet-stream Header set Content-Disposition attachment </FilesMatch>
- Mude o FilesMatch
-
Após configurar os arquivos, execute:
sudo a2enmod headers sudo service apache2 restart
Configure o arquivo /config/archiver.conf de acordo com os outros componentes
- Exemplo (nfs): archiver.conf
-
Executando archiver
bash bin/start-service
-
Parando archiver
bash bin/stop-service
-
Configure o saps-common
-
Instale as dependencias do saps-archiver
git clone https://github.com/ufcg-lsd/saps-archiver ~/temp/saps-archiver cd ~/temp/saps-archiver sudo mvn install cd - sudo rm -rf ~/temp/saps-archiver sudo rm -d ~/temp/
-
Instale as dependencias do saps-catalog
git clone https://github.com/ufcg-lsd/saps-catalog ~/temp/saps-catalog cd ~/temp/saps-catalog sudo mvn install cd - sudo rm -rf ~/temp/saps-catalog sudo rm -d ~/temp/
-
Clone e instale as dependencias
git clone https://github.com/ufcg-lsd/saps-dispatcher ~/saps-dispatcher cd ~/saps-dispatcher sudo mvn install
-
Instale as dependências do script python (get_wrs.py)
sudo apt-get install -y python-gdal sudo apt-get install -y python-shapely sudo apt-get -y install curl jq sed
Configure o arquivo /config/dispatcher.conf de acordo com os outros componentes
- Exemplo (nfs): dispatcher.conf
-
Executando dispatcher
bash bin/start-service
-
Parando dispatcher
bash bin/stop-service
- Configure o saps-common
- Instale as dependencias do saps-catalog
git clone https://github.com/ufcg-lsd/saps-catalog ~/temp/saps-catalog cd ~/temp/saps-catalog sudo mvn install cd - sudo rm -rf ~/temp/saps-catalog sudo rm -d ~/temp/
- Clone e instale as dependencias
git clone https://github.com/ufcg-lsd/saps-scheduler ~/saps-scheduler cd ~/saps-scheduler sudo mvn install
Configure o arquivo /config/scheduler.conf de acordo com os outros componentes
- Exemplo (nfs): scheduler.conf
-
Antes da execução é necessário instalar e configurar o Arrebol
-
Executando scheduler
bash bin/start-service
-
Parando scheduler
bash bin/stop-service
Para rodar o projeto corretamente, siga os passos abaixo:
sudo apt-get update
sudo apt-get upgrade
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
nvm install --lts
nvm use --lts
npm install react@latest
npm install react-dom@latest
npm install axios
Caso seja necessário, você pode alterar a porta na qual o Dashboard irá rodar (default = 3000). Abaixo o exemplo de como definir a porta como 8081:
- Navegue até o arquivo
saps-dashboard/package.json
. - Localize a parte de scripts e altere a variável
dev
para:
"dev": "next dev -p 8081"
- Acesse Mapbox.
- Crie uma conta ou faça login.
- Gere um novo token para consumir a API.
- Copie esse token e cole no campo
<Seu Token Aqui>
no arquivo.env.local
.
Crie um arquivo chamado .env.local
na raiz do projeto e adicione as seguintes linhas:
NEXT_PUBLIC_API_URL=<IP:Porta do Dispatcher>
NEXT_PUBLIC_MAP_API_KEY=<Seu Token Aqui>
Depois de concluir as etapas de configuração, você pode rodar o projeto com os comandos abaixo:
npm run dev
- $arrebol_db_passwd=@rrebol
- $arrebol_db_name=arrebol
- $arrebol_db_user=arrebol_db_user
Para evitar conflitos na configuração do Arrebol, é importante que o banco de dados do Arrebol e do Catalog sejam armazenados em instâncias diferentes. Caso seja inviável armazená-los em instâncias separadas, uma alternativa é criar um único banco de dados para ambos, garantindo que os dados de cada sistema estejam claramente separados. Entretanto, essa opção requer cuidado para evitar conflitos no acesso aos dados.
-
Instale o JDK, Maven e Git
sudo apt-get update sudo apt-get -y install openjdk-8-jdk sudo apt-get -y install maven sudo apt-get -y install git sudo apt-get install -y postgresql
-
Clone e instale as dependencias
git clone -b develop https://github.com/cilasmarques/arrebol ~/arrebol cd ~/arrebol sudo mvn install
-
Configure o BD do arrebol
sudo su postgres export arrebol_db_user=arrebol_db_user export arrebol_db_passwd=@rrebol export arrebol_db_name=arrebol psql -c "CREATE USER $arrebol_db_user WITH PASSWORD '$arrebol_db_passwd';" psql -c "CREATE DATABASE $arrebol_db_name OWNER $arrebol_db_user;" psql -c "ALTER USER $arrebol_db_user PASSWORD '$arrebol_db_passwd';" exit
-
Teste o acesso do bd do arrebol
psql -h <arrebol_ip_address> -p 5432 $arrebol_db_name arrebol_db_user
- Exemplo:
psql -h localhost -p 5432 arrebol arrebol_db_user
- Exemplo:
Configure os arquivos src/main/resources/application.properties e src/main/resources/arrebol.json de acordo com os outros componentes
- Exemplo: application.properties
- Exemplo: arrebol.json
- Essa configuração deve ser feita na mesma máquina que executará o arrebol.
- Para configurar o worker, siga esses passos
-
Executando arrebol
sudo bash bin/start-service.sh
-
Parando arrebol
sudo bash bin/stop-service.sh
- Após a execução do arrebol, são criadas as tabelas no bd, com isso é preciso adicionar as seguintes constraints
psql -h localhost -p 5432 arrebol arrebol_db_user ALTER TABLE task_spec_commands DROP CONSTRAINT fk7j4vqu34tq49sh0hltl02wtlv; ALTER TABLE task_spec_commands ADD CONSTRAINT commands_id_fk FOREIGN KEY (commands_id) REFERENCES command(id) ON DELETE CASCADE; ALTER TABLE task_spec_commands DROP CONSTRAINT fk9y8pgyqjodor03p8983w1mwnq; ALTER TABLE task_spec_commands ADD CONSTRAINT task_spec_id_fk FOREIGN KEY (task_spec_id) REFERENCES task_spec(id) ON DELETE CASCADE; ALTER TABLE task_spec_requirements DROP CONSTRAINT fkrxke07njv364ypn1i8b2p6grm; ALTER TABLE task_spec_requirements ADD CONSTRAINT task_spec_id_fk FOREIGN KEY (task_spec_id) REFERENCES task_spec(id) ON DELETE CASCADE; ALTER TABLE task DROP CONSTRAINT fk303yjlm5m2en8gknk80nkd27p; ALTER TABLE task ADD CONSTRAINT task_spec_id_fk FOREIGN KEY (task_spec_id) REFERENCES task_spec(id) ON DELETE CASCADE;
- Requisição
curl http://<arrebol_ip>:8080/queues/default
- Resposta esperada
{"id":"default","name":"Default Queue","waiting_jobs":0,"worker_pools":1,"pools_size":5}
- Clone o repositório
git clone -b develop https://github.com/cilasmarques/arrebol ~/arrebol
- Instale as dependencias do docker
cd arrebol/deploy sudo bash setup.sh
Configure os arquivos da pasta deploy/config/ de acordo com os outros componentes
- Exemplo: postgres.env
- Exemplo: pgadmin.env
- Exemplo: application.properties
- Exemplo: arrebol.json
- Exemplo: init.sql
- Essa configuração deve ser feita na mesma máquina que executará o arrebol**.
- Para configurar o worker, siga esses passos
-
Executando arrebol
sudo bash deploy.sh start
-
Parando arrebol
sudo bash deploy.sh stop
- Requisição
curl http://<arrebol_ip>:8080/queues/default
- Resposta esperada
{"id":"default","name":"Default Queue","waiting_jobs":0,"worker_pools":1,"pools_size":5}
- Instale Docker
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io
-
Modifique o arquivo /lib/systemd/system/docker.service
sudo vim /lib/systemd/system/docker.service
- Mude o ExecStart e substitua pelas seguintes linhas
ExecStart=/usr/bin/dockerd -H fd:// -H=tcp://0.0.0.0:5555 --containerd=/run/containerd/containerd.sock
- Mude o ExecStart e substitua pelas seguintes linhas
-
Reinicie o deamon e o docker
sudo systemctl daemon-reload sudo service docker restart
-
Faça pull imagens dockers
sudo docker pull fogbow/inputdownloader:googleapis sudo docker pull fogbow/preprocessor:default sudo docker pull fogbow/worker:ufcg-sebal sudo docker pull fogbow/inputdownloader:usgsapis sudo docker pull fogbow/preprocessor:legacy sudo docker pull fogbow/worker:sebkc-sebal sudo docker pull fogbow/worker:sebkc-tseb
- Requisição
curl http://<worker_ip>:5555/version
- Resposta esperada
{ "Platform": { "Name": "Docker Engine - Community" }, "Components": [ { "Name": "Engine", "Version": "19.03.7", "Details": { "ApiVersion": "1.40", "Arch": "amd64", "BuildTime": "2020-03-04T01:21:08.000000000+00:00", "Experimental": "false", "GitCommit": "7141c199a2", "GoVersion": "go1.12.17", "KernelVersion": "4.15.0-88-generic", "MinAPIVersion": "1.12", "Os": "linux" } }, { "Name": "containerd", "Version": "1.2.13", "Details": { "GitCommit": "7ad184331fa3e55e52b890ea95e65ba581ae3429" } }, { "Name": "runc", "Version": "1.0.0-rc10", "Details": { "GitCommit": "dc9208a3303feef5b3839f4323d9beb36df0a9dd" } }, { "Name": "docker-init", "Version": "0.18.0", "Details": { "GitCommit": "fec3683" } } ], "Version": "19.03.7", "ApiVersion": "1.40", "MinAPIVersion": "1.12", "GitCommit": "7141c199a2", "GoVersion": "go1.12.17", "Os": "linux", "Arch": "amd64", "KernelVersion": "4.15.0-88-generic", "BuildTime": "2020-03-04T01:21:08.000000000+00:00" }
Configure os arquivos da pasta **/worker/deploy/hosts.conf ** de acordo com os outros componentes
- Exemplo:
# worker_ip[anything] worker_ip_1=10.11.19.104 remote_user=ubuntu # The NFS Server Address nfs_server=10.11.19.80 # The NFS Server directory to mount nfs_server_dir=/nfs # Required (if not specified, ansible will use the host ssh keys) ansible_ssh_private_key_file=/home/ubuntu/keys/saps22
cd ~/arrebol/worker/deploy/
sudo bash install.sh
- Requisição
curl http://<worker_ip>:5555/version
- Resposta esperada
{ "Platform": { "Name": "Docker Engine - Community" }, "Components": [ { "Name": "Engine", "Version": "19.03.7", "Details": { "ApiVersion": "1.40", "Arch": "amd64", "BuildTime": "2020-03-04T01:21:08.000000000+00:00", "Experimental": "false", "GitCommit": "7141c199a2", "GoVersion": "go1.12.17", "KernelVersion": "4.15.0-88-generic", "MinAPIVersion": "1.12", "Os": "linux" } }, { "Name": "containerd", "Version": "1.2.13", "Details": { "GitCommit": "7ad184331fa3e55e52b890ea95e65ba581ae3429" } }, { "Name": "runc", "Version": "1.0.0-rc10", "Details": { "GitCommit": "dc9208a3303feef5b3839f4323d9beb36df0a9dd" } }, { "Name": "docker-init", "Version": "0.18.0", "Details": { "GitCommit": "fec3683" } } ], "Version": "19.03.7", "ApiVersion": "1.40", "MinAPIVersion": "1.12", "GitCommit": "7141c199a2", "GoVersion": "go1.12.17", "Os": "linux", "Arch": "amd64", "KernelVersion": "4.15.0-88-generic", "BuildTime": "2020-03-04T01:21:08.000000000+00:00" }
- Para testar o sistema, você pode utilizar os testes NOP
- Existem varias variações do teste e você pode escolher qual executar pelo arquivo: saps-quality-assurance/start-systemtest
- Dashboard
- Arquivo: dashboardApp.js (linha 10 ~ 49)
- Dispatcher
- Arquivo: execution_script_tags.json
- Scheduler
- Arquivo: execution_script_tags.json
Após adicionados, execute novamente o build no Scheduler e no Dispatcher.
sudo mvn install
git clone https://github.com/ufcg-lsd/saps-quality-assurance ~/saps-quality-assurance
cd ~/saps-quality-assurance
- Comando:
sudo bash start-systemtest <admin_email> <admin_password> <dispatcher_ip_addrres> <submission_rest_server_port>
- Exemplo:
sudo bash start-systemtest dispatcher_admin_email dispatcher_admin_password 127.0.0.1:8091
- Exemplo:
- Atachar um volume é útil para expandir o espaço de armazenamento de uma pasta (tipo um hd externo)
- Crie uma patição no volume
- Comando:
fdisk <volume>
- Exemplo:
fdisk /dev/sdb
- Comando:
- Verifique se a partição foi feita
- Comando:
lsblk
- Comando:
- Defina um tipo de formatação para a partição
- Comando:
mkfs --type <formato> <particao>
- Exemplo:
mkfs --type ext4 /dev/sdb1
- Comando:
- Monte a partição em um diretorio:
- Comando:
mount <particao> <diretorio>
- Exemplo:
mount /dev/sdb1 /nfs
- Comando:
- Crie uma patição no volume
- Comando:
parted <volume>
- Exemplo:
parted /dev/sdb
- Comando:
- Crie uma label
- Comando:
mklabel gpt
- Comando:
- Defina a unidade de armazenamento
- Comando:
unit TB
- Comando:
- Informa o tamanho do armazenamento
- Comando:
mkpart primary <init>TB <limit>TB
- Exemplo:
mkpart primary 0.00TB 2.00TB
- Comando:
- Verifique se a partição foi feita e salve
- Comando:
print
- Comando:
quit
- Comando:
- Defina um tipo de formatação para a partição
- Comando:
sudo mkfs.ext4 <volume>
- Comando:
sudo mkfs.ext4 /dev/sdb1
- Comando:
- Monte a partição em um diretorio:
- Comando:
mount <particao> <diretorio>
- Exemplo:
mount /dev/sdb1 /nfs
- Comando:
-
catalog -> crontab do script de sumarização
0 0 1,15 * * sudo bash /home/ubuntu/saps-catalog/scripts/fetch_landsat_data.sh 0 0 * * * bash /home/ubuntu/saps-catalog/scripts/build_tasks_overview.sh
-
archiver -> crontab do script de contagem-dirs-arquivados
* * */1 * * bash /home/ubuntu/saps-archiver/scripts/build_archiver_overview.sh
-
dispatcher -> crontab do script de acessos + scripts de sumarização_manel
59 23 * * * sudo bash /home/ubuntu/saps-dispatcher/scripts/login_counter.sh 0 0 * * * sudo /bin/bash ~/saps-dispatcher/stats/stats_archived.sh > ~/saps-dispatcher/scripts/summary.csv 0 0 * * * sudo /bin/bash ~/saps-dispatcher/stats/logins_accumulator.sh >> ~/saps-dispatcher/scripts/summary.csv 0 0 * * * sudo python3 ~/saps-dispatcher/stats/stats_tasks_raw_data.py
-
arrebol -> crontab do script de limpeza do banco de dados
0 0 * * * sudo bash /home/ubuntu/arrebol/bin/db_cleaner.sh
-
workers -> crontab dos containers não finalizados
0 0 * * * sudo docker ps -aq | sudo xargs docker stop | sudo xargs docker rm