Dynmap: [ํŠœํ† ๋ฆฌ์–ผ] MySQL/SQLite๋กœ ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„ ์„ค์ •ํ•˜๊ธฐ

์— ๋งŒ๋“  2019๋…„ 09์›” 14์ผ  ยท  38์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: webbukkit/dynmap

MySQL/SQLite๋กœ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ง€์นจ์„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ Wiki ํŽ˜์ด์ง€๋„ ์˜ค๋ž˜ ์ „์— ๊ตฌ์‹์ž…๋‹ˆ๋‹ค.

dynmap์„ ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์ฐŒ๋ฅธ ํ›„. ๋‹ค์Œ์€ *nix ์„œ๋ฒ„์˜ NGINX์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์Šต์„œ์ž…๋‹ˆ๋‹ค.

๐Ÿ”ด ๊ฒฝ๊ณ  ๐Ÿ”ด
์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด๋ฉด dynmap์ด ์žˆ๋Š” SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ _ํ˜„์žฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”_ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

Dynmap๊ณผ ํ•จ๊ป˜ MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์™„์ „ํžˆ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ์ž์Šต์„œ์—์„œ๋Š” Linux์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. Linux๋ฅผ ํ•  ์ค„ ๋ชจ๋ฅธ๋‹ค๋ฉด, ๋ฐฐ์šฐ๊ธฐ์— ๋„ˆ๋ฌด ๋Šฆ์€ ๋•Œ๋Š” ์—†์Šต๋‹ˆ๋‹ค!

"minecraft ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ minecraft ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ๋กœ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Dynmap์šฉ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋ ค๋ฉด ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŠธ ๋˜๋Š” vps๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋…ธํŠธ

  • ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด SQLite ๋Œ€์‹  MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์€ ๋ฉด์„ ๋ณด์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ MySQL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :)

  • ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋˜ํ•œ sudo๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. sudo perms๊ฐ€ ์—†์œผ๋ฉด ์šด์ด ์ข‹์ง€ ์•Š๊ฑฐ๋‚˜ VPS๋ฅผ ๋นŒ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • SQLite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์„œ๋ฒ„/vps์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„œ๋ฒ„/vps์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋ ค๋ฉด SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ MySQL/MariaDB ์„œ๋ฒ„๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ SQLite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ minecraft ์„œ๋ฒ„์™€ ๋™์ผํ•œ ์„œ๋ฒ„์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ„์† ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ด€์‹ฌ์ด ์—†๋Š” ํ•œ Windows๋‚˜ ์•„ํŒŒ์น˜๋กœ ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€์•ˆ์œผ๋กœ, MySQL(SQLite๊ฐ€ ์•„๋‹˜)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ €๋ ดํ•œ VPS๋ฅผ ์–ป๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์›น ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—ฌ์ž ์ฐธ๊ณ  ์‚ฌํ•ญ

์ €์—๊ฒŒ ์œ„ํ‚ค ํŽธ์ง‘ ๊ถŒํ•œ์„ ์ฃผ์‹œ๋ฉด. ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์œ„ํ‚ค์— ๊ธฐ๊บผ์ด ๊ธฐ๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ;)

๋ณด๋„ˆ์Šค ํŠœํ† ๋ฆฌ์–ผ

์™„์ „ํžˆ ์„ ํƒ ์‚ฌํ•ญ์ธ cloudflare์˜ ํ”„๋ก์‹œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ด๋ณด๊ธฐ ์—” ๋‹น์‹ ์ด dynmap ์›น ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๊ธฐ ์œ„ํ•˜์—ฌ๋ ค๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  certbot์„ ์‚ฌ์šฉํ•˜์—ฌ SSL ์ธ์ฆ์„œ๋ฅผ ์„ค์น˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ณด๋„ˆ์Šค ์ž์Šต์„œ์˜ ์ด ๋ถ€๋ถ„์„ ๋”ฐ๋ฅด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋˜ํ•œ ์™„์ „ํžˆ ์„ ํƒ ์‚ฌํ•ญ์ธ certbot ๋˜๋Š” ๋‹ค๋ฅธ ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NGINX ์›น ์„œ๋ฒ„์— SSL ์ธ์ฆ์„œ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ณด๊ธฐ ์—” ๋‹น์‹ ์ด dynmap ์›น ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๊ธฐ ์œ„ํ•˜์—ฌ๋ ค๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  Cloudflare ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณด๋„ˆ์Šค ์ž์Šต์„œ์˜ ์ด ๋ถ€๋ถ„์„ ๋”ฐ๋ฅด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ :

  • ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด/์žฌ์‹œ์ž‘๋˜๋”๋ผ๋„ Dynmap ์›น์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์— ๋” ์ ์€ ๋ถ€ํ•˜๋ฅผ ๊ฐ€ํ•˜์„ธ์š”
  • NGINX๋Š” ๋‚ด๋ถ€ ์›น ์„œ๋ฒ„๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ :

  • ์„ค์ •ํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค.
  • ์•ฝ๊ฐ„์˜ ๋ฆฌ๋ˆ…์Šค๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค

์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃฐ ๋‚ด์šฉ

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค

  • MySQL/MariaDB ์„ค์ •(์„ ํƒ ์‚ฌํ•ญ)
  • PHP ๋ฐ SQL ์ง€์›์œผ๋กœ NGINX ์„ค์ •
  • MySQL/SQLite์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  Dynmap ํ”Œ๋Ÿฌ๊ทธ์ธ ์ค€๋น„
  • MySQL/SQLite์šฉ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์„œ๋ฒ„ ์„ค์ •
  • ๋ณด๋„ˆ์Šค : NGINX ์›น ์„œ๋ฒ„๋กœ Cloudflare ํ”„๋ก์‹œ ์„ค์ •(์„ ํƒ ์‚ฌํ•ญ)
  • ๋ณด๋„ˆ์Šค : ssl ์ธ์ฆ์œผ๋กœ NGINX ์„ค์ •(์„ ํƒ ์‚ฌํ•ญ)
  • FAQ๋Š” ์ด ๊ฐ€์ด๋“œ์˜ ๋งจ ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์—์„œ PHP ๋ฐ SQL ์ง€์›์œผ๋กœ MySQL/MariaDB ๋ฐ NGINX ์„ค์ •

์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋…๋ฆฝ ์‹คํ–‰ํ˜• dynmap ์›น ์‚ฌ์ดํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์„œ๋ฒ„์— ์›น ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์˜ ์ด ๋ถ€๋ถ„์—์„œ๋Š” ์„œ๋ฒ„์— MySQL์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ SQLite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด MySQL/MariaDB ์—†์ด NGINX๋งŒ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ NGINX๋Š” ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋™์ผํ•œ ์„œ๋ฒ„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ. ํŠœํ† ๋ฆฌ์–ผ ๋งํฌ ์•„๋ž˜์˜ ์ฐธ๊ณ  ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

MySQL/MariaDB๋Š” ์–ด๋””์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์™€ ๋™์ผํ•œ ์„œ๋ฒ„์— MySQL์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋™์ผํ•œ MySQL ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MySQL์€ ์›น ์„œ๋ฒ„๊ฐ€ ์ฝ๊ณ  ์“ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ/๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด Dynmap ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ MySQL/MariaDB ์„œ๋ฒ„๊ฐ€ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์™€ ๋™์ผํ•œ ์„œ๋ฒ„/๋„คํŠธ์›Œํฌ์— ์žˆ์œผ๋ฉด ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋” ์งง๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠœํ† ๋ฆฌ์–ผ

์ธํ„ฐ๋„ท์— nginx/MySQL/MariaDB๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ผ๋ถ€ Linux OS๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์Šต์„œ ๋งํฌ์ž…๋‹ˆ๋‹ค.

MariaDB๋Š” MySQL๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์Šต์„œ์—์„œ MariaDB๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ์ง€์‹œํ•˜๋”๋ผ๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํŠœํ† ๋ฆฌ์–ผ ๋งํฌ

1 ์†Œ์Šค

์›น ์„œ๋ฒ„์˜ IP๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•˜์—ฌ ์›น ์„œ๋ฒ„๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด ๊ฒƒ๋„ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์œผ๋ฉด ๋ฐฉํ™”๋ฒฝ์ด ํฌํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜ nginx ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธํŠธ

  • ์ด๋ฏธ ์›น ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง MySQL ์„œ๋ฒ„๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ. ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ MySQL ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ VPS/์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ˜ธ์ŠคํŠธ์— ํŒจํ‚ค์ง€์™€ ํ•จ๊ป˜ MySQL ์„œ๋ฒ„๋„ ํฌํ•จ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ VPS์— MySQL ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

MySQL ์„ค์ •(SQLite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)

์ด์ œ MySQL/MariaDB ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์ œํ•œ๋œ ๊ถŒํ•œ์œผ๋กœ ์ƒˆ ์‚ฌ์šฉ์ž/๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์›น ์„œ๋ฒ„๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฉํ™”๋ฒฝ(iptables/firewalld/ufw/etc)์„ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

MySQL/MariaDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„์˜ ํ„ฐ๋ฏธ๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

