Contenedor Docker: subir tu proyecto y arrancarlo (Node.js, Python, Java y más) Imprimir

  • 0

Esta guía es para vos si contrataste un Contenedor Docker de NeaTech y querés subir tu proyecto y dejarlo andando. Hay 12 contenedores: Bun, Dart, Deno, Elixir, C# (.NET), Java, Golang, Luvit, Node.js, Nodemon, Python y Rust. Todos se manejan desde el mismo panel, con Files, Startup, Terminal y Network. Cada uno tiene sus propios campos en Startup, que tenés en la tabla de más abajo.

Qué es y qué no es

Un contenedor es un entorno preparado para correr tu propio programa en el lenguaje que elegiste: un bot, una API o un script. Se maneja desde el panel de juegos, https://gpanel.neatech.ar. Para entrar, mirá Cómo entrar por primera vez al panel de mi servidor.

Qué trae cada lenguaje

La tabla muestra, para cada lenguaje, las versiones disponibles, el campo de Startup que define el archivo principal, cómo instala las dependencias y si permite clonar un repositorio de Git.

Lenguaje y versionesArchivo principalDependenciasGit
Node.js: 12, 14, 16, 17, 18, 19 y 20MAIN FILE, .js o .tsnpm install, si hay package.jsonSí
Nodemon: Node.js 12, 14, 15 y 16BOT JS FILEnpm install --production, si hay package.jsonSí
Bun: Latest y CanaryMAIN FILEbun install, si hay package.jsonSí
Deno: sin versiones para elegirBOT JS FILESin paso de instalación al arrancarSí
Python: 2.7, 3.7, 3.8, 3.9, 3.10 y 3.11APP PY FILEpip install -r con el archivo de REQUIREMENTS FILE, si existeSí
Java: 8, 11, 16, 17 y 19JAR FILESin paso de instalación al arrancar: subí un .jar ya armadoNo
C# (.NET): 2.1, 3.1, 5, 6 y 7PROJECT LOCATION y PROJECT FILEdotnet restoreSí
Golang: sin versiones para elegirNo hay archivo: GO PACKAGE y EXECUTABLEDescarga y compila el paqueteNo
Rust: latest, 1.60, 1.56 y 1.31No hay campo: corre cargo run --releaseCargo, según tu Cargo.tomlSí
Elixir: latest, 1.15, 1.14, 1.13 y 1.12No hay campo: corre mix run --no-haltmix deps.getSí
Dart: 2.17, 2.18 y 2.19No hay campo: corre dart rundart pub get, según tu pubspec.yamlSí
Luvit: sin versiones para elegirLUA FILEPaquetes en LIT PACKAGESSí

Algunos detalles:

  • Nodemon: reinicia tu programa solo cuando detecta cambios en los archivos de la carpeta.
  • C# (.NET): en PROJECT LOCATION va la carpeta donde está tu .csproj, no la del .sln. Si está en la carpeta principal, escribí un punto. En PROJECT FILE va el nombre del .csproj.
  • Golang: funciona distinto de los demás. El contenedor descarga y compila el paquete de GO PACKAGE y arranca el ejecutable de EXECUTABLE, que se ve pero no se edita. Esta guía no cubre subir código propio en Go: si es lo que querés hacer, consultá por ticket antes de subirlo. Si no sabés qué poner en GO PACKAGE, abrí un ticket.
  • Rust: si tu paquete tiene más de un binario, Cargo pide elegir uno y eso se hace con default-run en Cargo.toml.
  • Dart: según la documentación de Dart, dart run corre el programa principal del paquete, que es bin/<nombre del paquete>.dart.

Paso 1: subí tu proyecto

  1. Entrá a tu servidor en el panel y abrí Files.
  2. En tu PC, seleccioná todo lo que hay adentro de la carpeta de tu proyecto, no la carpeta, y comprimilo en un .zip. En Windows, hacé clic derecho y elegí la opción para comprimir en ZIP. Así el archivo principal queda en la carpeta principal. Si usás Node.js, Nodemon o Bun, dejá afuera node_modules: se instala solo con tu package.json. Si usás Java, alcanza con subir el .jar.
  3. Tocá Upload, arriba a la derecha, y elegí el .zip. Desde Files no se pueden subir carpetas.

