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:

http://geckich.blogspot.com/

Кодинг на 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/