MySQL/MariaDB์—์„œ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

mysql -u root -p
[Enter mysql root password if there is one]
mysql> CREATE DATABASE <dynmap_database_name>;
mysql> exit

์˜ˆ(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

mysql -u root -p
[Enter mysql root password if there is one]
mysql> CREATE DATABASE MyDynmapDatabase;
mysql> exit

์ƒˆ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€

๋…ธํŠธ
MySQL ์„œ๋ฒ„๊ฐ€ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์™€ ๋™์ผํ•œ ์„œ๋ฒ„์— ์žˆ๋Š” ๊ฒฝ์šฐ. <minecraftserver_ip> ๋Š” localhost ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mysql -u root -p
[Enter mysql root password if there is one]
mysql> CREATE USER '<webserver_user>'@'<webserver_ip>' IDENTIFIED BY '<password>';
mysql> CREATE USER '<dynmap_user>'@'<minecraftserver_ip>' IDENTIFIED BY '<password>';
mysql> GRANT CREATE, DELETE, INSERT, SELECT, UPDATE ON <dynmap_database>.* TO '<webserver_user>'@'<webserver_ip>';
mysql> GRANT CREATE, DELETE, INSERT, SELECT, UPDATE ON <dynmap_database>.* TO '<dynmap_user>'@'<minecraftserver_ip>';
mysql> FLUSH PRIVILEGES;
mysql> exit

์›น ์„œ๋ฒ„์™€ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ์„œ๋ฒ„์— ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ(ํ™•์žฅํ•˜๋ ค๋ฉด ๋‚˜๋ฅผ ํด๋ฆญ)

mysql -u root -p
[Enter mysql root password if there is one]
mysql> CREATE USER 'dynmapwebserver'@'localhost' IDENTIFIED BY 'password1234';
mysql> CREATE USER 'minecraftserver'@'localhost' IDENTIFIED BY 'password5678';
mysql> GRANT CREATE, DELETE, INSERT, SELECT, UPDATE ON MyDynmapDatabase.* TO 'dynmapwebserver'@'localhost';
mysql> GRANT CREATE, DELETE, INSERT, SELECT, UPDATE ON MyDynmapDatabase.* TO 'minecraftserver'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. mysql ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ. ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

mysql> DROP USER '<user_to_delete>'@'<ip_you_used>';

์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“  ํ›„ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ("exit"๋ฅผ ํ†ตํ•ด mysql ๋ฃจํŠธ ์‚ฌ์šฉ์ž์—์„œ ๋กœ๊ทธ์•„์›ƒํ•œ ํ›„)

mysql -u <webserver_user> -p
[Enter user password]
mysql> exit

MySQL ๊ถŒํ•œ/๊ถŒํ•œ

MySQL์—๋Š” MySQL ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ALL PRIVILEGES - ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ชจ๋“  ๊ถŒํ•œ ๋ถ€์—ฌ
  • CREATE - ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DELETE - ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ด๋ธ”์—์„œ ํ–‰(๋ฐ์ดํ„ฐ)์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DROP - ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • INSERT - ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ด๋ธ”์— ํ–‰(๋ฐ์ดํ„ฐ)์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SELECT - ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ
  • ์—…๋ฐ์ดํŠธ - ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dynmap ํ”Œ๋Ÿฌ๊ทธ์ธ ์ค€๋น„

์ด์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๊ตฌ์„ฑ์˜ ์ผ๋ถ€ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์ด๋‚˜๋ฏน๋งต ์„ค์น˜

์„œ๋ฒ„์— ์ตœ์‹  ๋ฒ„์ „์˜ dynmap์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์€ 1.10์—์„œ 1.14๊นŒ์ง€์˜ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ๋ฒ„์ „์—์„œ ๊ณ„์† ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผœ๊ณ  ๋„๊ณ 

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๋ฅผ ์ผ  ๋‹ค์Œ ์„œ๋ฒ„๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. plugins ํด๋”์— dynmap ๋ผ๋Š” ์ƒˆ ํด๋”๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

configuration.txt ํŒŒ์ผ์„ ๋ฐฑ์—… ํ•˜์‹ญ์‹œ์˜ค! ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  configuration.txt.backup ์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์„ธ์š”.

์ผ๋ถ€ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ ํŒŒ์ผ configuration.txt ์—ฝ๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€ ๋ณ€๊ฒฝ

๊ตฌ์„ฑ์˜ ์Šคํ† ๋ฆฌ์ง€ ์„น์…˜์„ ๋‹ค์Œ์—์„œ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

storage:
  # Filetree storage (standard tree of image files for maps)
  type: filetree
  # SQLite db for map storage (uses dbfile as storage location)
  #type: sqlite
  #dbfile: dynmap.db
  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
  #type: mysql
  #hostname: localhost
  #port: 3306
  #database: dynmap
  #userid: dynmap
  #password: dynmap
  #prefix: ""
  #flags: "?allowReconnect=true"

์—๊ฒŒ

MySQL ์˜ˆ์ œ(ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญ)

storage:
  # Filetree storage (standard tree of image files for maps)
  #type: filetree <- DONT FORGET TO COMMENT THIS OUT
  # SQLite db for map storage (uses dbfile as storage location)
  #type: sqlite
  #dbfile: dynmap.db
  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
  type: mysql
  hostname: <mysql_ip>
  port: <mysql_port>
  database: <mysql_database>
  userid: <dynmap_mysql_user>
  password: <dynmap_mysql_password>
  prefix: "" # Can add prefix for tables if you want
  flags: "?allowReconnect=true"


SQLite ์˜ˆ์ œ(ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญ)

storage:
  # Filetree storage (standard tree of image files for maps)
  #type: filetree <- DONT FORGET TO COMMENT THIS OUT
  # SQLite db for map storage (uses dbfile as storage location)
  type: sqlite
  dbfile: dynmap.db
  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
  #type: mysql
  #hostname: localhost
  #port: 3306
  #database: dynmap
  #userid: dynmap
  #password: dynmap
  #prefix: ""
  #flags: "?allowReconnect=true"

์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ ์„ค์ • ๋ณ€๊ฒฝ

์Šคํ† ๋ฆฌ์ง€ ์„น์…˜ ๋ฐ”๋กœ ์•„๋ž˜์— ๋ผ๋Š” ์„น์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- class: org.dynmap.InternalClientUpdateComponent ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์„ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    sendposition: true
    allowwebchat: true
    webchat-interval: 5
    hidewebchatip: true
    trustclientname: false
    includehiddenplayers: false
    # (optional) if true, color codes in player display names are used
    use-name-colors: false
    # (optional) if true, player login IDs will be used for web chat when their IPs match
    use-player-login-ip: true
    # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
    require-player-login-ip: false
    # (optional) block player login IDs that are banned from chatting
    block-banned-player-chat: true
    # Require login for web-to-server chat (requires login-enabled: true)
    webchat-requires-login: false
    # If set to true, users must have dynmap.webchat permission in order to chat
    webchat-permissions: false
    # Limit length of single chat messages
    chatlengthlimit: 256
  #  # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
  #  hideifshadow: 4
  #  # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
  #  hideifundercover: 14
  #  # (Optional) if true, players that are crouching/sneaking will be hidden 
    hideifsneaking: false
    # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
    protected-player-info: false
    # If true, hide players with invisibility potion effects active
    hide-if-invisiblity-potion: true
    # If true, player names are not shown on map, chat, list
    hidenames: false


์ดํ›„(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

 # - class: org.dynmap.InternalClientUpdateComponent
    #sendhealth: true
    #sendposition: true
    #allowwebchat: true
    #webchat-interval: 5
    #hidewebchatip: false
    #trustclientname: false
    #includehiddenplayers: false
    # (optional) if true, color codes in player display names are used
    #use-name-colors: false
    # (optional) if true, player login IDs will be used for web chat when their IPs match
    #use-player-login-ip: true
    # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
    #require-player-login-ip: false
    # (optional) block player login IDs that are banned from chatting
    #block-banned-player-chat: true
    # Require login for web-to-server chat (requires login-enabled: true)
    #webchat-requires-login: false
    # If set to true, users must have dynmap.webchat permission in order to chat
    #webchat-permissions: false
    # Limit length of single chat messages
    #chatlengthlimit: 256
  #  # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
  #  hideifshadow: 4
  #  # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
  #  hideifundercover: 14
  #  # (Optional) if true, players that are crouching/sneaking will be hidden 
    #hideifsneaking: false
    # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
    #protected-player-info: false
    # If true, hide players with invisibility potion effects active
    #hide-if-invisiblity-potion: true
    # If true, player names are not shown on map, chat, list
    #hidenames: false

๊ทธ๋ ‡๊ฒŒ ํ•œ ์งํ›„์— ๋ฐ”๋กœ ์•„๋ž˜ ์„น์…˜์˜ ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

  #- class: org.dynmap.JsonFileClientUpdateComponent
  #  writeinterval: 1
  #  sendhealth: true
  #  sendposition: true
  #  allowwebchat: true
  #  webchat-interval: 5
  #  hidewebchatip: false
  #  includehiddenplayers: false
  #  use-name-colors: false
  #  use-player-login-ip: false
  #  require-player-login-ip: false
  #  block-banned-player-chat: true
  #  hideifshadow: 0
  #  hideifundercover: 0
  #  hideifsneaking: false
  #  # Require login for web-to-server chat (requires login-enabled: true)
  #  webchat-requires-login: false
  #  # If set to true, users must have dynmap.webchat permission in order to chat
  #  webchat-permissions: false
  #  # Limit length of single chat messages
  #  chatlengthlimit: 256
  #  hide-if-invisiblity-potion: true
  #  hidenames: false


์ดํ›„(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

  - class: org.dynmap.JsonFileClientUpdateComponent
    writeinterval: 1
    sendhealth: true
    sendposition: true
    allowwebchat: true
    webchat-interval: 5
    hidewebchatip: false
    includehiddenplayers: false
    use-name-colors: false
    use-player-login-ip: false
    require-player-login-ip: false
    block-banned-player-chat: true
    hideifshadow: 0
    hideifundercover: 0
    hideifsneaking: false
  #  # Require login for web-to-server chat (requires login-enabled: true)
    webchat-requires-login: false
  #  # If set to true, users must have dynmap.webchat permission in order to chat
    webchat-permissions: false
  #  # Limit length of single chat messages
    chatlengthlimit: 256
    hide-if-invisiblity-potion: true
    hidenames: false

๋‚ด๋ถ€ ์›น ์„œ๋ฒ„ ๋น„ํ™œ์„ฑํ™”

์ด์ œ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‚ด๋ถ€ ์›น ์„œ๋ฒ„๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ disable-webserver ๋ฅผ ์ฐพ์•„ ๊ฐ’์„ false ์—์„œ true ํ•ฉ๋‹ˆ๋‹ค.

์›น ์„œ๋ฒ„์˜ ์ผ๋ถ€ URL ๋ณ€๊ฒฝ

dynmap ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ๋ถ€ URL์„ ๋ณ€๊ฒฝํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋˜ ํฐ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ url: ์„น์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

url:
    # configuration URL
    #configuration: "up/configuration"
    # update URL
    #update: "up/world/{world}/{timestamp}"
    # sendmessage URL
    #sendmessage: "up/sendmessage"
    # login URL
    #login: "up/login"
    # register URL
    #register: "up/register"
    # tiles base URL
    #tiles: "tiles/"
    # markers base URL
    #markers: "tiles/"


[MySQL ์˜ˆ์ œ] ์ดํ›„(ํด๋ฆญํ•˜์—ฌ ํ™•์žฅ)

url:
    # configuration URL
    configuration: "standalone/MySQL_configuration.php"
    # update URL
    update: "standalone/MySQL_update.php?world={world}&ts={timestamp}"
    # sendmessage URL
    sendmessage: "standalone/MySQL_sendmessage.php"
    # login URL
    login: "standalone/MySQL_login.php"
    # register URL
    register: "standalone/MySQL_register.php"
    # tiles base URL
    tiles: "standalone/MySQL_tiles.php?tile="
    # markers base URL
    markers: "standalone/MySQL_markers.php?marker="


[SQLite ์˜ˆ์ œ] ์ดํ›„(ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญ)

url:
    # configuration URL
    configuration: "standalone/configuration.php"
    # update URL
    update: "standalone/update.php?world={world}&ts={timestamp}"
    # sendmessage URL
    sendmessage: "standalone/sendmessage.php"
    # login URL
    login: "standalone/login.php"
    # register URL
    register: "standalone/register.php"
    # tiles base URL
    tiles: "standalone/tiles.php?tile="
    # markers base URL
    markers: "standalone/markers.php?marker="

์ผœ๊ณ  ๋‹ค์‹œ

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋˜ ์•„์ง ๋„์ง€๋Š” ๋งˆ์„ธ์š”!
์ตœ์‹  ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ dynmap์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ์„œ๋ฒ„๋ฅผ ๋•๋‹ˆ๋‹ค.

์•Œ์•„ ์ฑ„๋‹ค

๋งจ ๋งˆ์ง€๋ง‰์— ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ค‘์ง€ํ•ด์•ผ ํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” Dynmap์ด ์›น ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. configuration.txt ์„ค์ •์„ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ plugins/dynmap/web ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ํฐ ์•Œ๋ฆผ

์‚ฌ์šฉ์ž๊ฐ€ dynmap์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด. ๋‹น์‹ ์€ ๋ถ„๋ช…ํžˆ ๋กœ๊ทธ์ธ ์ž๊ฒฉ ์ฆ๋ช…์ด ๋‚˜์œ ๋†ˆ๋“ค๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค SSL์˜ ์ธ์ฆ์„œ ๋˜๋Š” ๋ฉ”์ดํฌ์—…์— ์‚ฌ์šฉ cloudflare์˜ ํ”„๋ก์‹œ๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค!

์›น ์„œ๋ฒ„ ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ต์…˜

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ณธ๋ก ์œผ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค!

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„(MySQL/SQLite)์™€ ๋™์ผํ•œ ์„œ๋ฒ„์—์„œ ํ˜ธ์ŠคํŒ…

์˜ต์…˜ 1 : ํ”Œ๋Ÿฌ๊ทธ์ธ ํด๋”์˜ dynmap ์›น ํด๋”์— ์›น ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์‰ฝ๊ฒŒ)
์˜ต์…˜ 2 : ์›น ํด๋”๋ฅผ ์„œ๋ฒ„์˜ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ณต์‚ฌ(๋” ์•ˆ์ „ํ•จ)

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„(MySQL)์™€ ๋™์ผํ•œ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ํ˜ธ์ŠคํŒ…

์œ ์ผํ•œ ์˜ต์…˜ : ์œ ์ผํ•œ ์˜ต์…˜์€ ์›น ํด๋”๋ฅผ ์›น ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›น ํ˜ธ์ŠคํŠธ๋กœ ํ˜ธ์ŠคํŒ…(MySQL)

hostgator, namecheap, 000webhost ๋“ฑ๊ณผ ๊ฐ™์€ ์›น ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์ผํ•œ ์˜ต์…˜์€ ์›น ํด๋”๋ฅผ ์›น ํ˜ธ์ŠคํŠธ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฃฐ ์›น ํ˜ธ์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋Š” ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

NGINX ์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ์ผ๋ฐ˜ ์„ค์ •

์„ค์ • ์˜ต์…˜์ด ์žˆ๋Š” ๋‹ค์Œ ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์—. NGINX ์›น ์„œ๋ฒ„์˜ ์ผ๋ฐ˜์ ์ธ ์„ค์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ ์ œ๊ฑฐ

์ƒˆ๋กœ์šด NGINX ์›น ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ. ๊ธฐ๋ณธ ์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ž์ฒด ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ ์ „์— ์ด๋ฏธ NGINX๊ฐ€ ์žˆ๊ณ  ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ. dynmap ์›น์‚ฌ์ดํŠธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ต์…˜์ด ์žˆ๋Š” ๋‹ค์Œ ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์„ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ /etc/nginx/sites-available/ ๋ฐ /etc/nginx/sites-enabled ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/dynmap

์ด์ œ sites-enabled ์—์„œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ธฐ๋ณธ ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  nginx ์›น ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo rm /etc/nginx/sites-enabled/default
sudo service nginx restart

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์™€ ๋™์ผํ•œ ์„œ๋ฒ„์— ์žˆ๋Š” ์›น ์„œ๋ฒ„ ์„ค์ •ํ•˜๊ธฐ

minecraft ์„œ๋ฒ„์™€ ๋™์ผํ•œ ์„œ๋ฒ„์—์„œ ์ž์‹ ์˜ NGINX ์›น ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋”ฑ ๋งž๋Š” ์„น์…˜์ž…๋‹ˆ๋‹ค!

๋ฉ”๋ชจ
์ด ํŠœํ† ๋ฆฌ์–ผ์„ ๊ณ„์†ํ•˜๊ธฐ ์ „์— NGINX์˜ ์ผ๋ฐ˜ ์„ค์ •์„ ๋”ฐ๋ž๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์˜ต์…˜ 1: ์›น ์„œ๋ฒ„๋ฅผ dynmap ํด๋”์— ์—ฐ๊ฒฐ(ํ™•๋Œ€ํ•˜๋ ค๋ฉด ํด๋ฆญ)

์›น ์„œ๋ฒ„๋ฅผ ์‰ฌ์šด(๊ทธ๋Ÿฌ๋‚˜ ๋„ˆ๋ฌด ์•ˆ์ „ํ•˜์ง€ ์•Š์€) ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ์ ํ•ฉํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ์˜ต์…˜ 1๋ณด๋‹ค ๋” ์•ˆ์ „ํ•œ ์˜ต์…˜์ด๋ฏ€๋กœ ์˜ต์…˜ 2๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์žฅ์ :

  • ์‹คํ–‰ํ•  ๋ช…๋ น์ด ํ•˜๋‚˜ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค(์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ž‘์—…์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ)
  • dynmap ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • ์˜ต์…˜ 2์— ๋น„ํ•ด ๋œ ์•ˆ์ „ํ•จ(๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ)

์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘

/etc/nginx/sites-available/dynmap ์—์„œ dynmap ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo nano /etc/nginx/sites-available/dynmap
OR
sudo vi /etc/nginx/sites-available/dynmap

๊ตฌ์„ฑ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์˜ ๊ฐ’์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name map.example.com;

        root /home/<USERNAME>/<MINECRAFTSERVER>/plugins/dynmap/web;

        index index.php index.html index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
  • ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”minecraft ์„œ๋ฒ„ ํด๋”๊ฐ€ ์žˆ๋Š” Linux ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ํด๋”์—

์˜ˆ์‹œ:

        root /home/someuser/minecraft/servers/creative/plugins/dynmap/web;

์˜ต์…˜ 2: ์›น ํด๋”๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ณต์‚ฌ

๋ณด๋‹ค ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ์ ํ•ฉํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค!

์žฅ์ :

  • ์˜ต์…˜ 1๋ณด๋‹ค ๋” ์•ˆ์ „ํ•จ(๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Œ)

๋‹จ์ :

  • dynmap ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ ์ผ๋ถ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒˆ ์œ„์น˜๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์ƒˆ ์œ„์น˜๋กœ ๋ณต์‚ฌ

dynmap ์›น ํŒŒ์ผ์„ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ณต์‚ฌ

sudo cp -r /home/<USERNAME>/<MINECRAFTSERVER>/plugins/dynmap/web/ /var/www/dynmap/
  • ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”minecraft ์„œ๋ฒ„ ํด๋”๊ฐ€ ์žˆ๋Š” Linux ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ํด๋”์—

์˜ˆ์‹œ:

sudo cp -r /home/MyUsername/minecraft/servers/creative/plugins/dynmap/web/ /var/www/dynmap/

์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘

/etc/nginx/sites-available/dynmap ์—์„œ dynmap ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo nano /etc/nginx/sites-available/dynmap
OR
sudo vi /etc/nginx/sites-available/dynmap

๊ตฌ์„ฑ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์˜ ๊ฐ’์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name map.example.com;

        root /var/www/dynmap;

        index index.php index.html index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

์ด์ œ dynmap ์„œ๋ฒ„๋ฅผ ๊ณต๊ฐœํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค! (์˜ต์…˜ 1๊ณผ 2 ๋ชจ๋‘์— ๋Œ€ํ•ด)

์˜ต์…˜ 1/2์˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅธ ํ›„. dynmap ์›น ์„œ๋ฒ„ ์„ค์ •์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด ํด๋”์— ๋„ฃ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ln -s /etc/nginx/sites-available/dynmap /etc/nginx/sites-enabled/dynmap

๊ตฌ์„ฑ ํŒŒ์ผ์— ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค!

nginx -t -c /etc/nginx/sites-available/dynmap

๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

sudo service nginx restart

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค!

์›น ๋ธŒ๋ผ์šฐ์ €์— ์›น ์„œ๋ฒ„ IP๋ฅผ ์ž…๋ ฅํ•˜๋ฉด dynmap์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋น„์–ด ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ ์„œ๋ฒ„์— ๊ฐ€์ž…ํ•˜๊ณ  /dynmap fullrender <worldname> ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํƒ€์ผ ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์›น ์„œ๋ฒ„ ์„ค์ •

minecraft ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ์ž์‹ ์˜ NGINX ์›น ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋”ฑ ๋งž๋Š” ์„น์…˜์ž…๋‹ˆ๋‹ค!

๋ฉ”๋ชจ

  • ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ๊ณ„์†ํ•˜๊ธฐ ์ „์— NGINX์˜ ์ผ๋ฐ˜ ์„ค์ •์„ ๋”ฐ๋ž๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • ์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์€ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ NGINX ์›น ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

์žฅ์ :

  • ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ณด๋‹ค ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ :

  • dynmap ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ ์ผ๋ถ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒˆ ์œ„์น˜๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์ƒˆ ์œ„์น˜๋กœ ๋ณต์‚ฌ

dynmap ์›น ํŒŒ์ผ์„ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ณต์‚ฌ

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„์—์„œ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์—์„œ ์›น ์„œ๋ฒ„๋กœ ํด๋”๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์— ๋Œ€ํ•œ ์•”ํ˜ธ๋ฅผ ๋ฌป์Šต๋‹ˆ๋‹ค.

sudo scp -r /home/<USERNAME>/<MINECRAFTSERVER>/plugins/dynmap/web <WEBSERVER_USERNAME>@<WEBSERVER_IP>:/var/www/dynmap
  • ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”minecraft ์„œ๋ฒ„ ํด๋”๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„์˜ Linux ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ํด๋”์—
  • ํ•˜์ง€๋งˆ

์˜ˆ์‹œ:

sudo scp -r /home/SomeUserName1/minecraft/servers/creative/plugins/dynmap/web [email protected]:/var/www/dynmap

์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘

/etc/nginx/sites-available/dynmap ์—์„œ dynmap ๊ตฌ์„ฑ ํŒŒ์ผ ํŽธ์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo nano /etc/nginx/sites-available/dynmap
OR
sudo vi /etc/nginx/sites-available/dynmap

๊ตฌ์„ฑ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์˜ ๊ฐ’์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name map.example.com;

        root /var/www/dynmap;

        index index.php index.html index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

์ด์ œ dynmap ์„œ๋ฒ„๋ฅผ ๊ณต๊ฐœํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค!

๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค. dynmap ์›น ์„œ๋ฒ„ ์„ค์ •์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด ํด๋”์— ๋„ฃ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ln -s /etc/nginx/sites-available/dynmap /etc/nginx/sites-enabled/dynmap

๊ตฌ์„ฑ ํŒŒ์ผ์— ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค!

nginx -t -c /etc/nginx/sites-available/dynmap

๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

sudo service nginx restart

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค!

์›น ๋ธŒ๋ผ์šฐ์ €์— ์›น ์„œ๋ฒ„ IP๋ฅผ ์ž…๋ ฅํ•˜๋ฉด dynmap์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋น„์–ด ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ ์„œ๋ฒ„์— ๊ฐ€์ž…ํ•˜๊ณ  /dynmap fullrender <worldname> ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํƒ€์ผ ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ํ˜ธ์ŠคํŠธ๊ฐ€ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์›น ์„œ๋ฒ„ ์„ค์ •

์›น ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ง์ ‘ ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋”ฑ ๋งž๋Š” ์„น์…˜์ž…๋‹ˆ๋‹ค!

์›น ํด๋”๋ฅผ ์›น ํ˜ธ์ŠคํŠธ์— ๋ณต์‚ฌ

๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์—์„œ ์ปดํ“จํ„ฐ์˜ ํด๋”๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌํ•˜๋ ค๋Š” ํŒŒ์ผ์€ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์˜ plugins/dynmap/web ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์šฉ dynmap ์›น ํ˜ธ์ŠคํŠธ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ์„ ์›น ํ˜ธ์ŠคํŠธ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋‹ค!

๊ทธ๋ž˜ ์ง„์งœ! ๋‹น์‹ ์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋ณด๋„ˆ์Šค ํŠœํ† ๋ฆฌ์–ผ

์ž์‹ ์˜ NGINX ์›น ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ๋ณด๋„ˆ์Šค ํŠœํ† ๋ฆฌ์–ผ์˜ ์ด ๋ถ€๋ถ„์„ ๋”ฐ๋ผ dynmap ๋กœ๊ทธ์ธ์œผ๋กœ ์›น ์„œ๋ฒ„๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dynmap์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ์‚ฌ์šฉ์ž์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ฃผ์˜ํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›น ์„œ๋ฒ„๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ธ ๊ฐ€์ง€ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CertBot์œผ๋กœ ๋ฌด๋ฃŒ SSL ์ธ์ฆ์„œ ์„ค์น˜ํ•˜๊ธฐ

certbot ์›น์‚ฌ์ดํŠธ์—์„œ ์ด ์ง€์นจ ์„

์ฐธ๊ณ ๋กœ certbot์˜ ์ธ์ฆ์€ ๋‹ค๋ฅธ ์ œ๊ณต์ž๋ณด๋‹ค ๋” ๋นจ๋ฆฌ ๋งŒ๋ฃŒ๋˜์ง€๋งŒ ์ธ์ฆ์„ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ๋”ฐ๋ฅด๋ฉด ์ธ์ฆ์„ ๊ฐฑ์‹ ํ•˜๋Š” ์ž๋™ํ™”๋œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณต๊ธ‰์ž์˜ SSL ์ธ์ฆ์„œ ์„ค์น˜

๋Œ€์•ˆ์œผ๋กœ NameCheap๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ณต๊ธ‰์ž๋กœ๋ถ€ํ„ฐ SSL ์ธ์ฆ์„œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž๋กœ๋ถ€ํ„ฐ ๊ณต๊ฐœ ์ธ์ฆ ๋ฐ ๊ฐœ์ธ ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ ํ‚ค๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๊ณต๊ฐœํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์›น ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ ๊ทธ๋ƒฅ ์›€์ผœ์ฅ๊ณ  ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

/etc/ssl/certs/<certification_file>.pem ์ธ์ฆ ํŒŒ์ผ ๋ฐฐ์น˜
/etc/ssl/private/<private_key_file>.pem ๊ฐœ์ธ ํ‚ค๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์›น ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์„ ๋ฐฑ์—…ํ•˜์‹ญ์‹œ์˜ค.

sudo cp /etc/nginx/sites-available/dynmap /etc/nginx/sites-available/dynmap_BACKUP

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Œ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

sudo cp /etc/nginx/sites-available/dynmap_BACKUP /etc/nginx/sites-available/dynmap

NGINX ์›น ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์—์„œ ํ˜„์žฌ ๊ตฌ์„ฑ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ํ™•์ธํ•˜๊ณ  ์ด ์˜ˆ์ œ ๊ตฌ์„ฑ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name map.example.com;
        return 302 https://$server_name$request_uri;
}

server {
        # SSL configuration

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        ssl_certificate         /etc/ssl/certs/<certification_file>.pem;
        ssl_certificate_key     /etc/ssl/private/<private_key_file>.pem;

        server_name map.example.com;

        root /var/www/dynmap;

        index index.php index.html index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

๊ทธ๋Ÿฐ ๋‹ค์Œ NGINX ์›น ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

sudo service nginx restart

dynmap ์›น์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๋ฉด ์ด์ œ ๋ณด์•ˆ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค!
Very secure

Cloudflare์˜ ํ”„๋ก์‹œ๋กœ NGINX ์„ค์ •(์ตœ์ข… ์—…๋ฐ์ดํŠธ: 2019๋…„ 9์›” 19์ผ)

Cloudflare ํ”„๋ก์‹œ์˜ ์ข‹์€ ์ ์€ ์›น ์„œ๋ฒ„์™€ ํ•ด๋‹น ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ˆ˜ ์ธ์ฆ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ธ์ฆ์„ ์ตœ๋Œ€ 15๋…„ ๋™์•ˆ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ "์‹ค์ œ" SSL ์ธ์ฆ์„ ๋ฐ›๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋จผ์ € Cloudflare์— ๋กœ๊ทธ์ธํ•˜๊ณ  ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๋„๋ฉ”์ธ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "SSL/TLS" ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
cloudflare dashboard

Origin Certificates ์„น์…˜์—์„œ "์ธ์ฆ์„œ ์ƒ์„ฑ"์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
Let Cloudflare generate a private key and a CSR ์„ ํƒํ•˜๊ณ  Private key type ๋ฅผ ECDSA

map.YOURDOMAIN.com์— dynmap ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ map.YOURDOMAIN.com ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์ธ์ฆ์„œ ์œ ํšจ ๊ธฐ๊ฐ„์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค(15๋…„์€ ์ข‹์€ amirite?).

๋‹ค์Œ์„ ํด๋ฆญํ•˜๋ฉด ํ™”๋ฉด์— ์ƒˆ๋กœ์šด SSL ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ํ…์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์ธ์ฆ์„œ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํ…์ŠคํŠธ๋ฅผ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•ด์•ผ -----BEGIN CERTIFICATE----- ๋กœ ๋ -----END CERTIFICATE-----

sudo nano /etc/ssl/certs/dynmap_cert.pem
OR
sudo vi /etc/ssl/certs/dynmap_cert.pem

๋‹ค์Œ์œผ๋กœ ๊ฐœ์ธ ํ‚ค ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํ…์ŠคํŠธ๋ฅผ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•ด์•ผ -----BEGIN PRIVATE KEY----- ๋กœ ๋ -----END PRIVATE KEY-----

sudo nano /etc/ssl/private/dynmap_private_key.pem
OR
sudo vi /etc/ssl/private/dynmap_private_key.pem

์ด์ œ NGINX ์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์„ ํŽธ์ง‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์›น ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์„ ๋ฐฑ์—…ํ•˜์‹ญ์‹œ์˜ค.

sudo cp /etc/nginx/sites-available/dynmap /etc/nginx/sites-available/dynmap_BACKUP

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Œ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

sudo cp /etc/nginx/sites-available/dynmap_BACKUP /etc/nginx/sites-available/dynmap

NGINX ์›น ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ์—์„œ ํ˜„์žฌ ๊ตฌ์„ฑ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ํ™•์ธํ•˜๊ณ  ์ด ์˜ˆ์ œ ๊ตฌ์„ฑ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name map.example.com;
        return 302 https://$server_name$request_uri;
}

server {
        # SSL configuration

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        ssl_certificate         /etc/ssl/certs/dynmap_cert.pem;
        ssl_certificate_key     /etc/ssl/private/dynmap_private_key.pem;

        server_name map.example.com;

        root /var/www/dynmap;

        index index.php index.html index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

๊ทธ๋Ÿฐ ๋‹ค์Œ NGINX ์›น ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

sudo service nginx restart

dynmap ์›น์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๋ฉด ์ด์ œ ๋ณด์•ˆ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค!
Very secure

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

๋ฆฌ๋ˆ…์Šค๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

๋งค์šฐ ์‹ ์ค‘ํ•˜๊ฒŒ.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์— ์ง„์ง€ํ•œ ๋Œ€๋‹ต์ด ์žˆ์Šต๋‹ˆ๋‹ค.
PuTTY ๋˜๋Š” ์„ ํƒํ•œ ๋‹ค๋ฅธ SSH ํด๋ผ์ด์–ธํŠธ์™€ ๊ฐ™์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ Linux ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž/๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ํ„ฐ๋ฏธ๋„์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐ๋„ท์—์„œ Linux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ/์ž์Šต์„œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ๋ช…๋ น์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

๋‚ด ์›น์‚ฌ์ดํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(NGINX)
์›น์‚ฌ์ดํŠธ๊ฐ€ ํฌํŠธ ํฌ์›Œ๋”ฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ ํฌํŠธ๋Š” 80์ด์ง€๋งŒ SSL ์ธ์ฆ ์„ค์น˜์— ๋Œ€ํ•œ ์ž์Šต์„œ๋ฅผ ๋”ฐ๋ž๋‹ค๋ฉด ํฌํŠธ๋Š” 443์ด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ NGINX๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

sudo service nginx status

๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

nginx -t -c /etc/nginx/sites-available/dynmap


dynmap ์›น ์‚ฌ์ดํŠธ์— ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!

๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. dynmap์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ ค๋ฉด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/dynmap fullrender <worldname> ์›ํ•˜๋ฉด ๊ฒŒ์ž„ ๋‚ด์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์„ธ๊ณ„๋ฅผ ์™„์ „ํžˆ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows ๋˜๋Š” Apache์— ๋Œ€ํ•œ ์ž์Šต์„œ๊ฐ€ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์š”์ฆ˜ Linux์™€ NGINX๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Windows๋‚˜ Apache๋กœ ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฃจ์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌป๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ์ฐฝ ๋ฐ/๋˜๋Š” ์•„ํŒŒ์น˜๋ฅผ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์Œ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. SQL์—์„œ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋ฐฑ์—… ํŒŒ์ผ configuration.txt.backup ์„ ๋งŒ๋“  ๊ฒฝ์šฐ ์ด์ „ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์‚ญ์ œ configuration.txt ํ•˜๊ณ  ์ด๋ฆ„์„ ๋ณ€๊ฒฝ configuration.txt.backup ์— configuration.txt ํ•˜๋ฉด ๋ฐ”๋กœ ๋ชจ๋“  ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค!

์™œ์š”?

์™œ ์•ˆ๋ผ?

dynmap์ด sql์„ ์‚ฌ์šฉํ•  ๋•Œ ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—…์ด ๋” ๋น ๋ฅผ ๊ฒƒ์ด๊ณ , ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹dynmap ์›น์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ํ”Œ๋ ˆ์ด์–ด ์•„์ด์ฝ˜ ๋ฐ/๋˜๋Š” ์ฑ„ํŒ…์ด ํ‘œ์‹œ๋˜๋‚˜์š”?

์˜ˆ, ํ”Œ๋ ˆ์ด์–ด ์•„์ด์ฝ˜์€ ์›นํŽ˜์ด์ง€์—์„œ ๊ณ„์† ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฑ„ํŒ…์ฐฝ๋„ ์ž˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ์ด๋‚˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”!

Doc improvement Feature

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํŠœํ† ๋ฆฌ์–ผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! 2๊ฐœ์˜ Forge ์„œ๋ฒ„๋ฅผ ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„ ๊ตฌ์„ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • Forge์—๋Š” MySQL์šฉ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Bukkit ๋ฐ Cauldron์ฒ˜๋Ÿผ). https://mvnrepository.com/artifact/mysql/mysql-connector-java ์—์„œ ๊ฐ€์ ธ์™€์„œ mods ๋””๋ ‰ํ† ๋ฆฌ์— ๋†“์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. #1674๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ํŠœํ† ๋ฆฌ์–ผ์—์„œ /etc/nginx/sites-available/ ๋ฐ /etc/nginx/sites-enabled ๋Š” Debian/Ubuntu์˜ nginx ๊ตฌํ˜„์—๋งŒ ์กด์žฌํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ ๊ตฌํ˜„์—์„œ ์œ ์ผํ•œ ๊ตฌ์„ฑ ํŒŒ์ผ์€ /etc/nginx/nginx.conf ์ž…๋‹ˆ๋‹ค.

  • MySQL ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋Š” ์ „์šฉ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์—†๋Š” ํ•œ ์ง€๋„ ์ €์žฅ์„ ์œ„ํ•ด MySQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚ด ํ™ˆ ์„œ๋ฒ„์—์„œ 2๊ฐœ์˜ Forge ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MySQL๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ธํ•ด CPU, RAM ๋ฐ ๋””์Šคํฌ I/O ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ›จ์”ฌ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค MySQL์€ dynmap์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๋งต ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” BLOB๋ฅผ ์ €์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. MySQL์„ ๋งต ์Šคํ† ๋ฆฌ์ง€๋กœ ์‚ฌ์šฉํ•˜๋ฉด SQL ํŠธ๋žœ์žญ์…˜์—์„œ ์ถ”๊ฐ€ CPU ์ฃผ๊ธฐ๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  dynmap์€ ์ง€๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ์ง€ BLOB๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— MySQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ ๋‚ด ํ™ˆ ์„œ๋ฒ„์—์„œ ๊ด€์ฐฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€๋ณด๋‹ค ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ๋” ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค. https://stackoverflow.com/questions/5285857/when-is-using-mysql-blob-recommended ๋„

  • ๋งŽ์€ ์ˆ˜์˜ BLOB๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์œ ํ˜•์˜ DB๊ฐ€ ์„ค๊ณ„๋˜์—ˆ๋Š”์ง€ ๋งž์ถฐ๋ณด์„ธ์š”. ํŒŒ์ผ ์‹œ์Šคํ…œ! nginx + php-fpm + ํŒŒ์ผ ์ €์žฅ์„ ์ถ”์ฒœํ•˜๋Š” ํŠœํ† ๋ฆฌ์–ผ ํŽธ์ง‘์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ url: ์„น์…˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

url:
    # configuration URL
    configuration: 'standalone/dynmap_config.json?={timestamp}'
    # update URL
    update: 'standalone/dynmap_{world}.json?={timestamp}'
    # sendmessage URL
    sendmessage: "standalone/sendmessage.php"
    # login URL
    login: "standalone/login.php"
    # register URL
    register: "standalone/register.php"
    # tiles base URL
    tiles: 'tiles/'
    # markers base URL
    markers: 'tiles/'

๋ชจ๋“  38 ๋Œ“๊ธ€

dynmapforge ์‚ฌ์šฉ์ž๋Š” plugins/dynmap/web ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

username<strong i="7">@hostname</strong>:/srv/minecraft/instancename$ find dynmap/ -type d | grep -v dynmap/web/tiles
dynmap/
dynmap/web
dynmap/web/images
dynmap/web/standalone
dynmap/web/css
dynmap/web/css/images
dynmap/web/js
dynmap/templates
dynmap/texturepacks
dynmap/texturepacks/standard
dynmap/markers
dynmap/renderdata
dynmap/renderdata/modsupport
dynmap/export
dynmap/colorschemes

(๋‚˜๋Š” ๊ฑฐ๊ธฐ์— 1500๊ฐœ์˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— dynmap/web/tiles/๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...)

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ง์ ‘ ์‹œ๋„ํ•˜์ง€๋งŒ ๋‚ด nginx์™€ minecraft ์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์žˆ์Šต๋‹ˆ๋‹ค. :๋•€_๋ฏธ์†Œ:

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ผํ–ˆ์ง€๋งŒ ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. dynmap๊ณผ ๋™์ผํ•œ ์„œ๋ฒ„์— Apache๊ฐ€ ์žˆ๊ณ  ์›น ํด๋”๋ฅผ ๊ทธ๊ณณ์œผ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ฝ˜์†”์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”๋ฐ url๋กœ ์ด๋™ํ•˜๋ฉด ๊ฒ€์ •์ƒ‰ ๋ฐฐ๊ฒฝ๋งŒ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ๋ Œ๋”๋ง๋œ SQLite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์นœ ๊ฒŒ ์•„๋‹๊นŒ?

์˜ค๋ฅ˜ ๋ฐ/๋˜๋Š” ์‹คํŒจํ•œ ์š”์ฒญ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์„ ํ™•์ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@miiichael
์˜ˆ, ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๋™ํ•  ๋•Œ์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” dynmap์ด ํƒ€์ผ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๋ Œ๋”๋ง ์ง„ํ–‰ ์ƒํ™ฉ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„๋ฅผ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ๋‘˜ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋Œ€์‹  mysql์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@MrLogano
๊ทธ๊ฒƒ์€ ์•„ํŒŒ์น˜๊ฐ€ ์›น ํด๋”์— ์—†๊ธฐ ๋•Œ๋ฌธ์— SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์›น ํด๋”๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜์— ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  dynmap ํด๋”์— ์žˆ๋Š” ์›น ํด๋”๋ฅผ ์•„ํŒŒ์น˜๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ php ํŒŒ์ผ(๋ณต์‚ฌ๋œ ์›น ํด๋”์—์„œ)์„ ํŽธ์ง‘ํ•˜์—ฌ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ SQLite db ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๊ฝค ๋ฐ”๋น ์„œ ์‹œ๊ฐ„์ด ๋‚˜๋ฉด ์ข€ ๋” ์ž์„ธํ•œ ํŠœํ† ๋ฆฌ์–ผ์„ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@haloflooder
PHP ํŒŒ์ผ "dynmap_access"๋Š” dynmap ๋””๋ ‰ํ† ๋ฆฌ์˜ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ ๋” ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๊ตฌ์„ฑ์—์„œ URL ์„น์…˜์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์™„์ „ํžˆ ๋นˆ ํŽ˜์ด์ง€๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ œ์™ธํ•˜๋ฉด ํŒŒ์ผ ํŠธ๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ SQLite๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด 500 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„ํŒŒ์น˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋ฉด SQLite_tiles.php์˜ 79ํ–‰์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค. ํ–‰์šด๋„ ์—†์ด ๊ถŒํ•œ์„ 775๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž์Šต์„œ๋ฅผ ๋”ฐ๋ฅด์ง€๋งŒ ์›น ํŽ˜์ด์ง€์— "๊ตฌ์„ฑ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Œ: ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜"๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@gundami์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์กฐ์‚ฌ ๊ฒฐ๊ณผ /var/log/nginx/access.log์—์„œ ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
10.0.0.52 - - [24/Jan/2020:20:31:26 +0000] "GET /standalone/MySQL_configuration.php HTTP/1.1" 500 5 "http://dragonmc/" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" "-"

@MrLogano ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ๋‹ต๋ณ€์ด ๋Šฆ์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ช‡ ๊ฐœ์›” ๋™์•ˆ ์—„์ฒญ๋‚˜๊ฒŒ ๋ฐ”๋นด์Šต๋‹ˆ๋‹ค.

@gundami @ads103 pastebin์—์„œ dynmap์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? mysql ์ž๊ฒฉ ์ฆ๋ช…๊ณผ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ฒ€์—ดํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํ™•์‹ ํ•˜๋Š”! ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค: https://pastebin.com/1xQ2Unjb

@ads103 ๊ท€ํ•˜์˜ ์•ก์„ธ์Šค ๋กœ๊ทธ์— http://dragonmc/ ๋ผ๊ณ  ํ‘œ์‹œ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. nginx ๊ตฌ์„ฑ์— ๋ฌด์—‡์ด ์žˆ์Šต๋‹ˆ๊นŒ?

dynmap์ด ์—…๋ฐ์ดํŠธ ๋œ์ง€ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์˜ dynmap์— ์ƒˆ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ณ  ๋‚ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ 9์›” ์ดํ›„ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋„ค, dragonmc๋Š” ์ œ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ DNS ์„œ๋ฒ„์— ์žˆ์œผ๋ฏ€๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์— "dragonmc"๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด ์•„ํŒŒ์น˜ ๊ตฌ์„ฑ๊ณผ ๋‚ด dynmap ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
https://pastebin.com/NQ8fNjqa

@ads103 ๊ท€ํ•˜์˜ ์„œ๋ฒ„๋„ ๊ท€ํ•˜์˜ ๋„คํŠธ์›Œํฌ์—์„œ ๋กœ์ปฌ๋กœ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ์š”?

๋„ค! ๋งž์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋กœ์ปฌ IP์— ์žˆ์Šต๋‹ˆ๋‹ค!

@haloflooder ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์— ์ƒˆ ๋ฒ„์ „์„ ์„ค์น˜ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ด ํ•จ์ˆ˜์— ์˜ํ•ด map.js ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ "configuration" ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋œ ์œ„์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

`ํ•จ์ˆ˜ DynMap(์˜ต์…˜) {

    var me = this;

    if(me.checkForSavedURL())

            return;

    me.options = options;

    $.getJSON(me.options.url.configuration, function(configuration) {

            if(configuration.error == 'login-required') {

                    me.saveURL();

                    window.location = 'login.html';

            }

            else if(configuration.error) {

                    alert(configuration.error);

            }

            else {

                    me.configure(configuration);

                    me.initialize();

            }

    }, function(status, statusMessage) {

            alert('Could not retrieve configuration: ' + statusMessage);

    });

}

`

@ad103 ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํ•œ์„ ๋งž์ถฐ์•ผ ํ•ด์„œ ์ผ์ด ๋ฐ”๋น ์„œ์š”. ๊ตฌ์„ฑ์€ ๋…๋ฆฝ ์‹คํ–‰ํ˜•์˜ MySQL_configuration.php์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

dynmap์ด ์ˆ˜์ •๋œ ๊ตฌ์„ฑ์œผ๋กœ ๊ตฌ์„ฑ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•œ ํ›„ ์›น ํŒŒ์ผ์„ ์›น ์„œ๋ฒ„์— ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๊นŒ?

์‘ ๋‚˜๋Š” ํ–ˆ์–ด. ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์ด ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ๋•Œ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์œผ๋ฏ€๋กœ ๊ตฌ์„ฑ ๊ฐ’์€ ์ตœ์†Œํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํƒ€์ผ์„ _into_ ๊ฐ€์ ธ์˜ฌ ๋งŒํผ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—๋Š” web ํด๋”์˜ ๋‚ด์šฉ์„ ์›น ์„œ๋ฒ„์— ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์Œ ์ง€์นจ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
sudo cp -r /home/MyUsername/minecraft/servers/creative/plugins/dynmap/web/ /var/www/dynmap/
web ํด๋”๋ฅผ dynmap ํด๋”๋กœ, _๋˜๋Š”_ web ํด๋”์˜ _contents_๋ฅผ dynmap ํด๋”๋กœ ๋ณต์‚ฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@ads103 ์˜ค์˜ค , ์ข‹์€ ์บ์น˜

web ํด๋”์— ์žˆ๋Š” ๋‚ด์šฉ์„ dynmap webserver ํด๋”์— ๋ณต์‚ฌํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๋„ฃ์œผ๋ผ๋Š” ๋œป์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋‚˜์ค‘์— ์ตœ์‹  ๋ฒ„์ „์˜ dynmap์œผ๋กœ ๋‚ด ๊ฐ€์ด๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

MySQL ์•ก์„ธ์Šค ์„ค์ •์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? T์— ๋Œ€ํ•œ ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์ง€๋„์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ํ›„ ๊ฒ€์€์ƒ‰ ํ™”๋ฉด๊ณผ "๊ตฌ์„ฑ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Œ: ์ž˜๋ชป๋œ ๊ฒŒ์ดํŠธ์›จ์ด" ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‚˜๋Š” ๋ฐ”๋ณด์ด๊ณ  PHP๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์šฐ์„ , ๋†€๋ผ์šด ๊ฐ€์ด๋“œ! ๋‚˜๋Š” ์ž ์‹œ ๋™์•ˆ ์ด๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "๊ตฌ์„ฑ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Œ: ์ž˜๋ชป๋œ ๊ฒŒ์ดํŠธ์›จ์ด"๋ผ๋Š” ๋ฉ”์‹œ์ง€๋งŒ ํ‘œ์‹œ๋˜๋Š” @WearisomelyVerbose ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋นŒ๋“œ์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ •๋ณด: ๋‚ด Minecraft ์„œ๋ฒ„๋Š” ๋ณ„๋„์˜ ์„œ๋ฒ„์— ์žˆ์œผ๋ฉฐ Mysql ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ Dynmap์—์„œ /web ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์•Œ์•„์ฐจ๋ฆฐ ๊ฒƒ์€ Nginx์—์„œ Dynmap.conf ํŒŒ์ผ์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
sudo nginx -t -c /etc/nginx/sites-available/dynmap
nginx: [emerg] "server" ์ง€์‹œ๋ฌธ์€ /etc/nginx/sites-available/ dynmap:2 ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
nginx: ๊ตฌ์„ฑ ํŒŒ์ผ /etc/nginx/sites-available/dynmap ํ…Œ์ŠคํŠธ ์‹คํŒจ

@ads103 @๊ฑด ๋‹ค๋ฏธ
์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋งต์„ ์—ฐ ํ›„ "๊ตฌ์„ฑ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Œ: ์˜ค๋ฅ˜"์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์›น ์„œ๋ฒ„์—์„œ "...\standalone\MySQL_config.php" ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
...
$dbhost = '๋กœ์ปฌํ˜ธ์ŠคํŠธ';
...
IP ์ฃผ์†Œ ๋Œ€์‹ . ํ•˜์ง€๋งŒ ์ž์„ธํžˆ๋Š” ๋ชจ๋ฅด์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚ด ์„ค์ • btw๋Š” 2 Raspberry Pi์ž…๋‹ˆ๋‹ค. RP4B(4GB)๋Š” ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ(๋‹ค๋ฅธ ์„œ๋น„์Šค ์ค‘)๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  RP3B+๋Š” DynMap(Apache+SQL)์„ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ํŠœํ† ๋ฆฌ์–ผ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! :)

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ๋‚ด ๊ฒƒ์€ ๋Œ์ด์ผœ๋ณด๋ฉด ์•„์ฃผ ๋‹จ์ˆœํ–ˆ๋‹ค. ์ข…์†์„ฑ์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ php-json ๋ฐ php-mysqlnd๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (์ €๋Š” Fedora 31 ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ Ubuntu ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.)

