Levantar web en VPS

Boiisxu

Buenas tardes.

Tengo un proyecto que consta de un back hecho en Java conectado a MySQL y un front hecho sin frameworks.

Me preguntaba cuál era la mejor manera de levantar la web en un vps, supongo que a través de docker puede ser fácil, y que, cuando se hagan cambios en master se vuelva a levantar.

He visto que GitHub actions solamente sirve para webs estáticas pero para la mía no sé qué podría utilizar.

Muchas gracias.

PiPePiTo

No sé cómo se hará estos días, pero en mi curro para esto solemos tirar de Teamcity y Octopus.

Teamcity monitoriza el repositorio y empieza un build cuando detecta cambios, con octopack metemos la build en una especie de .zip para Octopus y se envia allí.

Octopus luego hace el deployment a la máquina que toque.

En tu caso creo que por ahora octopus te lo podrías saltar ya que Teamcity te permite hacer más cosas a parte de enviarlo a un repositorio de paquetes...

Jenkins creo que lo mismo.

1 respuesta
aren-pulid0

Vas bien encaminado, con github actions te conectas por ssh al server (tendras que generar un par de clave publica/privada para la conexion ssh y utilizarla como dentro de github) y haces el deploy utilizando docker o lo que necesites

1 respuesta
Hukha

Yo haría lo que comenta #2 te montas un TC y al buildear que borre la imagen antigua de docker y cree la nueva.
Puede ir todo en el mismo VPS
Si no quieres tanto rollo con VPS, lo mejor es ir a algun provider que tenga soporte y tendrán dónde puedes subir tu las imagenes y ellos manejan el deployment

#2PiPePiTo:

Jenkins creo que lo mismo.

Pero muchísimo peor que TC xD

Viendo lo que comenta #3 tiene pinta que te puedes saltar montarte TeamCity y directamente usar docker en tu VPS (No he usado GitHub Actions, pero pinta que por ahí va)

2 respuestas
Boiisxu

#4 La base de datos ya la tengo en una imagen de MySQL en docker, por eso no hay problema pero queda integrar el front y el back, miraré la opción de teamcity

1 respuesta
PiPePiTo

#4 Nunca he usado Jenkins xD

aren-pulid0

#5 te estás complicando demasiado a mi parecer, cambio a máster, conectas por ssh, paras docker o el compose, rebuildeas imagenes, levantas los contenedores, tiras migraciones o lo que sea en la bbdd y arreando

El front te lo hosteas con netlify algo así que es lo más sencillo del mundo y encima gratis

1 1 respuesta
Yekale7

#7 Tampoco le cuesta tanto hacerlo todo en el VSP. Eso sí, NGINX / Traefik + Nombre de dominio + todo en docker como comentas

1 respuesta
aren-pulid0

Como dice #8, si quieres tenerlo todo en el VPS vas a tener que montar:

Contenedor del back
Contenedor de la bbdd + volumen
Contenedor nginx (esto te sirve el html y recibe las peticiones en el puerto 80 o 443 si le metes https)

Metes todo en un docker-compose y funcionando.

1
bornex

https://github.com/afdezcl/kemenu/blob/master/.github/workflows/prod_workflow.yml

Ahí tienes, más de dos años en prod, fino como el coral 0 problemas y con picos de 100k de visitas en verano.

EDIT: desplegao en VPS de OVH

1 respuesta
JuAn4k4

Metes un docker-compose up en un cron cada minuto y si hay imagen nueva la levanta sola con el tag latest. Plan sin fisuras.

15 días después
Hanzou

Puedes montar un pipeline con Jenkins, que a cada cambio en master (git) o trunk (svn), genere una nueva imagen en docker, ya sea de backend o fronend, luego te conectas con ssh, modificas el .env del docker-compose.yml y listos.
Otra cosa es que el código del frontend y backend no este dentro de la imagen del docker, sino que este en un volumen.
Yo personalmente lo que hago es que a cada tag de git, creo una nueva imagen en docker con el código dentro. Así si me toca hacer un rollback es solo tirar hacía atrás el fichero .env
Espero que te haya sido útil.

