Python

Установка модуля Python

Для начала рассмотрим, как устанавливаются модули для Python. Как правило, любой модуль можно установить пакетным менеджером pip, но для этого необходимо перейти в виртуальное окружение сервера (Docker), подробнее можно ознакомится по ссылке Общие сведения по установке приложений (виртуальное окружение Docker). В качестве примера установим библиотеку PIL:

(docker) denia059@plasma:~ [0] $ pip install pil --user --ignore-installed
Downloading/unpacking pil
  Downloading PIL-1.1.7.tar.gz (506Kb): 506Kb downloaded
  Running setup.py egg_info for package pil
    WARNING: '' not a valid package name; please use only.-separated package names in setup.py

Installing collected packages: pil
  ...
Successfully installed pil
Cleaning up..

Дожидаемся окончания операции. Готово, модуль установлен в каталог:

~/.local/lib/python2.7/site-packages/PIL

Чтобы Ваш сайт увидел модуль, необходимо добавить в переменную окружения путь до него:

import os, sys
sys.path.append('/home/u/user/.local/lib/python2.7/site-packages/PIL')

Либо так:

import os, sys
sys.path.insert(0,'/home/u/user/.local/lib/python2.7/site-packages/PIL')

Вместо /u/user необходимо указать первую букву Вашего логина и сам логин. Например, для логина pythontest путь будет /home/p/pythontest/.local/lib/python2.7/site-packages/PIL

Если требуется установить дополнительные пакеты определенных версий, необходимо указать их в файле reqs.txt. Это удобно тем, что из одного файла можно установить большой список пакетов для Python.

В качестве примера из файла reqs.txt установим следующие пакеты:

(docker) denia059@plasma:~ [0] $ cat reqs.txt 
PytSite==0.41
pygal==2.0.12
django-silver==0.1.2
django-mobile==0.6.0
Pillow==2.9.0

Затем запустим команду для установки всех модулей/зависимостей из данного файла следующей командой:

(docker) denia059@plasma:~ [0] $ pip install -r reqs.txt --user --ignore-installed                                                                                                                                                           
Downloading/unpacking PytSite==0.41 (from -r reqs.txt (line 1))
  Downloading PytSite-0.41.tar.gz (2.3Mb): 2.3Mb downloaded
  Running setup.py egg_info for package PytSite
    
Downloading/unpacking pygal==2.0.12 (from -r reqs.txt (line 2))
  Downloading pygal-2.0.12.tar.gz (67Kb): 67Kb downloaded
  Running setup.py egg_info for package pygal
    
Downloading/unpacking django-silver==0.1.2 (from -r reqs.txt (line 3))
  Downloading django-silver-0.1.2.tar.gz (535Kb): 535Kb downloaded
  Running setup.py egg_info for package django-silver
    
    warning: no files found matching 'README.md'
    warning: no previously-included files matching '*.orig' found anywhere in distribution
    warning: no previously-included files matching '*.log' found anywhere in distribution
    warning: no previously-included files matching '*.swp' found anywhere in distribution
    no previously-included directories found matching 'silver/tests/coverage'
    no previously-included directories found matching 'silver/.ropeproject'
Downloading/unpacking django-mobile==0.6.0 (from -r reqs.txt (line 4))
  Downloading django-mobile-0.6.0.tar.gz
  Running setup.py egg_info for package django-mobile
    
Downloading/unpacking Pillow==2.9.0 (from -r reqs.txt (line 5))
  Downloading Pillow-2.9.0.tar.gz (9.3Mb): 9.3Mb downloaded
  Running setup.py egg_info for package Pillow
    
Downloading/unpacking PyYAML (from PytSite==0.41->-r reqs.txt (line 1))
  Downloading PyYAML-3.11.tar.gz (248Kb): 248Kb downloaded
  Running setup.py egg_info for package PyYAML
    
