# Переезд сайта с Windows-хостинга на Linux

> Переезд сайта с Windows-хостинга на Linux: перенос базы MSSQL в MySQL, регистр имён файлов, замена IIS на Nginx и частые ошибки после переезда.

## Чем отличается Windows-хостинг от Linux

Windows-хостинг чаще всего работает на IIS с ASP.NET и базой MSSQL или MySQL через ODBC. Linux-хостинг использует Nginx или Apache, PHP или Node.js и MySQL/PostgreSQL. Главное отличие для переезда — файловая система Windows не различает регистр букв в именах файлов, а Linux различает.

Перед переносом определите стек сайта: если это классический ASP.NET на .NET Framework, прямого аналога на Linux нет, и потребуется портирование на .NET Core или полная переработка. Если сайт на PHP под IIS — перенос на Linux обычно проходит без переписывания кода.

## Что переписать в коде сайта

Проверьте пути к файлам: слэши в Windows-путях (`C:\inetpub\wwwroot\images`) не работают в Linux, нужен прямой слэш. Найдите в коде абсолютные пути и замените их на относительные или на константы окружения.

Регистр имён файлов важен на Linux: если в коде указано `Image.JPG`, а файл называется `image.jpg`, сайт выдаст ошибку 404. Проверьте все подключения через поиск по проекту:

```
grep -rn "\.jpg\|\.png\|\.php" /var/www/site --include=*.php -i
```

## Перенос базы данных: MSSQL в MySQL или PostgreSQL

Прямой перенос дампа MSSQL в MySQL не работает — форматы несовместимы. Используйте инструмент `mssql2mysql` или экспортируйте данные в CSV и загрузите через `LOAD DATA INFILE`.

```
bcp "SELECT * FROM dbo.orders" queryout orders.csv -c -t, -S oldserver -U sa -P password
mysql -u dbuser -p newdb -e "LOAD DATA LOCAL INFILE 'orders.csv' INTO TABLE orders FIELDS TERMINATED BY ','"
```

Проверьте типы данных: `NVARCHAR` в MSSQL соответствует `VARCHAR` с кодировкой utf8mb4 в MySQL, а `DATETIME2` — обычному `DATETIME`. Подробный процесс переноса самой базы описан в [инструкции по переносу базы данных MySQL](https://www.zevshost.net/ru/kb/perenesti-bazu-dannykh/).

## Перенос файлов и учёт регистра имён

Файлы копируйте через SFTP или rsync, сохраняя права доступа. На Linux владелец файлов сайта — обычно отдельный пользователь, а не root:

```
rsync -avz --chmod=D755,F644 /export/site/ user@newserver:/var/www/site/
chown -R sitename:sitename /var/www/site
```

После копирования запустите поиск файлов с заглавными буквами в расширении — частая причина битых ссылок на изображения после переезда с Windows.

## Настройка веб-сервера вместо IIS

Правила IIS из `web.config` нужно перевести в конфигурацию Nginx или Apache вручную — автоматической конвертации не существует. Проверьте правила `rewrite`, обработку кастомных страниц ошибок и заголовки кэширования. Разница между веб-серверами и перенос правил разобраны в статье о [миграции с Apache на Nginx](https://www.zevshost.net/ru/kb/migratsia-apache-na-nginx/).

## Типичные ошибки после переезда

- 404 на изображениях и скриптах из-за разного регистра имён файлов.
- Неверная кодировка кириллицы в базе — MSSQL часто хранит текст в `NVARCHAR` с другой кодовой страницей.
- Жёстко прописанные пути вида `C:\` в конфигурационных файлах приложения.
- Разные разделители строк: `\r\n` в текстовых файлах Windows ломают некоторые парсеры на Linux.

## Итог: чек-лист переезда с Windows на Linux

Перед переключением DNS проверьте сайт на новом сервере по прямому IP, сверьте количество записей в базе и откройте несколько страниц с изображениями. Полный список проверок — в [чек-листе проверки после миграции](https://www.zevshost.net/ru/kb/migratsia-proverka-posle/).

1. Определить стек: PHP-сайт переносится напрямую, ASP.NET Framework требует портирования.
2. Перевести дамп MSSQL в MySQL или PostgreSQL с проверкой типов.
3. Скопировать файлы с сохранением регистра имён и прав доступа.
4. Перевести конфигурацию IIS в Nginx или Apache.
5. Проверить кодировку и переключить DNS только после полной проверки.

---

Источник: https://www.zevshost.net/ru/kb/migratsia-windows-na-linux/