En Files, arriba a la derecha, los botones Create Directory y Upload, y el menú de una carpeta con la opción Archive

  1. Hacé clic derecho sobre el .zip, elegí Unarchive y después borralo con Delete. Se descomprime en la misma carpeta donde está.
  2. Fijate que tu archivo principal, por ejemplo index.js, se vea directo en la carpeta principal, la primera que ves al abrir Files, y no adentro de otra carpeta.

Para carpetas enteras o archivos pesados, usá SFTP: Conectarse mediante SFTP. Si tu proyecto está en Git, mirá la sección sobre Git más abajo.

Paso 2: indicá el archivo principal y la versión en Startup

  1. Abrí Startup en tu servidor.
  2. Completá el campo del archivo principal que figura en la tabla. Viene index.js en Node.js y Bun, app.py en Python y sneakyhub.jar en Java: cambialo por el nombre de tu archivo. En C# son dos campos. En Golang, Rust, Elixir y Dart no hay un archivo para indicar.
  3. Escribí el nombre igual que el archivo, con mayúsculas y minúsculas. Si está en una carpeta, poné la ruta, por ejemplo src/app.js. El campo admite hasta 16 caracteres en Node.js, contando la ruta, y hasta 20 en Java y Deno.
  4. Los cambios de Startup se guardan solos. En la PC, pegá con Ctrl+V. Si pegás con el mouse o desde el celular, el campo no se guarda solo: después de pegar, escribí un espacio al final y borralo. No tiene que quedar ningún espacio. Para comprobar que se guardó, recargá la página: tiene que seguir ahí. Si aparece un error en rojo, el valor no cumple las reglas del campo, por ejemplo supera el máximo de caracteres.
  5. Si tu proyecto necesita otra versión del lenguaje, mirá el recuadro Docker Image. Las opciones son las versiones de la tabla. En Java, Nodemon y Rust, cada opción figura con la dirección de la imagen, que termina en java_, nodejs_ o rust_ seguido de la versión. Si no podés elegir otra, abrí un ticket.

Los campos de Startup que esta guía no nombra, dejalos como vienen. Si no sabés qué poner, abrí un ticket. Más sobre Startup en Configurar tu servidor de juegos desde Startup: nombre, contraseña, jugadores y cómo conectarte.

Opcional: si tu proyecto está en Git

Diez de los 12 contenedores traen campos de Git en Startup: todos menos Java y Golang. Se completan y se guardan como en el paso 2.

  • Dirección del repositorio: GIT REPO ADDRESS (en Bun y Elixir, GIT REPOSITORY ADDRESS).
  • Rama: INSTALL BRANCH en Dart, C#, Node.js y Nodemon, y GIT BRANCH en los demás. Escribila, para no depender de la rama por defecto.
  • Repositorio privado: GIT USERNAME y GIT ACCESS TOKEN. En la mayoría, la descripción del campo recomienda usar un token personal de acceso. El token es una credencial tuya: no lo pongas en un ticket y, si mandás una captura de Startup, tapalo.
  • AUTO UPDATE en 1: en cada arranque trae los cambios nuevos, si la carpeta principal ya es un repositorio clonado. No lo traen Deno ni Luvit.
  • USER UPLOADED FILES: si usás Git, dejalo como viene. Su descripción dice que en 1 se saltean los pasos de instalación. Rust no lo trae.

Si completaste esos campos y tu código no aparece en Files, abrí un ticket.

Paso 3: instalá las dependencias

