Usando Web2py com outros framesworks pelo uWSGI
Depois de ter acompanhado como instalar o web2py na hospedagem VPS, precisei fazer algumas correções.
1 - Precisei rodar o w2p com outros frames python.
2 - Trazer mais segurança pros apps.
3 - Facilitar a manutenção.
Do ponto de vista manutenção, centralizar é sempre o melhor caminho, centralizar e padronizar, porém do ponto de vista segurança a redundância nunca pode ser quebrada, sendo assim necessário descentralizar os apps.
O NGINX como vimos usa um usuário www-data para lidar com dados deixando o root como mero admin. Nesse caso, o www-data não possui login válido e só possui permissões para "mexer" naquilo que é dele.
Para rodar nossos apps foi preciso usar o uWSGI com o proxy do NGIX e é dessa vantagem que vamos nos valer.
Criando um usuário para cada app necessário, usando daemos uwsgi para cada app permitindo assim usar vários virtualenvs diferentes, vamos usar usuários com login válido para "mexer" somente nos aquivos do app evitando logar como root.
1 - Criar um usuário:
Crie um usuário com o nome que quiser, caso ele não seja sudo
[ para debianlikes ]
# adduser USUARIO sudo
[ para outros ]
# gpasswd -a USUARIO sudo
Feito isso vamos criar o virtualenv dentro desse home
mkdir .venvs
virtualenv -p /usr/bin/pythonX.Y.Z /home/USUARIO/.venvs/myproject
$ source /home/sammy/.venvs/myproject/bin/activate
$ pip install uwsgi
$ pip install -r project/requirements.txt
2 - Criar um diretorio com arquivos de configuração
$ mkdir config
$ cd config
arquivo config/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
[Service]
User=
sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment="PATH=/home/sammy/.venvs/myproject/bin"
ExecStart=/home/sammy/.venvs/myproject/bin/uwsgi --ini config/myproject.ini
Primeiro esse arquivo cria um serviço uWSGI no systemd que será executado pelo seu suário no grupo www-data, dessa forma o nginx consegue acessar os arquivos.
O diretório de trabalho será o seu /home
arquivo config/myproject.ini
[uwsgi]socket = /tmp/dominio.com.br.socketpythonpath = /home/sammy/myproject/mount = /=wsgi:appprocesses = 4master = truemax-requests = 2000limit-as = 512reload-on-as = 256reload-on-rss = 192uid = sammygid = sammychmod-socket = 664chown-socket = sammy:www-datano-orphans = truelogto = /home/sammy/uwsgi-%n.log
Aqui linkamos o socket citado no arquivo do nginx também usando o nome do nosso usuário com o grupo www-data
arquivo config/nginx.conf
server {
listen 80;
server_name dominio.com.br;
access_log /home/samy/myproject/nginx-access.log;
error_log /home/samy/myproject/nginx-error.log;
location / {
try_files $uri @sopa; #$uri.inex.html $uri/;
}
location @sopa {
uwsgi_pass unix:///tmp/dominio.com.br.socket;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFRWARE nginx/$nginx_version;
}
}
O arquivo aqui "linka" o socket citado lá no arquivo.ini e nada mais.
Comentários
Postar um comentário