Как сделать так, чтобы сервер был всегда запущен? CentOS 7

Рейтинг: 0Ответов: 3Опубликовано: 08.04.2015

Сейчас Я прописываю

python manage.py runserver 0:80

И в ответ получаю:

System check identified no issues (0 silenced).
April 08, 2015 - 20:12:09
Django version 1.8, using settings 'butlers.settings'
Starting development server at http://0:80/
Quit the server with CONTROL-C.
[08/Apr/2015 20:12:24]"GET / HTTP/1.1" 404 2239
[08/Apr/2015 20:12:24]"GET /favicon.ico HTTP/1.1" 404 2272
[08/Apr/2015 20:12:30]"GET /hello HTTP/1.1" 301 0
[08/Apr/2015 20:12:30]"GET /hello/ HTTP/1.1" 200 22
[08/Apr/2015 20:13:27]"GET /admin.php HTTP/1.0" 404 2267
[08/Apr/2015 20:13:27]"GET /administrator/index.php HTTP/1.0" 404 2309
[08/Apr/2015 20:13:27]"GET /wp-login.php HTTP/1.0" 404 2276

Если Я закрываю консоль(putty) или нажимаю contol-c, запросы прекращают доходить. То бишь, браузер отдаёт 404. Посоветуйте, что сделать, чтобы сервер работал автономно. И правильный ли это вариант работы сервера? Мне почему-то кажется, что всё идёт в обход nginx'а(чувствую запах идиотизма).

Использую uwsgi, хотя так же не понял, что это такое, какая-то прослойка. Если можно, хотелось бы и здесь получить развёрнутый ответ. Я новичок в python'e. Решил уйти с пыхи.

Крутится всё это на vps. CentOS 7.

Ответы

▲ 1Принят

Есть несколько способов решения проблему.

Например, можно использовать внешний сервер Apache со следующей конфигурацией:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Подробнее:

Но мне больше нравится связка Nginx + gunicorn:

server {

  server_name 127.0.0.1 yourhost@example.com;
  access_log /var/log/nginx/domain-access.log;

  location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Forwarded-For  $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;

    # This line is important as it tells nginx to channel all requests to port 8000.
    # We will later run our wsgi application on this port using gunicorn.
    proxy_pass http://127.0.0.1:8000/;
  }

}

Запсукаем приложение с помощью gunicorn:

$ sudo pip install gunicorn  # инсталлируем gunicorn
$ cd /path/to/yourproject
$ gunicorn wsgi -b 127.0.0.1:8000 --pid /tmp/gunicorn.pid --daemon

Подробнее об этом:

▲ 2

UWSGI (как и gunicorn) - это прослойка для запуска приложений на python. Запускать на боевом веб-сервере сервер разработки ни в коем случае нельзя: во-первых он однопоточный, что как минимум сильно его замедляет, во-вторых предназначен для тестирования и отладки, а не для боевой нагрузки. Конечно, если очень хочется, то его можно запустить как-то вроде ./manage.py runserver 0.0.0.0:80 --insecure, но это максимум для проверки, что всё работает. К тому же подобная команда запускается от имени суперпользователя, что тоже очень плохо для боевого сервера. Никогда ничего нельзя запускать с повышенными привилегиями.

UWSGI же позволяет запускать сервер в несколько обработчиков потоков, ограничивает по потребляемым ресурсам, следит за временем выполнения и ещё много чего. Поэтому вам лучше всего воспользоваться статьями, описывающими настройку веб-приложений для работы через uwsgi или ginicorn. От себя советую вот эту статью

▲ 2

Для запуска чего-либо в фоновом режиме в Linux можно использовать команду nohup "you_command" &

При выходе из консоли данный процесс будет продолжать работать.