Subir aplicação customizada em Python

18 de setembro de 2023

Observação: É necessário ter conhecimentos em SSH, permissão de SUDO e uma aplicação do tipo Python criada no painel para realizar as etapas abaixo.

Antes de realizar os passos para subir a aplicação, recomendamos testar o funcionamento da mesma, executando na pasta raiz da aplicação o comando source activate e na pasta www rodar a aplicação: python app.py (ou arquivo principal da aplicação).

Se a aplicação funcionar corretamente no teste, é possível seguir com os próximos passo, caso contrário, é necessário revisar a aplicação até que a mesma esteja pronta para ser configurada para o funcionamento automático.

Passo 1: Criar um script para iniciar o ambiente virtual da aplicação:

No diretório raiz da aplicação (por exemplo: /srv/teste.dominio.com/), crie um arquivo start.sh com o seguinte conteúdo:

cd /srv/teste.dominio.com/
vim (ou nano) start.sh

Inclua o seguinte conteúdo no arquivo start.sh:

#!/bin/bash

# Ativa o ambiente virtual
source /srv/teste.dominio.com/.virtualenv/3.7/bin/activate

# Inicia a aplicação Python
exec /srv/teste.dominio.com/.virtualenv/3.7/bin/python /srv/teste.dominio.com/www/app.py

Dê permissão de execução ao script:

sudo chmod +x start.sh

Lembre-se de substituir teste.dominio.com pelo domínio e app.py pelo arquivo principal da sua aplicação customizada. Se você estiver usando uma versão diferente do Python, ajuste a versão no arquivo start.sh, substituindo 3.7 pela versão selecionada no painel.

Passo 2: Após criar a aplicação, é necessário criar um serviço para a aplicação funcionar persistentemente. Use o seguinte comando para criar um arquivo de serviço:

sudo vim (ou nano) /etc/systemd/system/teste.service

(Nome do serviço pode ser escolhido a seu critério.)

No arquivo, insira o seguinte conteúdo:

[Unit]
Description=App Customizado
After=network.target

[Service]
ExecStart=/bin/bash -c '/srv/teste.dominio.com/start.sh $PORT'
WorkingDirectory=/srv/teste.dominio.com/www
Restart=always
Environment="PORT=8050"

[Install]
WantedBy=multi-user.target

Lembre-se de substituir teste.dominio.com pelo domínio da aplicação em questão, escolher a porta desejada para a aplicação iniciar (utilize uma porta, que não esteja em uso, para cada aplicação customizada) alterando 8050 para a porta desejada, e escolha um Nome de visualização do serviço em “Description”.

Após salvar o arquivo, execute o seguinte comando para recarregar os serviços:

sudo systemctl daemon-reload

Em seguida, inicie o serviço criado:

sudo systemctl start teste (ou o nome escolhido para o serviço)

Passo 3: Após criar e iniciar o serviço, é hora de configurar o proxy no Nginx.
Use o seguinte comando para editar o arquivo de configuração do proxy:

sudo vim (ou nano) /srv/teste.dominio.com/etc/nginx/conf.d/proxy.conf

No arquivo, insira o seguinte conteúdo:

location ~* ^/.*$ {
    proxy_pass http://localhost:8050;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Lembre-se de utilizar a mesma porta definida no serviço (teste.service).

Após isso, reinicie o Nginx:

sudo systemctl restart nginx

Após realizar esses passos, a aplicação será servida no domínio da aplicação.
Para atualizar o conteúdo da aplicação ou reiniciá-la, basta reiniciar o serviço criado:

sudo systemctl restart teste (ou nome escolhido)

E para verificar o status do serviço:

sudo systemctl status teste (ou nome escolhido)

Lembre-se de remover o serviço (/etc/systemd/system/teste.service ou o nome escolhido) caso a aplicação seja removida da Cloud:

sudo systemctl stop teste (ou nome escolhido)
sudo rm /etc/systemd/system/teste.service (ou nome escolhido)