23 días después
DaRkViRuZ

#10 el VPS de ovh como lo tienes montado ? con docker ? cual de ellos tienes ?

1 respuesta
bornex

#13 cero docker, la verdad es que no he probado nunca a instalar docker en un VPS de OVH (también es que no me ha hecho falta).

EDIT: Docker solo lo uso normalmente para tests de integración o e2e

Lo que hago es muy simple, instalo MongoDB, PostgreSQL o cualquier otra base de datos en el VPS, instalo Java (lo que hago es descargar el openjdk de la web oficial y meterlo en el servidor con un enlace simbólico a /usr/bin) así manejo yo las versiones de Java y voy upgradeando cada vez que quiera y le meto un script de Google Drive para hacer copias de seguridad con un cronjob super tonto a las 5AM (https://github.com/soasada/scripts/blob/master/gdrive_backup.sh).

El despliegue es sencillo, genero el artefacto en la pipeline y lo muevo al VPS con rsync, previamente a esto debes configurar el pipeline para que se pueda conectar por clave SSH al servidor, también las renuevo cada 2 o 3 meses.

El VPS que tengo concretamente para ese proyecto es del 2018 con 2 vCPU y 8GB, tenemos como 4 o 5 app desplegadas en el servidor Java, Elixir, Node.js y todo va fino filipino.

1
JuAn4k4

Joder que complicado todo, con docker pones el compose con todo, metes un crond con “docker-compose up” y usas latest (para tu imagen) y a tomar por saco. Un GitHub action que te crea la imagen y la sube a dockerhub.

Solución de andar por casa que se monta en 30 segundos y tienes CD.

Y el VPS ni lo tocas si quieres si pones otro crond que se baja el repo donde tienes el compose.

3 1 respuesta
overflow

Github actions te sirve...

Yo como lo tengo en mi proyecto casero es:

  • Un action para master y PR que lanza los tests
  • Si la fase de testeo pasa OK, se pasa a la de despliegue (en caso de empujar a master)
  • En la fase de despliegue me conecto al VPS (desde github) y lanzo un rebase, luego según que a cambiado reinicio el servicio de un modo u otro...
    ** Los datos de conexión están como secretos que no se pueden ver por la gente que consulta el repo.

** Yo no creo una imagen con todo mi código porque no necesito ese nivel de trazabilidad de los cambios... me da igual que algo rompa en un punto o salga una brecha importante o yo que se que requiera de ser analizado. Por eso con lanzar un rebase sobre la carpeta del proyecto me vale y luego simplemente esa carpeta está como volumen del contenedor.

bornex

#15 ¿Complicado porqué? Con conocimientos básicos de linux te lo montas. Estoy casi seguro que tardo lo mismo o menos en montarlo como lo tengo que con docker. Supongo que será la costumbre de cada uno. Por cierto, yo todo lo monto con systemd para facilitar el mantenimiento de los servidores.

2 respuestas
JuAn4k4

#17 Instalar todo a mano en la misma máquina suena más complicado que levantar una imagen.

2 respuestas
Leos

#17 #18 además 0 portabilidad, con docker y docker compose te lo puedes montar cuando quieras siempre igual con pocos comandos

nobody1

#18 Si tienes un panel instalado se hace a golpe de click.

Personalmente lo hago a mano porque no tengo ni idea de docker... Y si, cada vez que tengo que mover de vps es un dolor de huevos...

1 respuesta
JuAn4k4

#20 A golpe de click vs a golpe de script.

Leirlux

Instala Plesk o cPanel en tu servidor.
ESA es la forma rápida.

Usuarios habituales

  • JuAn4k4
  • Leos
  • bornex
  • aren-pulid0
  • Yekale7
  • PiPePiTo
  • Boiisxu