diff --git a/.env.example b/.env.example index 4b54192..f23878a 100644 --- a/.env.example +++ b/.env.example @@ -5,17 +5,14 @@ GAME_IMAGE=git.old-metin2.com/metin2/server:latest WEB_IMAGE=git.old-metin2.com/metin2/web:latest ################################################################################ -# MySQL settings +# PostgreSQL settings ################################################################################ -MYSQL_HOST=mysql -MYSQL_USER=root -MYSQL_PASSWORD=metin2 -MYSQL_PORT=3306 -MYSQL_EXTERNAL_PORT=3306 -MYSQL_DB_ACCOUNT=account -MYSQL_DB_PLAYER=player -MYSQL_DB_COMMON=common -MYSQL_DB_LOG=log +POSTGRES_HOST=postgresql +POSTGRES_USER=server +POSTGRES_PASSWORD=metin2 +POSTGRES_PORT=5432 +POSTGRES_EXTERNAL_PORT=5432 +POSTGRES_DB=account ################################################################################ # Web app settings diff --git a/assets/db-init/create-databases.sql b/assets/db-init/create-databases.sql deleted file mode 100644 index 56156c5..0000000 --- a/assets/db-init/create-databases.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE DATABASE account CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -CREATE DATABASE common CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -CREATE DATABASE log CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -CREATE DATABASE player CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -CREATE DATABASE website CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/docker-compose.yml b/docker-compose.yml index f6cd5fe..af10a38 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,81 +1,39 @@ -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} +x-environment: &common-environment + POSTGRES_HOST: ${POSTGRES_HOST} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_PORT: ${POSTGRES_PORT} + POSTGRES_EXTERNAL_PORT: ${POSTGRES_EXTERNAL_PORT} + POSTGRES_DB: ${POSTGRES_DB} - TEST_SERVER: ${TEST_SERVER} + TEST_SERVER: ${TEST_SERVER} - DB_ADDR: ${DB_ADDR} - DB_PORT: ${DB_PORT} + DB_ADDR: ${DB_ADDR} + DB_PORT: ${DB_PORT} - PUBLIC_IP: ${PUBLIC_IP} - GAME_MAX_LEVEL: ${GAME_MAX_LEVEL} - WEB_APP_URL: ${WEB_APP_URL} - WEB_APP_KEY: ${WEB_APP_KEY} + PUBLIC_IP: ${PUBLIC_IP} + GAME_MAX_LEVEL: ${GAME_MAX_LEVEL} + WEB_APP_URL: ${WEB_APP_URL} + WEB_APP_KEY: ${WEB_APP_KEY} services: - # MySQL Database - mysql: - # The biarms/mysql Docker image supports ARM machines; you may also use mysql:5.5 - image: biarms/mysql:5.5 + # PostgreSQL Database + postgresql: + image: postgresql:16 restart: always environment: # Password for root access - MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - - '${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}' + - "${POSTGRES_EXTERNAL_PORT}:${POSTGRES_PORT}" expose: - - ${MYSQL_PORT} + - ${POSTGRES_PORT} volumes: - - ./storage/database/:/var/lib/mysql/ - - ./assets/db-init/:/docker-entrypoint-initdb.d/:ro + - ./storage/database/:/var/lib/postgresql/data/ healthcheck: - test: mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD - interval: 10s - timeout: 5s - retries: 5 - - # Web management system - web: - image: ${WEB_IMAGE} - restart: always - environment: - # Application config - APP_NAME: ${WEB_APP_NAME} - APP_ENV: ${WEB_APP_ENV} - APP_KEY: ${WEB_APP_KEY} - APP_URL: ${WEB_APP_URL} - - # Database credentials - DB_HOST: ${MYSQL_HOST} - DB_PORT: ${MYSQL_PORT} - DB_USERNAME: ${MYSQL_USER} - DB_PASSWORD: ${MYSQL_PASSWORD} - - # E-mail config - MAIL_MAILER: ${WEB_MAIL_MAILER} - MAIL_HOST: ${WEB_MAIL_HOST} - MAIL_PORT: ${WEB_MAIL_PORT} - MAIL_USERNAME: ${WEB_MAIL_USERNAME} - MAIL_PASSWORD: ${WEB_MAIL_PASSWORD} - MAIL_ENCRYPTION: ${WEB_MAIL_ENCRYPTION} - MAIL_FROM_ADDRESS: ${WEB_MAIL_FROM_ADDRESS} - MAIL_FROM_NAME: ${WEB_MAIL_FROM_NAME} - ports: - - '${WEB_EXTERNAL_PORT}:80' - volumes: - - ./storage/web/:/app/storage/ - depends_on: - mysql: - condition: service_healthy - healthcheck: - test: curl --fail http://localhost:80/ || exit 1 + test: pg_isready -d $POSTGRES_DB interval: 10s timeout: 5s retries: 5 @@ -91,18 +49,15 @@ services: volumes: - ./storage/log/db/:/app/log/ depends_on: - mysql: + postgresql: condition: service_healthy - web: - condition: service_healthy - + # Auth server auth: image: ${GAME_IMAGE} restart: always environment: <<: *common-environment - MYSQL_DB_PLAYER: ${MYSQL_DB_ACCOUNT} GAME_HOSTNAME: auth GAME_CHANNEL: 1 GAME_AUTH_SERVER: master @@ -112,14 +67,12 @@ services: - 11000 - 12000 ports: - - '11000:11000' + - "11000:11000" command: game volumes: - ./storage/log/auth/:/app/log/ depends_on: - mysql: - condition: service_healthy - web: + postgresql: condition: service_healthy # Game server (CH1) @@ -138,17 +91,15 @@ services: - 13000 - 14000 ports: - - '13000:13000' + - "13000:13000" command: game volumes: - ./storage/log/ch1/first/:/app/log/ - ./storage/mark/:/app/mark/ depends_on: - mysql: + postgresql: condition: service_healthy - web: - condition: service_healthy - + ch1_game1: image: ${GAME_IMAGE} restart: always @@ -164,16 +115,14 @@ services: - 13001 - 14001 ports: - - '13001:13001' + - "13001:13001" command: game volumes: - ./storage/log/ch1/game1/:/app/log/ depends_on: - mysql: + postgresql: condition: service_healthy - web: - condition: service_healthy - + ch1_game2: image: ${GAME_IMAGE} restart: always @@ -189,16 +138,14 @@ services: - 13002 - 14002 ports: - - '13002:13002' + - "13002:13002" command: game volumes: - ./storage/log/ch1/game2/:/app/log/ depends_on: - mysql: + postgresql: condition: service_healthy - web: - condition: service_healthy - + # Game server (game99) game99: image: ${GAME_IMAGE} @@ -215,12 +162,10 @@ services: - 13099 - 14099 ports: - - '13099:13099' + - "13099:13099" command: game volumes: - ./storage/log/game99/:/app/log/ depends_on: - mysql: - condition: service_healthy - web: + postgresql: condition: service_healthy