Развертывание Debian python3+flask+uwsgi+Nginx+Supervisor (старый) — перейдите на домашнюю страницу, чтобы проверить последние

Python Nginx Flask uWSGI Debian

1. Установите и скомпилируйте пакеты

  • Если вы находитесь под root, вам не нужно вводить sudo. Просто добавьте sudo перед командой под пользователем.
  1. $ sudo apt-get install build-essential
  2. $ sudo apt-get install libncurses5-dev libncursesw5-dev libreadline6-dev
  3. $ sudo apt-get install libdb5.1-dev libgdbm-dev libsqlite3-dev libssl-dev
  4. $ sudo apt-get install libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

2. Загрузите и установите python3

  1. Скачать пакет python3 $ wget --нет-проверки-сертификатаwoohoo.Python.org/FTP/Python/…

    «При загрузке может возникнуть проблема с недопустимым сертификатом, просто установите ca-certificates или используйте --no-check-certificate для загрузки, чтобы избежать следующей ошибки»

  2. Введите каталог загрузки $ CD, загруженный каталогом /

  3. Разархивируйте пакет $ tar -zxf Python-3.6.3.tgz

  4. введите питон3 $ CD Python-3.6.3

3. Скомпилируйте и установите

  1. Решите зависимости, необходимые диспетчеру пакетов PIP. $ Модули vim/Setup.dist
  2. Раскомментируйте следующую строку, около строки файла 361. После модификации, esc:wq сохраните и выйдите zlib zlibmodule.c -I(prefix)/include -L(exec_prefix)/lib -lz

В-четвертых, каталог пользовательской установки

  1. Создать каталог установки $ mkdir -p /usr/local/python3.6.3

  2. Войдите в каталог python3 $ CD Python-3.6.3

  3. Указать каталог установки./configure --prefix=/usr/local/python3.6.3 ./configure --enable-optimizations

  4. Здесь выполняется компиляция make all без прямого использования make, параметр all компилирует все подмодули.

     $ make all
     $ make install
    

5. Добавьте python3 в PATH

  1. Откройте файл ~/.bashrc
  2. Добавить путь выполненияsudo vim ~/.bashrc      export PATH=ПУТЬ:/USR/локальные/python3.6.3/бен Добавьте информацию о новом псевдониме, чтобы изменить используемую версию Python по умолчанию. псевдоним python='/usr/bin/python3.6.3'
  3. Эффективный файл конфигурации $ источник .bashrc
  4. Посмотреть версию: **Поскольку использование по умолчанию python3.6.3 было добавлено выше, поэтому введите непосредственноpython -V 会出现 (-bash: /usr/bin/python3.6.3: No such file or directory)报错**。      查看python版本输入以下:python2 -V : отображается как python2.7.3, который поставляется с системой. $ python3 -V : отображается как собственный системный python3.6.3

6. Установите Nginx

  1. Установитьsudo apt-get install nginx     # 查看版本 nginx -v

  2. запустить nginx $ sudo /etc/init.d/nginx начать Доступ к браузеру: IP-адрес вашего сервера, например:http://45.45.162.162

    Появляется изображение выше: указывает на успех

  3. остановить nginx $ sudo nginx -s остановить

Семь, установите uWSGI

  1. Поскольку python3 уже установлен, используйте pip3 для его установки. $ pip3 установить uwsgi
  2. Посмотреть версию $ увсги --версия
  3. Способ установки 2: Скачать: $ wgetпроекты.UN bit.IT/downloads/U…
  4. Распаковать: $ tar zxvf uwsgi-latest.tar.gz

8. Тест

Если есть существующий проект, вы можете загрузить проект на сервер и управлять проектом в git, просто git клонируйте его.

Если: вам нужно загрузить файлы проекта из локальной сети, вы можете использовать команду scp, и использование здесь не является подробным. Короче говоря, мы помещаем файлы проекта на сервер, а затем мы можем использовать virtualenv для управления средой Python. Не так много, чтобы сказать о virtualenv. Здесь мы используем демонстрационную версию фляги напрямую.

  1. Установить виртуальную среду $ pip3 установить виртуалку

  2. создать пакетmkdir myproject cd myproject

  3. Создайте виртуальную средуvirtualenv env  (1)激活虚拟环境источник env/bin/активировать (2) Установите флягу в виртуальной средеpip3 install flask  (3)退出虚环境деактивировать (4) Создайте файл запуска $ vim run.py (5) Пишите флягу, а порт ставится сам. Я использую порт 80 здесь. из фляги импорт фляги приложение = Колба(name) @app.route("/") def hello(): return "Hello World!" if name == "main": app.run(хост='0.0.0.0', порт=80) (6) esc+wq сохранить и выйти

  4. запустите этот файл run.py (1) Сначала остановите Nginxnginx -s stop  (2)打开你设置的端口(端口默认全部是关闭状态)端口自行设置。iptables -A INPUT -p tcp --dport 80 -j ПРИНЯТЬ # Если вы хотите закрыть открытые порты:iptables -A INPUT -p tcp --dport 80 -j DROP  (3)启动flask程序 cd myproject $ python3 run.py

  5. Используйте другие компьютеры и мобильные телефоны 4G для доступа к вашему IP-адресу сервера + верхний порт. Такие как:http://45.32.122.555:80/Появляется: Привет, мир!

