1. Установите и скомпилируйте пакеты
- Если вы находитесь под root, вам не нужно вводить sudo. Просто добавьте sudo перед командой под пользователем.
- $ sudo apt-get install build-essential
- $ sudo apt-get install libncurses5-dev libncursesw5-dev libreadline6-dev
- $ sudo apt-get install libdb5.1-dev libgdbm-dev libsqlite3-dev libssl-dev
- $ sudo apt-get install libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev
2. Загрузите и установите python3
-
Скачать пакет python3 $ wget --нет-проверки-сертификатаwoohoo.Python.org/FTP/Python/…
«При загрузке может возникнуть проблема с недопустимым сертификатом, просто установите ca-certificates или используйте --no-check-certificate для загрузки, чтобы избежать следующей ошибки»
-
Введите каталог загрузки $ CD, загруженный каталогом /
-
Разархивируйте пакет $ tar -zxf Python-3.6.3.tgz
-
введите питон3 $ CD Python-3.6.3
3. Скомпилируйте и установите
- Решите зависимости, необходимые диспетчеру пакетов PIP. $ Модули vim/Setup.dist
- Раскомментируйте следующую строку, около строки файла 361. После модификации, esc:wq сохраните и выйдите zlib zlibmodule.c -I(exec_prefix)/lib -lz
В-четвертых, каталог пользовательской установки
-
Создать каталог установки $ mkdir -p /usr/local/python3.6.3
-
Войдите в каталог python3 $ CD Python-3.6.3
-
Указать каталог установки ./configure --enable-optimizations
-
Здесь выполняется компиляция make all без прямого использования make, параметр all компилирует все подмодули.
$ make all $ make install
5. Добавьте python3 в PATH
- Откройте файл ~/.bashrc
- Добавить путь выполненияПУТЬ:/USR/локальные/python3.6.3/бен Добавьте информацию о новом псевдониме, чтобы изменить используемую версию Python по умолчанию. псевдоним python='/usr/bin/python3.6.3'
- Эффективный файл конфигурации $ источник .bashrc
- Посмотреть версию: **Поскольку использование по умолчанию python3.6.3 было добавлено выше, поэтому введите непосредственноpython2 -V : отображается как python2.7.3, который поставляется с системой. $ python3 -V : отображается как собственный системный python3.6.3
6. Установите Nginx
-
Установить nginx -v
-
запустить nginx $ sudo /etc/init.d/nginx начать Доступ к браузеру: IP-адрес вашего сервера, например:http://45.45.162.162
Появляется изображение выше: указывает на успех -
остановить nginx $ sudo nginx -s остановить
Семь, установите uWSGI
- Поскольку python3 уже установлен, используйте pip3 для его установки. $ pip3 установить uwsgi
- Посмотреть версию $ увсги --версия
- Способ установки 2: Скачать: $ wgetпроекты.UN bit.IT/downloads/U…
- Распаковать: $ tar zxvf uwsgi-latest.tar.gz
8. Тест
Если есть существующий проект, вы можете загрузить проект на сервер и управлять проектом в git, просто git клонируйте его.
Если: вам нужно загрузить файлы проекта из локальной сети, вы можете использовать команду scp, и использование здесь не является подробным. Короче говоря, мы помещаем файлы проекта на сервер, а затем мы можем использовать virtualenv для управления средой Python. Не так много, чтобы сказать о virtualenv. Здесь мы используем демонстрационную версию фляги напрямую.
-
Установить виртуальную среду $ pip3 установить виртуалку
-
создать пакет cd myproject
-
Создайте виртуальную средуисточник env/bin/активировать (2) Установите флягу в виртуальной средедеактивировать (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 сохранить и выйти
-
запустите этот файл run.py (1) Сначала остановите Nginxiptables -A INPUT -p tcp --dport 80 -j ПРИНЯТЬ # Если вы хотите закрыть открытые порты: cd myproject $ python3 run.py
-
Используйте другие компьютеры и мобильные телефоны 4G для доступа к вашему IP-адресу сервера + верхний порт. Такие как:http://45.32.122.555:80/Появляется: Привет, мир!
Девять, настроить Nginx
(1) Войтивим по умолчанию
———————————————————————————————————
# или напрямую настроитьvim 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
-
# Создайте новый файл конфигурации uwsgi.ini в корневом каталоге файла проекта (uwsgi поддерживает несколько форматов файлов конфигурации: xml, ini, json и т. д.)(1) Войдите в корневой каталог проекта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] -
начать тест (1) Запустите NginxCD ~uwsgi uwsgi.ini Если все в порядке, вы можете увидеть информацию о запуске uwsgi на терминале. (3) Откройте браузер получить доступ к вашему порту ip plus пример:http://45.32.162.255:80Появится страница: Привет, мир!# Указываем, что Nginx и uwsgi настроены успешно
# Но до реального запуска проекта еще далеко, потому что uwsgi запускается прямо на переднем плане, а процесс uwsgi также закрывается при отключении нашего терминала подключения от сервера, поэтому нам нужно, чтобы uwsgi работал в фоновом режиме.
Объясните приведенный выше абзац: мы можем использовать браузер для успешного доступа к проекту после подключения к серверу для запуска проекта. Но как только мы закрываем соединение с сервером, а затем используем браузер для доступа к нему, это не будет работать.Проект работает на переднем плане, то есть.При закрытии соединения с сервером окно команд сервера также закрывается.Проект, работающий на переднем плане, также закрывается в то же время. Поэтому нам нужно запустить проект в фоновом режиме.
-
Запустите проект в фоновом режиме (1) Начните с nohup: не прерывайте текущую команду, используйте «&», чтобы ваша команда выполнялась в фоновом режиме. (Пожалуйста, проверьте на официальном сайте подробные параметры именования nohup) Примечание: не забудьте знак &.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.убийца (5) Затем используйте браузер для доступа к ip Страница браузера показывает: 502 Bad Gateway означает остановку работы программы uwsgi. (6) Журнал nohup.out будет создан в корневом каталоге проекта.
11. Используйте мониторинг процесса Supervisor
# Supervisor — мощный инструмент для эксплуатации и обслуживания, написанный на python2. Supervisor в настоящее время не поддерживает python3. Ее можно решить следующими методами.
Его можно установить через pip.Здесь используется pip python3.Поэтому установка не удастся.Используйте следующее.
-
Сначала установите супервизор (по умолчанию он управляется встроенным python2.7) $ apt-получить супервайзер установки
-
Введите файл конфигурации по умолчанию (измените файл конфигурации)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
-
Создайте файл сценария для создания файла конфигурации по умолчанию. vim app.conf
-
Войдите в режим редактирования, чтобы добавить конфигурацию [программа: мой проект] каталог = /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 для запуска программы.
-
Сделайте так, чтобы конфигурация вступила в силу (каждый раз, когда вы изменяете основной файл конфигурации или добавляете дополнительный файл конфигурации, вам нужно выполнить его, чтобы он вступил в силу) нужно сначала войтиsupervisorctl update # Поскольку python3 выполняет эту команду, может быть сообщено об ошибке # Можно использовать следующую команду: перезагрузить файл конфигурации $ супервизор перезагрузить
-
Запустите supervisorctl, чтобы ввести удобные операции в оболочке, такие как запуск приложения, перезапуск приложения и т. д. supervisorctl перезапустить мой проект # перезапустить $ остановить мой проект # остановить # Другие связанные команды можно найти на официальном сайте здесь
-
Выше мы можем увидеть, как он работает в консоли. Нам нужно посмотреть на веб-интерфейс # Добавить, изменить файлы конфигурации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
-
Запустить через браузер # введите свой ip и порт 45.32.111.111:9001
Вышеупомянутый интерфейс означает, что он был успешным, а затем вы можете запустить / остановить свой проект одним щелчком мыши, открыв порт Supervisor для мониторинга и управления вашим проектом.
———————————————————————————————————
Если чего-то не хватает, подскажите! ! !