From 5e81b718a38ce548efbd71f0a25c4041d116ec34 Mon Sep 17 00:00:00 2001 From: Exynox Date: Sun, 2 Jun 2024 21:49:40 +0300 Subject: [PATCH] Compose file now uses .env variables, added mysql healtcheck --- .env.example | 22 ++++++++ .gitignore | 3 ++ config/auth.txt | 18 ------- config/ch1/first.txt | 27 ---------- config/ch1/game1.txt | 26 ---------- config/ch1/game2.txt | 26 ---------- config/db.txt | 19 ------- config/game99.txt | 26 ---------- docker-compose.yml | 120 +++++++++++++++++++++++++++++++++++-------- 9 files changed, 124 insertions(+), 163 deletions(-) create mode 100644 .env.example delete mode 100644 config/auth.txt delete mode 100644 config/ch1/first.txt delete mode 100644 config/ch1/game1.txt delete mode 100644 config/ch1/game2.txt delete mode 100644 config/db.txt delete mode 100644 config/game99.txt diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ccb4a0d --- /dev/null +++ b/.env.example @@ -0,0 +1,22 @@ +# MySQL settings +MYSQL_HOST=mysql +MYSQL_USER=root +MYSQL_PASSWORD=metin2 +MYSQL_PORT=3306 +MYSQL_DB_ACCOUNT=account +MYSQL_DB_PLAYER=player +MYSQL_DB_COMMON=common +MYSQL_DB_LOG=log + +# Global settings +TEST_SERVER=0 + +# DBCache settings +DB_ADDR=db +DB_PORT=15000 + +# Game settings +PUBLIC_IP=127.0.0.1 +GAME_IMAGE=git.old-metin2.com/metin2/server:nightly +GAME_MAX_LEVEL=105 +GAME_MALL_URL=metin2.test/mall diff --git a/.gitignore b/.gitignore index c204181..221cd02 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ +# Working copy of .env file +.env + # Storage directory storage/ diff --git a/config/auth.txt b/config/auth.txt deleted file mode 100644 index fd81b7b..0000000 --- a/config/auth.txt +++ /dev/null @@ -1,18 +0,0 @@ -CHANNEL: 1 -HOSTNAME: auth -PUBLIC_IP: 127.0.0.1 -PORT: 11000 -P2P_PORT: 12000 -DB_ADDR: db -DB_PORT: 15000 -PLAYER_SQL: mysql root metin2 account -COMMON_SQL: mysql root metin2 common -LOG_SQL: mysql root metin2 log -TABLE_POSTFIX: -PASSES_PER_SEC: 25 -PING_EVENT_SECOND_CYCLE: 180 -ADMINPAGE_PASSWORD: metin2adminpass -ADMINPAGE_IP: 127.0.0.1 -AUTH_SERVER: master -TRAFFIC_PROFILE: -TEST_SERVER: 0 diff --git a/config/ch1/first.txt b/config/ch1/first.txt deleted file mode 100644 index b9f24f2..0000000 --- a/config/ch1/first.txt +++ /dev/null @@ -1,27 +0,0 @@ -CHANNEL: 1 -HOSTNAME: ch1_first -PUBLIC_IP: 127.0.0.1 -PORT: 13000 -P2P_PORT: 14000 -DB_ADDR: db -DB_PORT: 15000 -MAP_ALLOW: 1 4 5 6 3 23 43 112 107 67 68 72 208 302 304 -PLAYER_SQL: mysql root metin2 player -COMMON_SQL: mysql root metin2 common -LOG_SQL: mysql root metin2 log -TABLE_POSTFIX: -PASSES_PER_SEC: 25 -SAVE_EVENT_SECOND_CYCLE: 180 -PING_EVENT_SECOND_CYCLE: 180 -VIEW_RANGE: 8000 -CHECK_MULTIHACK: 0 -ADMINPAGE_PASSWORD: metin2adminpass -ADMINPAGE_IP: 127.0.0.1 -SPEEDHACK_LIMIT_COUNT: 300 -SPEEDHACK_LIMIT_BONUS: 80 -PK_PROTECT_LEVEL: 15 -MALL_URL: google.com -TRAFFIC_PROFILE: -TEST_SERVER: 0 -MAX_LEVEL: 105 -MARK_SERVER: 1 \ No newline at end of file diff --git a/config/ch1/game1.txt b/config/ch1/game1.txt deleted file mode 100644 index 68a7411..0000000 --- a/config/ch1/game1.txt +++ /dev/null @@ -1,26 +0,0 @@ -CHANNEL: 1 -HOSTNAME: ch1_game1 -PUBLIC_IP: 127.0.0.1 -PORT: 13001 -P2P_PORT: 14001 -DB_ADDR: db -DB_PORT: 15000 -MAP_ALLOW: 21 24 25 26 108 61 63 69 70 73 216 217 303 -PLAYER_SQL: mysql root metin2 player -COMMON_SQL: mysql root metin2 common -LOG_SQL: mysql root metin2 log -TABLE_POSTFIX: -PASSES_PER_SEC: 25 -SAVE_EVENT_SECOND_CYCLE: 180 -PING_EVENT_SECOND_CYCLE: 180 -VIEW_RANGE: 8000 -CHECK_MULTIHACK: 0 -ADMINPAGE_PASSWORD: metin2adminpass -ADMINPAGE_IP: 127.0.0.1 -SPEEDHACK_LIMIT_COUNT: 300 -SPEEDHACK_LIMIT_BONUS: 80 -PK_PROTECT_LEVEL: 15 -MALL_URL: google.com -TRAFFIC_PROFILE: -TEST_SERVER: 0 -MAX_LEVEL: 105 \ No newline at end of file diff --git a/config/ch1/game2.txt b/config/ch1/game2.txt deleted file mode 100644 index 8af78d0..0000000 --- a/config/ch1/game2.txt +++ /dev/null @@ -1,26 +0,0 @@ -CHANNEL: 1 -HOSTNAME: ch1_game2 -PUBLIC_IP: 127.0.0.1 -PORT: 13002 -P2P_PORT: 14002 -DB_ADDR: db -DB_PORT: 15000 -MAP_ALLOW: 41 44 45 46 109 62 64 65 66 71 104 301 351 -PLAYER_SQL: mysql root metin2 player -COMMON_SQL: mysql root metin2 common -LOG_SQL: mysql root metin2 log -TABLE_POSTFIX: -PASSES_PER_SEC: 25 -SAVE_EVENT_SECOND_CYCLE: 180 -PING_EVENT_SECOND_CYCLE: 180 -VIEW_RANGE: 8000 -CHECK_MULTIHACK: 0 -ADMINPAGE_PASSWORD: metin2adminpass -ADMINPAGE_IP: 127.0.0.1 -SPEEDHACK_LIMIT_COUNT: 300 -SPEEDHACK_LIMIT_BONUS: 80 -PK_PROTECT_LEVEL: 15 -MALL_URL: google.com -TRAFFIC_PROFILE: -TEST_SERVER: 0 -MAX_LEVEL: 105 \ No newline at end of file diff --git a/config/db.txt b/config/db.txt deleted file mode 100644 index 3f1f00c..0000000 --- a/config/db.txt +++ /dev/null @@ -1,19 +0,0 @@ -WELCOME_MSG = "DB Server has been started" - -SQL_ACCOUNT = "mysql account root metin2 0" -SQL_PLAYER = "mysql player root metin2 0" -SQL_COMMON = "mysql common root metin2 0" -SQL_HOTBACKUP = "mysql hotbackup root metin2 0" - -TABLE_POSTFIX = "" - -BIND_PORT = 15000 -DB_SLEEP_MSEC = 10 -CLIENT_HEART_FPS = 10 -HASH_PLAYER_LIFE_SEC = 600 -BACKUP_LIMIT_SEC = 3600 -PLAYER_ID_START = 100 -PLAYER_DELETE_LEVEL_LIMIT = 70 - -ITEM_ID_RANGE = 10000001 20000000 -TEST_SERVER = 0 diff --git a/config/game99.txt b/config/game99.txt deleted file mode 100644 index 52bb5d5..0000000 --- a/config/game99.txt +++ /dev/null @@ -1,26 +0,0 @@ -CHANNEL: 99 -HOSTNAME: game99 -PUBLIC_IP: 127.0.0.1 -PORT: 13099 -P2P_PORT: 14099 -DB_ADDR: db -DB_PORT: 15000 -MAP_ALLOW: 113 81 100 101 103 105 110 111 114 118 119 120 121 122 123 124 125 126 127 128 181 182 183 200 -PLAYER_SQL: mysql root metin2 player -COMMON_SQL: mysql root metin2 common -LOG_SQL: mysql root metin2 log -TABLE_POSTFIX: -PASSES_PER_SEC: 25 -SAVE_EVENT_SECOND_CYCLE: 180 -PING_EVENT_SECOND_CYCLE: 180 -VIEW_RANGE: 8000 -CHECK_MULTIHACK: 0 -ADMINPAGE_PASSWORD: metin2adminpass -ADMINPAGE_IP: 127.0.0.1 -SPEEDHACK_LIMIT_COUNT: 300 -SPEEDHACK_LIMIT_BONUS: 80 -PK_PROTECT_LEVEL: 15 -MALL_URL: google.com -TRAFFIC_PROFILE: -TEST_SERVER: 0 -MAX_LEVEL: 105 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 5b38161..8c43eae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,28 @@ -version: '3.3' +x-environment: + &common-environment + MYSQL_HOST: ${MYSQL_HOST} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + MYSQL_PORT: ${MYSQL_PORT} + MYSQL_DB_ACCOUNT: ${MYSQL_DB_ACCOUNT} + MYSQL_DB_PLAYER: ${MYSQL_DB_PLAYER} + MYSQL_DB_COMMON: ${MYSQL_DB_COMMON} + MYSQL_DB_LOG: ${MYSQL_DB_LOG} + + TEST_SERVER: ${TEST_SERVER} + + DB_ADDR: ${DB_ADDR} + DB_PORT: ${DB_PORT} + + PUBLIC_IP: ${PUBLIC_IP} + GAME_MAX_LEVEL: ${GAME_MAX_LEVEL} + GAME_MALL_URL: ${GAME_MALL_URL} + services: # MySQL Database mysql: image: mysql:5.5 - restart: always + restart: on-failure environment: # Password for root access MYSQL_ROOT_PASSWORD: 'metin2' @@ -13,22 +32,39 @@ services: - 3306 volumes: - ./storage/database/:/var/lib/mysql/ + healthcheck: + #test: ["CMD", "mysql", "-u", "${MYSQL_USER}", "--password", "${MYSQL_PASSWORD}", "-e", "USE ${MYSQL_DB_ACCOUNT};"] + test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ] + interval: 10s + timeout: 5s + retries: 5 # DBCache Server db: - image: metin2/server:test - restart: always + image: ${GAME_IMAGE} + restart: on-failure + environment: *common-environment expose: - - 15000 + - ${DB_PORT} command: db volumes: - - ./config/db.txt:/app/conf.txt - ./storage/log/db/:/app/log/ + depends_on: + mysql: + condition: service_healthy # Auth server auth: - image: metin2/server:test - restart: always + image: ${GAME_IMAGE} + restart: on-failure + environment: + <<: *common-environment + MYSQL_DB_PLAYER: ${MYSQL_DB_ACCOUNT} + GAME_HOSTNAME: auth + GAME_CHANNEL: 1 + GAME_AUTH_SERVER: master + GAME_PORT: 11000 + GAME_P2P_PORT: 12000 expose: - 11000 - 12000 @@ -36,13 +72,23 @@ services: - '11000:11000' command: game volumes: - - ./config/auth.txt:/app/CONFIG - ./storage/log/auth/:/app/log/ + depends_on: + mysql: + condition: service_healthy # Game server (CH1) ch1_first: - image: metin2/server:test - restart: always + image: ${GAME_IMAGE} + restart: on-failure + environment: + <<: *common-environment + GAME_HOSTNAME: ch1_first + GAME_CHANNEL: 1 + GAME_MARK_SERVER: 1 + GAME_PORT: 13000 + GAME_P2P_PORT: 14000 + GAME_MAP_ALLOW: 1 4 5 6 3 23 43 112 107 67 68 72 208 302 304 expose: - 13000 - 14000 @@ -50,13 +96,23 @@ services: - '13000:13000' command: game volumes: - - ./config/ch1/first.txt:/app/CONFIG - ./storage/log/ch1/first/:/app/log/ - ./storage/mark/:/app/mark/ + depends_on: + mysql: + condition: service_healthy ch1_game1: - image: metin2/server:test - restart: always + image: ${GAME_IMAGE} + restart: on-failure + environment: + <<: *common-environment + GAME_HOSTNAME: ch1_game1 + GAME_CHANNEL: 1 + GAME_MARK_SERVER: 0 + GAME_PORT: 13001 + GAME_P2P_PORT: 14001 + GAME_MAP_ALLOW: 21 24 25 26 108 61 63 69 70 73 216 217 303 expose: - 13001 - 14001 @@ -64,12 +120,22 @@ services: - '13001:13001' command: game volumes: - - ./config/ch1/game1.txt:/app/CONFIG - ./storage/log/ch1/game1/:/app/log/ + depends_on: + mysql: + condition: service_healthy ch1_game2: - image: metin2/server:test - restart: always + image: ${GAME_IMAGE} + restart: on-failure + environment: + <<: *common-environment + GAME_HOSTNAME: ch1_game2 + GAME_CHANNEL: 1 + GAME_MARK_SERVER: 0 + GAME_PORT: 13002 + GAME_P2P_PORT: 14002 + GAME_MAP_ALLOW: 41 44 45 46 109 62 64 65 66 71 104 301 351 expose: - 13002 - 14002 @@ -77,13 +143,23 @@ services: - '13002:13002' command: game volumes: - - ./config/ch1/game2.txt:/app/CONFIG - ./storage/log/ch1/game2/:/app/log/ + depends_on: + mysql: + condition: service_healthy # Game server (game99) game99: - image: metin2/server:test - restart: always + image: ${GAME_IMAGE} + restart: on-failure + environment: + <<: *common-environment + GAME_HOSTNAME: game99 + GAME_CHANNEL: 99 + GAME_MARK_SERVER: 0 + GAME_PORT: 13099 + GAME_P2P_PORT: 14099 + GAME_MAP_ALLOW: 113 81 100 101 103 105 110 111 114 118 119 120 121 122 123 124 125 126 127 128 181 182 183 200 expose: - 13099 - 14099 @@ -91,5 +167,7 @@ services: - '13099:13099' command: game volumes: - - ./config/game99.txt:/app/CONFIG - ./storage/log/game99/:/app/log/ + depends_on: + mysql: + condition: service_healthy