Девять, настроить Nginx

(1) Войтиcd /etc/nginx/sites-enabled/ (2)编辑defaultвим по умолчанию ——————————————————————————————————— # или напрямую настроитьcd /etc/nginxvim nginx.conf # Однако его нужно настроить в соответствии с его синтаксисом, ведь в итоге nginx.conf все равно будет вызывать конфигурацию /etc/nginx/sites-enabled/default. (3) После последней записи :wq сохраните и выйдите сервер { слушать 80; имя_сервера 45.32.162.255; кодировка utf-8; client_max_body_size 75M; место нахождения / { включить uwsgi_params; uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_PYHOME /root/myproject/venv; uwsgi_param UWSGI_CHDIR /root/myproject; uwsgi_param UWSGI_SCRIPT run:app; } } Разобрать listen 80; # порт прослушивания сервера server_name 45.32.162.255; # Напишите здесь свое доменное имя или общедоступный IP-адрескодировка utf-8;# кодировка client_max_body_size 75M;# Разница между GET и POST, написанная ранее include uwsgi_params; # Импорт конфигурации uwsgi uwsgi_pass 127.0.0.1:8000; # Порт пересылки должен совпадать с портом прослушивания в конфигурации uwsgi (uwsgi будет настроен ниже) uwsgi_param UWSGI_PYTHON /root/myproject/venv; # Путь, где находится интерпретатор Python (здесь находится виртуальная среда) [Путь заполняется в соответствии с вашим конкретным путем] uwsgi_param UWSGI_CHDIR /root/myproject; # корневой каталог проекта uwsgi_param UWSGI_SCRIPT run:app; # Основная программа проекта, то есть расположение приложения Flask [run — это исполняемый файл, файл run.py (согласно имени файла, созданного им самим) app — экземпляр falsk]

(4) Проверьте правильность файла конфигурации.Если обнаружение файла конфигурации не удается, проверьте файл конфигурации на наличие упущений.

    $ nginx -t

# Указывает, что тест прошел успешно

(5) В настоящее время при доступе к серверу Nginx должно появиться сообщение 502 Bad Gateway, поскольку запрос был перенаправлен Nginx, но не было сервера переадресации для обработки запроса (uwsgi не был настроен).

    $ service nginx start

