Для роботи сайтів, написаних на 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.
Оновити список пакетів і зробити установку:
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:
Оновлюємо список пакетів і встановлюємо Mono:
sudo aptutude update
sudo aptitude install mono-runtime
Отже, мінімальна конфігурація Mono встановлена. Перевірити, що встановилася саме Mono версії 2.6.1, можна, набравши команду:
Тепер можна доустановити інші потрібні пакети 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, полягає в наступному.
Установка і настройка nginx:
sudo aptitude install nginx
У файлі конфігурації /etc/nginx/nginx.conf в секції http записуємо настройки веб-сервера.
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
установка xsp2
sudo aptitude install mono-xsp2
При бажанні можна конфігурувати автозапуск веб-сервера xsp2. Зробити це дуже просто, наприклад, через .webapp-файл, який має наступний формат
Тегів web-application може бути кілька, по одному на кожне Web-додаток.
Конфігураційною Директорією, зазначеної в стандартному скрипті для автозапуску, є / etc / xsp2 /. У ній знаходиться файл debian.webapp. використовуваний в якості конфігураційного за замовчуванням. Можна внести измения прямо в нього. Наприклад, для запуску Web-додатки, що використовується вище для перевірки працездатності сервера, зміни виглядають так:
Також, потрібно прибрати опцію --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 /
sudo /etc/init.d/mono-xsp2 start
На цьому установка веб-сервера для ASP.NET в Linux завершена. Тепер можна зробити додаткові налаштування веб-серверів nginx і xsp2, поставити базу даних і розмістити сайт.