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.
- No es un VPS: el contenedor corre tu programa. Si necesitás administrar un sistema entero, por SSH o RDP, mirá Cómo entrar y administrar tu VPS: consola, SSH y RDP.
- No es un hosting web: se maneja desde el panel de juegos y no desde el panel de hosting. Si necesitás un sitio con correo administrado, mirá Hosting web: primeros pasos (panel, dominio, correo, SSL y FTP).
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 versiones | Archivo principal | Dependencias | Git |
|---|---|---|---|
| Node.js: 12, 14, 16, 17, 18, 19 y 20 | MAIN FILE, .js o .ts | npm install, si hay package.json | Sí |
| Nodemon: Node.js 12, 14, 15 y 16 | BOT JS FILE | npm install --production, si hay package.json | Sí |
| Bun: Latest y Canary | MAIN FILE | bun install, si hay package.json | Sí |
| Deno: sin versiones para elegir | BOT JS FILE | Sin paso de instalación al arrancar | Sí |
| Python: 2.7, 3.7, 3.8, 3.9, 3.10 y 3.11 | APP PY FILE | pip install -r con el archivo de REQUIREMENTS FILE, si existe | Sí |
| Java: 8, 11, 16, 17 y 19 | JAR FILE | Sin paso de instalación al arrancar: subí un .jar ya armado | No |
| C# (.NET): 2.1, 3.1, 5, 6 y 7 | PROJECT LOCATION y PROJECT FILE | dotnet restore | Sí |
| Golang: sin versiones para elegir | No hay archivo: GO PACKAGE y EXECUTABLE | Descarga y compila el paquete | No |
| Rust: latest, 1.60, 1.56 y 1.31 | No hay campo: corre cargo run --release | Cargo, según tu Cargo.toml | Sí |
| Elixir: latest, 1.15, 1.14, 1.13 y 1.12 | No hay campo: corre mix run --no-halt | mix deps.get | Sí |
| Dart: 2.17, 2.18 y 2.19 | No hay campo: corre dart run | dart pub get, según tu pubspec.yaml | Sí |
| Luvit: sin versiones para elegir | LUA FILE | Paquetes en LIT PACKAGES | Sí |
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-runenCargo.toml. - Dart: según la documentación de Dart,
dart runcorre el programa principal del paquete, que esbin/<nombre del paquete>.dart.
Paso 1: subí tu proyecto
- Entrá a tu servidor en el panel y abrí Files.
- 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á afueranode_modules: se instala solo con tupackage.json. Si usás Java, alcanza con subir el.jar. - Tocá Upload, arriba a la derecha, y elegí el
.zip. Desde Files no se pueden subir carpetas.

- Hacé clic derecho sobre el
.zip, elegí Unarchive y después borralo con Delete. Se descomprime en la misma carpeta donde está. - 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
- Abrí Startup en tu servidor.
- Completá el campo del archivo principal que figura en la tabla. Viene
index.jsen Node.js y Bun,app.pyen Python ysneakyhub.jaren 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. - 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. - 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.
- 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_orust_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
1se 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 --releasetrae las dependencias de tuCargo.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.

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.
- Apagá el servidor y abrí Network.
- Anotá un puerto de la lista o creá otro con Create Allocation.
- Poné ese número en tu programa, en lugar del que trae por defecto (por ejemplo 3000 u 8080), y encendelo.
- 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.