<!-- review: finished -->

<a id="migration"></a>

# Миграция с nginx на Angie

Если вы переходите с nginx на Angie, поздравляем!
У нас есть руководство для вас.

Имейте в виду, что оно предназначено для базового сценария замены,
который полагается на пакетную версию Angie.
Если вы работаете с [контейнерами](https://angie.software//angie/docs/installation/docker.md#docker-images),
виртуальными машинами, нестандартными путями или
[модулями](https://angie.software//angie/docs/installation/index.md#install-dynamicmodules),
вам потребуется дополнительная подстройка.

<a id="installing-angie"></a>

## Установка Angie

Рекомендуем использовать официальные пакеты
из [наших репозиториев](https://angie.software//angie/docs/installation/index.md#install-packages);
см. шаги по установке Angie для вашего дистрибутива.
Пока не запускайте сервер;
вместо этого проверьте его командой **sudo angie -V**:

```console
$ sudo angie -V

  Angie version: Angie/|version|
  nginx version: nginx/|nginxversion|
  built by gcc 11.4.0
  configure arguments: --prefix=/etc/angie --conf-path=/etc/angie/angie.conf ...
```

Как следует отсюда,
[конфигурация](https://angie.software//angie/docs/configuration/configfile.md#configfile)
находится в `/etc/angie/`,
когда Angie устанавливается из пакета.

<a id="updating-angie-configuration"></a>

## Обновление конфигурации Angie

Angie обычно требует минимальных изменений в существующей конфигурации nginx.

1. Скопируйте конфигурацию nginx в `/etc/angie/` целиком:
   ```console
   $ sudo rsync -a --no-links /etc/nginx/ /etc/angie/
   ```

   Предположим, конфигурация nginx хранится в `/etc/nginx/`;
   измените шаги, если у вас другой путь.
2. Переименуйте основной файл конфигурации так, как ожидает Angie:
   ```console
   $ sudo mv /etc/angie/nginx.conf /etc/angie/angie.conf
   ```
3. Поправьте пути во всей конфигурации Angie,
   начиная с основного файла конфигурации.
   Детали зависят от того, как был установлен nginx,
   но, по крайней мере, необходимо обновить следующее.

   Любые пути [include](https://angie.software//angie/docs/configuration/modules/core.md#include), которые пока указывают на `/etc/nginx/`:
   ```nginx
   # include /etc/nginx/conf.d/*.conf;
   # include /etc/nginx/default.d/*.conf;
   # include /etc/nginx/http.d/*.conf;
   # include /etc/nginx/stream.d/*.conf;
   include /etc/angie/conf.d/*.conf;
   include /etc/angie/default.d/*.conf;
   include /etc/angie/http.d/*.conf;
   include /etc/angie/stream.d/*.conf;

   # include /etc/nginx/sites-enabled/*;
   include /etc/angie/sites-enabled/*;

   # include /etc/nginx/modules-enabled/*;
   include /etc/angie/modules-enabled/*;

   # include /etc/nginx/mime.types;
   include /etc/angie/mime.types;
   ```

   Файл [PID](https://angie.software//angie/docs/configuration/modules/core.md#pid), который важен для управления процессами Angie:
   ```nginx
   # pid /var/run/nginx.pid;
   # -- или --
   # pid /run/nginx.pid;
   pid /run/angie.pid;
   ```

   Наконец,
   [журнал обращений](https://angie.software//angie/docs/configuration/modules/http/http_log.md#access-log) и [журнал ошибок](https://angie.software//angie/docs/configuration/modules/core.md#error-log):
   ```nginx
   # access_log /var/log/nginx/access.log;
   access_log /var/log/angie/access.log;

   # error_log /var/log/nginx/error.log;
   error_log /var/log/angie/error.log;
   ```

<a id="migration-sites"></a>

### Виртуальные хосты

Если для включения виртуальных хостов используется директория
`sites-enabled/`, поправьте и ее:

```nginx
# include /etc/nginx/sites-enabled/*;
include /etc/angie/sites-enabled/*;
```

Затем воссоздайте символические ссылки в `/etc/angie/sites-enabled/`,
чтобы все работало.

Перечислите исходные файлы виртуальных хостов, например:

```console
$ ls -l /etc/nginx/sites-enabled/

  default -> /etc/nginx/sites-available/default
```

Обратите внимание на их фактическое расположение;
здесь это `/etc/nginx/sites-available/`.

Если вы не копировали их ранее в `/etc/angie/`,
скопируйте сейчас:

```console
$ sudo rsync -a /etc/nginx/sites-available/ /etc/angie/sites-available/
```

Наконец, воссоздайте каждую символическую ссылку:

```console
$ sudo ln -s /etc/angie/sites-available/default \
             /etc/angie/sites-enabled/default
```

<a id="dynamic-modules"></a>

### Динамические модули

Найдите и [установите](https://angie.software//angie/docs/installation/index.md#install-dynamicmodules)
используемые в Angie аналоги для всех динамических модулей,
упомянутых в конфигурации nginx, например:

```console
$ sudo nginx -T | grep load_module

  load_module modules/ngx_http_geoip2_module.so;
  load_module modules/ngx_stream_geoip2_module.so;
  ...
```

Это означает, что вам нужно установить пакет `angie-module-geoip2`,
и так далее.

Есть два популярных способа включения конфигурации динамических модулей:

`/usr/share/nginx/modules/`

Если динамические модули включены через `/usr/share/nginx/modules/`,
поправьте путь:

```nginx
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
# include /usr/share/nginx/modules/*.conf;

include /usr/share/angie/modules/*.conf;
```

Затем скопируйте файлы конфигурации модулей:

```console
$ sudo rsync -a /usr/share/nginx/modules/ /usr/share/angie/modules/
```

Наконец, измените путь [load_module](https://angie.software//angie/docs/configuration/modules/core.md#load-module) в каждом файле:

```nginx
# load_module "/usr/lib64/nginx/modules/ngx_http_geoip2_module.so";
load_module "/usr/lib64/angie/modules/ngx_http_geoip2_module.so";
```

`/etc/nginx/modules-enabled/`

Если динамические модули включены через
`/etc/nginx/modules-enabled/`,
поправьте путь:

```nginx
# include /etc/nginx/modules-enabled/*.conf;
include /etc/angie/modules-enabled/*.conf;
```

Затем воссоздайте символические ссылки в `/etc/angie/modules-enabled/`,
чтобы все работало.

Перечислите исходные файлы конфигурации модулей, например:

```console
$ ls -l /etc/nginx/modules-enabled/

  mod-http-geoip2.conf -> /usr/share/nginx/modules-available/mod-http-geoip2.conf
```

Обратите внимание на их фактическое расположение;
здесь это `/usr/share/nginx/modules-available/`.

Скопируйте их в `/usr/share/angie/`:

```console
$ sudo rsync -a /usr/share/nginx/modules-available/ /usr/share/angie/modules-available/
```

Наконец, воссоздайте каждую символическую ссылку:

```console
$ sudo ln -s /usr/share/angie/modules-available/mod-http-geoip2.conf \
             /etc/angie/modules-enabled/mod-http-geoip2.conf
```

<a id="root-directory-optional"></a>

### Корневая директория (необязательно)

Если [root](https://angie.software//angie/docs/configuration/modules/http/index.md#root) указывает на директорию
`/usr/share/nginx/html/`,
можно изменить директиву, указав на Angie.

Скопируйте директорию и исправьте значение `root` в конфигурации Angie:

```console
$ sudo rsync -a /usr/share/nginx/html/ /usr/share/angie/html/
```

```nginx
# root /usr/share/nginx/html;
root /usr/share/angie/html;
```

<a id="user-and-group-optional"></a>

### Пользователь и группа (необязательно)

Хотя директиву [user](https://angie.software//angie/docs/configuration/modules/core.md#user) достаточно оставить как есть,
для гибкости можно использовать учетные записи Angie.

Поправьте настройки `user` в конфигурации Angie:

```nginx
# user www-data www-data;
user angie angie;
```

Измените владельца  *всех* файлов конфигурации,
включая файлы в `/usr/share/angie/`,
например:

```console
$ sudo chown -R angie:angie /etc/angie/
$ sudo chown -R angie:angie /usr/share/angie/
```

Если в конфигурации Angie есть директивы [root](https://angie.software//angie/docs/configuration/modules/http/index.md#root),
измените владельца указанных там директорий,
например:

```console
$ sudo chown -R angie:angie /var/www/html/
```

<a id="wrapping-up"></a>

### Завершение

Чтобы ничего не пропустить,
найдите и исправьте оставшиеся упоминания `nginx` в конфигурации Angie:

```console
$ grep -rn --include='*.conf' 'nginx' /etc/angie/
```

<a id="testing-and-switching"></a>

## Тестирование и переключение

Обновив конфигурацию Angie,
следующим шагом проверьте ее синтаксис,
чтобы убедиться, что Angie может с ней работать,
а затем переключиться.
Проверьте, что Angie воспринимает новую конфигурацию:

```console
$ sudo angie -t
```

Эта команда анализирует конфигурацию
и сообщает об ошибках, которые блокируют запуск Angie;
исправьте все проблемы и перезапустите команду.

<a id="stopping-nginx-starting-angie"></a>

### Остановка nginx, запуск Angie

Чтобы минимизировать простой, запустите Angie сразу после остановки nginx:

```console
$ sudo systemctl stop nginx && sudo systemctl start angie
```

При необходимости включите службу Angie для запуска после перезагрузки:

```console
$ sudo systemctl enable angie
```

Миграция завершена! На этом все; вы великолепны.

<a id="disabling-nginx"></a>

### Отключение nginx

Убедившись, что Angie работает стабильно,
можно отключить или удалить nginx, чтобы избежать конфликтов.

Минимум того, что вы можете сделать, — это отключить службу:

```console
$ sudo systemctl disable nginx
```

<a id="working-with-ssl-certificates"></a>

## Работа с SSL-сертификатами

Если вы использовали Certbot для управления SSL-сертификатами с nginx,
он продолжит работать и с Angie.

<a id="using-certbot-with-angie"></a>

### Использование Certbot с Angie

Поддержка Angie в Certbot требует минимальных усилий,
поскольку Angie обратно совместим с nginx.
Для работы Certbot достаточно создать символическую ссылку
и указать соответствующие параметры:

```console
# Создание символической ссылки для совместимости с Certbot
$ sudo ln -s /etc/angie/angie.conf /etc/angie/nginx.conf

# Получение сертификата для домена
$ sudo certbot --nginx --nginx-server-root=/etc/angie --nginx-ctl=angie -d example.com -d www.example.com

# Автоматическое обновление сертификатов
$ sudo certbot renew

# Проверка статуса сертификатов
$ sudo certbot certificates
```

После миграции на Angie Certbot продолжит автоматически обновлять сертификаты
через настроенные задачи **cron** или таймеры **systemd**.

<a id="migrating-from-certbot-to-the-built-in-acme-module"></a>

### Миграция с Certbot на встроенный модуль ACME

Angie включает встроенный [модуль ACME](https://angie.software//angie/docs/configuration/modules/http/http_acme.md#http-acme),
который позволяет автоматически получать и обновлять SSL-сертификаты
без использования внешних инструментов, таких как Certbot.

Преимущества встроенного модуля ACME:

- полная интеграция с конфигурацией Angie;
- автоматическое обновление сертификатов без дополнительных служб;
- поддержка HTTP- и DNS-проверки;
- возможность получения wildcard-сертификатов.

Подробные инструкции по переходу с Certbot на встроенный модуль ACME
см. в разделе [Миграция с certbot](https://angie.software//angie/docs/configuration/acme.md#acme-config-certbot).

<a id="configuring-angie-features"></a>

## Настройка функций Angie

Можно предположить, что миграция нужна вам не просто так.
Почему бы не пойти дальше и не настроить некоторые из дополнительных функций,
которые есть в [Angie](https://angie.software//angie/docs/oss_changes.md#oss-changes) и [Angie PRO](https://angie.software//angie/docs/pro_changes.md#pro-changes),
но нет в nginx?
