mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-10-07 21:07:11 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b401873298 | ||
|
|
1c9bbee3b3 | ||
|
|
5fa33c7813 | ||
|
|
581d5fde1d | ||
|
|
382336d39d | ||
|
|
5bd3a818a3 | ||
|
|
97874f3481 | ||
|
|
135bafefeb | ||
|
|
15b8c5a7e7 | ||
|
|
15990071d4 | ||
|
|
d00f9d3609 | ||
|
|
5ad745de75 | ||
|
|
b67580af2c | ||
|
|
2900062df5 | ||
|
|
67fe8931dd | ||
|
|
e6f593e8c4 | ||
|
|
8924740cfe | ||
|
|
34d4ae0b59 | ||
|
|
62a4541df5 | ||
|
|
401958c0d6 | ||
|
|
8859d223bf | ||
|
|
621962ad9c | ||
|
|
5c238af3df | ||
|
|
8e148095f0 | ||
|
|
3c55a05b1c | ||
|
|
d293a65f5e | ||
|
|
e6bfa01db5 | ||
|
|
4e122a67d3 | ||
|
|
b11863d3b2 | ||
|
|
93197ffb77 | ||
|
|
f02baa8761 | ||
|
|
19e39b84ec | ||
|
|
53800e460f | ||
|
|
e061cc7163 | ||
|
|
e61942f33e | ||
|
|
f8b97bf909 | ||
|
|
ed272da302 | ||
|
|
e8b7975295 | ||
|
|
cae1a20973 | ||
|
|
165150a852 | ||
|
|
ad2674bf8e | ||
|
|
b72266f7bf | ||
|
|
79c864ae19 | ||
|
|
451eec4db5 | ||
|
|
539f7ada70 | ||
|
|
c60156d245 | ||
|
|
281bd3660f |
No files matched your search
@@ -2,13 +2,13 @@ version: 2
|
||||
jobs:
|
||||
minecraft_server:
|
||||
docker:
|
||||
- image: circleci/buildpack-deps:18.04
|
||||
- image: circleci/buildpack-deps:19.10
|
||||
steps:
|
||||
- checkout
|
||||
- setup_remote_docker
|
||||
- run:
|
||||
name: Build image
|
||||
command: docker build -t mc:$CIRCLE_BUILD_NUM minecraft-server
|
||||
command: docker build -t mc:$CIRCLE_BUILD_NUM .
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
data
|
||||
examples
|
||||
k8s-examples
|
||||
.idea
|
||||
+2
-5
@@ -1,5 +1,2 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
indent_style = space
|
||||
[start-*]
|
||||
indent_size = 2
|
||||
@@ -0,0 +1,6 @@
|
||||
daysUntilClose: 14
|
||||
responseRequiredLabel: "status/waiting on feedback"
|
||||
closeComment: >
|
||||
This issue has been automatically closed because there has been no response
|
||||
after requesting feedback. Please feel free to re-open this issue if the
|
||||
scenario still exists and provide a comment with more information.
|
||||
+3
-2
@@ -1,2 +1,3 @@
|
||||
*.iml
|
||||
.idea
|
||||
/data/
|
||||
/.idea/
|
||||
*.iml
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
FROM openjdk:8u212-jre-alpine
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
RUN apk add --no-cache -U \
|
||||
openssl \
|
||||
imagemagick \
|
||||
lsof \
|
||||
su-exec \
|
||||
shadow \
|
||||
bash \
|
||||
curl iputils wget \
|
||||
git \
|
||||
jq \
|
||||
mysql-client \
|
||||
tzdata \
|
||||
rsync \
|
||||
nano \
|
||||
python python-dev py2-pip
|
||||
|
||||
RUN pip install mcstatus yq
|
||||
|
||||
HEALTHCHECK --start-period=1m CMD mcstatus localhost:$SERVER_PORT ping
|
||||
|
||||
RUN addgroup -g 1000 minecraft \
|
||||
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
|
||||
&& mkdir -m 777 /data /mods /config /plugins \
|
||||
&& chown minecraft:minecraft /data /config /mods /plugins /home/minecraft
|
||||
|
||||
EXPOSE 25565 25575
|
||||
|
||||
RUN echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||
|
||||
ARG ARCH=amd64
|
||||
|
||||
ARG EASY_ADD_VER=0.3.0
|
||||
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${EASY_ADD_VER}_linux_${ARCH} /usr/bin/easy-add
|
||||
RUN chmod +x /usr/bin/easy-add
|
||||
|
||||
ARG RESTIFY_VER=1.2.1
|
||||
RUN easy-add --file restify --from https://github.com/itzg/restify/releases/download/${RESTIFY_VER}/restify_${RESTIFY_VER}_linux_${ARCH}.tar.gz
|
||||
|
||||
ARG RCON_CLI_VER=1.4.7
|
||||
RUN easy-add --file rcon-cli --from https://github.com/itzg/rcon-cli/releases/download/${RCON_CLI_VER}/rcon-cli_${RCON_CLI_VER}_linux_${ARCH}.tar.gz
|
||||
|
||||
ARG MC_RUN_VER=1.3.3
|
||||
RUN easy-add --file mc-server-runner --from https://github.com/itzg/mc-server-runner/releases/download/${MC_RUN_VER}/mc-server-runner_${MC_RUN_VER}_linux_${ARCH}.tar.gz
|
||||
|
||||
COPY mcadmin.jq /usr/share
|
||||
RUN chmod +x /usr/local/bin/*
|
||||
|
||||
VOLUME ["/data","/mods","/config"]
|
||||
COPY server.properties /tmp/server.properties
|
||||
WORKDIR /data
|
||||
|
||||
ENTRYPOINT [ "/start" ]
|
||||
|
||||
ENV UID=1000 GID=1000 \
|
||||
JVM_XX_OPTS="-XX:+UseG1GC" MEMORY="1G" \
|
||||
TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED SPONGEBRANCH=STABLE SPONGEVERSION= FABRICVERSION=LATEST LEVEL=world \
|
||||
PVP=true DIFFICULTY=easy ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
|
||||
RESOURCE_PACK= RESOURCE_PACK_SHA1= \
|
||||
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD= MODPACK= MODS= SERVER_PORT=25565 ONLINE_MODE=TRUE CONSOLE=true SERVER_NAME="Dedicated Server" \
|
||||
REPLACE_ENV_VARIABLES="FALSE" ENV_VARIABLE_PREFIX="CFG_"
|
||||
|
||||
COPY start* /
|
||||
RUN dos2unix /start* && chmod +x /start*
|
||||
File renamed without changes.
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
pkgs=ubuntu-openjdk-7
|
||||
pkgs="$pkgs minecraft-server"
|
||||
pkgs="$pkgs titan-gremlin"
|
||||
|
||||
for p in $pkgs
|
||||
do
|
||||
docker build -t itzg/$p $p
|
||||
done
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
machine:
|
||||
services:
|
||||
- docker
|
||||
|
||||
test:
|
||||
override:
|
||||
- ./build
|
||||
|
||||
notify:
|
||||
webhooks:
|
||||
- url: https://webhooks.gitter.im/e/4726bb683d8aed018486
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
manifest="itzg/minecraft-server:multiarch"
|
||||
|
||||
for t in latest rpi3 aarch64; do
|
||||
docker pull itzg/minecraft-server:$t
|
||||
done
|
||||
|
||||
docker manifest create --amend ${manifest} \
|
||||
itzg/minecraft-server:aarch64 \
|
||||
itzg/minecraft-server:latest \
|
||||
itzg/minecraft-server:rpi3
|
||||
|
||||
docker manifest annotate --os linux --arch amd64 ${manifest} itzg/minecraft-server:latest
|
||||
docker manifest annotate --os linux --arch arm64 ${manifest} itzg/minecraft-server:aarch64
|
||||
docker manifest annotate --os linux --arch arm --variant v7 ${manifest} itzg/minecraft-server:rpi3
|
||||
|
||||
docker manifest push ${manifest}
|
||||
File renamed without changes.
Executable
+93
@@ -0,0 +1,93 @@
|
||||
#!/bin/bash
|
||||
#set -x
|
||||
# Use this variable to indicate a list of branches that docker hub is watching
|
||||
branches_list=('openj9' 'openj9-nightly' 'adopt11')
|
||||
|
||||
function TrapExit {
|
||||
echo "Checking out back in master"
|
||||
git checkout master
|
||||
}
|
||||
|
||||
batchMode=false
|
||||
|
||||
while getopts "b" arg
|
||||
do
|
||||
case $arg in
|
||||
b)
|
||||
batchMode=true
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported arg $arg"
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
${batchMode} && echo "Using batch mode"
|
||||
|
||||
trap TrapExit EXIT SIGTERM
|
||||
|
||||
test -d ./.git || { echo ".git folder was not found. Please start this script from root directory of the project!";
|
||||
exit 1; }
|
||||
|
||||
# Making sure we are in master
|
||||
git checkout master
|
||||
git pull --all || { echo "Can't pull the repo!"; \
|
||||
exit 1; }
|
||||
|
||||
git_branches=$(git branch -a)
|
||||
|
||||
for branch in "${branches_list[@]}"; do
|
||||
if [[ "$git_branches" != *"$branch"* ]]; then
|
||||
echo "Can't update $branch because I can't find it in the list of branches."
|
||||
exit 1
|
||||
else
|
||||
echo "Branch $branch found. Working with it."
|
||||
git checkout "$branch" || { echo "Can't checkout into the branch. Don't know the cause."; \
|
||||
exit 1; }
|
||||
proceed='False'
|
||||
while [[ "$proceed" == "False" ]]; do
|
||||
if git merge -m 'Auto-merging via docker-versions-create' master; then
|
||||
proceed="True"
|
||||
echo "Branch $branch updated to current master successfully"
|
||||
# pushing changes to remote for this branch
|
||||
git commit -m "Auto merge branch with master" -a
|
||||
# push may fail if remote doesn't have this branch yet. In this case - sending branch
|
||||
git push || git push -u origin "$branch" || { echo "Can't push changes to the origin."; exit 1; }
|
||||
elif ${batchMode}; then
|
||||
status=$?
|
||||
echo "Git merge failed in batch mode"
|
||||
exit ${status}
|
||||
# and trap exit gets us back to master
|
||||
else
|
||||
cat<<EOL
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
Master merge in the branch $branch encountered an error!
|
||||
You may try to fix the error and merge again. (Commit changes)
|
||||
Or skip this branch merge completely.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
EOL
|
||||
printf "Should we try again? (y):"
|
||||
read -r answer
|
||||
if [[ "$answer" == '' ]] || [[ "$answer" == 'y' ]] || [[ "$answer" == 'Y' ]]; then
|
||||
# If you use non-local editor or files are changed in repo
|
||||
cat <<EOL
|
||||
|
||||
The following commands may encounter an error!
|
||||
This is completely fine if the changes were made locally and remote branch doesn't know about them.
|
||||
|
||||
EOL
|
||||
# Updating branch from remote before trying again
|
||||
git checkout master
|
||||
git fetch --all
|
||||
git pull -a
|
||||
git checkout "$branch"
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
done
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,26 +0,0 @@
|
||||
FROM java:8
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
ENV GITBLIT_VERSION 1.7.1
|
||||
|
||||
RUN wget -qO /tmp/gitblit.tgz http://dl.bintray.com/gitblit/releases/gitblit-$GITBLIT_VERSION.tar.gz
|
||||
|
||||
RUN tar -C /opt -xvf /tmp/gitblit.tgz && \
|
||||
rm /tmp/gitblit.tgz
|
||||
|
||||
VOLUME ["/data"]
|
||||
|
||||
ADD start.sh /start
|
||||
|
||||
ENV GITBLIT_PATH=/opt/gitblit-${GITBLIT_VERSION} \
|
||||
GITBLIT_HTTPS_PORT=443 \
|
||||
GITBLIT_HTTP_PORT=80 \
|
||||
GITBLIT_BASE_FOLDER=/data \
|
||||
GITBLIT_ADMIN_USER=admin \
|
||||
GITBLIT_INITIAL_REPO=
|
||||
WORKDIR $GITBLIT_PATH
|
||||
|
||||
EXPOSE 80 443
|
||||
|
||||
ENTRYPOINT ["/start"]
|
||||
@@ -1,46 +0,0 @@
|
||||
Provides a ready-to-use instance of [GitBlit](http://gitblit.com/).
|
||||
|
||||
## Basic usage
|
||||
|
||||
Start the GitBlit container using
|
||||
|
||||
docker run -d -p 80:80 -p 443:443 --name gitblit itzg/gitblit
|
||||
|
||||
Access its web interface at the mapped HTTP (80) or HTTPS (443) port of the
|
||||
Docker host. Login with the default credentials __admin__ / __admin__ .
|
||||
|
||||
|
||||
## Data volume
|
||||
|
||||
In order to allow for future upgrades, run the container with a volume mount of `/data`, such as:
|
||||
|
||||
-v /tmp/gitblit-data:/data
|
||||
|
||||
## Initial repository creation
|
||||
|
||||
As a convenience for cluster configuration management with git
|
||||
(such as with [Spring Cloud Config](https://cloud.spring.io/spring-cloud-config/)),
|
||||
you may specify the name of an initial repository to be owned by the 'admin' user.
|
||||
This can be enabled by passing the name of that repository via the environment
|
||||
variable `GITBLIT_INITIAL_REPO`, such as
|
||||
|
||||
-e GITBLIT_INITIAL_REPO=default
|
||||
|
||||
## Create repositories with content
|
||||
|
||||
In addition to the approach above, you can push repostories with existing
|
||||
content by attaching them to sub-directories of `/repos`, such as
|
||||
|
||||
docker run -v $HOME/git/example:/repos/example ...
|
||||
|
||||
## Custom configuration
|
||||
|
||||
You can add or override any of the `*.properties` files for configuring GitBlit,
|
||||
typically `gitblit.properties`, by placing those files in a volume attached at
|
||||
`/config`, such as
|
||||
|
||||
-v $(pwd)/extra-config:/config
|
||||
|
||||
The property files in that configuration directory will be renamed with the
|
||||
suffix `.applied` to avoid overwriting manually modified configuration on
|
||||
the next container startup.
|
||||
@@ -1,103 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
apply_base_data() {
|
||||
contents=`ls $GITBLIT_BASE_FOLDER|wc -l`
|
||||
|
||||
if [ $contents = "0" ]; then
|
||||
cp -r $GITBLIT_PATH/data/* $GITBLIT_BASE_FOLDER
|
||||
fi
|
||||
}
|
||||
|
||||
apply_config() {
|
||||
cp -rf /config/* $GITBLIT_BASE_FOLDER
|
||||
}
|
||||
|
||||
create_repo() {
|
||||
local repo_dir=$GITBLIT_BASE_FOLDER/git/$1.git
|
||||
mkdir -p $repo_dir
|
||||
cd $repo_dir
|
||||
|
||||
git init --bare
|
||||
|
||||
echo "
|
||||
[gitblit]
|
||||
description =
|
||||
originRepository =
|
||||
owner = $GITBLIT_ADMIN_USER
|
||||
acceptNewPatchsets = true
|
||||
acceptNewTickets = true
|
||||
mergeTo = master
|
||||
useIncrementalPushTags = false
|
||||
allowForks = true
|
||||
accessRestriction = PUSH
|
||||
authorizationControl = AUTHENTICATED
|
||||
verifyCommitter = false
|
||||
showRemoteBranches = false
|
||||
isFrozen = false
|
||||
skipSizeCalculation = false
|
||||
skipSummaryMetrics = false
|
||||
federationStrategy = FEDERATE_THIS
|
||||
isFederated = false
|
||||
gcThreshold =
|
||||
gcPeriod = 0
|
||||
" >> config
|
||||
|
||||
git config --replace-all core.logallrefupdates false
|
||||
|
||||
echo "
|
||||
CREATING repository '$1' with:
|
||||
* read/clone access for all
|
||||
* push access for authenticated users"
|
||||
|
||||
RET="file://$repo_dir"
|
||||
}
|
||||
|
||||
apply_repos() {
|
||||
for rdir in /repos/*; do
|
||||
if [ -e $rdir/.git ]; then
|
||||
r=$(basename $rdir)
|
||||
create_repo $r
|
||||
local url=$RET
|
||||
cd $rdir
|
||||
echo "* pushed existing content"
|
||||
git push --all $url
|
||||
fi
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
create_initial_repo() {
|
||||
if [ -d $GITBLIT_INITIAL_REPO ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
create_repo $GITBLIT_INITIAL_REPO
|
||||
}
|
||||
|
||||
shopt -s nullglob
|
||||
if [ ! -f /var/local/gitblit_firststart ]; then
|
||||
FIRSTSTART=1
|
||||
else
|
||||
FIRSTSTART=0
|
||||
fi
|
||||
|
||||
if [ $FIRSTSTART = 1 ]; then
|
||||
apply_base_data
|
||||
|
||||
echo "
|
||||
Applying configuration from /config
|
||||
"
|
||||
apply_config
|
||||
touch /var/local/gitblit_firststart
|
||||
fi
|
||||
|
||||
|
||||
if [[ -n $GITBLIT_INITIAL_REPO ]]; then
|
||||
create_initial_repo
|
||||
fi
|
||||
apply_repos
|
||||
|
||||
cd $GITBLIT_PATH
|
||||
$JAVA_HOME/bin/java -jar $GITBLIT_PATH/gitblit.jar \
|
||||
--httpsPort $GITBLIT_HTTPS_PORT --httpPort $GITBLIT_HTTP_PORT \
|
||||
--baseFolder $GITBLIT_BASE_FOLDER
|
||||
@@ -1 +0,0 @@
|
||||
/site
|
||||
@@ -1,23 +0,0 @@
|
||||
FROM ubuntu:trusty
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
ENV APT_GET_UPDATE 2014-09-18
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get -y upgrade
|
||||
|
||||
RUN apt-get -y install ruby ruby-dev make patch nodejs
|
||||
RUN gem install bundler
|
||||
|
||||
ADD Gemfile /tmp/Gemfile
|
||||
WORKDIR /tmp
|
||||
RUN bundle install
|
||||
|
||||
ADD template /site-template
|
||||
|
||||
VOLUME ["/site"]
|
||||
EXPOSE 4000
|
||||
|
||||
ADD start.sh /start
|
||||
CMD ["/start"]
|
||||
@@ -1,2 +0,0 @@
|
||||
source 'https://rubygems.org'
|
||||
gem 'github-pages'
|
||||
@@ -1,14 +0,0 @@
|
||||
This container is pre-configured according to the
|
||||
[GitHub Pages use of Jekyll](https://help.github.com/articles/using-jekyll-with-pages).
|
||||
|
||||
It serves up the generated content on port 4000 and the site is generated from
|
||||
the container's `/site` volume. You can either bring your own site content or
|
||||
let it generate some VERY simple content along with the standard Jekyll directory
|
||||
layout.
|
||||
|
||||
A typical way to run this:
|
||||
|
||||
docker run -it -p 4000:4000 -v $(pwd)/site:/site itzg/jekyll-github-pages
|
||||
|
||||
where either it will load your content or initialize the content under
|
||||
`site` in your current working directory.
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ `ls /site/index.* 2> /dev/null | wc -l` = 0 ]; then
|
||||
echo "Preparing /site with default content..."
|
||||
cp -r /site-template/* /site
|
||||
fi
|
||||
|
||||
if [ ! -e /site/Gemfile ]; then
|
||||
cp /tmp/Gemfile /site/Gemfile
|
||||
fi
|
||||
|
||||
cd /site
|
||||
bundle exec jekyll serve
|
||||
@@ -1 +0,0 @@
|
||||
highlighter: pygments
|
||||
@@ -1,3 +0,0 @@
|
||||
<footer>
|
||||
<i>Goodbye</i>
|
||||
</footer>
|
||||
@@ -1,3 +0,0 @@
|
||||
<header>
|
||||
<h1>{{ page.title }}</h1>
|
||||
</header>
|
||||
@@ -1,18 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>{{ page.title }}</title>
|
||||
|
||||
<!-- Latest compiled and minified CSS -->
|
||||
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
|
||||
|
||||
<!-- Optional theme -->
|
||||
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
|
||||
|
||||
<!-- Latest compiled and minified JavaScript -->
|
||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
|
||||
</head>
|
||||
@@ -1,12 +0,0 @@
|
||||
{% include top.html %}
|
||||
|
||||
<body>
|
||||
|
||||
{% include header.html %}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% include footer.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
title: Powered by Jekyll
|
||||
overview: true
|
||||
---
|
||||
This is where the content goes.
|
||||
@@ -1,17 +0,0 @@
|
||||
FROM java:openjdk-8u102-jdk
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||
graphviz \
|
||||
&& apt-get clean
|
||||
|
||||
ENV JENKINS_HOME=/data
|
||||
|
||||
VOLUME ["/data", "/root", "/opt/jenkins"]
|
||||
EXPOSE 8080 38252
|
||||
|
||||
COPY download-and-start.sh /opt/download-and-start
|
||||
|
||||
CMD ["/opt/download-and-start"]
|
||||
@@ -1,51 +0,0 @@
|
||||
A self-upgrading [Jenkins CI](http://jenkins-ci.org/) server
|
||||
|
||||
# Basic Usage
|
||||
|
||||
To start Jenkins with the latest version:
|
||||
|
||||
ID=$(docker run -d -p 8080:8080 itzg/jenkins)
|
||||
|
||||
At a later time, you can upgrade by restarting the container:
|
||||
|
||||
docker stop $ID
|
||||
docker start $ID
|
||||
|
||||
# Attaching host directory to Jenkins home directory
|
||||
|
||||
The Jenkins home directory is attachable at `/data`, so attaching to a host volume
|
||||
would be:
|
||||
|
||||
ID=$(docker run -d -p 8080:8080 -v /SOME_HOST_DIR:/data itzg/jenkins
|
||||
|
||||
# Enabling Jenkins slave agents
|
||||
|
||||
By default, Jenkins will pick a random port to allow slave nodes launched
|
||||
by JNLP. Since Docker networking is basically a firewall, a random port
|
||||
won't work for us. Instead the fixed port **38252** was chosen (arbitrarily)
|
||||
to be exposed by the container.
|
||||
|
||||
Launch your Jenkins container using
|
||||
|
||||
ID=$(docker run -d -p 8080:8080 -p 38252:38252 itzg/jenkins)
|
||||
|
||||
and configure the port in the Global Security settings:
|
||||
|
||||

|
||||
|
||||
# Image Parameters
|
||||
|
||||
## Volumes
|
||||
|
||||
* `/data` - a majority of the Jenkins content is maintained here, such as workspaces
|
||||
* `/root` - some tools, such as Maven, utilize the home directory for default repository storage
|
||||
* `/opt/jenkins` - the installed distribution is expanded here
|
||||
|
||||
## Ports
|
||||
|
||||
* `8080` - for the web UI
|
||||
* `38252` - for slave incoming JMX access
|
||||
|
||||
## Environment Variables
|
||||
|
||||
* `JENKINS_OPTS` - passed to the initial Java invocation of Jenkins
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
mirrorUrl=http://mirrors.jenkins-ci.org/war/latest/jenkins.war
|
||||
url=$(curl -s --head $mirrorUrl|awk -F': ' '$1 == "Location" { print $2 }' | sed 's/[[:space:]]*$//')
|
||||
version=$(echo $url | sed 's#.*/war/\(.*\)/jenkins.war#\1#')
|
||||
|
||||
mkdir -p /opt/jenkins
|
||||
trackingFile=/opt/jenkins/INSTALLED
|
||||
|
||||
installed=
|
||||
if [ -f $trackingFile ]; then
|
||||
installed=$(cat $trackingFile)
|
||||
echo "Version installed is $installed"
|
||||
fi
|
||||
|
||||
if [ $version != "$installed" ]; then
|
||||
echo "Downloading $version from '$url'"
|
||||
while ! curl -s -o /opt/jenkins/jenkins.war "$url"
|
||||
do
|
||||
echo "Trying again in 5 seconds"
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo $version > $trackingFile
|
||||
fi
|
||||
|
||||
|
||||
cd /opt/jenkins
|
||||
exec java $JENKINS_OPTS -jar jenkins.war
|
||||
+16
@@ -33,6 +33,22 @@ spec:
|
||||
ports:
|
||||
- containerPort: 25565
|
||||
name: main
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- mcstatus
|
||||
- localhost
|
||||
- ping
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- mcstatus
|
||||
- localhost
|
||||
- ping
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
volumeMounts:
|
||||
- name: mc-data
|
||||
mountPath: /data
|
||||
File renamed without changes.
@@ -1 +0,0 @@
|
||||
data
|
||||
@@ -1,2 +0,0 @@
|
||||
[start-*]
|
||||
indent_size = 2
|
||||
@@ -1 +0,0 @@
|
||||
/data/
|
||||
@@ -1,85 +0,0 @@
|
||||
FROM openjdk:8u212-jre-alpine
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
RUN apk add --no-cache -U \
|
||||
openssl \
|
||||
imagemagick \
|
||||
lsof \
|
||||
su-exec \
|
||||
shadow \
|
||||
bash \
|
||||
curl iputils wget \
|
||||
git \
|
||||
jq \
|
||||
mysql-client \
|
||||
tzdata \
|
||||
rsync \
|
||||
nano \
|
||||
python python-dev py2-pip
|
||||
|
||||
RUN pip install mcstatus yq
|
||||
|
||||
HEALTHCHECK CMD mcstatus localhost:$SERVER_PORT ping
|
||||
|
||||
RUN addgroup -g 1000 minecraft \
|
||||
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
|
||||
&& mkdir -m 777 /data /mods /config /plugins \
|
||||
&& chown minecraft:minecraft /data /config /mods /plugins /home/minecraft
|
||||
|
||||
EXPOSE 25565 25575
|
||||
|
||||
RUN echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||
|
||||
ARG RESTIFY_VER=1.1.6
|
||||
ARG RCON_CLI_VER=1.4.6
|
||||
ARG MC_SERVER_RUNNER_VER=1.3.2
|
||||
ARG TOF_BUILDTOOLS_VER=1.2.0
|
||||
ARG ARCH=amd64
|
||||
|
||||
ADD https://github.com/itzg/restify/releases/download/${RESTIFY_VER}/restify_${RESTIFY_VER}_linux_${ARCH}.tar.gz /tmp/restify.tgz
|
||||
RUN tar -x -C /usr/local/bin -f /tmp/restify.tgz restify && \
|
||||
rm /tmp/restify.tgz
|
||||
|
||||
ADD https://github.com/itzg/rcon-cli/releases/download/${RCON_CLI_VER}/rcon-cli_${RCON_CLI_VER}_linux_${ARCH}.tar.gz /tmp/rcon-cli.tgz
|
||||
RUN tar -x -C /usr/local/bin -f /tmp/rcon-cli.tgz rcon-cli && \
|
||||
rm /tmp/rcon-cli.tgz
|
||||
|
||||
ADD https://github.com/itzg/mc-server-runner/releases/download/${MC_SERVER_RUNNER_VER}/mc-server-runner_${MC_SERVER_RUNNER_VER}_linux_${ARCH}.tar.gz /tmp/mc-server-runner.tgz
|
||||
RUN tar -x -C /usr/local/bin -f /tmp/mc-server-runner.tgz mc-server-runner && \
|
||||
rm /tmp/mc-server-runner.tgz
|
||||
|
||||
ADD https://git.faldoria.de/tof/server/build-tools/-/jobs/artifacts/buildtools-${TOF_BUILDTOOLS_VER}/raw/target/ToF-BuildTools.jar?job=release-artifact /tmp/tof-buildtools/BuildTools.jar
|
||||
|
||||
ONBUILD ARG BUILDTOOLS_OUTPUT=/plugins
|
||||
ONBUILD COPY *Dockerfile* *plugins.yml /tmp/tof-buildtools/
|
||||
ONBUILD RUN \
|
||||
[ -d /tmp/tof-buildtools ] && \
|
||||
[ $(find /tmp/tof-buildtools -type f -name plugins.yml | wc -l) -gt 0 ] && \
|
||||
java -jar /tmp/tof-buildtools/BuildTools.jar \
|
||||
--config "/tmp/tof-buildtools/plugins.yml" \
|
||||
--configs "plugins.yml" \
|
||||
--dir "/tmp/tof-buildtools/" \
|
||||
--output ${BUILDTOOLS_OUTPUT} && \
|
||||
chown -R minecraft:minecraft ${BUILDTOOLS_OUTPUT} && \
|
||||
rm -fR /tmp/tof-buildtools/ || \
|
||||
true
|
||||
|
||||
COPY mcadmin.jq /usr/share
|
||||
RUN chmod +x /usr/local/bin/*
|
||||
|
||||
VOLUME ["/data","/mods","/config"]
|
||||
COPY server.properties /tmp/server.properties
|
||||
WORKDIR /data
|
||||
|
||||
ENTRYPOINT [ "/start" ]
|
||||
|
||||
ENV UID=1000 GID=1000 \
|
||||
JVM_XX_OPTS="-XX:+UseG1GC" MEMORY="1G" \
|
||||
TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED SPONGEBRANCH=STABLE SPONGEVERSION= FABRICVERSION=LATEST LEVEL=world \
|
||||
PVP=true DIFFICULTY=easy ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
|
||||
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD= MODPACK= MODS= SERVER_PORT=25565 ONLINE_MODE=TRUE CONSOLE=true SERVER_NAME="Dedicated Server" \
|
||||
REPLACE_ENV_VARIABLES="FALSE" ENV_VARIABLE_PREFIX="CFG_"
|
||||
|
||||
COPY start* /
|
||||
RUN dos2unix /start* && chmod +x /start*
|
||||
+3
-1023
File diff suppressed because it is too large.
Load diff
@@ -1,15 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$REPLACE_ENV_VARIABLES" = "TRUE" ]; then
|
||||
echo "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX..."
|
||||
while IFS='=' read -r name value ; do
|
||||
# check if name of env variable matches the prefix
|
||||
# sanity check environment variables to avoid code injections
|
||||
if [[ "$name" = $ENV_VARIABLE_PREFIX* ]] && [[ $value =~ ^[0-9a-zA-Z_:/=?.+\-]*$ ]] && [[ $name =~ ^[0-9a-zA-Z_\-]*$ ]]; then
|
||||
echo "Replacing $name with $value ..."
|
||||
find /data/ -type f \( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" -or -name "*.properties" \) -exec sed -i 's#${'"$name"'}#'"$value"'#g' {} \;
|
||||
fi
|
||||
done < <(env)
|
||||
fi
|
||||
|
||||
exec /start-minecraftFinalSetup $@
|
||||
File renamed without changes.
File renamed without changes.
@@ -6,14 +6,8 @@ shopt -s nullglob
|
||||
export HOME=/data
|
||||
|
||||
if [ ! -e /data/eula.txt ]; then
|
||||
if [ "$EULA" != "" ]; then
|
||||
echo "# Generated via Docker on $(date)" > eula.txt
|
||||
echo "eula=$EULA" >> eula.txt
|
||||
if [ $? != 0 ]; then
|
||||
echo "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}"
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
EULA="${EULA,,}"
|
||||
if [ "$EULA" != "true" ]; then
|
||||
echo ""
|
||||
echo "Please accept the Minecraft EULA at"
|
||||
echo " https://account.mojang.com/documents/minecraft_eula"
|
||||
@@ -22,8 +16,16 @@ if [ ! -e /data/eula.txt ]; then
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "# Generated via Docker on $(date)" > eula.txt
|
||||
echo "eula=$EULA" >> eula.txt
|
||||
if [ $? != 0 ]; then
|
||||
echo "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}"
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'"
|
||||
|
||||
if ! touch /data/.verify_access; then
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
|
||||
function buildSpigotFromSource {
|
||||
echo "Building Spigot $VANILLA_VERSION from source, might take a while, get some coffee"
|
||||
rm -rf /data/temp
|
||||
mkdir /data/temp
|
||||
cd /data/temp
|
||||
|
||||
File renamed without changes.
File renamed without changes.
@@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -u
|
||||
set -eu
|
||||
|
||||
. /start-utils
|
||||
|
||||
export TYPE=FABRIC
|
||||
|
||||
@@ -28,8 +30,9 @@ elif [[ ! -e $FABRIC_INSTALLER ]]; then
|
||||
exit 2
|
||||
fi
|
||||
|
||||
installMarker=".fabric-installed-${FABRIC_VERSION:-manual}"
|
||||
installMarker=".fabric-installed-${VANILLA_VERSION}-${FABRIC_VERSION:-manual}"
|
||||
|
||||
debug Checking for installMarker ${installMarker}
|
||||
if [[ ! -e $installMarker ]]; then
|
||||
if [[ ! -e $FABRIC_INSTALLER ]]; then
|
||||
if [[ -z $FABRIC_INSTALLER_URL ]]; then
|
||||
@@ -46,11 +49,15 @@ if [[ ! -e $installMarker ]]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER"
|
||||
if isDebugging; then
|
||||
debug "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER with mcversion ${VANILLA_VERSION}"
|
||||
else
|
||||
echo "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER"
|
||||
fi
|
||||
tries=3
|
||||
set +e
|
||||
while ((--tries >= 0)); do
|
||||
java -jar $FABRIC_INSTALLER server -version $VANILLA_VERSION -downloadMinecraft
|
||||
java -jar $FABRIC_INSTALLER server -mcversion $VANILLA_VERSION -downloadMinecraft
|
||||
if [[ $? == 0 ]]; then
|
||||
break
|
||||
fi
|
||||
File renamed without changes.
@@ -1,11 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
export SERVER=paper_server.jar
|
||||
if [ ! -f $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
||||
export SERVER=paper_server-${VANILLA_VERSION}.jar
|
||||
if [ ! -f "$SERVER" ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
||||
downloadUrl=${PAPER_DOWNLOAD_URL:-https://papermc.io/api/v1/paper/${VANILLA_VERSION}/latest/download}
|
||||
echo "Downloading Paper $VANILLA_VERSION from $downloadUrl ..."
|
||||
curl -fsSL -o $SERVER "$downloadUrl"
|
||||
if [ ! -f $SERVER ]; then
|
||||
curl -fsSL -o "$SERVER" "$downloadUrl"
|
||||
if [ ! -f "$SERVER" ]; then
|
||||
echo "ERROR: failed to download from $downloadUrl (status=$?)"
|
||||
exit 3
|
||||
fi
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,5 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
. /start-utils
|
||||
|
||||
# CURSE_URL_BASE used in manifest downloads below
|
||||
CURSE_URL_BASE=${CURSE_URL_BASE:-https://minecraft.curseforge.com/projects}
|
||||
|
||||
@@ -74,10 +78,20 @@ done
|
||||
fi
|
||||
|
||||
if [[ "$MANIFEST" ]]; then
|
||||
EFFECTIVE_MANIFEST_URL=$(curl -Ls -o /dev/null -w %{url_effective} $MANIFEST)
|
||||
case "X$EFFECTIVE_MANIFEST_URL" in
|
||||
if [[ -e "$MANIFEST" ]]; then
|
||||
EFFECTIVE_MANIFEST_FILE=$MANIFEST
|
||||
elif isURL "$MANIFEST"; then
|
||||
EFFECTIVE_MANIFEST_FILE=/tmp/manifest.json
|
||||
EFFECTIVE_MANIFEST_URL=$(curl -Ls -o /dev/null -w %{url_effective} $MANIFEST)
|
||||
curl -Ls -o $EFFECTIVE_MANIFEST_FILE "$EFFECTIVE_MANIFEST_URL"
|
||||
else
|
||||
echo "MANIFEST='$MANIFEST' is not a valid manifest url or location"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
case "X$EFFECTIVE_MANIFEST_FILE" in
|
||||
X*.json)
|
||||
if [ -f "${EFFECTIVE_MANIFEST_URL}" ]; then
|
||||
if [ -f "${EFFECTIVE_MANIFEST_FILE}" ]; then
|
||||
MOD_DIR=${FTB_BASE_DIR:-/data}/mods
|
||||
if [ ! -d "$MOD_DIR" ]
|
||||
then
|
||||
@@ -85,11 +99,12 @@ case "X$EFFECTIVE_MANIFEST_URL" in
|
||||
mkdir -p "$MOD_DIR"
|
||||
fi
|
||||
echo "Starting manifest download..."
|
||||
cat "${EFFECTIVE_MANIFEST_URL}" | jq -r '.files[] | (.projectID|tostring) + " " + (.fileID|tostring)'| while read -r p f
|
||||
cat "${EFFECTIVE_MANIFEST_FILE}" | jq -r '.files[] | (.projectID|tostring) + " " + (.fileID|tostring)'| while read -r p f
|
||||
do
|
||||
if [ ! -f $MOD_DIR/${p}_${f}.jar ]
|
||||
then
|
||||
url="${CURSE_URL_BASE}/${p}/files/${f}/download"
|
||||
redirect_url="$(curl -Ls -o /dev/null -w %{url_effective} ${CURSE_URL_BASE}/${p})"
|
||||
url="$redirect_url/download/${f}/file"
|
||||
echo Downloading curseforge mod $url
|
||||
# Manifest usually doesn't have mod names. Using id should be fine, tho
|
||||
curl -sSL "${url}" -o $MOD_DIR/${p}_${f}.jar
|
||||
@@ -105,4 +120,25 @@ case "X$EFFECTIVE_MANIFEST_URL" in
|
||||
esac
|
||||
fi
|
||||
|
||||
if [[ "${GENERIC_PACK}" ]]; then
|
||||
if isURL "${GENERIC_PACK}"; then
|
||||
generic_pack_url=${GENERIC_PACK}
|
||||
GENERIC_PACK=/tmp/$(basename ${generic_pack_url})
|
||||
echo "Downloading generic pack from ${generic_pack_url} ..."
|
||||
curl -fsSL -o ${GENERIC_PACK} ${generic_pack_url}
|
||||
fi
|
||||
|
||||
sum_file=/data/.generic_pack.sum
|
||||
if ! sha256sum -c ${sum_file} -s 2> /dev/null; then
|
||||
base_dir=/tmp/generic_pack_base
|
||||
mkdir -p ${base_dir}
|
||||
unzip -q -d ${base_dir} ${GENERIC_PACK}
|
||||
depth=$(( ${GENERIC_PACK_STRIP_DIRS:-1} + 1 ))
|
||||
echo "Applying generic pack, stripping $(( depth - 1 )) level ..."
|
||||
find ${base_dir} -type d -mindepth $depth -maxdepth $depth -exec cp -r {} /data/ +
|
||||
rm -rf ${base_dir}
|
||||
sha256sum ${GENERIC_PACK} > ${sum_file}
|
||||
fi
|
||||
fi
|
||||
|
||||
exec /start-finalSetup03Modconfig $@
|
||||
File renamed without changes.
+3
@@ -49,6 +49,7 @@ function customizeServerProps {
|
||||
setServerProp "spawn-animals" "$SPAWN_ANIMALS"
|
||||
setServerProp "spawn-monsters" "$SPAWN_MONSTERS"
|
||||
setServerProp "spawn-npcs" "$SPAWN_NPCS"
|
||||
setServerProp "spawn-protection" "$SPAWN_PROTECTION"
|
||||
setServerProp "generate-structures" "$GENERATE_STRUCTURES"
|
||||
setServerProp "view-distance" "$VIEW_DISTANCE"
|
||||
setServerProp "hardcore" "$HARDCORE"
|
||||
@@ -70,6 +71,8 @@ function customizeServerProps {
|
||||
setServerProp "online-mode" "$ONLINE_MODE"
|
||||
setServerProp "allow-flight" "$ALLOW_FLIGHT"
|
||||
setServerProp "level-type" "${LEVEL_TYPE^^}"
|
||||
setServerProp "resource-pack" "$RESOURCE_PACK"
|
||||
setServerProp "resource-pack-sha1" "$RESOURCE_PACK_SHA1"
|
||||
|
||||
if [ -n "$DIFFICULTY" ]; then
|
||||
case $DIFFICULTY in
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "${REPLACE_ENV_VARIABLES^^}" = "TRUE" ]; then
|
||||
echo "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX..."
|
||||
while IFS='=' read -r name value ; do
|
||||
# check if name of env variable matches the prefix
|
||||
# sanity check environment variables to avoid code injections
|
||||
if [[ "$name" = $ENV_VARIABLE_PREFIX* ]] \
|
||||
&& [[ $value =~ ^[0-9a-zA-Z_:/=?.+\-]*$ ]] \
|
||||
&& [[ $name =~ ^[0-9a-zA-Z_\-]*$ ]]; then
|
||||
echo "Replacing $name with $value ..."
|
||||
find /data/ -type f \
|
||||
\( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \
|
||||
-or -name "*.conf" -or -name "*.properties" \) \
|
||||
-exec sed -i 's#${'"$name"'}#'"$value"'#g' {} \;
|
||||
fi
|
||||
done < <(env)
|
||||
fi
|
||||
|
||||
exec /start-minecraftFinalSetup $@
|
||||
@@ -2,14 +2,16 @@
|
||||
|
||||
. /start-utils
|
||||
|
||||
if [ -n "$OPS" -a ! -e ops.txt.converted ]; then
|
||||
echo "Setting ops"
|
||||
echo $OPS | awk -v RS=, '{print}' >> ops.txt
|
||||
if [ -n "$OPS" ]; then
|
||||
echo "Setting/adding ops"
|
||||
rm -rf ops.txt.converted
|
||||
echo $OPS | awk -v RS=, '{print}' > ops.txt
|
||||
fi
|
||||
|
||||
if [ -n "$WHITELIST" -a ! -e white-list.txt.converted ]; then
|
||||
if [ -n "$WHITELIST" ]; then
|
||||
echo "Setting whitelist"
|
||||
echo $WHITELIST | awk -v RS=, '{print}' >> white-list.txt
|
||||
rm -rf white-list.txt.converted
|
||||
echo $WHITELIST | awk -v RS=, '{print}' > white-list.txt
|
||||
fi
|
||||
|
||||
if [ -n "$ICON" -a ! -e server-icon.png ]; then
|
||||
@@ -100,12 +102,12 @@ if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
|
||||
cat > "${FTB_DIR}/settings-local.sh" <<EOF
|
||||
export MIN_RAM="${INIT_MEMORY}"
|
||||
export MAX_RAM="${MAX_MEMORY}"
|
||||
export JAVA_PARAMETERS="-Xms${INIT_MEMORY} $expandedDOpts"
|
||||
export JAVA_PARAMETERS="${JVM_XX_OPTS} -Xms${INIT_MEMORY} ${JVM_OPTS} $expandedDOpts"
|
||||
EOF
|
||||
|
||||
# patch CurseForge cfg file, if present
|
||||
if [ -f "${FTB_DIR}/settings.cfg" ]; then
|
||||
sed -i "/MAX_RAM=.*/ c MAX_RAM=${MAX_MEMORY};" "${FTB_DIR}/settings.cfg"
|
||||
sed -i "s/MAX_RAM=[^;]*/MAX_RAM=${MAX_MEMORY}/" "${FTB_DIR}/settings.cfg"
|
||||
fi
|
||||
|
||||
cd "${FTB_DIR}"
|
||||
@@ -3,7 +3,7 @@
|
||||
function isURL {
|
||||
local value=$1
|
||||
|
||||
if [[ ${value:0:8} == "https://" || ${value:0:7} = "http://" ]]; then
|
||||
if [[ ${value:0:8} == "https://" || ${value:0:7} == "http://" ]]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -28,7 +28,7 @@ function isTrue {
|
||||
}
|
||||
|
||||
function isDebugging {
|
||||
if [[ ${DEBUG^^} = TRUE ]]; then
|
||||
if [[ -v DEBUG ]] && [[ ${DEBUG^^} = TRUE ]]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -39,4 +39,4 @@ function debug {
|
||||
if isDebugging; then
|
||||
echo "DEBUG: $*"
|
||||
fi
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
FROM openjdk:8-jre
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
ENV TITAN_VERSION 0.5.4
|
||||
|
||||
ADD http://s3.thinkaurelius.com/downloads/titan/titan-$TITAN_VERSION-hadoop2.zip /tmp/titan.zip
|
||||
RUN unzip -q /tmp/titan.zip -d /opt && \
|
||||
rm /tmp/titan.zip
|
||||
|
||||
ENV TITAN_HOME /opt/titan-$TITAN_VERSION-hadoop2
|
||||
WORKDIR $TITAN_HOME
|
||||
|
||||
VOLUME ["/conf","/data"]
|
||||
ADD start-gremlin.sh /opt/start-gremlin.sh
|
||||
|
||||
CMD ["/opt/start-gremlin.sh"]
|
||||
@@ -1,63 +0,0 @@
|
||||
Runs the Gremlin console from the Titan Graph Database's "all" distribution.
|
||||
|
||||
# Basic Usage
|
||||
|
||||
To start the Gremlin console with the default configuration files available:
|
||||
|
||||
docker run -it itzg/titan-gremlin
|
||||
|
||||
In order to adjust or further define property files to use within Gremlin,
|
||||
attach a host directory to the container's `/conf` such as
|
||||
|
||||
docker run -it -v $(pwd)/conf:/conf itzg/titan-gremlin
|
||||
|
||||
After running once your host directory will be populated with the distribution-default
|
||||
configuration files. Modify those or add to them and they will be available during
|
||||
the next time you (re)start your container.
|
||||
|
||||
# Connecting to Cassandra and Elasticsearch Containers
|
||||
|
||||
First start containers for Cassandra and Elasticsearch (pre-2.x),
|
||||
where the `--name` you choose can be arbitrary or left off to use a generated name.
|
||||
|
||||
docker run -d --name gremlin-cass itzg/cassandra
|
||||
docker run -d --name gremlin-es itzg/elasticsearch:1.x
|
||||
|
||||
Now start Gremlin with networking links to those containers with the aliases
|
||||
|
||||
* `--link <container>:cass`
|
||||
* `--link <container>:es`
|
||||
|
||||
such as
|
||||
|
||||
docker run -it --rm --link gremlin-cass:cass --link gremlin-es:es itzg/titan-gremlin
|
||||
|
||||
and with that you can follow the
|
||||
[Graph of the Gods example](http://s3.thinkaurelius.com/docs/titan/current/getting-started.html), such as
|
||||
|
||||
gremlin> GraphOfTheGodsFactory.load(g)
|
||||
gremlin> saturn = g.V.has('name','saturn').next()
|
||||
==>v[256]
|
||||
gremlin> saturn.map()
|
||||
==>name=saturn
|
||||
==>age=10000
|
||||
gremlin> saturn.in('father').in('father').name
|
||||
==>hercules
|
||||
|
||||
# Running and Connecting with Docker Compose
|
||||
|
||||
Create the following Compose content as the file `docker-compose.yml` and in
|
||||
that directory invoke `docker-compose run titan` to run the Gremlin shell
|
||||
with the supporting Elasticsearch and Cassandra containers.
|
||||
|
||||
```
|
||||
titan:
|
||||
image: itzg/titan-gremlin
|
||||
links:
|
||||
- cass
|
||||
- es
|
||||
cass:
|
||||
image: itzg/cassandra
|
||||
es:
|
||||
image: itzg/elasticsearch:1.x
|
||||
```
|
||||
@@ -1,64 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
args=
|
||||
|
||||
if [ $(ls /conf|wc -l) = 0 ]; then
|
||||
cp -r $TITAN_HOME/conf/* /conf
|
||||
fi
|
||||
|
||||
rm -f /tmp/titan.properties
|
||||
|
||||
if [ -n "$CASS_PORT_9160_TCP_ADDR" ]; then
|
||||
|
||||
shortcut=/tmp/titan.properties
|
||||
cat >> /tmp/titan.properties <<END
|
||||
storage.backend=cassandra
|
||||
storage.hostname=$CASS_PORT_9160_TCP_ADDR
|
||||
END
|
||||
|
||||
elif [ -n "$CASS_ADDR" ]; then
|
||||
|
||||
shortcut=/tmp/titan.properties
|
||||
cat >> /tmp/titan.properties <<END
|
||||
storage.backend=cassandra
|
||||
storage.hostname=$CASS_ADDR
|
||||
END
|
||||
|
||||
fi
|
||||
|
||||
|
||||
esAddr=${ES_ENV_PUBLISH_AS:-${ES_PORT_9300_TCP_ADDR}}
|
||||
|
||||
if [ -n "$ES_CLUSTER" -o -n "$esAddr" ]; then
|
||||
shortcut=/tmp/titan.properties
|
||||
cat >> /tmp/titan.properties <<END
|
||||
index.search.backend=elasticsearch
|
||||
index.search.elasticsearch.client-only=true
|
||||
END
|
||||
|
||||
if [ -n "$ES_CLUSTER" ]; then
|
||||
cat >> /tmp/titan.properties <<END
|
||||
index.search.elasticsearch.ext.cluster.name=$ES_CLUSTER
|
||||
END
|
||||
fi
|
||||
if [ -n "$esAddr" ]; then
|
||||
# strip off the port spec, if present
|
||||
esAddr=$(echo $esAddr | cut -d: -f1)
|
||||
cat >> /tmp/titan.properties <<END
|
||||
index.search.hostname=$esAddr
|
||||
END
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ -n "$shortcut" ]; then
|
||||
cat > /tmp/init.groovy <<END
|
||||
g = TitanFactory.open('$shortcut')
|
||||
println 'The graph \'g\' was opened using $shortcut'
|
||||
END
|
||||
args="$args /tmp/init.groovy"
|
||||
fi
|
||||
|
||||
# Allow a little extra time for Cassandra to be ready
|
||||
sleep 1
|
||||
exec $TITAN_HOME/bin/gremlin.sh $args
|
||||
@@ -1,54 +0,0 @@
|
||||
FROM itzg/ubuntu-openjdk-7
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
ENV APT_GET_UPDATE 2014-07-19
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y wget unzip
|
||||
|
||||
ENV TITAN_VER 0.4.4
|
||||
ENV TITAN_STORAGE all
|
||||
ENV REXSTER_VER 2.4.0
|
||||
|
||||
RUN wget -O /tmp/titan.zip http://s3.thinkaurelius.com/downloads/titan/titan-$TITAN_STORAGE-$TITAN_VER.zip
|
||||
RUN wget -O /tmp/rexster.zip http://tinkerpop.com/downloads/rexster/rexster-server-$REXSTER_VER.zip
|
||||
|
||||
WORKDIR /opt
|
||||
|
||||
RUN unzip /tmp/titan.zip
|
||||
RUN rm /tmp/titan.zip
|
||||
|
||||
RUN unzip /tmp/rexster.zip
|
||||
RUN rm /tmp/rexster.zip
|
||||
|
||||
RUN ln -s titan-$TITAN_STORAGE-$TITAN_VER titan
|
||||
RUN ln -s rexster-server-$REXSTER_VER rexster-server
|
||||
|
||||
RUN mkdir /opt/rexster-server/ext/titan
|
||||
RUN ln -s /opt/titan-$TITAN_STORAGE-$TITAN_VER/lib/* /opt/rexster-server/ext/titan
|
||||
RUN wget -O /opt/rexster-server/ext/titan/titan-rexter-$TITAN_VER.jar \
|
||||
http://central.maven.org/maven2/com/thinkaurelius/titan/titan-rexster/$TITAN_VER/titan-rexster-$TITAN_VER.jar
|
||||
|
||||
# Clean up distro area
|
||||
RUN rm /opt/rexster-server/ext/titan/log4j* /opt/rexster-server/ext/titan/slf4j*
|
||||
RUN rm /opt/rexster-server/lib/lucene-core*
|
||||
|
||||
ADD gremlin /usr/local/bin/gremlin
|
||||
ADD rexster /usr/local/bin/rexster
|
||||
|
||||
WORKDIR titan
|
||||
|
||||
ADD titan.properties /opt/titan/conf/titan.properties
|
||||
ADD init-graph-storage.groovy /tmp/init-graph-storage.groovy
|
||||
|
||||
VOLUME ["/data", "/config", "/scripts"]
|
||||
RUN ln -s /data /opt/titan/db
|
||||
|
||||
RUN gremlin -e /tmp/init-graph-storage.groovy && rm /tmp/init-graph-storage.groovy
|
||||
|
||||
EXPOSE 8182 8184
|
||||
|
||||
ADD rexster.xml /config/rexster.xml
|
||||
|
||||
CMD ["/usr/local/bin/rexster", "-s", "-c", "/config/rexster.xml"]
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
/opt/titan/bin/gremlin.sh $*
|
||||
@@ -1,12 +0,0 @@
|
||||
import com.thinkaurelius.titan.core.TitanFactory
|
||||
import com.thinkaurelius.titan.core.TitanGraph
|
||||
import com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration
|
||||
import org.apache.commons.configuration.BaseConfiguration
|
||||
import org.apache.commons.configuration.Configuration
|
||||
|
||||
// Setup a blank one
|
||||
|
||||
TitanGraph g = TitanFactory.open('conf/titan.properties')
|
||||
g.shutdown()
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -n "$PUBLISH_ADDR" ]; then
|
||||
echo "Enabling Doghouse access at http://$PUBLISH_ADDR:8182/doghouse"
|
||||
sed -i "s#<base-uri>.*</base-uri>#<base-uri>http://$PUBLISH_ADDR</base-uri>#" /config/rexster.xml
|
||||
fi
|
||||
|
||||
if [ -n "$SCRIPT" ]; then
|
||||
echo "Running Gremlin script $SCRIPT from /scripts..."
|
||||
gremlin -e /scripts/$SCRIPT
|
||||
fi
|
||||
|
||||
echo "Starting Rexster..."
|
||||
/opt/rexster-server/bin/rexster.sh $*
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rexster>
|
||||
<http>
|
||||
<base-uri>http://localhost</base-uri>
|
||||
</http>
|
||||
<graphs>
|
||||
<graph>
|
||||
<graph-name>titan</graph-name>
|
||||
<graph-type>com.thinkaurelius.titan.tinkerpop.rexster.TitanGraphConfiguration</graph-type>
|
||||
<graph-location>/data/persistit</graph-location>
|
||||
<graph-read-only>false</graph-read-only>
|
||||
<properties>
|
||||
<storage.backend>persistit</storage.backend>
|
||||
<storage.directory>/data/persistit</storage.directory>
|
||||
<storage.buffercount>5000</storage.buffercount>
|
||||
<storage.index.search.backend>elasticsearch</storage.index.search.backend>
|
||||
<storage.index.search.local-mode>true</storage.index.search.local-mode>
|
||||
<storage.index.search.client-only>false</storage.index.search.client-only>
|
||||
<storage.index.search.directory>/data/es</storage.index.search.directory>
|
||||
</properties>
|
||||
<extensions>
|
||||
<allows>
|
||||
<allow>tp:gremlin</allow>
|
||||
</allows>
|
||||
</extensions>
|
||||
</graph>
|
||||
</graphs>
|
||||
</rexster>
|
||||
@@ -1,7 +0,0 @@
|
||||
import com.thinkaurelius.titan.core.TitanFactory
|
||||
import com.thinkaurelius.titan.example.GraphOfTheGodsFactory
|
||||
|
||||
def g = TitanFactory.open('conf/titan.properties')
|
||||
GraphOfTheGodsFactory.load(g)
|
||||
|
||||
g.shutdown()
|
||||
@@ -1,8 +0,0 @@
|
||||
storage.backend=persistit
|
||||
storage.directory=/data/persistit
|
||||
storage.buffercount=5000
|
||||
|
||||
storage.index.search.backend=elasticsearch
|
||||
storage.index.search.local-mode=true
|
||||
storage.index.search.client-only=false
|
||||
storage.index.search.directory=/data/es
|
||||
@@ -1,11 +0,0 @@
|
||||
FROM ubuntu:trusty
|
||||
|
||||
LABEL maintainer "itzg"
|
||||
|
||||
ENV APT_GET_UPDATE 2015-10-29
|
||||
RUN apt-get update
|
||||
RUN DEBIAN_FRONTEND=noninteractive \
|
||||
apt-get -q -y install openjdk-7-jre-headless wget unzip \
|
||||
&& apt-get clean
|
||||
|
||||
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
|
||||
@@ -1 +0,0 @@
|
||||
Provides the latest OpenJDK JRE on top of Ubuntu Trusty (14.04).
|
||||
Reference in new issue
Block a user