# Переїзд сайту з 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/uk/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/uk/kb/migratsia-apache-na-nginx/).

## Типові помилки після переїзду

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

## Підсумок: чек-лист переїзду з Windows на Linux

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

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

---

Джерело: https://www.zevshost.net/uk/kb/migratsia-windows-na-linux/
