15 Commits

Author SHA1 Message Date
fdba02faed fix: bug not allowing set custom key.
All checks were successful
Docker Image CI / docker (push) Successful in 1m48s
2025-08-02 21:43:47 -07:00
b017fcd217 add version 1.10.1
All checks were successful
Docker Image CI / docker (push) Successful in 1m56s
2025-08-02 21:07:56 -07:00
b3e636e36a test
All checks were successful
Docker Image CI / docker (pull_request) Successful in 49s
Docker Image CI / docker (push) Successful in 1m57s
2025-08-02 09:00:58 -07:00
57172a3609 test
All checks were successful
Docker Image CI / docker (push) Successful in 1m49s
2025-08-02 08:56:50 -07:00
87686bf4f7 update: holesail 2.2.0
All checks were successful
Docker Image CI / docker (pull_request) Successful in 55s
Docker Image CI / docker (push) Successful in 2m1s
2025-07-30 15:02:15 -07:00
29e00d6002 Merge branch 'master' into 2.1.0
All checks were successful
Docker Image CI / docker (push) Successful in 3m3s
2025-07-22 21:00:12 -07:00
21b21ce73c fix: fix my-mc command 2025-05-27 23:57:57 -07:00
4a7fbef176 test 2025-05-27 19:44:32 -07:00
a1ec0ba829 add KEY default value 2025-05-27 13:57:23 -07:00
6d78af4d3a fix: rename CONNECTOR envar to MY_MC_API_KEY 2025-05-27 13:46:23 -07:00
85428100c0 fix: --connector arg is renamed to --key 2025-05-27 13:33:42 -07:00
407cfcfb69 bump holesail version to 2.1.0 2025-05-25 06:38:01 -07:00
5e03c2c30d fix env UDP option 2025-05-14 01:13:43 -07:00
9c1d769ed8 add UDP environment variable 2025-05-13 18:24:58 -07:00
7989b82c04 handle ctrl-c now 2025-05-13 17:13:40 -07:00
4 changed files with 60 additions and 48 deletions

View File

@@ -1,20 +1,23 @@
FROM node:lts-slim AS base FROM node:lts-slim AS base
RUN npm install -g holesail@1.10.1
FROM base AS dev
WORKDIR / WORKDIR /
COPY run.sh . COPY run.sh .
COPY fetch-my-mc-connector.js . COPY fetch-my-mc-connector.js .
RUN chmod +x run.sh RUN chmod +x run.sh
RUN npm install -g holesail@2.0.3 ENV MODE=server
ENV HOST=0.0.0.0
ENV PORT=8989
ENV PUBLIC=true
ENV USERNAME=admin
ENV PASSWORD=admin
ENV ROLE=user
ENV KEY=""
ENV MY_MC_API_KEY=""
#ENV FORCE ""
ENV MODE server CMD [ "/usr/bin/bash", "/run.sh" ]
ENV HOST 0.0.0.0
ENV PORT 8989
ENV PUBLIC true
ENV USERNAME admin
ENV PASSWORD admin
ENV ROLE user
ENV CONNECTOR ""
ENV FORCE ""
ENTRYPOINT [ "/run.sh" ]

View File

