Initial commit
This commit is contained in:
commit
e292608cd0
|
@ -0,0 +1,23 @@
|
|||
FROM ubuntu:trusty
|
||||
|
||||
#RUN sed -i -E 's/deb http:\/\/archive.ubuntu.com/deb http:\/\/debmirror.services.davepedu.com:8080/' /etc/apt/sources.list
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y screen mono-complete wget unzip supervisor python3-requests && \
|
||||
wget -O /tmp/terraria.zip https://github.com/NyxStudios/TShock/releases/download/v4.3.12/tshock_4.3.12.zip && \
|
||||
cd /tmp && \
|
||||
unzip terraria.zip && \
|
||||
rm terraria.zip && \
|
||||
mkdir -p /opt/terraria/tshock && \
|
||||
mv * /opt/terraria
|
||||
|
||||
ADD supervisor.conf /etc/supervisor/conf.d/supervisor.conf
|
||||
ADD supervisor-terraria.conf /etc/supervisor/conf.d/terraria.conf
|
||||
ADD config.json /opt/terraria/tshock/config.json
|
||||
ADD cli.py /usr/local/bin/trcli
|
||||
ADD start /start
|
||||
|
||||
EXPOSE 7777
|
||||
EXPOSE 7878
|
||||
|
||||
ENTRYPOINT ["/start"]
|
|
@ -0,0 +1,26 @@
|
|||
docker-terraria
|
||||
===============
|
||||
|
||||
Terraria (tshock) under Mono in a docker container.
|
||||
|
||||
Reccomended usage:
|
||||
|
||||
`docker run -d -p 7777:7777 -p 7878:7878 -v /host/terraria_data/:/opt/terraria/tshock/ terraria`
|
||||
|
||||
Admin cli
|
||||
---------
|
||||
|
||||
Included is an admin tool for interacting with a server.
|
||||
|
||||
First-time setup:
|
||||
|
||||
* `trcli -a mkuser`
|
||||
|
||||
Per-run token generation:
|
||||
|
||||
* `trcli -a gettoken`
|
||||
|
||||
Execute arbitrary commads:
|
||||
|
||||
* `trcli -a cmd -c '/protectspawn'
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/env python3
|
||||
from requests import get
|
||||
import sqlite3
|
||||
from os.path import exists
|
||||
import json
|
||||
|
||||
def create_user():
|
||||
db = sqlite3.connect("/opt/terraria/tshock/tshock.sqlite")
|
||||
cursor = db.cursor()
|
||||
cursor.execute('SELECT COUNT(*) FROM Users WHERE Username="superadmin";')
|
||||
if cursor.fetchall()[0][0] == 0:
|
||||
cursor.execute('INSERT INTO Users (Username, Password, Usergroup) VALUES ("superadmin", "$2a$07$S7i/jFGLQQzAItq0RlQJd.D4/npGbFwUGCZwe1QfqHRCDrYk0GxQK","superadmin");')
|
||||
cursor.close()
|
||||
db.commit()
|
||||
db.close()
|
||||
|
||||
|
||||
def get_token():
|
||||
if exists("/tmp/clitoken"):
|
||||
with open("/tmp/clitoken", "r") as f:
|
||||
return f.read().strip()
|
||||
else:
|
||||
token = get("http://127.0.0.1:7878/token/create/superadmin/ballsack").json()["token"]
|
||||
with open("/tmp/clitoken", "w") as f:
|
||||
f.write(token)
|
||||
return token
|
||||
|
||||
|
||||
def destroy_token(token):
|
||||
get("http://127.0.0.1:7878/token/destroy/"+token, params={"token":token})
|
||||
|
||||
|
||||
def run_command(command, token):
|
||||
return get("http://127.0.0.1:7878/v2/server/rawcmd", params={"token":token, "cmd":command}).json()
|
||||
|
||||
|
||||
def status():
|
||||
return get("http://127.0.0.1:7878/v2/server/status").json()
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser("Terraria REST CLI")
|
||||
parser.add_argument("-a", "--action", help="action to take", choices=["mkuser", "cmd", "gettoken", "status"], required=True)
|
||||
parser.add_argument("-c", "--command", help="command to run")
|
||||
parser.add_argument("-t", "--token", help="api token, if needed")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.action=="cmd":
|
||||
if not args.token:
|
||||
args.token = get_token()
|
||||
print(json.dumps(run_command(args.command, args.token), indent=4))
|
||||
elif args.action=="status":
|
||||
print(json.dumps(status(), indent=4))
|
||||
elif args.action=="gettoken":
|
||||
print(get_token())
|
||||
elif args.action=="deltoken":
|
||||
destroy_token(args.token)
|
||||
elif args.action=="mkuser":
|
||||
create_user()
|
||||
else:
|
||||
parser.print_help()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"RestApiEnabled": true,
|
||||
"RestApiPort": 7878,
|
||||
"RestUseNewPermissionModel": true,
|
||||
"ApplicationRestTokens": {}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
trap 'kill $(jobs -p)' EXIT
|
||||
|
||||
: ${WORLDSIZE:=3}
|
||||
: ${WORLDFILENAME:=terraria.wld}
|
||||
|
||||
export WORLDSIZE WORLDFILENAME
|
||||
|
||||
supervisord
|
|
@ -0,0 +1,5 @@
|
|||
[program:terraria]
|
||||
command=mono TerrariaServer.exe -port 7777 -maxplayers 100 -world "/opt/terraria/tshock/%(ENV_WORLDFILENAME)s" -autocreate "%(ENV_WORLDSIZE)s"
|
||||
directory=/opt/terraria
|
||||
autorestart=true
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[supervisord]
|
||||
nodaemon=true
|
Loading…
Reference in New Issue