php-fpm ์ด /var/log/php-fpm ์— ์žˆ๋Š” ์ž์ฒด ๋กœ๊ทธ ํŒŒ์ผ์ด ์žˆ๋Š” ๋ณ„๋„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. www-error.log๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‹ค์Œ ๋‘ ๊ฐœ์˜ ๋กœ๊ทธ ์ค„์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

[24-Feb-2020 14:52:43 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function mysqli_connect() in /usr/share/nginx/html/dynmap/standalone/MySQL_funcs.php:28
Stack trace:
#0 /usr/share/nginx/html/dynmap/standalone/MySQL_funcs.php(38): initDbIfNeeded()
#1 /usr/share/nginx/html/dynmap/standalone/MySQL_funcs.php(63): getStandaloneFileByServerId('dynmap_config.j...', 0)
#2 /usr/share/nginx/html/dynmap/standalone/MySQL_configuration.php(22): getStandaloneFile('dynmap_config.j...')
#3 {main}
  thrown in /usr/share/nginx/html/dynmap/standalone/MySQL_funcs.php on line 28
[24-Feb-2020 15:00:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function json_decode() in /usr/share/nginx/html/dynmap/standalone/MySQL_configuration.php:26
Stack trace:
#0 {main}
  thrown in /usr/share/nginx/html/dynmap/standalone/MySQL_configuration.php on line 26

json_decode() ๋ฐ mysqli_connect() ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋น ๋ฅธ Google ๊ฒ€์ƒ‰์€ ์ด ๋‘ ๊ฐœ์˜ ๋ˆ„๋ฝ๋œ ํŒจํ‚ค์ง€๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ์„ค์น˜ํ•˜๊ณ  ๋‚ด ๋ธŒ๋ผ์šฐ์ €์—์„œ Dynmap์„ ์ƒˆ๋กœ๊ณ ์นจํ•œ ํ›„, ๊ทธ๊ฒƒ์€... ๊ทธ๋ƒฅ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค.

ํŠœํ† ๋ฆฌ์–ผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! 2๊ฐœ์˜ Forge ์„œ๋ฒ„๋ฅผ ๋…๋ฆฝํ˜• ์›น ์„œ๋ฒ„ ๊ตฌ์„ฑ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • Forge์—๋Š” MySQL์šฉ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Bukkit ๋ฐ Cauldron์ฒ˜๋Ÿผ). https://mvnrepository.com/artifact/mysql/mysql-connector-java ์—์„œ ๊ฐ€์ ธ์™€์„œ mods ๋””๋ ‰ํ† ๋ฆฌ์— ๋†“์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. #1674๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ํŠœํ† ๋ฆฌ์–ผ์—์„œ /etc/nginx/sites-available/ ๋ฐ /etc/nginx/sites-enabled ๋Š” Debian/Ubuntu์˜ nginx ๊ตฌํ˜„์—๋งŒ ์กด์žฌํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ ๊ตฌํ˜„์—์„œ ์œ ์ผํ•œ ๊ตฌ์„ฑ ํŒŒ์ผ์€ /etc/nginx/nginx.conf ์ž…๋‹ˆ๋‹ค.

  • MySQL ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋Š” ์ „์šฉ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์—†๋Š” ํ•œ ์ง€๋„ ์ €์žฅ์„ ์œ„ํ•ด MySQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚ด ํ™ˆ ์„œ๋ฒ„์—์„œ 2๊ฐœ์˜ Forge ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MySQL๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ธํ•ด CPU, RAM ๋ฐ ๋””์Šคํฌ I/O ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ›จ์”ฌ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค MySQL์€ dynmap์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๋งต ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” BLOB๋ฅผ ์ €์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. MySQL์„ ๋งต ์Šคํ† ๋ฆฌ์ง€๋กœ ์‚ฌ์šฉํ•˜๋ฉด SQL ํŠธ๋žœ์žญ์…˜์—์„œ ์ถ”๊ฐ€ CPU ์ฃผ๊ธฐ๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  dynmap์€ ์ง€๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ์ง€ BLOB๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— MySQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ ๋‚ด ํ™ˆ ์„œ๋ฒ„์—์„œ ๊ด€์ฐฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€๋ณด๋‹ค ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ๋” ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค. https://stackoverflow.com/questions/5285857/when-is-using-mysql-blob-recommended ๋„

  • ๋งŽ์€ ์ˆ˜์˜ BLOB๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์œ ํ˜•์˜ DB๊ฐ€ ์„ค๊ณ„๋˜์—ˆ๋Š”์ง€ ๋งž์ถฐ๋ณด์„ธ์š”. ํŒŒ์ผ ์‹œ์Šคํ…œ! nginx + php-fpm + ํŒŒ์ผ ์ €์žฅ์„ ์ถ”์ฒœํ•˜๋Š” ํŠœํ† ๋ฆฌ์–ผ ํŽธ์ง‘์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์›น ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ url: ์„น์…˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

url:
    # configuration URL
    configuration: 'standalone/dynmap_config.json?={timestamp}'
    # update URL
    update: 'standalone/dynmap_{world}.json?={timestamp}'
    # sendmessage URL
    sendmessage: "standalone/sendmessage.php"
    # login URL
    login: "standalone/login.php"
    # register URL
    register: "standalone/register.php"
    # tiles base URL
    tiles: 'tiles/'
    # markers base URL
    markers: 'tiles/'

ํŠœํ† ๋ฆฌ์–ผ์„ ๋งŒ๋“ค์–ด์ค€ @haloflooder ์—๊ฒŒ ๋˜ ๋‹ค๋ฅธ ๊ฐ์‚ฌ๋ฅผ ์ „ํ•ฉ๋‹ˆ๋‹ค! ์ €๋„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ๋Š”๋ฐ ์ž˜ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Frumple์ด MRT ์„œ๋ฒ„์— ๋Œ€ํ•ด ์นœ์ ˆํ•˜๊ฒŒ ๊ณต์œ ํ•œ ์„ค์ •์ด ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. https://github.com/Frumple/mrt-docker-services/blob/master/containers/dynmap-main/docker-compose.yml

@database64128 json ์„ค์ • ํŒŒ์ผ์— ๋Œ€ํ•œ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ˆ˜์ • ์‚ฌํ•ญ: json ๊ตฌ์„ฑ ํŒŒ์ผ์€ Dynmap์˜ configuration.txt ๋‚ด์— login-enabled: false ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ฒŒ๋ ˆ? ์˜๋„์ ? ๋ชจ๋ฅด๊ฒ ์–ด์š”. ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด: https://github.com/webbukkit/dynmap/issues/2848.

json ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค!

@MrLogano๊ฐ€ ์„ค๋ช…ํ•œ ๊ฒ€์€์ƒ‰ ํ™”๋ฉด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์„œ๋ฒ„์—์„œ MySQL๊ณผ nginx๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ง€๊ธˆ ์ „์ฒด ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ MySQL์˜ "ํƒ€์ผ" ํ…Œ์ด๋ธ”์—์„œ ํ–‰ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ MySQL์— ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์— ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

" https://REDACTED/standalone/config.js?_=3.0-beta-10-257 "์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ MIME ์œ ํ˜•("text/html")์ด ์œ ํšจํ•œ JavaScript MIME ์œ ํ˜•์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์— ๋Œ€ํ•œ ๋กœ๋“œ ์‹คํŒจ

๋‚ด ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. MySQL ์„œ๋ฒ„์— ์‚ฌ์šฉํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Minecraft ์„œ๋ฒ„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ nginx ์„œ๋ฒ„์—์„œ๋Š” ํ™•์ธํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๋‘˜ ๋‹ค์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์Œ, ํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์›น์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์•„ํŒŒ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ) iframe ์—†์ด ๋‚ด ์›น์‚ฌ์ดํŠธ์—์„œ dynmap์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์–ด๋–ค ํŠœํ† ๋ฆฌ์–ผ๋„ ๋ณด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—

