🏭 Разворачиваем сайт ASP.NET на IIS

21.04.2022

По работе поступило задание по администрированию сервера на Windows, среди прочего нужно было развернуть локальную копию сайт на Advantshop (ASP.NET) для тестирования интеграции.

Все действия проводились в Windows 8/10/11 Server 2012.

IIS

Установка

Пройдем по пути: Панель управления - Программы - Включение и отклюение компонентов Windows

Нас интересуют Службы IIS, при клике будут выбраны минимально необходимые компоненты, дополнительно нужно будет выбрать:

  • Компоненты разработки приложений - ASP.NET нужной версии, в моем случае 4.5/4.8, (при клике также будут выделены другие компоненты, оставляем как есть)
Включение IIS с нужным набором данных
Включение IIS с нужным набором данных

Говорят нужна перезагрузка ОС.

Вот так может выглядеть в меню Пуск
Вот так может выглядеть в меню Пуск

Затем нужно установить модуль для IIS URL Rewrite (через Web Platform Installer либо через файл установки) для настройки редиректов (например с www на без-www, с http на https).

Вот так выглядит графический интерфейс IIS
Вот так выглядит графический интерфейс IIS

Сайты

Занятый порт

Сразу после установки IIS будет доступен тестовый сайт по адресу localhost на 80 порту. Однако, если до IIS уже кто-то занял 80 порт то запуск сайта не пройдет:

Вот такое сообщение при запуске сайта на занятом порту
Вот такое сообщение при запуске сайта на занятом порту

Для сайта в IIS можно изменить порт, для этого в Подключения (слева) - Сайты (выбрать нужный сайт), затем в Действия (справа) - Основные настройки

Интерфейс смены порта сайта в IIS
Интерфейс смены порта сайта в IIS

Но если очень нужен занятый порт, тогда открываем консоль (cmd) и при помощи netstat выясняем кто занял нужный нам порт:

•••
bash
> netstat -aon Активные подключения Имя Локальный адрес Внешний адрес Состояние PID TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2060 TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 776 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING 548 TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING 952 > netstat -aon | findstr 0.0:80 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2060

Открываем диспетчер задач и среди процессов ищем тот, у которого PID 2060 (в моем случае это Apache):

Процесс с PID 2060 который занял 80 порт
Процесс с PID 2060 который занял 80 порт

Дальше действуем на свое усмотрение.

Создание

Предполагается что сайт должен работать на ASP.NET поэтому нам нужен настроенный пул приложений. Для просмотра доступных пулов нужно перейти Подключения (слева) - Пулы приложений:

Пулы приложений в IIS
Пулы приложений в IIS

А для добавления нового: ПКМ на Пулы приложений - Добавить пул приложений:

Редактирование/создание нового пула приложений в IIS
Редактирование/создание нового пула приложений в IIS

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

Затем в Подключения (слева) - Сайты - Добавить веб-сайт:

Создание нового веб-сайта в IIS
Создание нового веб-сайта в IIS

Для того чтобы Имя узла (доменное имя) было доступно на локальном сервере необходимо от имени администратора в C:\Windows\System32\drivers\etc\hosts добавить:

•••
plaintext
127.0.0.1 mysite.local

Перезапуск

Перезапустить IIS можно в графическом интерфейсе:

  • выбрать сервер в меню слева и нажать кнопку Перезапустить справа
  • либо в консоли ввести iisreset
Перезапуск IIS через графический интерфейс
Перезапуск IIS через графический интерфейс

MS SQL Server && SQL Server Management Studio

Microsoft SQL Server (ссылка на страницу скачивания) - СУБД от Microsoft.

SQL Server Management Studio (SSMS) (ссылка на страницу скачивания) - админка для управления.

Скачиваем по ссылкам и устанавливаем. Но если есть трудности в установке тогда здесь и тут статьи по установке.

Импорт/Экспорт БД

Все действия производятся в обозревателе объектов
Все действия производятся в обозревателе объектов

Экспорт (резервная копия) делается: выбрать нужную БД - ПКМ - Задачи - Создать резервную копию.

С импортом немного сложнее.

Импорт резервной копии БД можно вливать без проблем если резервная копия и БД имеют одну структуру, но если БД была создана в одной версии ПО, а резервная копия из другой то могут быть проблемы.

А в простом случае: ПКМ на нужной БД - Задачи - Восстановить - База данных, в качестве источника выбираем Устройство и выбираем файл на диске.

Для разворачивания резервной копии в качестве новой БД нужно в разделе Базы данных ПКМ - Восстановить базу данных, и дальше также выбираем Устройство и выбираем файл на диске.

Вход по логину/паролю

Если во врем установки была выбрана Проверка подлинности Windows (это когда пользователь аутентифицируется на основании своей учетной записи Windows), тогда нужно включить смешанный режим (или на основании логин/пароль).

Запускаем SQL Server Management Studio.

Вот так может выглядеть в меню Пуск
Вот так может выглядеть в меню Пуск

Раскрываем список с именем сервера и идем: Безопасность - Имена для входа - ПКМ - Создать имя для входа и создаем нового пользователя для этого сервера выбрав Проверка подлинности SQL Server.

Здесь можно изменить пользователя sa либо создать нового
Здесь можно изменить пользователя sa либо создать нового

По умолчанию создается пользователь sa, для него тоже можно указать Проверка подлинности SQL Server и установить пароль, нажав в списке ПКМ на sa - Свойства.

В разделе Состояние:

  • Разрешение на подключение к ядру СУБД - Предоставить
  • Имя для входа - Включено

Разворачивание копии сайта

Для разворачивания копии действующего сайта на локальном сервере мне потребовалось:

  • отключить Windows Defender - некоторые dll были распознаны как вредоносные, из-за чего были удалены, а при загрузке страницы сайта получалось такое:
Невозможно загрузить тип, потому что нет dll где он есть
Невозможно загрузить тип, потому что нет dll где он есть
  • скопировать корневую директорию сайта на локальный сервер
  • создать резервную копию БД и восстановить ее на локальном сервере
  • поменять данные для входы в БД в Web.ConnectionString.config
  • создать сайт и пул приложений в графическом интерфейсе IIS

Итог

Администрирование сервера в графическом интерфейсе была непривычна и избыточна, но все получилось :)