IT Sea logo
  • Новости
    • Архив
  • Статьи
    • Веб-дизайн
    • Веб-программирование
    • Общество и Сеть
  • Обзоры
    • Hardware
Статьи→Веб-программирование→Установка ASP.NET (+Mono 2.6) в Debian/Ubuntu Linux

Установка ASP.NET (+Mono 2.6) в Debian/Ubuntu Linux

Для работы сайтов, написанных на ASP.NET, необходимо поставить среду выполнения IL байт-кода и собственно веб-сервер. Таким образом, существует, как минимум, два способа заставить работать сайт на ASP.NET в Linux. Первый – поставить родной для ASP.NET фреймворк Microsoft .NET Framework для работы под управлением Wine, второй – установить Mono и адаптировать под него свой сайт.

Но не все так просто и безобидно. Оба метода не лишены недостатков. Прежде всего, Microsoft .NET Framework является дополнением к операционной системе Windows, и, установив его под Wine, вы нарушите лицензионное соглашение. Кроме того, даже если вы, нарушив лицензионное соглашение, все-таки установите его под Wine, неизвестно как он покажет себя в плане стабильности и производительности, а это очень важно для сервера. Во втором случае существует такая особенность, как неполная совместимость Mono с Net. Framework. Поэтому, если изначально сайт не разрабатывался для работы в Mono, вероятно, часть кода придется переписать. Впрочем, переписывать код в любом случае придется, в частности, при миграции с MSSQL или Oracle, с которыми работает большинство сайтов на ASP.NET, это коснется кода, взаимодействующего с базой данных.

В моем случае, целью была изначальная разработка сайта на APS.NET для сервера с Linux. Поэтому был создан локальный VPS, на который теперь нужно установить Mono, веб-сервер и сделать минимально необходимые настройки. Итак, коннектимся к серверу по SSH, вводим логин и пароль. Мой сервер был никак почти никак не настроен, поэтому первым делом я установил sudo и добавил себя в список /etc/sudoers.

aptitude install sudo

Все, теперь все операции через sudo. У меня на сервере стоит Debian, поэтому все, что далее написано, применимо к любому дистрибутиву Linux, основанному на Debian, в том числе и к большинству дистрибутивов, основанных на Ubuntu.

Итак, если вы используете Debian, то на первый взляд тут все довольно печально – самой старшей версией, доступной в стандартном репозитории стабильной ветки, является Mono 1.9.1. Идем на сайт Mono. Слегка порывшись в документации можно увидеть, что все-таки существует возможность поставить версию 2.4.2.3. Для этого нужно добавить репозиторий в файл /etc/apt/sources.list:

deb http://www.backports.org/debian lenny-backports main

Обновить список пакетов и произвести установку:

sudo aptitude update
sudo aptitude -t lenny-backports install mono-runtime

В репозитории Ubuntu последних версий, версия 2.4.2.3 доступна, поэтому если нужна эта версия, ее можно установить так:

sudo aptitude install mono-runtime

Вначале собственно она и была мной установлена, но потом там обнаружились некоторые нужные мне и не реализованные в этой версии функции. Нужно было работать c SSL, а также отправить письмо через Google SMTP. Для работы с SSL было найдено несколько способов реализации этих возможностей, в Windows все работало. В Linux при соединении по SSL работал только устаревший способ. Для работы с SMTP Google, потребовалось установить сертификат, но и после этого отправка писем не работала. При установке другого сертификата, вообще возникало исключение. Для решения данной проблемы, было найдено 3 варианта, изменить логику и не отсылать письма через Google, поставить патчи, либо перейти на более новую версию.

Установка Mono 2.6

Сначала был найден скрипт для сборки из исходников. Скрипт в общем-то работал, но компилятор C# отказался компилировать один из файлов, выдав сообщение, гласящее: "decl.cs(628,57): error CS0246: The type or namespace name 'var' could not be found. Are you missing a using directive or an assembly reference?" Желания разбираться в исходниках у меня не было. Поэтому пришлось снова погрузиться в поиск. В этот раз были найдены deb-пакеты Mono 2.6.1 для Ubuntu.

Для установки Mono 2.6.1 нужно добавить в файл /etc/apt/sources.list два репозитория – тестируемых пакетов Debian, для получения свежих версий некоторых пакетов, и репозиторий OpenSuse. Во втором находятся несколько версий Mono 2.6.1 и можно выбрать нужную версию. Так как конкретно для Debian там был только пакет libgdiplus, я добавил репозиторий для Ubuntu 9.10:

deb http://ftp.de.debian.org/debian squeeze main
deb http://download.opensuse.org/repositories/home:/surfzoid:/DebianUbuntu:/Mono/Ubuntu_9.10_standard ./

Обновляем список пакетов и устанавливаем Mono:

sudo aptutude update
sudo aptitude install mono-runtime

Итак, минимальная конфигурация Mono установлена. Проверить, что установилась именно Mono версии 2.6.1, можно, набрав команду:

