Добавить в корзинуПозвонить
Найти в Дзене
IT-ПЕРЕЗАГРУЗКА

Основы разработки web-приложений на Python с уклоном в deepweb.

Python - это скриптовый язык, основы синтаксиса которого базируются на отступах. Чаще всего во многих линукс системах стоит по умолчанию. Существует две ветви данного языка - Python2 и Python3. Мною используется Python2, как наиболее стабильная и с большим кол-вом библиотек. Преимущество данного языка для разработки заключается в том, что он позволяет очень быстро создавать скелет приложения, а также без проблем в дальнейшем разрабатывать полноценный проект. Для использования в web-разработке желательно использовать фреймворки. Иначе можно годами только создавать очередной велосипед. Таких существует несколько, к примеру Django, Flask, bottle. Мною будет рассмотрен исключительно Flask. Создание и запуск hello-world проекта -------- Первоначально нам нужен сервер - желательно на debian или ubuntu linux. Или же для тестирования - установленная ОС Линукс на нашем ПК. И да не стоит пытаться разрабатывать python-приложения на системах Windows. Это кроссплатформенный язык конечно, но в вин

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 будет работать готовое к нагрузкам приложение.