# 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.