@@ -17,7 +17,7 @@ The following environment variables are available:
- HOST: The hostname or IP address to use for the client or server mode. - HOST: The hostname or IP address to use for the client or server mode.
- PUBLIC: A boolean value indicating whether the server should use a public connetor string. Only applicable in server mode. - PUBLIC: A boolean value indicating whether the server should use a public connetor string. Only applicable in server mode.
- FORCE: A boolean value indicating whether to force a short connector string of less than 32 chars. Only applicable in server and filemanager modes. - FORCE: A boolean value indicating whether to force a short connector string of less than 32 chars. Only applicable in server and filemanager modes.
- CONNECTOR: A connector string used to identify the connection. Can be used in client, server, and filemanager modes. - KEY: A string used to identify the connection. Can be used in client, server, and filemanager modes.
- USERNAME: The username to use for authentication in filemanager mode. - USERNAME: The username to use for authentication in filemanager mode.
- PASSWORD: The password to use for authentication in filemanager mode. - PASSWORD: The password to use for authentication in filemanager mode.
- ROLE: The role to assign to the user in filemanager mode. Can be either admin or user. - ROLE: The role to assign to the user in filemanager mode. Can be either admin or user.
@@ -41,7 +41,7 @@ docker run -d --name holesail \
-e MODE=server \ -e MODE=server \
-e PORT=25565 \ -e PORT=25565 \
-e HOST=minecraft \ -e HOST=minecraft \
-e CONNECTOR=very-super-secret \ -e KEY=very-super-secret \
-e PUBLIC=false \ -e PUBLIC=false \
--network holesail \ --network holesail \
anaxios/holesail:latest anaxios/holesail:latest
@@ -66,7 +66,7 @@ services:
PORT: 25565 PORT: 25565
HOST: minecraft HOST: minecraft
PUBLIC: false PUBLIC: false
CONNECTOR: very-super-secret KEY: very-super-secret
networks: networks:
- holesail - holesail
@@ -101,18 +101,17 @@ services:
holesail: holesail:
container_name: holesail container_name: holesail
restart: unless-stopped restart: unless-stopped
network_mode: "host" ports:
- 8989:8989
image: anaxios/holesail:latest image: anaxios/holesail:latest
environment: environment:
MODE: client MODE: client
PORT: 8989 PORT: 8989
HOST: 0.0.0.0 HOST: 0.0.0.0
PUBLIC: false PUBLIC: false
CONNECTOR: very-super-secret KEY: very-super-secret
``` ```
**Note:** Client mode only works on Linux, and is incompatible with Windows and Mac.
### Filemanager Mode ### Filemanager Mode
In Filemanager mode, Holesail-docker serves a file manager interface. Example `docker-compose.yml` file: In Filemanager mode, Holesail-docker serves a file manager interface. Example `docker-compose.yml` file:
@@ -131,7 +130,7 @@ services:
ROLE: user ROLE: user
USERNAME: admin USERNAME: admin
PASSWORD: admin PASSWORD: admin
CONNECTOR: very-super-secret KEY: very-super-secret
volumes: volumes:
- <host dir>:/data - <host dir>:/data
``` ```
@@ -153,7 +152,7 @@ services:
PORT: 25565 PORT: 25565
HOST: minecraft HOST: minecraft
PUBLIC: false PUBLIC: false
CONNECTOR: very-super-secret KEY: very-super-secret
networks: networks:
- holesail - holesail

View File

