---
# System prepended metadata

title: Ingresar a un servidor de desarrollo local a través de la URL de un staging

---

# Ingresar a un servidor de desarrollo local a través de la URL de un staging

Se puede ocupar cualquier dominio que esté configurado en el staging, siempre que ese dominio no esté siendo ocupado por otra API y/o WEB.

## Configuración de SSH

Se recomienda tener un archivo de configuración de SSH (`~/.ssh/config`) con las configuraciones por defecto para todos los servidores (i.e. `Host *`) y para cada servidor (e.g. `Host pato`).
E.g. `~/.ssh/config`:
```config
Host *
  ServerAliveInterval 60

Host pato
  HostName 147.182.216.226
  User root
```

## Detener los servicios en el staging

Para asegurarse de que no está ocupado, ingresar a la carpeta del dominio correspondiente y ejecutar `docker-compose down`
- E.g. para pato2
  1.  Entrar el servidor de pato2:
      `ssh pato`
  2.  Entrar a la carpeta correspondiente a los archivos de esa URL
      `cd /home2`
  3.  Detener los servicios de API y WEB
      `docker-compose down`

## En el computador local

- Crear un túnel entre la API local y el puerto de la API en el staging:
  `ssh -N -R API_PORT_STAGING:localhost:API_PORT_LOCAL root@ip_del_staging`
  - Ejecutar el comando dejará ocupado el terminal donde se ejecute, por lo que se debe ocupar un terminal distinto a donde se hace `npm start`.
    - Se puede detener el túnel con `control-C`
  - E.g. para pato2: `ssh -N -R 2710:localhost:2707 pato`
    - Puerto en el staging = 2708 + 2 = 2710
    - Puerto local = 2707 (puerto por defecto)
    - Host ssh = root@ip_del_staging = pato (configurado en `~/.ssh/config`)

- Crear un túnel entre la WEB local y el puerto de la WEB en el staging:
  `ssh -N -R WEB_PORT_STAGING:localhost:WEB_PORT_LOCAL root@ip_del_staging`
  - Ejecutar el comando dejará ocupado el terminal donde se ejecute, por lo que se debe ocupar un terminal distinto a donde se hace `npm start`.
    - Se puede detener el túnel con `control-C`
  - E.g. para pato2: `ssh -N -R 20002:localhost:3000 pato`
    - Puerto en el staging = 20000 + 2 = 20002
    - Puerto local = 3000 (puerto por defecto)
    - Host ssh = root@ip_del_staging = pato (configurado en `~/.ssh/config`)

- Iniciar la API indicando las URLs en las variables de entorno API_URL y WEB_URL:
  - Opción 1 (recomendada): Inline:
    `API_URL=https://SUBDOMINIO.equip.cloud WEB_URL=https://SUBDOMINIO.equip.cloud npm start`
    - E.g. para pato2:
      `API_URL=https://pato2.equip.cloud WEB_URL=https://pato2.equip.cloud npm start`
  - Opción 2: dotenv:
    - Crear archivo `.env` con las variables de entorno API_URL y WEB_URL
      - E.g. para pato2:
        ```bash
        API_URL=https://pato2.equip.cloud
        WEB_URL=https://pato2.equip.cloud
        ```
    - Iniciar con `npm start`

- Iniciar la WEB con el script `startStaging`:
  - `npm run startStaging`

## Verificar que está funcionando el túnel

- WEB: Ingresar a la URL correspondiente: https://SUBDOMINIO.equip.cloud
- API: Pedir la fecha a la API: https://SUBDOMINIO.equip.cloud/api/getDate

# Para configurar una nueva URL para un servidor que ya esté corriendo

## DigitalOcean

Se debe registrar el subdomino a utilizar en DigitalOcean

- Entrar a https://cloud.digitalocean.com/networking/domains/equip.cloud?i=bae76f para configurar el dominio equip.cloud
- En "HOSTNAME" ingresar el subdominio. E.g. pato2
- En "WILL DIRECT TO" seleccionar el staging correspondiente en el dropdown que aparece

## Staging

### Nginx

- Entrar a la carpeta `/etc/nginx/sites-available` y revisar si existe el archivo `SUBDOMINIO.equip.cloud`
- Crear el archivo `SUBDOMINIO.equip.cloud`. Ingresar el subdominio y los puertos deseados:
  E.g.
  ```
  server {
    root var/www/html;
    server_name <SERVER_NAME>;

    location / {
      proxy_pass http://localhost:<WEB_PORT>;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

    location /api {
      proxy_pass http://localhost:<API_PORT>;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

    location /socket.io {
      proxy_pass http://localhost:<API_PORT>;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

    location /restart {
      proxy_pass http://localhost:<TEST_DB_MANAGER_PORT>;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

    location /save {
      proxy_pass http://localhost:<TEST_DB_MANAGER_PORT>;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

    location /k43jn543jk5nINI63vBHJYhvjv67253hvjV62TVV27263Ljl723 {
      proxy_pass http://localhost:<TEST_DB_MANAGER_PORT>;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }
  }
  ```

  Reemplazando de la siguiente manera:

  SUBDOMAIN_NUMBER es el número del subdominio, E.g., el número de pato2 es 2, de pato es 0, de pato27 es 27.

  `<WEB_PORT>` -> 20000 + SUBDOMAIN_NUMBER
  `<API_PORT>` -> 2708 + SUBDOMAIN_NUMBER
  `<TEST_DB_MANAGER_PORT>` -> 4343 + SUBDOMAIN_NUMBER

  `<SERVER_NAME>` -> SUBDOMINIO.equip.cloud

  E.g.:
  Si el subdominio que estoy creando es pato2:

  WEB_PORT -> 20000 + 2 = 20002
  API_PORT -> 2708 + 2 = 2710
  TEST_DB_MANAGER_PORT -> 4343 + 2 = 4345

  SERVER_NAME -> pato2.equip.cloud

- Habilitar el nuevo subdominio: `ln -s "/etc/nginx/sites-available/SUBDOMINIO.equip.cloud" "/etc/nginx/sites-enabled/SUBDOMINIO.equip.cloud"`
  - Reemplazar `SUBDOMINIO.equip.cloud` por el host correspondiente.
- Reiniciar Nginx para que cargue la nueva configuración: `systemctl restart nginx`

### Certbot

Usar el comando `certbot run --quiet --agree-tos --email "patoequip@gmail.com" --nginx -d "SUBDOMINIO.equip.cloud"`
- Reemplazar `SUBDOMINIO.equip.cloud` por el host correspondiente.