@alex17lol ์ด ๊ฐ€์ด๋“œ๋Š” ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆ๋œ Nginx ๊ตฌ์„ฑ ๋Œ€์‹  ๊ณ ์œ ํ•œ Apache ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@alex17lol ์ด ๊ฐ€์ด๋“œ๋Š” ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆ๋œ Nginx ๊ตฌ์„ฑ ๋Œ€์‹  ๊ณ ์œ ํ•œ Apache ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo ๋ช…๋ น์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์ธ ์›น ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

_ ๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ์œ„ํ‚ค์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? _

๋งŒ๋“ค์–ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

SELinux๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์Šฌํ””์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ถ„๋ช…ํ•œ ๊ฒƒ์€ ์›น ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ๋ชจ๋“  ์•ก์„ธ์Šค๋ฅผ ์™„์ „ํžˆ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์›น ์„œ๋ฒ„ ์˜ค๋ฅ˜ ๋กœ๊ทธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋” ๋ฏธ๋ฌ˜ํ•œ ๋ฌธ์ œ๋Š” php-fpm ์˜ค๋ฅ˜ ๋กœ๊ทธ์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„ ๋กœ๊ทธ์˜ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๊ฒ€์€์ƒ‰ ํ™”๋ฉด ๋ฌธ์ œ์™€ ๋‘๋ ค์šด ๊ตฌ์„ฑ ์ฝ๊ธฐ ์‹คํŒจ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

