Run a VEIN dedicated game server in minutes with Docker - whether you're a complete beginner or a Docker veteran!
- TL;DR
- Getting Started
- Compose Up
- Compose Down
- Maintenance
- Configuration
- Advanced Usage
- Troubleshooting
- Contributing
Got 60 seconds? Here's everything you need:
# Clone or download this repository
git clone https://github.com/mbround18/vein-docker.git
cd vein-docker
# Copy and customize your settings
cp .env.example .env
# Edit .env with your preferred text editor
# Start your server
docker compose up -d
# Watch it come alive
docker compose logs -fYour VEIN server is now running! 🎉
- Data location:
./datadirectory - Default port: 7777 (UDP)
- Query port: 27015 (UDP)
Players can connect to your server using your public IP address and port!
New to Docker? Don't worry! You just need:
- Docker installed on your machine (Get Docker)
- Docker Compose (included with Docker Desktop)
- A computer that can stay on while hosting (Windows, Mac, or Linux)
- A few minutes of your time
Not sure if Docker is installed? Run this command:
docker --version
docker compose versionIf you see version numbers, you're good to go! If not, follow the Docker installation guide.
-
Get the files - Choose one:
Option A: Clone this repository (recommended)
git clone https://github.com/mbround18/vein-docker.git cd vein-dockerOption B: Download as ZIP from GitHub and extract it
-
Configure your server
cp .env.example .env
Open
.envin your favorite text editor and customize:# Nano (Linux/Mac) nano .env # Notepad (Windows) notepad .env # Or use any text editor like VSCode, Sublime, etc.
-
Customize these important settings:
SERVER_NAME=My Awesome VEIN Server SERVER_PASSWORD=mysecretpassword MAX_PLAYERS=16
That's it! You're ready to launch. 🚀
Starting your server is as simple as one command:
docker compose up -dWhat does this do?
-druns it in "detached" mode (background)- Downloads the VEIN server files automatically (first time only)
- Configures everything based on your
.envfile - Starts your server and keeps it running
First time setup? The initial download might take 5-10 minutes depending on your internet speed. Grab a coffee! ☕
Want to see what's happening?
docker compose logs -fPress Ctrl+C to stop viewing logs (your server keeps running).
Need to stop your server? It's just as easy:
docker compose downWhat does this do?
- Gracefully shuts down your server
- Attempts to save your world (if
SAVE_ON_SHUTDOWN=truein.env) - Stops and removes the container
- Your data is safe in the
./datadirectory
Pro tip: Before shutting down, save your world manually for best results:
- Connect to your server as an admin
- Run the
Savecommand - Wait a few seconds
- Then run
docker compose down
Need to restart?
docker compose restartCheck what your server is doing:
# Follow logs in real-time (Ctrl+C to exit)
docker compose logs -f
# View last 100 lines
docker compose logs --tail 100
# Search logs for specific text
docker compose logs | grep "error"Keep your server up-to-date with the latest VEIN version:
# Stop the server
docker compose down
# Pull the latest container image
docker compose pull
# Start with updates
docker compose up -dThe server will automatically update the game files on startup (if UPDATE_ON_START=true).
Your world data is precious! Back it up regularly:
# Create a backup folder
mkdir -p backups
# Copy your data (while server is stopped)
docker compose down
cp -r ./data ./backups/backup-$(date +%Y%m%d-%H%M%S)
docker compose up -dAutomated backups? Consider setting up a cron job or scheduled task!
Manual save (recommended before shutdown):
- Log in as superadmin (set
SUPERADMIN_STEAM_IDSin.env) - Open the console in-game
- Type:
Save - Wait 5-10 seconds
Automatic saves are enabled by default (every 60 seconds). Configure in .env:
AUTOSAVE_ENABLED=1
AUTOSAVE_INTERVAL=60
AUTOSAVE_MAX_QUANTITY=10All configuration happens in the .env file. Here's everything you can customize:
These are the most common settings you'll want to adjust:
# What players see in the server list
SERVER_NAME=My VEIN Server
# Password to join (leave empty for no password)
SERVER_PASSWORD=
# Admin console password
ADMIN_PASSWORD=
# Maximum players allowed
MAX_PLAYERS=16
# Server port (must match port forwarding)
SERVER_PORT=7777
# Query port (for server browser)
QUERY_PORT=27015For power users and specific needs:
# Show server in public server list?
SERVER_PUBLIC=true
# Autosave configuration
AUTOSAVE_ENABLED=1
AUTOSAVE_INTERVAL=60
AUTOSAVE_MAX_QUANTITY=10
# Graceful shutdown with save
SAVE_ON_SHUTDOWN=true
SAVE_WAIT_SECONDS=5
# Network binding
BIND_ADDR=0.0.0.0
HEARTBEAT_INTERVAL=5.0Default ports (UDP):
7777- Main game server port27015- Query port (server browser)27016- Auxiliary port (optional)
Important: Don't forget to:
- Forward these ports on your router
- Allow them through your firewall
- Match them in your
.envfile
Changed the server port? Update both:
SERVER_PORT=8888And in compose.yml:
ports:
- "8888:7777/udp"Grant yourself and friends admin powers:
# Regular admins (comma-separated Steam64 IDs)
ADMIN_STEAM_IDS=76561198000000001,76561198000000002
# Superadmins (comma-separated Steam64 IDs)
SUPERADMIN_STEAM_IDS=76561198000000001How to find your Steam64 ID:
- Go to your Steam profile page
- Right-click and view page source, or use Steam's community URL
- Your Steam64 ID is the long number in your profile URL
- Alternatively, use trusted tools like steamid.io (verify URL carefully to avoid phishing)
Multi-line format also works:
ADMIN_STEAM_IDS="76561198000000001
76561198000000002"Claim ownership of your server with a Steam Game Server Login Token:
- Generate a token: Visit Steam Game Server Account Management
- Use App ID:
1857950 - Add to
.env:STEAM_GSLT=YOURTOKENHERE
Benefits:
- Claim server ownership
- Better server listing
- Track server stats
Running a production environment? Deploy on Kubernetes!
Helm repository: https://github.com/mbround18/helm-charts
The charts are published via GitHub Pages. Use the vein chart:
# Add the Helm repository
helm repo add mbround18 https://mbround18.github.io/helm-charts/
helm repo update
# Install the VEIN server
helm install vein-server mbround18/vein
# Or with custom values
helm install vein-server mbround18/vein -f my-values.yamlExample my-values.yaml:
env:
SERVER_NAME: "My K8s VEIN Server"
MAX_PLAYERS: "32"
SERVER_PUBLIC: "true"
persistence:
enabled: true
size: 20Gi
resources:
requests:
memory: "4Gi"
cpu: "2000m"
limits:
memory: "8Gi"
cpu: "4000m"Check the chart documentation in the Helm repository for all available options!
Want to start from scratch? Here's a minimal docker-compose.yml:
services:
vein:
image: mbround18/vein-docker:latest
container_name: vein
restart: unless-stopped
env_file:
- .env
environment:
SERVER_PORT: "${SERVER_PORT:-7777}"
QUERY_PORT: "${QUERY_PORT:-27015}"
ports:
- "${SERVER_PORT:-7777}:7777/udp"
- "${QUERY_PORT:-27015}:27015/udp"
- "27016:27016/udp"
volumes:
- ./data:/home/steam/veinThen create your .env file and run:
docker compose up -dThe container automatically manages Game.ini settings. Advanced users can add custom overrides:
INI_ENABLE=true
INI_EXTRA_OVERRIDES=|
Game.ini:/script/engine.gamesession:MaxPlayers=32
Game.ini:/script/vein.veingamesession:BindAddr=0.0.0.0Format: filename:section:key=value
Sections managed by default:
[/script/engine.gamesession]- MaxPlayers[/script/vein.veingamesession]- bPublic, ServerName, BindAddr, Password, AdminSteamIDs, SuperAdminSteamIDs
Check logs first:
docker compose logsCommon issues:
-
"Could not determine server start command"
- The game files didn't download properly
- Solution: Stop the server and verify installation with
docker compose logs - If needed, reset (
⚠️ backs up data first!):docker compose down && mv ./data ./data.backup && docker compose up -d
-
Port already in use
- Another application is using port 7777
- Solution: Change
SERVER_PORTin.envor stop the conflicting application
-
Permission errors
- The container can't write to
./data - Solution (Linux/Mac):
chmod -R 755 ./data
- The container can't write to
- Check your firewall - Allow UDP ports 7777 and 27015
- Port forwarding - Forward these ports on your router to your server's local IP
- Verify ports match -
.envsettings must match yourcompose.ymland router config - Test locally first - Can you connect using
localhost:7777?
- Set
SERVER_PUBLIC=truein.env - Ensure
QUERY_PORT(27015) is open and forwarded - Consider getting a Steam GSLT token
- Set yourself as superadmin:
SUPERADMIN_STEAM_IDS=your_steam64_id - Manually save before shutting down: Run
Savecommand in-game - Enable automatic shutdown saves:
SAVE_ON_SHUTDOWN=true
- Check existing issues: GitHub Issues
- Open a new issue with:
- Your
.envsettings (remove passwords!) - Output from
docker compose logs - What you've already tried
- Your
We love contributions! Whether you're fixing bugs, improving docs, or adding features - you're welcome here.
Ways to contribute:
- 🐛 Report bugs via GitHub Issues
- 📝 Improve documentation
- 💻 Submit pull requests
- ⭐ Star the project
- 📢 Share with friends
Development setup:
git clone https://github.com/mbround18/vein-docker.git
cd vein-docker
cp .env.example .env
docker compose up --build -dRead more: See CONTRIBUTING.md for detailed guidelines.
Thank you for using this container! We hope it makes hosting your VEIN server easy and enjoyable.
Having a great experience? Consider:
- ⭐ Starring the repository
- 🐦 Sharing with your community
- 💬 Providing feedback
Running into issues? Don't hesitate to open an issue. We're here to help!
Happy gaming! 🎮
Project maintained by: @mbround18
License: See LICENSE
Docker Hub: mbround18/vein-docker