@@ -1,4 +1,4 @@
const apiKey = process.env.CONNECTOR; const apiKey = process.env.MY_MC_API_KEY;
const result = fetch('https://api.my-mc.link/my-hash',{ const result = fetch('https://api.my-mc.link/my-hash',{
method: "GET", method: "GET",
@@ -9,5 +9,9 @@ const result = fetch('https://api.my-mc.link/my-hash',{
const r = await response.json(); const r = await response.json();
if (r.success == true) { if (r.success == true) {
console.log(r.message); console.log(r.message);
} } else {
throw new Error("failed to fetch holesail key");
}
}).catch(err => {
throw Error(err);
}) })

56
run.sh
View File

@@ -25,9 +25,9 @@ success() {
print "$GREEN" "$1" print "$GREEN" "$1"
} }
get_connector_my-mc() { #get_connector_my_mc() {
printf "$(node /fetch-my-mc-connector.js)" # KEY="$(/usr/local/bin/node /fetch-my-mc-connector.js)"
} #}
cmd_argument_builder () { cmd_argument_builder () {
local args=""; local args="";
@@ -35,14 +35,16 @@ cmd_argument_builder () {
"client") "client")
[[ "$PORT" ]] && args="$args --port $PORT"; [[ "$PORT" ]] && args="$args --port $PORT";
[[ "$HOST" ]] && args="$args --host $HOST"; [[ "$HOST" ]] && args="$args --host $HOST";
[[ "$CONNECTOR" ]] && args="$args $CONNECTOR"; [[ "$KEY" ]] && args="$args $KEY";
#[[ "$UDP" = "true" ]] && args="$args --udp";
;; ;;
"server") "server")
[[ "$PORT" ]] && args="$args --live $PORT"; [[ "$PORT" ]] && args="$args --live $PORT";
[[ "$HOST" ]] && args="$args --host $HOST"; [[ "$HOST" ]] && args="$args --host $HOST";
[[ "$PUBLIC" = "true" ]] && args="$args --public"; [[ "$PUBLIC" = "true" ]] && args="$args --public";
[[ "$FORCE" = "true" ]] && args="$args --force"; [[ "$FORCE" = "true" ]] && args="$args --force";
[[ "$CONNECTOR" ]] && args="$args --connector $CONNECTOR"; [[ "$KEY" ]] && args="$args --connector $KEY";
#[[ "$UDP" = "true" ]] && args="$args --udp";
;; ;;
"filemanager") "filemanager")
args="--filemanager"; args="--filemanager";
@@ -53,29 +55,25 @@ cmd_argument_builder () {
[[ "$PASSWORD" ]] && args="$args --password $PASSWORD"; [[ "$PASSWORD" ]] && args="$args --password $PASSWORD";
[[ "$ROLE" = "admin" ]] && args="$args --role admin"; [[ "$ROLE" = "admin" ]] && args="$args --role admin";
[[ "$ROLE" = "user" ]] && args="$args --role user"; [[ "$ROLE" = "user" ]] && args="$args --role user";
[[ "$CONNECTOR" ]] && args="$args --connector $CONNECTOR"; [[ "$KEY" ]] && args="$args --key $KEY";
;; #[[ "$UDP" = "true" ]] && args="$args --udp";
"my-mc")
[[ "$PORT" ]] && args="$args --port $PORT";
[[ "$HOST" ]] && args="$args --host $HOST";
[[ "$CONNECTOR" ]] && args="$args $(get_connector_my-mc)";
;; ;;
# "my-mc")
# #if ! get_connector_my_mc; then exit 1; fi
# [[ "$PORT" ]] && args="$args --port $PORT";
# [[ "$HOST" ]] && args="$args --host $HOST";
# [[ "$KEY" ]] && args="$args --connect $KEY";
# #[[ "$UDP" = "true" ]] && args="$args --udp";
# ;;
esac esac
printf "%s" "$args"; printf "%s" "$args";
} }
ARGS="$(cmd_argument_builder)"
if [[ ! $ARGS ]]; then
error "Invalid Mode."
exit 1
fi
# SIGUSR1-handler # SIGUSR1-handler
# my_handler() { my_handler() {
# echo "my_handler" echo "my_handler"
# } }
term_handler() { term_handler() {
if [ $pid -ne 0 ]; then if [ $pid -ne 0 ]; then
@@ -85,17 +83,25 @@ term_handler() {
exit 143; # 128 + 15 -- SIGTERM exit 143; # 128 + 15 -- SIGTERM
} }
ARGS="$(cmd_argument_builder)"
if [[ ! $ARGS ]]; then
error "Invalid Mode."
exit 1
fi
# setup handlers # setup handlers
# on callback, kill the last background process, which is `tail -f /dev/null` and execute the specified handler # on callback, kill the last background process, which is `tail -f /dev/null` and execute the specified handler
#trap 'kill ${!}; my_handler' SIGUSR1 #trap 'kill ${!}; my_handler' SIGUSR1
trap 'kill ${!}; term_handler' SIGTERM trap 'kill ${!}; term_handler' SIGTERM SIGINT
# run application # run application
holesail $ARGS & /usr/local/bin/holesail $ARGS &
pid="$!" pid="$!"
# wait forever # wait forever
while true while true; do
do
tail -f /dev/null & wait ${!} tail -f /dev/null & wait ${!}
done done