Ubuntu 16.10 + Apache2 + Python + WSGI + Oracle¶
Vamos instalar um servidor ubuntu 16.10 para hospedar páginas web desenvolvidas em python com framework django.
Revisado e testado em 2017-06-28
Atulização e pequenas correções¶
Antes de começar, vamos resolver o problema de linguagem da versão 16.10
Como root
1 2 3 | apt-get install language-pack-pt locale-gen pt_BR.UTF-8 reboot |
Vamos efetuar as atualizações
1 2 3 | apt-get update apt-get upgrade apt-get dist-upgrade |
Usuários¶
Agora criamos o usuário deploy
1 2 | useradd -m -d /home/deploy -G adm,www-data,sudo -s /bin/bash deploy passwd deploy |
Só para confirmar, verifique em /etc/passwd
se ficou dessa forma
1 | deploy:x:1001:1001::/home/deploy:/bin/bash |
Agora edite o arquivo nano /home/deploy/.profile
e verifique se existe as seguinte informações
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # ~/.profile: executed by the command interpreter for login shells. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login # exists. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package. # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. #umask 022 # if running bash if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi # set PATH so it includes user's private bin directories PATH="$HOME/bin:$HOME/.local/bin:$PATH" |
Preparando o servidor¶
Troque o usuário
As configurações abaixo poderão ser feitas com usuário deploy pois o mesmo foi criado como adminitrador!!!
Efetue as configurações de rede para adicionar o endereço de IP do servidor.
Primeiro, vamos preparar o ambiente de rede. Para isso, vamos determinar o endereço de IP no arquivo /etc/host
1 2 3 | 127.0.0.1 localhost 127.0.1.1 nome_do_server 192.168.0.IP nome_do_server |
Agora vamos registrar o dominio de busca para que procure na rede interna, alterando o arquivo sudo nano /etc/resolvconf/resolv.conf.d/base
1 | search domain_name.com |
Agora rode o comando para aplicar as resoluções sudo resolvconf -u
Vamos reiniciar os serviços de rede e efetuar os testes
1 2 3 4 | sudo /etc/init.d/networking restart nslookup nome_do_server nslookup nome_do_server.domain_name.com |
Primeiro o GIT¶
Para instalar o git rode o comando sudo apt-get install git
Após isso, vamos efetuar a configuração das variáveis globais
1 2 | git config --global user.name "Seu Nome" git config --global user.email "seuemail@domain.com" |
Agora vamos adicionar uma chave publica para poder efetuar interação com os projetos
1 | ssh-keygen -t rsa -C "email@domain"
|
Copie a chave (cat ~/.ssh/id_rsa.pub
) para configuração de SSH na sua conta no repositório online
Oracle Client¶
Para instalar o oracle, baixe os arquivos do oracle.com (instant_client linux_x64_x86 .rpm)
Link para download
Vamos utilizar o alien
para efetuar a instalação (sudo apt-get install alien
)
1 2 3 4 5 6 | sudo apt-get install alien
cd diretorio_dos_arquivos.rpm
sudo alien -i oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
sudo alien -i oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
sudo alien -i oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm
sudo alien -i oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
|
Agora, vamos editar as variaveis de ambiente para configurar algumas coisas que o client do oracle necessita. nano ~/.profile
e adicione as seguintes linhas no final do arquivo:
1 2 3 4 5 6 7 | ... # ORACLE export ORACLE_HOME=/usr/lib/oracle/11.2/client64/ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib export PATH=$PATH:$ORACLE_HOME/bin export TNS_ADMIN=$ORACLE_HOME/network/admin |
Agora vamos efetuar as configurações com o comando source ~/.profile
Precisamos criar o diretório para os apelidos de rede (TNS_ADMIN). sudo mkdir -p $TNS_ADMIN
E por ultimo, precisamos criar o arquivo de tns (tnsnames.ora). sudo touch $TNS_ADMIN/tnsnames.ora
Edite o mesmo e cole os nomes de rede atuais
Antes de rodar o sqlplus
, precisamos instalar a dependencia do libaio.so
1 | sudo apt-get install libaio1 libaio-dev |
JavaScript¶
Vamos instalar as dependencias para execuções dos javascripts
Primeiro, vamos instalar o node
1 | sudo apt-get install nodejs npm nodejs-legacy |
Feito isso, vamos testar instando dois pacotes essênciais.
1 | sudo npm i -g gulp bower |
Verificando se esta tudo certo, rode:
1 2 | bower -v gulp -v |
Python e VirtualENV¶
Para não termos problemas de versões do sistema operacional, vamos utilizar o pyenv.
Antes de prosseguir a instalação, precisamos instalar as seguintes dependências:
1 | sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils |
Agora vamos efetuar a instalação do pyenv
1 2 3 4 5 6 7 8 9 10 11 12 13 | sudo apt-get install git python-pip make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev pip install virtualenvwrapper git clone https://github.com/yyuu/pyenv.git ~/.pyenv git clone https://github.com/yyuu/pyenv-virtualenvwrapper.git ~/.pyenv/plugins/pyenv-virtualenvwrapper echo '' >> ~/.profile echo '# PYENV' >> ~/.profile echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile echo 'eval "$(pyenv init -)"' >> ~/.profile echo 'pyenv virtualenvwrapper' >> ~/.profile echo 'export WORKON_HOME=~/virtualenvs'>> ~/.profile |
Atualize o arquivo com o comando source ~/.profile
e vamos efetuar a instalação da versão 3.5.2 do python.
1 2 3 4 5 | pyenv install 3.5.2 pyenv versions * system (set by /root/.pyenv/version) 3.5.2 |
Para ativar a versão 3.5.2, vamos utilizar o comando pyenv global 3.5.2
Para verificar, utilize:
1 2 | python -V
Python 3.5.2
|
Apache¶
Instalando o apache e configurando o module wsgi
Instalação¶
1 2 3 4 5 | sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3
cd /etc/apache2/mods-enabled/
sudo ln -sf ../mods-available/wsgi.conf
sudo ln -sf ../mods-available/wsgi.load
|
Reinicie o apache sudo /etc/init.d/apache2 restart
Configuração¶
Vamos configurar o o site do projeto (vou usar de exemplo a cotação web)
Primeiro clonamos o projeto
1 2 | cd ~/projects
git clone git@gitlab.com:wGalleti/webCotacao.git
|
Agora que temos o caminho completo do projeto, /home/deploy/projects/webCotacao
, vamos criar o virtualenv e configurar o os direcionamentos.
Criando o virtualenv
1 2 3 4 5 6 | python -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install -r requirements.txt cp env_example .env python manage.py test |
Se tudo tiver ok, seu projeto está pronto.
Agora vamos configurar o apache para servir essa pasta.
1 | sudo nano /etc/apache2/sites-enabled/000-default.conf |
Vamos deixar o arquivo da seguinte maneira, para servir os arquivos da api (na porta 8000)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <VirtualHost *:8000> Alias /static /home/deploy/projects/webCotacao/static <Directory /home/deploy/projects/webCotacao/static > Require all granted </Directory> <Directory /home/deploy/projects/webCotacao/cotacao > <Files wsgi.py> Require all granted </Files> </Directory> WSGIDaemonProcess cotacaoweb python-home=/home/deploy/projects/webCotacao/.venv python-path=/home/deploy/projects/webCotacao WSGIPassAuthorization On WSGIProcessGroup cotacaoweb WSGIScriptAlias / /home/deploy/projects/webCotacao/cotacao/wsgi.py ErrorLog ${APACHE_LOG_DIR}/error_api.log CustomLog ${APACHE_LOG_DIR}/access_api.log combined </VirtualHost> |
E para servir os arquivos stativos (frontend), ficara da seguinte maneira (na porta 80)
1 2 3 4 5 6 7 8 9 10 11 12 13 | <VirtualHost *:80> DocumentRoot /home/deploy/projects/webCotacao/frontend/dist <Directory /home/deploy/projects/webCotacao/frontend/dist> Options +Indexes DirectoryIndex index.html Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error_site.log CustomLog ${APACHE_LOG_DIR}/access_site.log combined </VirtualHost> |
Agora precisamos ativar a porta 8000 no apache.
Para isso, adicione abaixo do comando Listen 80
o comando Listen 8000
no arquivo /etc/apache2/ports.conf
e reinicie o apache /etc/init.d/apache2 restart
Ultimos ajustes¶
Permissões¶
Edite o arquivo sudo nano /etc/group
e efetue as sequintes alterações
Onde estiver www-data:x:33:
ficara www-data:x:33:deploy
Onde estiver deploy:x:1001:
ficara deploy:x:1001:www-data
Variáveis¶
Para o apache poder interpretar as libs do oracle_client
é nessário informar no arquivo /etc/apache2/envvars
as variáveis do oracle
1 2 3 4 5 6 7 8 | # envvars - default environment variables for apache2ctl ... export ORACLE_HOME=/usr/lib/oracle/11.2/client64/ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib export PATH=$PATH:$ORACLE_HOME/bin export TNS_ADMIN=$ORACLE_HOME/network/admin |
Reinicie o apache sudo /etc/init.d/apache2 restart
Extras¶
Para facilitar a utilização das ferramentas, vamos implementar as seguintes configurações no arquivo profile ~/.profile
1 2 3 4 5 | # Alias alias active='source .venv/bin/activate' # ativar vitualenv alias deactive='source ~/.profile' # desativar virutalenv alias manage='python $VIRTUAL_ENV/../manage.py' # chamar somente manage ao invés de python manage.py alias sqlplus='rlwrap sqlplus' # poder utilizar ultimos comandos no sqlplus |
Efetuar as seguintes instalações sudo apt-get install rlwrap nmon htop
NMON e HTOP¶
Vamos utilizar essas ferramentas para monitoramento do sistema operacional.
O Htop, podemos analisar desempenho de processador, memória e listar e dar manutenção de forma bem simples os processo do SO.
O Nmon, temos as mesmas analises do Htop, mais analise de discos, redes e etc. Não é possivel eliminar processos!
Comandos uteis¶
Reiniciar apache¶
sudo service apache2 restart
Limpara memoria cache¶
Não é necessário reiniciar o micro!!!
1 2 | echo 3 > /proc/sys/vm/drop_caches sysctl -w vm.drop_caches=3 |
Acompanhar log de erros do apache¶
tail -f /var/log/apache2/error.log