10. Настройте UWSGI

  1. # Создайте новый файл конфигурации uwsgi.ini в корневом каталоге файла проекта (uwsgi поддерживает несколько форматов файлов конфигурации: xml, ini, json и т. д.)(1) Войдите в корневой каталог проектаcd myproject (2)创建uwsgi文件Vim Uwsgi.ini. (3) После написания следующего: WQ Сохранить и выйти [UWSGI]
    socket = 127.0.0.1:8000
    plugins = python
    chidir = /root/myproject
    wsgi-file = run.py
    callable = app
    # прослушивающий порт uwsgi [такой же, как порт в конфигурации nginx выше] # Эта строка должна быть добавлена, иначе -- запрошен модификатор недоступный: 0 -- при запросе появится сообщение об ошибке # Корневой каталог проекта [Путь заполняется в соответствии с вашим конкретным путем] # Файл запуска программы flask [здесь я называю его run.py] # Имя переменной программы [app является переменной экземпляра falsk]

  2. начать тест (1) Запустите Nginxservice nginx restart (2)启动 uwsgi #注意要回到项目根目录下执行CD ~cd myprojectuwsgi uwsgi.ini Если все в порядке, вы можете увидеть информацию о запуске uwsgi на терминале. (3) Откройте браузер получить доступ к вашему порту ip plus пример:http://45.32.162.255:80Появится страница: Привет, мир!# Указываем, что Nginx и uwsgi настроены успешно

    # Но до реального запуска проекта еще далеко, потому что uwsgi запускается прямо на переднем плане, а процесс uwsgi также закрывается при отключении нашего терминала подключения от сервера, поэтому нам нужно, чтобы uwsgi работал в фоновом режиме.

    Объясните приведенный выше абзац: мы можем использовать браузер для успешного доступа к проекту после подключения к серверу для запуска проекта. Но как только мы закрываем соединение с сервером, а затем используем браузер для доступа к нему, это не будет работать.Проект работает на переднем плане, то есть.При закрытии соединения с сервером окно команд сервера также закрывается.Проект, работающий на переднем плане, также закрывается в то же время. Поэтому нам нужно запустить проект в фоновом режиме.

  3. Запустите проект в фоновом режиме (1) Начните с nohup: не прерывайте текущую команду, используйте «&», чтобы ваша команда выполнялась в фоновом режиме. (Пожалуйста, проверьте на официальном сайте подробные параметры именования nohup) Примечание: не забудьте знак &.nohup uwsgi uwsgi.ini & (2)关闭与服务器的连接,然后用浏览器访问你的ip地址:      显示:Hello World! 表示ok了! (3)可以通过命令把这个项目从后台停止,查询uwsgi的进程(linux命令不详细说了)ps -ef|grep uwsgi Найдите процесс uwsgi uwsgi.ini: корень 7950 1 0 14:57 ? 00:00:00 uwsgi uwsgi.ini Идентификатор процесса у всех разный, здесь id 7950. (4) Убейте процесс uwsgi в фоновом режиме kill -9 с последующим идентификатором процесса или killall uwsgi, чтобы убить все процессы с тем же именем, что и у uwsgi.kill -9 7950убийца (5) Затем используйте браузер для доступа к ip Страница браузера показывает: 502 Bad Gateway означает остановку работы программы uwsgi. (6) Журнал nohup.out будет создан в корневом каталоге проекта.

11. Используйте мониторинг процесса Supervisor

# Supervisor — мощный инструмент для эксплуатации и обслуживания, написанный на python2. Supervisor в настоящее время не поддерживает python3. Ее можно решить следующими методами.

