Dependencias:
- Docker version 25.0.1
- git version 2.39.3
- Usuario pertencente ao grupo
ton(15010)
- Acesso ao lustre
- Acesso ao banco de dados desdb4 - prod_gavo
- Acesso a um banco de dados especifico para o portal.
- Chave ssh criada no home do usuario.
- Acesso ao slurm para execução do pipeline de predição.
Estes passos foram usados no deploy do ambiente: https://solarsystem.linea.org.br
Considerando:
- Maquina srvnode06
- Usuario app.tno (31670:15010)
- Instalação feita no path:
/lustre/t1/scratch/users/app.tno/tno_prod
- Chave ssh previamente criada em:
/lustre/t1/scratch/users/app.tno/.ssh/id_rsa
Clone do repositório para uma pasta temporaria tno_temp
, Criação das pastas e arquivos de configuração, remoção dos arquivos usados na instalação.
git clone https://github.com/linea-it/tno.git tno_temp \
&& cp -r tno_temp/compose/production tno_prod \
&& cp tno_temp/predict_occultation/environment.py3.yml tno_prod \
&& mkdir -p tno_prod tno_prod/logs tno_prod/data tno_prod/data/rabbitmq \
&& chmod -R g+w tno_prod \
&& cd tno_prod \
&& mv env-template .env \
&& mv docker-compose-template.yml docker-compose.yml \
&& mv local_settings-template.py local_settings.py \
&& mv nginx_proxy-template.conf nginx_proxy.conf
Daqui em diante todos os comandos estão considerando que a pasta atual é tno_prod.
Este miniconda é usado pelo pipeline predict_occultation e é especifico para este ambiente.
IMPORTANTE No momento a instalação do miniconda está falhando quando executada direto da srvnode06. O workaround é executar os proximos comandos a partir da maquina srvnode04. mas usando o mesmo usuario app.tno e o mesmo diretório. Pode ser necessário alterar o path onde o miniconda sera instalado. basta editar o script e fazer a alteração de acordo com o path.
IMPORTANTE II A instalação DEVE ser feita em algum node do cluster ou node de submissão.
miniconda_path="/lustre/t1/scratch/users/app.tno/<PROJ_DIR>/miniconda"
Dentro da pasta existe um script install_miniconda.sh esse script baixa e instala o miniconda no path configurado na variavel miniconda_path
.
Execute os comandos a seguir para criar o enviroment py3
./install_miniconda.sh \
&& source miniconda/bin/activate \
&& conda env create -f environment.py3.yml \
&& conda deactivate \
&& cd .. && rm -rf tno_temp tno_prod/environment.py3.yml tno_prod/install_miniconda.sh && cd tno_prod
Os arquivos de configuração .env e local_settings já estão preenchidos com valores compativeis com o ambiente de testing. Mas é necessário alterar/preencher as variaveis relacionadas a segurança e acessos.
vim .env
No momento deste documento as variaveis a serem editadas são:
- DJANGO_SECRET_KEY
- RABBITMQ_DEFAULT_PASS
- DB_ADMIN_URI
- DB_CATALOG_URI
Alterar o arquivo de configuração do Django de acordo com a necessidade.
vim local_settings.py
IMPORTANTE! Editar o arquivo docker-compose.yml e conferir os pontos de montagem principalmente o serviço predict_occultation que precisa de uma chave ssh no home do usuario app.tno.
Para preencher a variavel de ambiente .env/DJANGO_SECRET_KEY é necessário executar um comando dentro do container de backend para gerar uma chave aleatória.
docker compose run -it --rm backend python -c "import secrets; print(secrets.token_urlsafe())"
Copie a saida do comando e prencha a variavel DJANGO_SECRET_KEY.
Crie um usuario administrativo para o Django.
docker compose run -it --rm backend python manage.py createsuperuser
Crie os indexes Q3C para as tabelas que utilizam index espacial.
docker compose run -it --rm backend python manage.py create_q3c_index
Load Initial Data (LeapSecond, BspPlanetary, Stelar Catalog)
docker compose run -it --rm backend python manage.py loaddata initial_data.yaml
Load Initial Asteroids Data
docker compose run -it --rm backend python manage.py update_asteroid_table
A criação da tabela de asteorids demora alguns minutos.
Workaround:
A criação da tabela de asteroid depende de 2 arquivos baixados de serviços externos pode ser que ao executar o comando de algum erro caso esses arquivos estejam indisponiveis. Para corrigir isso utilize os arquivos de sample deixados no home do usuario app.tno e execute o comando com a opcao --local.
cp /lustre/t1/scratch/users/app.tno/data_sample/ssoBFT-latest.ecsv.bz2 data/asteroid_table/ \
&& cp /lustre/t1/scratch/users/app.tno/data_sample/mpcorb_extended.json.gz data/asteroid_table/ \
&& docker compose run -it --rm backend python manage.py update_asteroid_table --local
Para ligar todo o ambiente:
docker compose up -d
Para desligar todo o ambiente:
docker compose stop
Reiniciar o ambiente
docker compose stop && docker compose up -d
As imagens docker são geradas automaticamente pelo github actions e estão disponiveis no docker.io https://hub.docker.com/repository/docker/linea/tno/tags?page=1&ordering=last_updated
Exemplo para atualizar as imagens da versão f19ff50
para 4bcaebe
Editar o arquivo .env e alterar a variavel com docker tag desejada.
Antes
# tno_prod/.env
TNO_IMAGE_TAG=f19ff50
...
Depois
# tno_prod/.env
TNO_IMAGE_TAG=4bcaebe
...
Após alterar a imagem basta fazer um pull das novas docker images e restartar os serviços.
docker compose pull && docker compose stop && docker compose up -d