diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..3fbb8c079e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +/docs +/handbook +/tools \ No newline at end of file diff --git a/.gitignore b/.gitignore index 99c411b1fa..d13e4644ed 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .idea/ *.iml /target +/docker-db-data # build files diff --git a/Dockerfile b/Dockerfile index d37cf08b8e..b24fea224d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,20 @@ -# Docker support, thanks to xinyifly +# Initial Docker support thanks to xinyifly -FROM openjdk:8u171-jdk-alpine -RUN apk -U add tini -WORKDIR /mnt +# +# Build stage +# +FROM maven:3.6.3-jdk-8 AS build +COPY src /home/app/src +COPY pom.xml /home/app +RUN mvn -f /home/app/pom.xml clean package + +# +# Package stage +# +FROM openjdk:8 +COPY --from=build /home/app/target/Cosmic.jar /usr/local/lib/Cosmic.jar COPY ./ ./ -RUN sh ./posix-compile.sh -ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.6.0/wait /wait -RUN chmod +x /wait - EXPOSE 8484 7575 7576 7577 -ENTRYPOINT ["tini", "--"] -CMD /wait && sh ./posix-launch.sh +ENTRYPOINT ["java", "-jar", "/usr/local/lib/Cosmic.jar"] + + diff --git a/config.yaml b/config.yaml index b53999d5b0..4caedb49ea 100644 --- a/config.yaml +++ b/config.yaml @@ -162,7 +162,8 @@ server: USE_THREAD_TRACKER: false #[SEVERE] This deadlock auditing thing will bloat the memory as fast as the time frame one takes to lose track of a raindrop on a tempesting day. Only for debugging purposes. #Database Configuration - DB_URL: "jdbc:mysql://localhost:3306/cosmic" + DB_URL_FORMAT: "jdbc:mysql://%s:3306/cosmic" + DB_HOST: "localhost" DB_USER: "cosmic_server" DB_PASS: "snailshell" INIT_CONNECTION_POOL_TIMEOUT: 60 # Seconds diff --git a/docker-compose.yml b/docker-compose.yml index eb87edac6b..fc7334dedd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,22 @@ version: '3' services: maplestory: - network_mode: "host" build: . depends_on: - db + ports: + - "8484:8484" + - "7575-7577:7575-7577" environment: - WAIT_HOSTS: localhost:3306 + DB_HOST: "db" db: - network_mode: "host" - image: mysql:5.6 + image: mysql:8.0.23 environment: - MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + MYSQL_RANDOM_ROOT_PASSWORD: "true" MYSQL_DATABASE: "cosmic" - MYSQL_USER: "root" - MYSQL_PASSWORD: "" + MYSQL_USER: "cosmic_server" + MYSQL_PASSWORD: "snailshell" volumes: + - ./docker-db-data:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d diff --git a/sql/db_database.sql b/sql/1-db_database.sql similarity index 100% rename from sql/db_database.sql rename to sql/1-db_database.sql diff --git a/sql/db_drops.sql b/sql/2-db_drops.sql similarity index 100% rename from sql/db_drops.sql rename to sql/2-db_drops.sql diff --git a/sql/db_shopupdate.sql b/sql/3-db_shopupdate.sql similarity index 100% rename from sql/db_shopupdate.sql rename to sql/3-db_shopupdate.sql diff --git a/src/main/java/config/ServerConfig.java b/src/main/java/config/ServerConfig.java index df37b3d8b0..721c577e16 100644 --- a/src/main/java/config/ServerConfig.java +++ b/src/main/java/config/ServerConfig.java @@ -5,7 +5,8 @@ public class ServerConfig { public boolean USE_THREAD_TRACKER; //Database Configuration - public String DB_URL; + public String DB_URL_FORMAT; + public String DB_HOST; public String DB_USER; public String DB_PASS; public int INIT_CONNECTION_POOL_TIMEOUT; diff --git a/src/main/java/tools/DatabaseConnection.java b/src/main/java/tools/DatabaseConnection.java index 3901a3ab65..875bf7ef44 100644 --- a/src/main/java/tools/DatabaseConnection.java +++ b/src/main/java/tools/DatabaseConnection.java @@ -27,10 +27,19 @@ public class DatabaseConnection { return dataSource.getConnection(); } + private static String getDbUrl() { + // Environment variables override what's defined in the config file + // This feature is used for the Docker support + String hostOverride = System.getenv("DB_HOST"); + String host = hostOverride != null ? hostOverride : YamlConfig.config.server.DB_HOST; + String dbUrl = String.format(YamlConfig.config.server.DB_URL_FORMAT, host); + return dbUrl; + } + private static HikariConfig getConfig() { HikariConfig config = new HikariConfig(); - config.setJdbcUrl(YamlConfig.config.server.DB_URL); + config.setJdbcUrl(getDbUrl()); config.setUsername(YamlConfig.config.server.DB_USER); config.setPassword(YamlConfig.config.server.DB_PASS);