Hello world! с помощью mod_python

Написание сайта с использованием mod_python состоит из двух этапов: конфигурирование сервера (apache) и собственно написание кода.

1. Конфигурация сервера:
Вначале установим модуль, если его еще нет:

aptitude install libapache2-mod-python
a2enmod python

Подредактируем, например, на Debian файл /etc/apache2/sites-available/default :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py        #говорит апачу передавать обработку файлов *.py в mod_python
                PythonHandler index                     #говорит, в каком файле находится обработчик хэндлеров.
                DirectoryIndex index.py                #указывает, какой файл отображается по-умолчанию в директории
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        AddHandler mod_python .py
        PythonHandler mod_python.publisher
        PythonDebug On                                  #включает выведение ошибок в браузер - удобно пр иотладке
        DirectoryIndex index.py
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Активируем виртуалхост (если он не активен) и перезапускаем веб-сервер, чтобы изменения вступили в силу:

a2ensite default
service apache2 restart

2. Написание кода:
from mod_python import apache          #импорт класса apache
def handler(req):                      #функция обработки хэндлера
    req.content_type = "text/html"     #задаем тип содержимого веб-страницы
    req.send_http_header()             #посылка дефолтового хэдера html-страницы
    req.write("Hello World!")          #отправляем Hello World! на страницу
    return apache.OK                   #рендеринг страницы с кодом ОК

Называем файл index.py и сохраняем в директорию виртуал-хоста (в нашем примере это /var/www), не забывая сменить хозяина файла на www-data. Перед проверкой нужно удалить дефолтовый файл index.html из директории виртуалхоста и удалить русскоязычные буквы из питоновского файла – иначе будет ругаться.

Вот так выглядит Hello World на mod_python:

Кодинг на Python в NetBeans (7.2.1)

Я перепробовал много IDE для написания кода на питончике – начиная с обычного nano и заканчивая платными продуктами – PyCharm и WingIDE. Но в итоге выбор пал на бесплатный NetBeans, т. к. выкладывать 100 баксов за платную ИДЕ как-то не хочется… Итак, приступим (описанное здесь я тестировал на ОС Debian 7 и Oracle Linux 6.3).

1. Качаем Java SE SDK с официального сайта Oracle и устанавливаем

2. Качаем с оф. сайта последнюю стабильную версию (на момент написания статьи это была версия 7.2.1) – http://netbeans.org/downloads/ и качаем любую версию, устанавливаем. При установке может попросить указать папку с Java SDK – указываем (если мы качали .tar.gz).

3. А теперь сама “Магия” 🙂 Запускаем наш свеженький NetBeans и переходим в меню Tools > Plugins, вкладка Settings и нажимаем Add, указываем какое-то вменяемое имя и как URL – http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz

4. Переходим на вкладку Available Plugins и в поиску набираем python. Будет 3 плугина – устанавливаем, презапускаем IDE, ждем пока она проиндексирует питоновские модули, и кодим на питоне с автодополнением и т. п. 🙂

http://geckich.blogspot.com/

Отключения службы фаерволла в Windows Server 2008 и 2012 без потери доступа по RDP

Если просто остановить службу, то у нас отвалится RDP  и порт 3389 будет блокирован на сервере.
Чтобы этого не допустить, то надо не сразу останавливать службу, а вначале выполнить команды в консоли с правами администратора:
netsh firewall set portopening protocol=TCP port=3389 mode=ENABLE
netsh advfirewall set allprofiles state off

Иначе прийдется бежать за монитором 🙂
http://geckich.blogspot.com/

SSH tunneling

Пробросить порт с помощью ssh довольно просто:
ssh -R localip:localport:remoteip:remoteport localuser@localip
пример: 192.168.1.1:8080:192.168.2.1:80 root@192.168.1.1
Т. е. порт на той машине, где запущена эта команда будет форвардиться на порт на удаленной машине. Например, локальная машина имеет vpn-подключение, недоступное другим машинам и они могут через нее коннектиться к какомуто серверу на другом конце vpn.
В примере все запросы на порт 8080 машины 192.168.1.1 будут идти на порт 80 машины 192.168.2.1 и, соответственно, ответы будут приходить обратно. В общем, примерно то же, что и port forwarding в роутере.
http://geckich.blogspot.com/