En Node.js, Nodemon, Bun, Python, C# (.NET), Rust, Dart y Elixir, el arranque instala las dependencias solo, cada vez que encendés el servidor. En Node.js, Nodemon, Bun y Python, el archivo (package.json o el de requirements) tiene que estar en la carpeta principal.

  • Python: el archivo es requirements.txt. Si se llama distinto, escribí su nombre en REQUIREMENTS FILE. El campo es obligatorio, no lo dejes vacío.
  • Paquetes sueltos: ADDITIONAL NODE PACKAGES (Node.js y Nodemon), ADDITIONAL BUN PACKAGES (Bun) y ADDITIONAL PYTHON PACKAGES (Python), separados por espacios. Para sacarlos, UNINSTALL NODE PACKAGES y UNINSTALL BUN PACKAGES.
  • Luvit: los paquetes de Lit van en LIT PACKAGES, separados por espacios.
  • Rust: cargo run --release trae las dependencias de tu Cargo.toml. No hay un campo para indicarlas.

Paso 4: encendelo y leé la consola

Abrí Terminal y tocá el botón verde de encendido. La consola muestra lo que escribe tu programa.

Terminal del servidor con la consola, los botones de encendido y el recuadro Disk

Si se cae, el error real suele estar más arriba del bloque Detected server process in a crashed state. Revisá primero que lo que cargaste en Startup coincida con lo que subiste, por ejemplo que el nombre del archivo principal sea igual al del archivo y que esté en la carpeta principal. Más ayuda en Mi servidor no inicia: cómo leer los errores de la consola.

  • Si se cae dos veces en menos de 60 segundos, el panel deja de reintentar. Corregí la causa y encendelo vos.
  • Si tu programa termina solo, el panel puede contarlo como caído, aunque haya terminado sin error.

Abrí el puerto de tu servicio

Si tu programa recibe conexiones, como una API, tiene que escuchar en un puerto asignado a tu servidor: solo esos salen a internet.

  1. Apagá el servidor y abrí Network.
  2. Anotá un puerto de la lista o creá otro con Create Allocation.
  3. Poné ese número en tu programa, en lugar del que trae por defecto (por ejemplo 3000 u 8080), y encendelo.
  4. La dirección de tu servidor figura en Terminal, en el recuadro Address.

Un bot, que solo se conecta hacia afuera, normalmente no necesita puerto. Si creaste el puerto, lo cargaste y sigue sin conectar, abrí un ticket. Más detalle en Puertos adicionales en tu servidor de juegos (voice chat, votifier, query, RCON).

Copias de seguridad

NeaTech no hace copias de seguridad automáticas de tu servidor. Guardá tu proyecto en Git o en tu PC y bajá por SFTP lo que genere tu programa. Más en Copias de seguridad (backups) de tu servidor de juegos.

Si necesitás ayuda

Si no arranca, mirá primero la consola en Terminal. Si no lo resolvés, abrí un ticket desde tu cuenta (no como invitado) en https://neatech.ar/submitticket.php. Elegí el departamento Soporte Game Servers y el servicio afectado. Contanos qué lenguaje usás, qué cargaste en Startup y qué dice la consola arriba del error, o adjuntá una captura de Terminal. No incluyas contraseñas ni tokens.

También te puede pasar si...

  • Compré un contenedor y no sé cómo subir mi bot.
  • Mi proyecto de Node.js no arranca y la consola no encuentra el archivo.
  • Subí mi proyecto en un .zip y el archivo principal quedó adentro de otra carpeta.
  • Cómo instalo las dependencias de mi proyecto de Python.
  • Quiero clonar mi repositorio de GitHub en el contenedor.
  • Mi API anda pero no puedo entrar desde afuera.
  • Cómo cambio la versión de Node.js o de Python de mi contenedor.
Etiquetas
contenedor docker docker node.js nodejs python java bun deno dart elixir c# .net golang luvit nodemon rust subir proyecto archivo principal main file package.json requirements.txt git bot de discord api startup files sftp puerto network docker image versión del lenguaje

¿Le ha resultado útil esta respuesta?

« Atrás