<!-- review: finished -->

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

# Migración de nginx a Angie

Si estás cambiando de nginx a Angie, ¡enhorabuena!
Tenemos una guía para ti.

Ten en cuenta que está diseñada para un escenario de reemplazo básico
que se basa en una versión empaquetada de Angie.
Si estás trabajando con [contenedores](https://es.angie.software//angie/docs/installation/docker.md#docker-images),
máquinas virtuales, rutas personalizadas o
[módulos](https://es.angie.software//angie/docs/installation/index.md#install-dynamicmodules),
necesitarás ajustes adicionales.

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

## Instalación de Angie

Recomendamos usar los paquetes oficiales
de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages);
consulta los pasos de instalación de Angie para tu distribución.
No inicies el servidor todavía;
en su lugar, compruébalo con el comando **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 ...
```

Como esto muestra,
la [configuración](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)
se encuentra en `/etc/angie/`
cuando Angie se instala desde un paquete.

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

## Actualización de la configuración de Angie

Angie generalmente requiere cambios mínimos en la configuración existente de nginx.

1. Copia toda la configuración de nginx a `/etc/angie/`:
   ```console
   $ sudo rsync -a --no-links /etc/nginx/ /etc/angie/
   ```

   Asumimos que la configuración de nginx está almacenada en `/etc/nginx/`;
   ajusta los pasos si tienes una ruta diferente.
2. Renombra el archivo de configuración principal como espera Angie:
   ```console
   $ sudo mv /etc/angie/nginx.conf /etc/angie/angie.conf
   ```
3. Actualiza las rutas en toda la configuración de Angie,
   comenzando por el archivo de configuración principal.
   Los detalles dependen de cómo se instaló nginx,
   pero como mínimo necesitas actualizar lo siguiente.

   Cualquier ruta [include](https://es.angie.software//angie/docs/configuration/modules/core.md#include) que todavía apunte a `/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;
   ```

   El archivo [PID](https://es.angie.software//angie/docs/configuration/modules/core.md#pid), que es importante para la gestión de procesos de Angie:
   ```nginx
   # pid /var/run/nginx.pid;
   # -- o --
   # pid /run/nginx.pid;
   pid /run/angie.pid;
   ```

   Finalmente,
   el [registro de acceso](https://es.angie.software//angie/docs/configuration/modules/http/http_log.md#access-log) y el [registro de errores](https://es.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>

### Hosts Virtuales

Si se utiliza el directorio `sites-enabled/` para incluir hosts virtuales,
actualízalo también:

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

Luego recrea los enlaces simbólicos en `/etc/angie/sites-enabled/`
para que todo funcione.

Lista los archivos de host virtual originales, por ejemplo:

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

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

Observa su ubicación real;
aquí es `/etc/nginx/sites-available/`.

Si no los copiaste a `/etc/angie/` anteriormente,
cópialos ahora:

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

Finalmente, recrea cada enlace simbólico:

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

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

### Módulos Dinámicos

Encuentra e [instala](https://es.angie.software//angie/docs/installation/index.md#install-dynamicmodules)
equivalentes de Angie para todos los módulos dinámicos
referenciados en la configuración de nginx, por ejemplo:

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

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

Esto significa que necesitas instalar el paquete `angie-module-geoip2`,
y así sucesivamente.

Hay dos formas populares de incluir la configuración de módulos dinámicos:

`/usr/share/nginx/modules/`

Si los módulos dinámicos se incluyen a través de `/usr/share/nginx/modules/`,
actualiza la ruta:

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

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

Luego copia los archivos de configuración del módulo:

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

Finalmente, cambia la ruta [load_module](https://es.angie.software//angie/docs/configuration/modules/core.md#load-module) en cada archivo:

```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/`

Si los módulos dinámicos se incluyen vía
`/etc/nginx/modules-enabled/`,
actualiza la ruta:

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

Luego recrea los enlaces simbólicos en `/etc/angie/modules-enabled/`
para que todo funcione.

Lista los archivos de configuración de módulos originales, por ejemplo:

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

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

Observa su ubicación real;
aquí es `/usr/share/nginx/modules-available/`.

Cópialos a `/usr/share/angie/`:

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

Finalmente, recrea cada enlace simbólico:

```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>

### Directorio Raíz (Opcional)

Si [root](https://es.angie.software//angie/docs/configuration/modules/http/index.md#root) apunta al
directorio `/usr/share/nginx/html/`,
puedes cambiar la directiva para que apunte a Angie.

Copia el directorio y actualiza el valor `root` en la configuración de 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>

### Usuario y Grupo (Opcional)

Aunque es suficiente dejar la directiva [user](https://es.angie.software//angie/docs/configuration/modules/core.md#user) como está,
puedes usar cuentas de Angie para mayor flexibilidad.

Actualiza la configuración de `user` en la configuración de Angie:

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

Cambia el propietario de *todos* los archivos de configuración,
incluidos los archivos en `/usr/share/angie/`,
por ejemplo:

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

Si la configuración de Angie tiene directivas [root](https://es.angie.software//angie/docs/configuration/modules/http/index.md#root),
cambia el propietario de los directorios especificados allí,
por ejemplo:

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

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

### Finalizando

Para asegurarte de que no se haya pasado nada por alto,
busca y corrige las menciones restantes de `nginx` en la configuración de Angie:

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

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

## Pruebas y Cambio

Después de actualizar la configuración de Angie,
el siguiente paso es verificar su sintaxis
para asegurarte de que Angie pueda trabajar con ella,
y luego hacer el cambio.
Verifica que Angie acepte la nueva configuración:

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

Este comando analiza la configuración
y reporta errores que impedirían el inicio de Angie;
corrige cualquier problema y vuelve a ejecutar el comando.

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

### Deteniendo nginx, Iniciando Angie

Para minimizar el tiempo de inactividad, inicia Angie inmediatamente después de detener nginx:

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

Si es necesario, habilita el servicio Angie para que se inicie después del reinicio:

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

¡Migración completa! Eso es todo; eres increíble.

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

### Deshabilitando nginx

Después de confirmar que Angie está funcionando de manera estable,
puedes deshabilitar o eliminar nginx para evitar conflictos.

Lo mínimo que puedes hacer es deshabilitar el servicio:

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

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

## Trabajando con Certificados SSL

Si utilizaste Certbot para gestionar certificados SSL con nginx,
seguirá funcionando con Angie.

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

### Usando Certbot con Angie

Dar soporte a Angie en Certbot requiere un esfuerzo mínimo,
ya que Angie es retrocompatible con nginx.
Para que Certbot funcione, es suficiente crear un enlace simbólico
y especificar los parámetros apropiados:

```console
# Crear un enlace simbólico para compatibilidad con Certbot
$ sudo ln -s /etc/angie/angie.conf /etc/angie/nginx.conf

# Obtener un certificado para un dominio
$ sudo certbot --nginx --nginx-server-root=/etc/angie --nginx-ctl=angie -d example.com -d www.example.com

# Renovar certificados automáticamente
$ sudo certbot renew

# Verificar el estado del certificado
$ sudo certbot certificates
```

Después de migrar a Angie, Certbot continuará renovando automáticamente los certificados
a través de trabajos **cron** o temporizadores **systemd** configurados.

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

### Migrando de Certbot al Módulo ACME Integrado

Angie incluye un [módulo ACME](https://es.angie.software//angie/docs/configuration/modules/http/http_acme.md#http-acme) integrado,
que te permite obtener y renovar certificados SSL automáticamente
sin usar herramientas externas como Certbot.

Ventajas del módulo ACME integrado:

- integración completa con la configuración de Angie;
- renovación automática de certificados sin servicios adicionales;
- soporte para validación HTTP y DNS;
- capacidad de obtener certificados wildcard.

Para instrucciones detalladas sobre cómo migrar de Certbot al módulo ACME integrado,
consulta la sección [Migración desde certbot](https://es.angie.software//angie/docs/configuration/acme.md#acme-config-certbot).

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

## Configurando Características de Angie

Es seguro asumir que estás migrando por una razón.
¿Por qué no ir más allá y configurar algunas de las características adicionales
disponibles en [Angie](https://es.angie.software//angie/docs/oss_changes.md#oss-changes) y [Angie PRO](https://es.angie.software//angie/docs/pro_changes.md#pro-changes)
que no están en nginx?