mono -V

Теперь можно доустановить другие нужные пакеты Mono или оставить все как есть.

Настройка nginx в качестве front-end к xsp2.

В качестве веб-сервера для работы ASP.NET в Linux можно использовать как стандартный Mono-сервер xsp2, так и Apache или nginx. Первый, в общем-то, целесообразно использовать только для обработки ASP.NET страниц. В Apache обрабатывать страницы APS.NET можно путем подключения модуля mod_mono или через FastCGI. В третьем случае страницы ASP.Net можно обрабатывать либо через FastCGI, следуя руководству, расположенному на сайте Mono, либо, используя nginx в качестве front-end сервера, а xsp2 в качестве back-end сервера.

Очевидно, что для эффективной работы связка с веб-сервером nginx более предпочтительна, по сравнению с Apache. Вначале я настроил связку через FastCGI и протестировал на простой странице ASP.NET, которая показывала текущее время. В итоге получилось, что при обработке каждой тысячи запросов возникает 2-3 ошибки (посылалось по 10 запросов одновременно). После перенастройки nginx для проксирования страниц на веб-сервер xsp2, такой проблемы не обнаружилось даже после увеличения количества одновременных запросов до 100.

Итак, процесс установки nginx в качестве front-end сервера к xsp2, заключается в следующем.

  1. Установка и настройка nginx:

    sudo aptitude install nginx

    В файле конфигурации /etc/nginx/nginx.conf в секции http записываем настройки веб-сервера.

    upstream backend {
      server 127.0.0.1:8080; #адрес на котором находится веб-приложение
    }

    server {
      listen 80;
      server_name myvps; #имя сервера myvps
      access_log /var/log/nginx/myvps.access.log;
      error_log /var/log/nginx/myvps.error.log;

      location / {
        root /var/www/myvps/; #корневая директория
        index index.html index.htm default.aspx Default.aspx;
      }

      #далее расширения файлов, которые будет обрабатывать xsp2
      location ~ \.(aspx|asmx|ashx|asax|ascx|soap|rem|axd|cs|config|dll)$ {
        #настройки проксирования
        proxy_pass http://backend;
        #передаваемые заголовки
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
    }
  2. Установка xsp2

    sudo aptitude install mono-xsp2

    При желании можно сконфигурировать автозапуск веб-сервера xsp2. Сделать это очень просто, например, через .webapp-файл, который имеет следующий формат

    <apps>
      <web-application>
        <name>{имя Web-приложения}</name>
        <vhost>{Имя виртуального хоста}</vhost>
        <vport>{Порт для Web-приложения}</vport>
        <vpath>{Путь относительно корневой директории виртуального сервера}</vpath>
        <path>{Физический путь к файлам aspx}</path>
        <!-- <enabled> по умолчанию – true -->
        <enabled>{true|false}</enabled>
      </web-application>
    </apps>

    Тегов web-application может быть несколько, по одному на каждое Web-приложение.

    Конфигурационной директорией, указанной в стандартном скрипте для автозапуска, является /etc/xsp2/. В ней находится файл debian.webapp, используемый в качестве конфигурационного по умолчанию. Можно внести измения прямо в него. Например, для запуска Web-приложения, используемого выше для проверки работоспособности сервера, изменения выглядят так:

    <apps>
      <web-application>
        <name>Mono server test application</name>
        <vhost>myvps</vhost>
        <vport>8080</vport>
        <vpath>/</vpath>
        <path>/var/www/myvps</path>
        <enabled>true</enabled>
      </web-application>
    </apps>

    Также, нужно убрать опцию --port $post из скрипта автозапуска, в противном случае указанные в конфигурационном .webapp-файле порты будут проигнорированы.

Теперь нужно проверить работоспособность. Распакуйте и поместите тестовые файлы в папку /var/www/myvps. Запустите nginx и xsp2:

sudo /etc/init.d/nginx start
xsp2 --applications myvps:/:/var/www/myvps --port 8080 --root /var/www/myvps/

Теперь в браузере можно набрать адрес http://myvps/ и откроется страница, показывающая текущее время. Также, можно проверить скрипт автозапуска. Для этого нажимаем Enter для остановки xsp2 и запускаем его через скрипт автозапуска:

sudo /etc/init.d/mono-xsp2 start

Снова набираем в адресной строке браузера адрес http://myvps/ и видим, что все работает.

На этом установка веб-сервера для ASP.NET в Linux завершена. Теперь можно произвести дополнительные настройки веб-серверов nginx и xsp2, поставить базу данных и разместить сайт.


Обсуждение статьи
  • CSS
  • Radeon
  • Intel
  • NVIDIA
  • верстка
  • web
  • AMD
  • кроссбраузерность
  • php
  • GeForce
  • дизайн
 
Rambler's Top100
  • Карта сайта
  • |
  • Контакты
  • |
  • Условия использования
Copyright © 2010 IT-Sea.