Downloading/unpacking Werkzeug (from PytSite==0.41->-r reqs.txt (line 1))
  Downloading Werkzeug-0.11.3.tar.gz (1.2Mb): 1.2Mb downloaded
  Running setup.py egg_info for package Werkzeug
    
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'docs/_themes'
    warning: no previously-included files matching '*.py[cdo]' found anywhere in distribution
    warning: no previously-included files matching '__pycache__' found anywhere in distribution
    warning: no previously-included files matching '*.so' found anywhere in distribution
    warning: no previously-included files matching '*.pyd' found anywhere in distribution
Downloading/unpacking Jinja2 (from PytSite==0.41->-r reqs.txt (line 1))
  Downloading Jinja2-2.8.tar.gz (357Kb): 357Kb downloaded
  Running setup.py egg_info for package Jinja2
    
    warning: no files found matching 'run-tests.py'
    warning: no files found matching '*' under directory 'custom_fixers'
    warning: no files found matching '*' under directory 'jinja2/testsuite/res'
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no previously-included files matching '*.pyc' found under directory 'jinja2'
    warning: no previously-included files matching '*.pyc' found under directory 'docs'
    warning: no previously-included files matching '*.pyo' found under directory 'jinja2'
    warning: no previously-included files matching '*.pyo' found under directory 'docs'
Downloading/unpacking pylibmc (from PytSite==0.41->-r reqs.txt (line 1))
  Downloading pylibmc-1.5.0.tar.gz (53Kb): 53Kb downloaded
  Running setup.py egg_info for package pylibmc

Установка локально Python 3

Для некоторых web-приложений нужен Python 3-ей версии. Поскольку на серверах установлен Python 2.7, для решения можно установить локально Python 3.

Подключимся по SSH к серверу и скомпилируем из исходного кода. Инструкция для подключения по SSH описана в статье Общие сведения по установке приложений (виртуальное окружение Docker).

Теперь перейдем во временный каталог на аккаунте:

(docker) django17@quasar:~ [0] $ cd ~/.beget/tmp/

Если каталог не создан, создайте его и затем перейдите

(docker) django17@quasar:~ [0] $ mkdir ~/.beget/tmp
(docker) django17@quasar:~ [0] $ cd ~/.beget/tmp/

На текущий момент последняя версия 3.4.3, скачать последнюю версию можно с официального сайта.

(docker) django17@quasar:~/.beget/tmp [0] $ wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz
--2015-08-12 15:21:54--  https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz
Resolving www.python.org (www.python.org)... 185.31.17.223
Connecting to www.python.org (www.python.org)|185.31.17.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14421964 (14M) [application/octet-stream]
Saving to: `Python-3.4.3.tar.xz'

100%[=====================================================================================================================================================================================================>] 14 421 964  21,4M/s   in 0,6s

2015-08-12 15:21:55 (21,4 MB/s) - `Python-3.4.3.tar.xz' saved [14421964/14421964]

Распакуем архив и сразу перейдем в него:

(docker) django17@quasar:~/.beget/tmp [0] $ tar xf Python-3.4.3.tar.xz && cd Python-3.4.3

С помощью утилиты configure настроим все зависимости, префиксы, переменные, после чего будет сгенерирован Makefile:

(docker) django17@quasar:~/.beget/tmp/Python-3.4.3 [0] $ ./configure --prefix $HOME/.local
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... linux
checking for --without-gcc... no
config.status: creating pyconfig.h
...
creating Modules/Setup
creating Modules/Setup.local
creating Makefile

Теперь запустим процесс компиляции:

(docker) deniatest@robin:~/.beget/tmp/Python-3.4.3 [0] $ make -j33 && make install
Compiling '/home/d/deniatest/.local/lib/python3.4/urllib/__init__.py'...
Compiling '/home/d/deniatest/.local/lib/python3.4/urllib/error.py'...
Compiling '/home/d/deniatest/.local/lib/python3.4/urllib/parse.py'...
Compiling '/home/d/deniatest/.local/lib/python3.4/urllib/request.py'...
...

Проверим корректность установки:

(docker) django17@quasar:~ [0] $ ~/.local/bin/python3 -V
Python 3.4.3

Помимо Python был установлен пакетный менеджер pip, проверить можно следующим способом:

(docker) django17@quasar:~ [0] $ ~/.local/bin/pip3.4 -V
pip 6.0.8 from /home/d/django17/.local/lib/python3.4/site-packages (python 3.4)

