Развертывание приложения Flask на NginX / Пассажирский сервер на Ubuntu 16.04 LTS в рабочем режиме на VPS - PullRequest
0 голосов
/ 29 января 2020

Вопрос 1: В чем проблема? : После этого урока Я установил Nginx и Passenger в Ubuntu 16.04 для запуска Python Flask приложения и I столкнуться с этой проблемой: Когда я захожу на свой сервер по адресу http://hXXXXXXX.stratoserver.net/ в браузере, я получаю эту ошибку:

Приносим извинения, но что-то пошло не так.

Вопрос 2: Версия для пассажиров и режим интеграции : Пассажир с открытым исходным кодом 6.0.4 + Nginx

Вопрос 3: ОС или Linux distro , платформа (включая версию) : Ubuntu 16.04 LTS

$ uname -a
Linux hXXXXXXX.stratoserver.net 4.4.0-042stab141.3 #1 SMP Fri Nov 15 22:45:34 MSK 2019 x86_64 x86_64 x86_64 GNU/Linux

Вопрос 4: Способ установки пассажиров : Nginx + репозиторий Phusion APT

Вопрос 5: Язык программирования вашего приложения : Python 3.7.6 + Flask 1.1.1

Вопрос 6: Используете ли вы PaaS и / или контейнеризацию? Если да, то какой? Нет

Вопрос 7: Что еще нужно знать о вашей настройке? У меня есть VPS на strato.nl с установленной Ubuntu 16.04 и хост адрес: http://hXXXXXXX.stratoserver.net/ и я следовал «Развертыванию Python приложения с Passenger для производства» учебник , делая следующие шаги в учебнике:

1. Linux/Unix
2. Nginx
3. Passenger open source
4. Python installed via LinuxBrew (Python v3.7.6)
5. Ubuntu 16.04 LTS
6. Demo Flask app from github

Демонстрационное приложение Flask было клонировано с github Phusio Passenger:

git clone https://github.com/phusion/passenger-python-flask-demo.git

Запуск passenger-memory-stats дает:

$ sudo /usr/sbin/passenger-memory-stats
Version: 6.0.4
Date   : 2020-01-29 13:12:15 +0100
------------- Apache processes -------------
*** WARNING: The Apache executable cannot be found.
Please set the APXS2 environment variable to your 'apxs2' executable's filename, or set the HTTPD environment variable to your 'httpd' or 'apache2' executable's filename.


---------- Nginx processes -----------
PID    PPID   VMSize    Private  Name
--------------------------------------
23320  1      174.9 MB  0.8 MB   nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
23325  23320  174.9 MB  0.8 MB   nginx: worker process
### Processes: 2
### Total private dirty RSS: 1.54 MB


----- Passenger processes -----
PID    VMSize    Private  Name
-------------------------------
23309  445.7 MB  2.5 MB   Passenger watchdog
23312  672.3 MB  7.5 MB   Passenger core
### Processes: 2
### Total private dirty RSS: 9.98 MB

Когда я запускаю приложение локально на сервере, все работает как положено:

$ python app.py
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Затем в другом терминал:

$ curl localhost:5000
<!DOCTYPE html>
<html>
<head>
  <title>Hello</title>
  <style>
    html, body {
      font-family: sans-serif;
      background: #f0f0f0;
      margin: 4em;
    }

    .main {
      background: white;
      border: solid 1px #c0c0c0;
      border-radius: 8px;
      padding: 2em;
    }
  </style>
</head>
<body>

  <section class="main">
    <h1>Hello world!</h1>
    <p>Welcome to the Passenger Flask example app.</p>
  </section>

</body>
</html>

Так что локально все выглядит нормально. Однако, когда я захожу в браузер http://hXXXXXXX.stratoserver.net/, я получаю страницу с ошибкой, как описано выше. nginx ошибка /var/log/nginx/error.log содержит следующее:


App 29730 output: from flask import Flask, render_template
App 29730 output: ImportError
App 29730 output: :
App 29730 output: No module named flask

Таким образом, похоже, что скрипт не может найти пакеты, которые я ранее установил для Python3, и он использует Python2 пакеты. Печать sys.version в ответе сервера дает:

sys.version: 2.7.17 (default, Dec 24 2019, 17:49:09)

Я установил все свои пакеты для Python3, поэтому мне нужен мой скрипт на сервере, использующий Python3. Как мне настроить Python версию и Python библиотеки в NginX / Passenger?

Мой конфиг демо-приложения:

$ vi /etc/nginx/sites-enabled/demoapp.conf
server {
    listen 80;
    server_name hXXXXXXX.stratoserver.net;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/demoapp/code/public;

    # Turn on Passenger
    passenger_enabled on;
}

Что такое пассажир / Nginx настройки, которые мне нужно установить для успешного запуска приложения Flask? Как настроить Passenger / Nginx на использование Python3 и Python3 site-пакетов?

1 Ответ

0 голосов
/ 30 января 2020

Решение состоит в том, чтобы добавить путь к двоичному файлу Python в файле конфигурации приложения (в контексте сервера). Итак, теперь мой конфигурационный файл demoapp.conf выглядит так:

$ vi /etc/nginx/sites-enabled/demoapp.conf
server {
    listen 80;
    server_name hXXXXXXX.stratoserver.net;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/demoapp/code/public;

    # Tell Nginx and Passenger which Python executable to use
    passenger_python /home/linuxbrew/.linuxbrew/bin/python3;

    # Turn on Passenger
    passenger_enabled on;
}

И все работает как положено. Обратите внимание на следующую строку:

passenger_python /home/linuxbrew/.linuxbrew/bin/python3;

, которая указывает на двоичный файл Python v3.7.6, который я установил с linuxbrew.

Другой вариант - использовать виртуальную среду Python, где вы также можете указать версию Python, которую хотите использовать.

...