[01-Jun-2020 17:45:44 UTC] PHP Warning: mysqli_connect(): (HY000/2002): Permission denied in /home/data/web/dynmap/standalone/MySQL_funcs.php on line 30

# grep mysql /var/log/audit/audit.log | tail -1 | tee /dev/stderr | audit2allow
type=AVC msg=audit(1591033906.504:2725): avc:  denied  { name_connect } for  pid=717 comm="php-fpm" dest=3306 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:mysqld_port_t:s0 tclass=tcp_socket permissive=0


#============= httpd_t ==============

#!!!! This avc can be allowed using one of the these booleans:
#     httpd_can_network_connect, httpd_can_network_connect_db
allow httpd_t mysqld_port_t:tcp_socket name_connect;

์ด ๋งˆ์ง€๋ง‰ ํผ์ฆ์„ ํ•ด๊ฒฐํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# setsebool -P httpd_can_network_connect_db=1

rsync ์ด scp -r ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค. scp ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฐ ์†๋„๋กœ ํŽ„๋Ÿญ์ด๊ณ  ์žˆ์–ด์„œ 300MB ์ •๋„์—์„œ ์ฃฝ์ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. scp ์‹œ๋„์— ๋น„ํ•ด 2TB๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋™์•ˆ rsync ๊ฝค ๋งŽ์ด ํ–ˆ๊ณ , ๋งค๋ฒˆ ์ „์ฒด ํ˜ผ๋ž€์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  rsync ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