Установка и настройка Django

Django (Джанго) — свободный фреймворк для веб-приложений на языке Python. Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). В этой статье будет рассмотрена установка этого фреймворка на хостинг BeGet. Для установки Django будет использоваться Python 3.4.3. При необходимости можете использовать другую версию Python, установив её локально, как описано выше.

Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее можно ознакомится по ссылке Общие сведения по установке приложений (виртуальное окружение Docker)

Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 4.0.4-3-beget-acl x86_64)

 * Documentation:  https://help.ubuntu.com/
(docker) django17@quasar:~ [0] $

Для установки фреймворка Django используется пакетный менеджер pip, который автоматически устанавливает последнюю версию:

(docker) django17@quasar:~/django17.bget.ru [0] $ $HOME/.local/bin/pip3 install django --user --ignore-installed
You are using pip version 6.0.8, however version 7.1.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting django
  Downloading Django-1.8.3-py2.py3-none-any.whl (6.2MB)
    100% |################################| 6.2MB 84kB/s
Installing collected packages: django

Successfully installed django-1.8.3

Затем необходимо создать новый проект:

(docker) django17@quasar:~/django17.bget.ru [0] $ $HOME/.local/bin/python3 $HOME/.local/bin/django-admin.py startproject HelloDjango

И создать файл passenger_wsgi.py со следующим содержимым:

# -*- coding: utf-8 -*-
import os, sys
sys.path.insert(0, '<полный_пути_до_каталога_с_проектом>')
        sys.path.insert(1, '<полный_путь_до_Django>')
            os.environ['DJANGO_SETTINGS_MODULE'] = '<название_проекта>.settings'
                from django.core.wsgi import get_wsgi_application
                application = get_wsgi_application()

В рассматриваемом примере passenger_wsgi.py следующий:

