INSTALAÇÃO DO SUAP - AMBIENTE DE PRODUÇÃO
1) Instalar alguns pacotes necessários para a aplicação SUAP
sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove -y
# pacotes utilizados pelo IFCE sudo apt install git python-dev libpq-dev libssl-dev libldap2-dev libsasl2-dev python-setuptools build-essential libncurses5 libncurses5-dev python-pil python-simplejson freetds-dev libxml2 libxml2-dev libxslt-dev cython libblas-dev liblapack-dev libatlas-base-dev gfortran libjpeg8-dev libffi-dev xvfb python-yaml python3-pip virtualenv nginx supervisor python3-setuptools -y # adicionais dos pacotes do IFRN que não constam nos nossos pacotes sudo apt install ghostscript libjpeg-dev libfreetype6-dev zlib1g-dev libxmlsec1-dev libxslt1-dev libglu1-mesa libcairo2 libcups2 libdbus-glib-1-2 libxinerama1 libsm6 python3-dev python3-wheel python3-cffi libpango-1.0-0 libpangocairo-1.0-0 poppler-utils ntpdate swig zlib1g-dev libffi7 -y # pacotes sob análise (que não foram encontrados ou apresentaram versões diferentes) # consta no IFRN e não foi encontrado no Ubuntu 20.04 (utilizando libffi7 como teste) libffi6 # constava no nosso mas a versão encontrada foi python3-suds python-suds
Instalar o wkhtmltopdf (versão >= 0.12.4 - não instalar via apt-get) [verificar se ainda é necessário]
cd /tmp wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz tar xf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz sudo cp /tmp/wkhtmltox/bin/wkhtmltopdf /usr/bin/wkhtmltopdf sudo chown root:root /usr/bin/wkhtmltopdf
Para testar o wkhtmltopdf:
sudo wkhtmltopdf --disable-smart-shrinking --lowquality --enable-external-links --enable-internal-links suap.ifce.edu.br test.pdf
2) Criar a pasta /var/opt/suap
sudo mkdir -p /var/opt/suap && sudo chown -R suap:suap /var/opt/suap
3) Fazer o clone do SUAP
Clone do projeto SUAP com chave de deploy
Obs.: É preciso criar chave de deploy no Gitlab
git clone https://<username>:<deploy_token>@gitlab.ifce.edu.br/SUAP/suap.git /var/opt/suap
4) Configuração de diretórios compartilhados pelo NFS
sudo apt install nfs-common -y sudo systemctl enable nfs-common --now # Importante verificar na máquina de NFS se o arquivo **/etc/exports** consta o IP da máquina local liberado # Na máquina do NFS --> Após alteração do arquivo /etc/exports, reiniciar o serviço com **sudo service nfs-kernel-server restart**
Caso encontre o erro “Failed to enable unit: Unit file /lib/systemd/system/nfs-common.service is masked”
sudo rm /lib/systemd/system/nfs-common.service
Comando para montar volume nos clientes:
# montando sessions sudo mount 200.17.33.234:/opt/suap/deploy/sessions /var/opt/suap/deploy/sessions/ # montando media [ -d /var/opt/suap/deploy/media ] || mkdir -p /var/opt/suap/deploy/media sudo chown suap:suap /var/opt/suap/deploy/media sudo chmod 777 /var/opt/suap/deploy/media sudo mount 200.17.33.234:/opt/suap/deploy/media /var/opt/suap/deploy/media/ # montando arquivos_siape sudo mount 200.17.33.234:/opt/suap/rh/arquivos_siape /var/opt/suap/rh/arquivos_siape/ sudo chown -R www-data:www-data /var/opt/suap/rh/arquivos_siape/ # verificando a existência dos três pontos de montagem acima df -h
Adicionar no crontab:
# Abrir o crontab como sudo: sudo crontab -e # Inserir conteúdo abaixo: @reboot /bin/mount 200.17.33.234:/opt/suap/deploy/sessions /opt/suap/deploy/sessions @reboot /bin/mount 200.17.33.234:/opt/suap/deploy/media /opt/suap/deploy/media @reboot /bin/mount 200.17.33.234:/opt/suap/rh/arquivos_siape /opt/suap/rh/arquivos_siape
5) Crie o arquivo settings.py
# settings_sample.py é um template --> fazer as devidas mudanças em settings.py cp /var/opt/suap/suap/settings_sample.py /var/opt/suap/suap/settings.py
6) Criação do ambiente virtual (Virtualenv) e instalação das bibliotecas do Python/Django com sudo pip install
# criando e ativando ambiente virtual com a versão do python3 virtualenv /home/suap/suap -p $(which python3) && source /home/suap/suap/bin/activate # inserindo a habilitação automática do ambiente virtual no shell padrão do usuário suap echo "source /home/suap/suap/bin/activate" >> /home/suap/.bashrc && exec /bin/bash # instalando os requirements para a aplicação pip install -U -r /var/opt/suap/requirements/production.txt # caso ocorra o erro "ERROR: Command errored out with exit status 128:...", basta executar o comando abaixo e executar o comando acima novamente git config --global url."https://".insteadOf git://
7) Alterar permissões em pastas e arquivos específicos
Alterar proprietário de pastas
sudo mkdir /var/opt/suap/static sudo chown -R www-data:www-data /var/opt/suap/deploy/sessions /var/opt/suap/static sudo chmod -R ugo+rw /var/opt/suap/static
Criar e dar permissões em arquivos de log
sudo touch /var/opt/suap/deploy/logs/debug.log /var/opt/suap/deploy/logs/gunicorn/gunicorn.log sudo chmod ugo+rwx /var/opt/suap/deploy/logs/debug.log /var/opt/suap/deploy/logs/gunicorn/gunicorn.log sudo mkdir /var/log/suap sudo chown -R suap:suap /var/log/suap
8) Aumentar o número máximo de descritores e arquivos abertos
No terminal, digite o comando a seguir:
ulimit -n
Se o terminal exibe 1024, é insuficiente. Como root, Adicione as linhas abaixo ao arquivo /etc/security/limits.conf file e reinicie a máquina.
echo -e "root soft nofile 65536\nroot hard nofile 65536 \n* soft nofile 65536\n* hard nofile 65536" >> /etc/security/limits.conf
9) Configurar Gunicorn e Supervisor
# se o comando abaixo não retornar nada o Gunicorn instalado atualmente # deve ser removido e então instalado via pip pip freeze | grep gunicorn # caso seja necessário desinstalar sudo apt purge gunicorn sudo pip install gunicorn
cp /var/opt/suap/deploy/templates/gunicorn_start.sh /var/opt/suap/deploy/gunicorn_start.sh sudo chmod ugo+x /var/opt/suap/deploy/gunicorn_start.sh sudo cp /var/opt/suap/deploy/templates/suap.conf.supervisor /etc/supervisor/conf.d/suap.conf
sudo systemctl enable supervisor --now
10) Configurar o Nginx
Embora exista um arquivo template, é importante verificar potenciais mudanças.
Em ambiente de homologação sem ssl:
sudo cp /var/opt/suap/deploy/templates/suap_homologacao.nginx /etc/nginx/sites-available/suap sudo ln -s /etc/nginx/sites-available/suap /etc/nginx/sites-enabled/suap sudo systemctl enable nginx --now
Configurando em ambiente de produção com ssl:
sudo cp /var/opt/suap/deploy/templates/suap.nginx /etc/nginx/sites-enabled/suap
Iniciando e habilitando o NGINX:
sudo systemctl enable nginx --now
11) Usar o comando sync
python /var/opt/suap/manage.py sync