24 часа чистой головы на VPS

Срок действия моего студенческого пакета GitHub истек более года назад, и у меня остались страницы GitHub для размещения моей веб-страницы. И только после создания веб-приложения, которое анализирует и перечисляет зависимости пакета Python, мне остро понадобился сервер. Я раскрутил сервер DigitalOcean и взломал учебные пособия по DO. Я подумал, почему бы не написать шаги где-нибудь. Я делаю это в основном потому, что знаю, что в конечном итоге я буду делать какие-то сумасшедшие вещи, и когда-нибудь в будущем мне самому понадобится учебник.

я использую

Ubuntu 14.04 LTS (из-за последней версии LTS с выскочкой)

nginx (потому что у apache2 слишком много конфигураций!)

Фласк (Джанго тяжелый, Фласк ❤)

uWSGI (потому что это работает, и я не очень понимаю, что это значит)

Приобретите VPS (виртуальный частный сервер) у DigitalOcean или Amazon AWS. Попробуйте поискать образовательные предложения, студенты получают первые месяцы бесплатно в обоих случаях. Выполните начальную настройку сервера и несколько обходных путей, если вы находитесь за прокси.

Теперь почти все шаги вперед взяты из оригинального учебника по DO, но я переписываю его, потому что в нем не акцентируются на распространенных ошибках, которые делают люди. Я не буду предлагать объяснения во всех местах, поэтому, пожалуйста, обращайтесь к оригинальному руководству по всем вашим вопросам.

Использование Python 3

Вы, вероятно, многое упускаете, если застряли с версией Python по умолчанию для Ubuntu — 2.7. См. Слайды Аарона Мёрера, чтобы немного мотивировать то, что я собираюсь узнать.

# Check the default Python's version
➜ python --version
2.7.12
# Check the location of the executable
➜ which python
/usr/bin/python
# Remove the executable and create a symbolic link of Python 3
➜ sudo rm /usr/bin/python
➜ sudo ln -s /usr/bin/python3 /usr/bin/python
# Peace !
➜ python --version
Python 3.5.2

Вы можете отменить шаги в любое время, удалив и создав символическую ссылку /usr/bin/python2.7 в том же месте.

Установка пипа

pip — это менеджер пакетов python для Python 2. pip3 — это менеджер пакетов python для Python 3.

➜ sudo apt-get install python3-pip

После установки pip3 создайте символическую ссылку pip3 как pip.

➜ which pip3
/usr/local/bin/pip3
➜ sudo ln -s /usr/local/bin/pip3 /usr/local/bin/pip

Обратите внимание, что в этом руководстве я не буду использовать virtualenv. Это потому, что я лично никогда не чувствовал этого требования. Хотя это отличный инструмент и метод разработки.

Настройка приложения Flask

Если вы думаете, что изучать Python легко, попробуйте Flask! Если вы считаете, что код Python не может быть короче, попробуйте Flask! Если вы считаете, что веб-серверы и RESTful API не для новичков, попробуйте Flask!

Вот исходный код: https://github.com/OrkoHunter/orkohunter.net

Обратите внимание, что для настройки требуются только два файла: app.py и wsgi.py.

Установка и использование uwsgi

Некоторые установки

➜ sudo pip install uwsgi
➜ sudo pip install -r require

Перейдите в корень вашего проекта и запустите

uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi

Попробуйте посетить http://<your_ip>:8000, вы можете увидеть свой веб-сайт вживую. :)

В логах вышеуказанной команды можно найти несколько предупреждений и возможности улучшений. Ну, конечно, они нам нужны в долгосрочной перспективе.

Создайте файл конфигурации uWSGI myproject.ini в корне проекта.

[uwsgi]
module = wsgi

master = true
processes = 5

socket = myproject.sock
chmod-socket = 666
vacuum = true

die-on-term = true

Опять же, обратитесь к оригинальному учебнику для объяснений. Но используйте 666 вместо 660, иначе долго будете ломать голову. myproject.sock — это файл сокета, который будет передавать запросы из внешнего мира нашему фляжному приложению. Мы будем использовать nginx, который будет действовать как прокси для этого файла для большей мощности.

Использование выскочки

Upstart используется для запуска процессов при загрузке. Создайте и откройте /etc/init/myproject.confи напишите

description "uWSGI server instance configured to serve myproject"

start on runlevel [2345]
stop on runlevel [!2345] 
respawn
setuid user
chdir /home/user/myproject
exec uwsgi --ini myproject.ini --socket unix:orkohunter.net.sock

Замените user и myproject своим именем пользователя и названием проекта.

Попробуйте запустить

sudo start myproject

и это создаст процесс, и теперь будет создан файл сокета. Теперь нам нужен сервер, чтобы открыть сокет для порта 80.

Nginx

Двигатель-Х

Установите nginx с помощью apt-get. Создайте и отредактируйте файл /etc/nginx/sites-available/myproject. Добавьте в него следующие строки

server {
    listen 80;
    server_name server_domain_or_IP;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/user/myproject/myproject.sock;
    }
}

Вот и все. Создайте символическую ссылку на каталог sites-enabled.

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

Проверьте синтаксис по sudo nginx -t. Перезагрузите сервер

sudo nginx restart

На этом учебник DigitalOcean заканчивается, и ваш веб-сайт должен быть запущен. Но я хотел бы продолжить некоторые мои личные моменты.

Журналы

Вам нужно просматривать журналы для отладки. Хотя журналы nginx и upstart хранятся в /var/log/<dir>, они не содержат ошибок, вызванных в приложении Flask. Откройте файл myproject.ini и добавьте в него следующую строку

logto = /var/log/uwsgi/error.log

Теперь вы можете видеть журналы Python!

Переменные среды

Я фанатик с открытым исходным кодом и, следовательно, для конфиденциальности я объявляю секретные ключи переменными среды. Лучший способ объявить переменную среды — добавить ее в файл конфигурации Upstart. Откройте файл /etc/init/myproject.conf и добавьте

env APP_SECRET_KEY="not so secret"

объявить переменную окружения APP_SECRET_KEY. В Python вы можете использовать эту переменную как os.environ["APP_SECRET_KEY"].

Теперь вам нужно сделать

sudo restart myproject

Это все на данный момент. Ваше здоровье !