O propósito deste tópico perguntado e respondido por mim é estabelecer um caminho curto, fácil e preciso para os usuários provenientes do IIS - Serviços de Informações da Internet (Microsoft Windows) que desejam migrar e / ou usar o Nginx com Python. Por isso peço a todos que ajudem a alcançar este objetivo!
Aspectos considerados:
- Use o Ubuntu Server 12.04.1 LTS AMD64;
- Use aplicativos da Web em Python;
- Acesse vários aplicativos usando o modelo
http://HOST_IP/APP_DIRECTORY
;
Eu sei pouco sobre o Nginx. Eu enfatizo que o objetivo aqui é criar aplicativos web Python para testes e desenvolvimento de uma maneira simples e fácil, sem a presença de um domínio (por exemplo, www.domínio.com) e acessá-los via IP e diretório virtual.
Não sei se essa é a melhor maneira de publicar aplicativos usando diretórios virtuais. Comentários sobre este aspecto são muito bem-vindos.
aqui está minha resposta!
-
Instale o Nginx e o uWSGI que executarão aplicativos Python;
apt-get instale o nginx-full uwsgi uwsgi-plugin-python
-
Crie o arquivo de configuração para o Nginx. Isto irá conter a lista de diretórios virtuais que estará disponível em Nginx (pasta "sites-available"):
nano / etc / nginx / sites-disponíveis / aplicativos
Conteúdo do arquivo:
server
{
listen 80;
server_name $hostname;
access_log /srv/www/applications/logs/access.log;
error_log /srv/www/applications/logs/error.log;
location /pytest0
{
#uwsgi_pass 127.0.0.1:9001;
uwsgi_pass unix:///run/uwsgi/app/pytest0/pytest0.socket;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
}
location /pytest1
{
#uwsgi_pass 127.0.0.1:9001;
uwsgi_pass unix:///run/uwsgi/app/pytest1/pytest1.socket;
include uwsgi_params;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
}
}
-
Crie o diretório em que o Nginx salvará os registros:
mkdir-p / srv / www / aplicativos / logs
-
Coloque a lista de aplicativos que você criou no conjunto de aplicativos habilitados (pasta "habilitada para aplicativos"):
ln -s / etc / nginx / sites-disponíveis / aplicativos / etc / nginx / sites-enabled / applications
-
Remova o link do host virtual padrão inserindo o seguinte comando:
rm / etc / nginx / sites-enabled / default
Nota: Com esta ação é mais fácil diagnosticar possíveis erros, porque em caso de falha o NGINX retorna o erro ao invés de uma página padrão.
-
Crie as pastas para o primeiro aplicativo de teste do Python:
mkdir-p / srv / www / pytest0 / public_html / static
mkdir / srv / www / pytest0 / application
-
Defina o primeiro aplicativo de teste e o disponibilize em uWSGI (pasta "apps-available"):
mkdir -p / etc / uwsgi / apps-disponível /
nano /etc/uwsgi/apps-available/pytest0.xml
Conteúdo do arquivo:
<uwsgi>
<plugin>python</plugin>
<socket>/run/uwsgi/app/pytest0/pytest0.socket</socket>
<pythonpath>/srv/www/pytest0/application/</pythonpath>
<app mountpoint="/">
<script>wsgi_configuration_module</script>
</app>
<master/>
<processes>4</processes>
<harakiri>60</harakiri>
<reload-mercy>8</reload-mercy>
<cpu-affinity>1</cpu-affinity>
<stats>/tmp/stats.socket</stats>
<max-requests>2000</max-requests>
<limit-as>512</limit-as>
<reload-on-as>256</reload-on-as>
<reload-on-rss>192</reload-on-rss>
<no-orphans/>
<vacuum/>
</uwsgi>
-
Coloque o primeiro aplicativo de teste como ativado no uWSGI (pasta "aplicativos habilitados"):
ln -s /etc/uwsgi/apps-available/pytest0.xml /etc/uwsgi/apps-enabled/pytest0.xml
-
"Crie" o primeiro aplicativo de teste no uWSGI:
nano /srv/www/pytest0/application/wsgi_configuration_module.py
Conteúdo do arquivo:
import os
import sys
sys.path.append('/srv/www/pytest0/application')
os.environ['PYTHON_EGG_CACHE'] = '/srv/www/pytest0/.python-egg'
def application(environ, start_response):
status = '200 OK'
output = 'Hello pytest0!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
-
Crie as pastas para o segundo aplicativo de teste do Python:
mkdir-p / srv / www / pytest1 / public_html / static
mkdir / srv / www / pytest1 / application
-
Defina o segundo aplicativo de teste e o disponibilize em uWSGI (pasta "apps-available"):
nano /etc/uwsgi/apps-available/pytest1.xml
Conteúdo do arquivo:
<uwsgi>
<plugin>python</plugin>
<socket>/run/uwsgi/app/pytest1/pytest1.socket</socket>
<pythonpath>/srv/www/pytest1/application/</pythonpath>
<app mountpoint="/">
<script>wsgi_configuration_module</script>
</app>
<master/>
<processes>4</processes>
<harakiri>60</harakiri>
<reload-mercy>8</reload-mercy>
<cpu-affinity>1</cpu-affinity>
<stats>/tmp/stats.socket</stats>
<max-requests>2000</max-requests>
<limit-as>512</limit-as>
<reload-on-as>256</reload-on-as>
<reload-on-rss>192</reload-on-rss>
<no-orphans/>
<vacuum/>
</uwsgi>
-
Coloque o segundo aplicativo de teste como ativado no uWSGI (pasta "aplicativos habilitados"):
ln -s /etc/uwsgi/apps-available/pytest1.xml /etc/uwsgi/apps-enabled/pytest1.xml
-
"Crie" o segundo aplicativo de teste no uWSGI:
nano /srv/www/pytest1/application/wsgi_configuration_module.py
Conteúdo do arquivo:
import os
import sys
sys.path.append('/srv/www/pytest1/application')
os.environ['PYTHON_EGG_CACHE'] = '/srv/www/pytest1/.python-egg'
def application(environ, start_response):
status = '200 OK'
output = 'Hello pytest1!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
-
Reinicie os serviços:
serviço uwsgi restart
serviço nginx restart
POR FAVOR COMENTAR!
- Referências: