====== 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) FIXME [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://:@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
-----------
[[sistemas:suap|Voltar à página Principal do SUAP]]