rsync -cavzAX me@$VPS:/path/to/plugins/dynmap/web/ /path/to/web/dynmap/

DB2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๊ฒƒ์„ ์‹œ๋„ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ •๋ง ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ^^ #3125 ๋ฌธ์ œ. ๋ˆ„๊ตฌ๋“ ์ง€์ด ๋ฌธ์ œ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๊ฐ€์ด๋“œ๋ฅผ ์„ธ ๋ฒˆ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŒ… ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋งค๋ฒˆ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜๊ฒฌ์— ์–ธ๊ธ‰๋œ ๋ช‡ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋‚˜๋„ discord๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ฒˆ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค.

@arkD ๋‹คํ–‰ํžˆ๋„, ๋‹ค๋ฅธ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์„ค์ •์„ ์„ค์ •ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์•„์ง ์Šคํ”ผ๊ณณ ํŽ˜์ด์ง€์— ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต๊ฐœ๋˜์ง€ ์•Š์€ ์ตœ์‹  ๋ฒ„์ „์˜ Dynmap 1.16.3์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ ๋ช‡ ์ฃผ ์•ˆ์— ์ด ๊ฐ€์ด๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ.

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค - ์ด ๊ฐ€์ด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NGINX์—์„œ PHP๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04

์ด์ œ "๊ตฌ์„ฑ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Œ" ์˜ค๋ฅ˜๊ฐ€ ๋” ์ด์ƒ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฒ€์€์ƒ‰ ํ™”๋ฉด , ์‚ฌ์ด๋“œ๋ฐ”, ์‹œ๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ข

DB๋Š” sqlite๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๊ฐ€์ด๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ณ  ๋ Œ๋”๋ง๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ: ์ฝ˜์†”์— ์ด ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ์ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค
image

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