Его можно установить через pip.Здесь используется pip python3.Поэтому установка не удастся.Используйте следующее.

  1. Сначала установите супервизор (по умолчанию он управляется встроенным python2.7) $ apt-получить супервайзер установки

  2. Введите файл конфигурации по умолчанию (измените файл конфигурации)cd /etc/supervisor/Vim supervisord.conf Нажмите Shift+G, чтобы перейти к концу Добавить: files=/etc/supervisor/*.conf esc: wq сохранить

    Это позволяет легко установить файл conf для каждого приложения отдельно, не прописывая все это в глобальных настройках. Прежде чем запускать supervisorctl, необходимо сначала запустить supervisord. В противном случае появится ошибка: , [Errno 99] Невозможно назначить запрошенный адрес: файл: /usr/lib/python2.7/socket.py строка: ошибка 575

     执行:(若不是在root下执行在最前面加上 sudo)
     
     $ supervisord -c /etc/supervisor/supervisord.conf
     $ supervisorctl -c /etc/supervisor/supervisord.conf
     # 这里补充以一下:每当修改完配置后如果出现
     error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.
     # 请重新执行以上的两句命令
     
     进入:supervisor shell模式表示成功
     退出:supervisor shell
     supervisor> exit
    
  3. Создайте файл сценария для создания файла конфигурации по умолчанию.cd /etc/supervisor/conf.d/      新建app.conf文件(文件名自己定义) vim app.conf

  4. Войдите в режим редактирования, чтобы добавить конфигурацию [программа: мой проект] каталог = /root/мой проект/ команда = uwsgi --ini /root/myproject/uwsgi.ini автозапуск = истина начальные секунды = 5 автоматический перезапуск = истина начальные попытки = 3 пользователь = корень перенаправление_stderr = правда stdout_logfile_maxbytes = 20 МБ stdout_logfile_backups = 20 stdout_logfile = /tmp/app.log стопасгрупп=ложь killasgroup=false esc:wq сохранить и выйти

    # Разобрать[программа:мой проект]:# Имя пакета проекта (у меня это myproject)

    каталог = / root / myproject /:# Путь к каталогу запуска программы

    команда = uwsgi --ini /root/myproject/uwsgi.ini:#пусковая команда (Это эквивалентно прямому запуску uwsgi uwsgi.ini, просто добавлению пути)

    автозапуск = правда:# Также автоматически запускаться при запуске supervisordначальные секунды=5:# Если через 5 секунд после запуска нет аварийного выхода, это считается нормальным запускомавтоматический перезапуск = истина:# Автоматический перезапуск после аварийного завершения работы программыстартовые попытки = 3:# Количество автоматических попыток при неудачном запуске, по умолчанию 3пользователь=корень:# Какого пользователя использовать для запуска (здесь я использую root)

    redirect_stderr=истина:# перенаправляем stderr на stdout, по умолчанию falsestdout_logfile_maxbytes = 20 МБ:# размер файла журнала stdout, по умолчанию 50 МБstdout_logfile_backups = 20:# номер резервной копии файла журнала стандартного вывода

    Примечание: Для файлов журнала stdout следует отметить, что если указанный каталог не существует, он не может быть запущен в обычном режиме, поэтому вам необходимо вручную создать каталог (supervisord автоматически создаст файл журнала). это после настройки и продолжить.

    stdout_logfile = /tmp/app.log

    Давайте поговорим об этих двух полезных элементах конфигурации stopasgroup и killasgroup.Если мы используем Rest-сервисы, такие как Flask, он обычно запускает несколько процессов.Если stopasgroup не включен, супервизор не может перезапустить этот сервис (когда основной процесс закрывается, его дочерние процессы не имеют никаких Закрыть, а затем открыть основной процесс будет предлагать порт занят и другие сообщения об ошибках).

    стопасгрупп=ложь:По умолчанию установлено значение false, если установлено значение true, когда процесс получает сигнал остановки, он автоматически отправляет сигнал дочернему процессу процесса. Если этот элемент конфигурации истинен, то killasgroup также подразумевается как истина. Например, при использовании Flask в режиме отладки Flask не будет передавать полученный сигнал остановки своему дочернему процессу, поэтому необходимо установить этот элемент конфигурации.

    killasgroup=false:По умолчанию установлено значение false, если установлено значение true, когда процесс получает сигнал уничтожения, он автоматически отправляет сигнал дочернему процессу процесса. Если программа использует многопроцессорность Python, она может автоматически останавливать свои дочерние потоки.

         # 创建日志的文件夹
         $ cd ~
         $ cd /myproject/
         $ mkdir tmp
    

    Конфигурация завершена

    # Есть больше параметров конфигурации, пожалуйста, обратитесь к официальному сайту

    #Здесь мы видим, что хотя супервизор написан на python2, пока мы указываем работающий интерпретатор python3 для запуска программы.

  5. Сделайте так, чтобы конфигурация вступила в силу (каждый раз, когда вы изменяете основной файл конфигурации или добавляете дополнительный файл конфигурации, вам нужно выполнить его, чтобы он вступил в силу) нужно сначала войтиcd /etc/supervisor目录或者项目的目录cd myproject/才可以运行相关的命令如:supervisorctl reload等相关命令supervisorctl update # Поскольку python3 выполняет эту команду, может быть сообщено об ошибке # Можно использовать следующую команду: перезагрузить файл конфигурации $ супервизор перезагрузить

  6. Запустите supervisorctl, чтобы ввести удобные операции в оболочке, такие как запуск приложения, перезапуск приложения и т. д.cd /etc/supervisor supervisorctl start myproject # 你的项目名称      # 执行start后可以看到 myproject RUNNING pid 16758, uptime 0:02:58перезапустить мой проект # перезапустить $ остановить мой проект # остановить # Другие связанные команды можно найти на официальном сайте здесь

  7. Выше мы можем увидеть, как он работает в консоли. Нам нужно посмотреть на веб-интерфейс # Добавить, изменить файлы конфигурацииcd /etc/supervisor/Vim supervisord.conf # Если найдено в режиме VIM, измените соответственно # Если не нажать Shift + G, чтобы перейти к концу, чтобы добавить

     # IP和绑定端口
     # 管理员名称
     # 管理员密码
     [inet_http_server]
     port = 45.32.111.111:9001   
     username = user 
     password = 666666
     # 如果不需要密码可以注释在最前面机上;号
     # ;username = user 
     # ;password = 666666
     # 重新加载配置文件使它生效
     $ cd /etc/supervisor
     $ supervisorctl reload
     # 最后你需要打开你的这个端口并且重启supervisorctl
     $ iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
     $ cd /etc/supervisor
     $ supervisorctl
    
  8. Запустить через браузер # введите свой ip и порт 45.32.111.111:9001

Вышеупомянутый интерфейс означает, что он был успешным, а затем вы можете запустить / остановить свой проект одним щелчком мыши, открыв порт Supervisor для мониторинга и управления вашим проектом.

———————————————————————————————————
Если чего-то не хватает, подскажите! ! !

Я думаю, это хорошо~ Поставьте мне палец вверх~ Спасибо! ! !