Python - это скриптовый язык, основы синтаксиса которого базируются на отступах.
Чаще всего во многих линукс системах стоит по умолчанию. Существует две ветви данного языка - Python2 и Python3. Мною используется Python2, как наиболее стабильная и с большим кол-вом библиотек. Преимущество данного языка для разработки заключается в том, что он позволяет очень быстро создавать скелет приложения, а также без проблем в дальнейшем разрабатывать полноценный проект.
Для использования в web-разработке желательно использовать фреймворки. Иначе можно годами только создавать очередной велосипед. Таких существует несколько, к примеру Django, Flask, bottle. Мною будет рассмотрен исключительно Flask.
Создание и запуск hello-world проекта
--------
Первоначально нам нужен сервер - желательно на debian или ubuntu linux. Или же для тестирования - установленная ОС Линукс на нашем ПК. И да не стоит пытаться разрабатывать python-приложения на системах Windows. Это кроссплатформенный язык конечно, но в виндоус будут возникать различные проблемы и вместо разработки вам придется лишь бороться с самим языком, вместо того чтобы постигать новые его возможности.
Итак подрубаемся по ssh к нашему серверу ssh root@ip. Где ip - это айпи-адрес выданный провайдером VPS-услуг. Запросит пароль и мы подключимся к консоли сервера.
Изначально рекомендую тестировать на локальной системе.
Обновимся
apt-get update
Устанавливаем необходимые пакеты.
apt-get install python python-dev python-pip
Pip - Это пакетный менеджер для библиотек языка python. С помощью него мы сможем устанавливать дальнейшие зависимости проекта.
pip install virtualenv
Virtualenv - Это библиотека для построения виртуальных окружений. С помощью нее мы будем разрабатывать проект в своего рода песочнице.
virtualenv project
Теперь заходим в созданный проект.
cd project
С помощью ls мы можем посмотреть, что находится в данной папке.
bin include lib local pip-selfcheck.json
Это основные каталоги проекта. В bin лежат бинарники python,pip и другие. В lib библиотеки и так далее.
Теперь нам необходимо установить в нашу песочницу нужные библиотеки.
bin/pip install flask
bin/pip install flask-login
bin/pip install sqlalchemy
bin/pip install flask-sqlalchemy
bin/pip install sqlalchemy-migrate
bin/pip install flask-wtf
Также рекомендую установить ipython. Это интерактивная консоль python с расширенными возможностями.
bin/pip install ipython
Проверим, что flask был установлен.
bin/ipython
Далее мы работаем в консоли ipython.
from flask import Flask
Если ошибок не выдается значит мы установили flask успешно.
Выйдем из ipython. Ctrl+D Ctrl+D
Создадим основную структуру проекта.
mkdir app app/static app/templates tmp
Для написания кода рекомендую использовать emacs - для продвинутых пользователей с установленными модами для языка python. Для начинающих думаю проще всего будет юзать geany.
apt-get install geany
Создадим в нашем редакторе файл app/__init__.py
Это файл инициализации нашего модуля app. Поместим туда простейшие импорты.
from flask import Flask
app = Flask(__name__)
from app import views
Нам также необходимо создать файл views, ведь мы их импортируем.
app/views.py
В нем будет находится логика роутинга урл.
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello, World!"
Здесь мы просто возвращаем по урлам / и /index строку с текстом hello world.
Создадим скрипт для запуска нашего мини-проекта - project/run.py
Назвать вы его можете как хотите. run.py - лишь для примера.
Помещаем туда следующее.
#!bin/python
from app import app
app.run(debug = True)
Делаем скрипт исполняемым - chmod a+x run.py
./run.py
Запускаем проект.
Теперь достаточно перейти по localhost:5000 или localhost:5000/index в вашем браузере, чтобы увидеть запущенный проект.
Если необходим вырубить скрипт жмем ctrl+c в консоли.
Создаем deeb-web домен для тестового приложения.
----------
Устанавливаем тор.
apt-get install tor
Редактируем конфиг тора. Мною используется редактор nano для быстрого редактирования.
nano /etc/tor/torrc
Создаем папку для хранения домена и ключа.
mkdir -p /etc/tor/hidden/
Переходим в конец конфига и добавляем такие строки.
HiddenServiceDir /etc/tor/hidden/
HiddenServicePort 80 127.0.0.1:5000
Перезапускаем тор.
service tor restart
Если выдает такую ошибку /etc/tor/hidden2/ is not owned by this user
То меняем права на папку.
chown -R debian-tor:debian-tor /etc/tor/hidden/
chmod 700 /etc/tor/hidden/
Снова перезапускаем тор. Узнаем наш адрес тор-домена.
cat /etc/tor/hidden/hostname
Теперь зайдя по этому адресу при запущенном скрипте вы увидите ваш hello-world проект.
Настраиваем многопоточность и устойчивость к нагрузкам
--------
Тестовый запуск через run.py хорош для отладки приложения, но для реальной работы он не годится. Поэтому нам необходимо настроить сервер Nginx, который будет принимать удар на себя и связать его с нашим приложением. Для этого мы используем Uwsgi.
Устанавливаем nginx.
apt-get install nginx
Ставим либы для нашего проекта. В нашей папке с проектом само собой.
bin/pip install uwsgi
Настраиваем взаимодействие.
В нашем редакторе создадим файл WSGI.py в папке с проектом.
Поместим туда следующее.
from app import app
if __name__ == "__main__":
app.run()
Создадим конфиг для nginx. Старый можно удалить.
rm /etc/nginx/nginx.conf
touch /etc/nginx/nginx.conf
Поместим туда следующее.
worker_processes 1;
events {
worker_connections 1024;
}
http {
sendfile on;
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length 500;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/xml text/css
text/comma-separated-values
text/javascript
application/x-javascript
application/atom+xml;
upstream uwsgicluster {
server 127.0.0.1:8080;
}
server {
root /ваш/путь/до/app;
# Running port
listen 127.0.0.1:80;
# Proxying connections to application servers
location / {
include uwsgi_params;
uwsgi_pass uwsgicluster;
uwsgi_read_timeout 300;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
И меняем строчку в конфиге тора на другой порт.
HiddenServicePort 80 127.0.0.1:80
Перезапускаем тор.
service tor restart
Затем перезапускаем nginx.
service nginx restart
И запускаем наше приложение из папки с проектом.
bin/uwsgi --socket 127.0.0.1:8080 -w WSGI:app --enable-threads -M -p 5 -R 3000
Теперь по адресу onion будет работать готовое к нагрузкам приложение.