# -*- coding: utf-8 -*-
import os, sys
sys.path.insert(0, '/home/a/alicei/django.teamlead.info/HelloDjango')
sys.path.insert(1, '/home/a/alicei/.local/lib/python3.4/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'HelloDjango.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

ВНИМАНИЕ! Для Django версии ниже 1.4 содержимое файла должно быть таким:

# -*- coding: utf-8 -*-
import os, sys
sys.path.append('<полный_путь_до_каталога_с_сайтом>')
        sys.path.append('<полный_путь_до_Django>')
            os.environ['DJANGO_SETTINGS_MODULE'] = '<название_проекта>.settings'
                import django.core.handlers.wsgi
                application = django.core.handlers.wsgi.WSGIHandler()

Например:

# -*- coding: utf-8 -*-
import os, sys
sys.path.append('/home/m/madest/django.tests.bget.ru/')
sys.path.append('/home/m/madest/.local/lib/python2.7/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'HelloDjango.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Для Django версии 1.4 и выше нужно указать другой путь в sys.path.append, а именно:

sys.path.append('<полный_путь_до_каталога_с_сайтом>/<название_проекта>')

В этом случае файл passenger_wsgi.py будет выглядеть следующим образом:

# -*- coding: utf-8 -*-
import os, sys
sys.path.append('/home/m/madest/django.tests.bget.ru/HelloDjango')
sys.path.append('/home/m/madest/.local/lib/python2.7/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'HelloDjango.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Для Django версии 1.7 синтаксис последних двух строк несколько отличается:

# -*- coding: utf-8 -*-
import os, sys
sys.path.append('/home/m/madest/django.tests.bget.ru/HelloDjango')
sys.path.append('/home/m/madest/.local/lib/python2.7/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'HelloDjango.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:

(docker) django17@quasar:~/django17.bget.ru [0] $ ln -s public_html public

Затем нужно создать файл .htaccess и указать в нем путь до локально скомпилированного Python:

PassengerEnabled On
PassengerPython /home/первая_буква_логина/логин/.local/bin/python3.4

В рассматриваемом примере .htaccess следующий:

PassengerEnabled On
PassengerPython /home/d/django17/.local/bin/python3.4

Внимание! Путь может отличаться, в зависимости от используемой версии Python.

После завершения настройки окружения необходимо создать каталог tmp, где будет хранится файл restart.txt:

(docker) django17@quasar:~/django17.bget.ru [0] $ mkdir tmp; touch tmp/restart.txt

Пересоздание tmp/restart.txt применяет новые изменения в проекте

Для проверки работоспособности нужно открыть сайт в браузере:


Установка микрофреймворка Flask

Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее можно ознакомится по ссылке Общие сведения по установке приложений (виртуальное окружение Docker)

Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 4.1.5-3-beget-acl x86_64)

 * Documentation:  https://help.ubuntu.com/
(docker) deniatest@robin:~ [0] $

В рассматриваемом примере каталог сайта - flask, нужно перейти в этот каталог:

(docker) deniatest@robin:~/.beget/tmp/Python-3.4.3 [0] $ cd ~/flask/

Установка Flask происходит через пакетный менеджер pip. Поскольку в рассматриваемом примере Flask устанавливается для ранее собранного Python 3.4.3, pip запускается из локального каталога:

(docker) deniatest@robin:~/flask [1] $ ~/.local/bin/pip3 install flask --user --ignore-install
You are using pip version 6.0.8, however version 7.1.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting flask
  Downloading Flask-0.10.1.tar.gz (544kB)
    100% |################################| 544kB 1.1MB/s
Collecting Werkzeug>=0.7 (from flask)
  Downloading Werkzeug-0.10.4-py2.py3-none-any.whl (293kB)
    100% |################################| 294kB 1.9MB/s
Collecting Jinja2>=2.4 (from flask)
  Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |################################| 266kB 2.8MB/s
Collecting itsdangerous>=0.21 (from flask)
  Downloading itsdangerous-0.24.tar.gz (46kB)
    100% |################################| 49kB 7.7MB/s
Collecting MarkupSafe (from Jinja2>=2.4->flask)
  Downloading MarkupSafe-0.23.tar.gz
Installing collected packages: MarkupSafe, itsdangerous, Jinja2, Werkzeug, flask
  Running setup.py install for MarkupSafe
    building 'markupsafe._speedups' extension
    gcc -pthread -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/d/deniatest/.local/include/python3.4m -c markupsafe/_speedups.c -o build/temp.linux-x86_64-3.4/markupsafe/_speedups.o
    gcc -pthread -shared build/temp.linux-x86_64-3.4/markupsafe/_speedups.o -o build/lib.linux-x86_64-3.4/markupsafe/_speedups.cpython-34m.so
  Running setup.py install for itsdangerous


  Running setup.py install for flask
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.10.4 flask-0.10.1 itsdangerous-0.24

Необходимо создать каталог с новым проектом HelloFlask и временный каталог tmp:

(docker) deniatest@robin:~/flask [0] $ mkdir HelloFlask tmp

Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:

deniatest@robin:~/flask [0] $ ln -s public_html public

После чего нужно создать файл .htaccess со следующим содержимым:

PassengerEnabled On
PassengerPython /home/d/deniatest/.local/bin/python3

где во второй директиве PassengerPython указывается путь до интерпретатора Python.


Далее нужно создать файл passenger_wsgi.py со следующим содержимым:

# -*- coding: utf-8 -*-
import sys, os
sys.path.append('/home/d/deniatest/flask/HelloFlask/') # указываем директорию с проектом
sys.path.append('/home/d/deniatest/.local/lib/python3.4/site-packages') # указываем директорию с библиотеками, куда поставили Flask
from HelloFlask import app as application # когда Flask стартует, он ищет application. Если не указать 'as application', сайт не заработает
application.debug = False  # Опционально: True/False устанавливается по необходимости в отладке

В каталоге проекта HelloFlask необходимо создать файл __init__.py со следующим содержимым:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello Flask!'

if __name__ == '__main__':
    app.run()

После чего в корневом каталоге сайта ~/flask необходимо выполнить следующую команду:

deniatest@robin:~/flask [0] $ touch tmp/restart.txt

При проверке работы сайта в браузере должно получиться:


Первоначальная установка микрофреймворка Bottle

Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее можно ознакомится по ссылке Общие сведения по установке приложений (виртуальное окружение Docker)

После чего перейти в каталог сайта:

(docker) deniatest@robin:~ [0] $ cd bottle/

Bottle устанавливается через пакетный менеджер pip. Обращаем Ваше внимание, что в данной статье используется Python 2.7. При необходимости, можете установить на другую версию, соответственно поправив все пути и директивы.

(docker) deniatest@robin:~/bottle [0] $ pip install bottle --user --ignore-install
Downloading/unpacking bottle
  Downloading bottle-0.12.8.tar.gz (69Kb): 69Kb downloaded
  Running setup.py egg_info for package bottle

Installing collected packages: bottle
  Running setup.py install for bottle
    changing mode of build/scripts-2.7/bottle.py from 600 to 755

    changing mode of /home/d/deniatest/.local/bin/bottle.py to 755
Successfully installed bottle
Cleaning up...

Затем нужно создать каталог с новым проектом HelloBottle и временный каталог tmp:

(docker) deniatest@robin:~/bottle [0] $ mkdir HelloBottle tmp

Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:

(docker) deniatest@robin:~/bottle [0] $ ln -s public_html public

Далее нужно создать файл .htaccess, общий вид которого:

PassengerEnabled On
PassengerPython /usr/bin/python
SetEnv PYTHONPATH /home/первая_буква_акккаунта/логин_аккаунта/.local/lib/python2.7/site-packages

Вторая директива PassengerPython указывает путь до интерпретатора Python, третья директива SetEnv - путь к установленным модулям. Поскольку по умолчанию модули устанавливаются в каталог /usr/lib/python2.7 и /usr/local/lib/python2.7, необходимо переопределить этот параметр.

В рассматриваемом примере .htaccess получился следующим:

PassengerEnabled On
PassengerPython /usr/bin/python
SetEnv PYTHONPATH /home/d/deniatest/.local/lib/python2.7/site-packages

Общий вид файла passenger_wsgi.py:

# -*- coding: utf-8 -*-

import sys
import bottle
import os

# add your project directory to the sys.path
project_home = u'/home/первая_буква_логина_аккаунта/логин_аккаунта/сайт/название_проекта/'
if project_home not in sys.path:
    sys.path = [project_home] + sys.path

# make sure the default templates directory is known to Bottle
templates_dir = os.path.join(project_home, 'views/')
if templates_dir not in bottle.TEMPLATE_PATH:
    bottle.TEMPLATE_PATH.insert(0, templates_dir)

# import bottle application
from app import application

В рассматриваемом примере passenger_wsgi.py получился следующим:

# -*- coding: utf-8 -*-

import sys
import bottle
import os

# add your project directory to the sys.path
project_home = u'/home/d/deniatest/bottle/HelloBottle/'
if project_home not in sys.path:
    sys.path = [project_home] + sys.path

# make sure the default templates directory is known to Bottle
templates_dir = os.path.join(project_home, 'views/')
if templates_dir not in bottle.TEMPLATE_PATH:
    bottle.TEMPLATE_PATH.insert(0, templates_dir)

# import bottle application
from app import application

Затем необходимо создать файл app.py в каталоге проекта HelloBottle:

# -*- coding: utf-8 -*-

from bottle import default_app, route, run, debug

@route('/')
def default():
    return u'Hello Bottle!'

@route('/no')
def hello_world():
    return u'Hello ОТ - no -- Bottle!'

@route('/c')
def hello_world():
    return u'c Hello ОТ - -- Bottle!'

#debug(True)
application = default_app()

Для того, чтобы Passenger переприменил конфиг, необходимо создать файл tmp/restart.txt:

deniatest@robin:~/bottle [0] $ touch tmp/restart.txt

Для проверки работоспособности нужно открыть сайт в браузере:

Установка web2py

web2py — фреймворк с открытым исходным кодом для разработки веб-приложений, написанный на языке программирования Python. web2py призван сократить рутинные процессы веб разработки, такие как написание веб-форм с нуля, хотя разработчик может сам разработать её с нуля, если в этом возникнет необходимость.

В этой статье будет рассмотрена установка этого фреймворка на хостинг BeGet. В качестве версии Python мы будем использовать установленную глобально 2.7.

Первое, что нужно сделать - подключиться в виртуальное окружение сервера (Docker) через протокол SSH. Подробнее о подключении описывается в статье Общие сведения по установке приложений (виртуальное окружение Docker).

Теперь мы в виртуальном окружении переместимся в директорию сайта, заранее созданного в разделе Сайты, в нашем случае - это web2py

(docker) denia059@plasma:~ [0] $ cd web2py/
(docker) denia059@plasma:~/web2py [0] $ 

После склонируем сам фреймворк

(docker) denia059@plasma:~/web2py [0] $ git clone https://github.com/web2py/web2py.git
Cloning into 'web2py'...
remote: Counting objects: 32066, done.
remote: Total 32066 (delta 0), reused 0 (delta 0), pack-reused 32066
Receiving objects: 100% (32066/32066), 32.61 MiB | 7.16 MiB/s, done.
Resolving deltas: 100% (19419/19419), done.

Переместим все файлы в текущую директорию командой

(docker) denia059@plasma:~/web2py [0] $ mv web2py/* .
(docker) denia059@plasma:~/web2py [0] $ 

Сделаем симлинк passenger_wsgi.py на файл wsgihandler.py

(docker) denia059@plasma:~/web2py [0] $ ln -s wsgihandler.py passenger_wsgi.py
(docker) denia059@plasma:~/web2py [0] $ 

Закомментируем 35-ю строчку в файле passenger_wsgi.py

(docker) denia059@plasma:~/web2py [0] $ sed -i '35 s/^/#/g' passenger_wsgi.py
(docker) denia059@plasma:~/web2py [0] $ 

Скопируем в текущую директорию файл handlers/wsgihandler.py:

(docker) denia059@plasma:~/web2py [0] $ cp handlers/wsgihandler.py .
(docker) denia059@plasma:~/web2py [0] $ 

Следующей командой добавим несколько директив в файл .htaccess

cat > .htaccess << EOF
PassengerEnabled On
PassengerPython /usr/bin/python
SetEnv PYTHONPATH $HOME/.local/lib/python2.7/site-packages
EOF

Для работы web2py нужно поставить библиотеку pyDAL

(docker) denia059@plasma:~/web2py [0] $ pip install pyDAL --user --ignore-install
Downloading/unpacking pyDAL
  Downloading pyDAL-15.9.tar.gz (168Kb): 168Kb downloaded
  Running setup.py egg_info for package pyDAL
    
    warning: no previously-included files matching '.DS_Store' found under directory 'tests'
    warning: no previously-included files matching '.DS_Store' found under directory 'docs'
Installing collected packages: pyDAL
  Running setup.py install for pyDAL
    
    warning: no previously-included files matching '.DS_Store' found under directory 'tests'
    warning: no previously-included files matching '.DS_Store' found under directory 'docs'
Successfully installed pyDAL
Cleaning up...

Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:

(docker) denia059@plasma:~/web2py [0] $ ln -s public public_html
(docker) denia059@plasma:~/web2py [0] $ 

Для того, чтобы Passenger переприменил конфиг, необходимо создать файл tmp/restart.txt:

(docker) denia059@plasma:~/web2py [0] $ mkdir tmp; touch tmp/restart.txt
(docker) denia059@plasma:~/web2py [0] $ 

Теперь проверим в браузере. Вводим URL нашего сайта и видим стандартную страницу с установленным фреймворком

Ссылка на административную панель фреймворка - http://site.ru/admin, в рассматриваемом примере - http://deniatest.bget.ru/admin В документации web2py указано, что доступ к административной панели заблокирован. Для того, чтобы разблокировать доступ, необходимо выполнить следующую команду:

deniatest@robin:~/web2py [0] $ python -c "from gluon.main import save_password; save_password(raw_input('admin password: '),80)"

После чего ввести пароль:

admin password: qwerty

Проверка работоспособности сайта средствами браузера:

При необходимости сменить пароль для доступа к административной панели можно, нажав на кнопку "Изменить пароль администратора" в правой части.



Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел "Помощь и поддержка".