MySQL/SQLite๋ก ๋ ๋ฆฝ ์คํํ ์๋ฒ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ํํ ์ง์นจ์ ๋ณธ ์ ์ด ์์ต๋๋ค. ๋ ๋ฆฝํ ์น ์๋ฒ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ Wiki ํ์ด์ง๋ ์ค๋ ์ ์ ๊ตฌ์์ ๋๋ค.
dynmap์ ๋ช ์๊ฐ ๋์ ์ฐ๋ฅธ ํ. ๋ค์์ *nix ์๋ฒ์ NGINX์์ ๋ ๋ฆฝ ์คํํ ์น ์๋ฒ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ต์์ ๋๋ค.
๐ด ๊ฒฝ๊ณ ๐ด
์ด ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด๋ฉด dynmap์ด ์๋ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ _ํ์ฌ ์ฌ์ฉํ์ง ์๋_ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ค์ ๋ฉ๋๋ค.
Dynmap๊ณผ ํจ๊ป MySQL์ ์ฌ์ฉํ๋ ๊ฒ์ ์ปค๋ฎค๋ํฐ์์ ์์ ํ ํ ์คํธ๋์ง ์์์ต๋๋ค.
์ด ์์ต์์์๋ Linux์ ๋ํด ์ฝ๊ฐ ์๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. Linux๋ฅผ ํ ์ค ๋ชจ๋ฅธ๋ค๋ฉด, ๋ฐฐ์ฐ๊ธฐ์ ๋๋ฌด ๋ฆ์ ๋๋ ์์ต๋๋ค!
"minecraft ์๋ฒ ํธ์คํธ"๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ minecraft ์๋ฒ ํธ์คํธ๋ก ๋ ๋ฆฝ ์คํํ ์น ์๋ฒ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. Dynmap์ฉ ๋ ๋ฆฝ ์คํํ ์น ์๋ฒ๋ฅผ ํธ์คํ ํ๋ ค๋ฉด ์น์ฌ์ดํธ ํธ์คํธ ๋๋ vps๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
์ ํ์ ์ฌ์ง๊ฐ ์๋ค๋ฉด SQLite ๋์ MySQL์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ช ๊ฐ์ง ์ถ๊ฐ ๋จ๊ณ๊ฐ ํ์ํ ์ ์์ง๋ง ๋ฐ์ ๋ฉด์ ๋ณด์ญ์์ค. ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ๊ณผ ํจ๊ป MySQL์ ์ฌ์ฉํ ์ ์์ต๋๋ค :)
์ด ํํ ๋ฆฌ์ผ์์๋ ๋ํ sudo๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. sudo perms๊ฐ ์์ผ๋ฉด ์ด์ด ์ข์ง ์๊ฑฐ๋ VPS๋ฅผ ๋น๋ฆด ์ ์์ต๋๋ค.
์ ์๊ฒ ์ํค ํธ์ง ๊ถํ์ ์ฃผ์๋ฉด. ๋ ๋ฆฝํ ์น ์๋ฒ๋ฅผ ์ค์ ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ํค์ ๊ธฐ๊บผ์ด ๊ธฐ๊ณ ํ๊ฒ ์ต๋๋ค. ;)
์์ ํ ์ ํ ์ฌํญ์ธ cloudflare์ ํ๋ก์์ ํจ๊ป ์๋ํ๋ ๋ ๋ฆฝ ์คํํ ์น ์๋ฒ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค. ์ด๋ณด๊ธฐ ์ ๋น์ ์ด dynmap ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ ์ ์๋๋กํ๊ธฐ ์ํ์ฌ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์ ๊ถ์ฅํฉ๋๋ค. ๋์ certbot์ ์ฌ์ฉํ์ฌ SSL ์ธ์ฆ์๋ฅผ ์ค์นํ๋ ค๋ ๊ฒฝ์ฐ ๋ณด๋์ค ์์ต์์ ์ด ๋ถ๋ถ์ ๋ฐ๋ฅด์ง ๋ง์ญ์์ค.
๋ํ ์์ ํ ์ ํ ์ฌํญ์ธ certbot ๋๋ ๋ค๋ฅธ ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํ์ฌ NGINX ์น ์๋ฒ์ SSL ์ธ์ฆ์๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ๋ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค. ์ด๋ณด๊ธฐ ์ ๋น์ ์ด dynmap ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ ์ ์๋๋กํ๊ธฐ ์ํ์ฌ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์ ๊ถ์ฅํฉ๋๋ค. ๋์ Cloudflare ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ณด๋์ค ์์ต์์ ์ด ๋ถ๋ถ์ ๋ฐ๋ฅด์ง ๋ง์ญ์์ค.
์ฅ์ :
๋จ์ :
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค
์์ํ๋ ค๋ฉด ๋ ๋ฆฝ ์คํํ dynmap ์น ์ฌ์ดํธ๋ฅผ ํธ์คํ ํ ์๋ฒ์ ์น ์๋ฒ๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ํํ ๋ฆฌ์ผ์ ์ด ๋ถ๋ถ์์๋ ์๋ฒ์ MySQL์ ์ค์นํ๋ ๋ฐฉ๋ฒ๋ ๋ค๋ฃน๋๋ค.
์ด๋ค ์ด์ ๋ก SQLite๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด MySQL/MariaDB ์์ด NGINX๋ง ์ค์นํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ NGINX๋ ๋ง์ธํฌ๋ํํธ ์๋ฒ๊ฐ ํธ์คํ ๋๋ ๋์ผํ ์๋ฒ์ ์์ด์ผ ํฉ๋๋ค.
์น์ฌ์ดํธ ํธ์คํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ง์ธํฌ๋ํํธ ํธ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ. ํํ ๋ฆฌ์ผ ๋งํฌ ์๋์ ์ฐธ๊ณ ์ฌํญ์ ์ฐธ์กฐํ์ญ์์ค.
์ผ๋ฐ์ ์ผ๋ก ๋ง์ธํฌ๋ํํธ ์๋ฒ์ ๋์ผํ ์๋ฒ์ MySQL์ ์ค์นํด์ผ ํฉ๋๋ค. MySQL์ ์ฌ์ฉํ๋ ํ๋ฌ๊ทธ์ธ๊ณผ ๋์ผํ MySQL ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. MySQL์ ์น ์๋ฒ๊ฐ ์ฝ๊ณ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ/๋ก๋ํ๊ธฐ ์ํด Dynmap ํ๋ฌ๊ทธ์ธ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก MySQL/MariaDB ์๋ฒ๊ฐ ๋ง์ธํฌ๋ํํธ ์๋ฒ์ ๋์ผํ ์๋ฒ/๋คํธ์ํฌ์ ์์ผ๋ฉด ์ง์ฐ ์๊ฐ์ด ๋ ์งง๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ์ด์ ์ด ์์ต๋๋ค.
์ธํฐ๋ท์ nginx/MySQL/MariaDB๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํํ ๋ฆฌ์ผ์ด ๋ฌด์ํ ๋ง์ต๋๋ค. ๋ค์์ ์ผ๋ถ Linux OS๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ต์ ๋งํฌ์ ๋๋ค.
MariaDB๋ MySQL๊ณผ ๊ฑฐ์ ๋์ผํ๊ธฐ ๋๋ฌธ์ ์์ต์์์ MariaDB๋ฅผ ์ค์นํ๋๋ก ์ง์ํ๋๋ผ๋ ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค.
์น ์๋ฒ์ IP๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ ฅํ์ฌ ์น ์๋ฒ๊ฐ ์น ํ์ด์ง๋ฅผ ์ ๊ณตํ๋์ง ํ ์คํธํฉ๋๋ค. ์๋ฌด ๊ฒ๋ ๋ํ๋์ง ์์ผ๋ฉด ๋ฐฉํ๋ฒฝ์ด ํฌํธ๋ฅผ ์ฐจ๋จํ๊ณ ์๊ฑฐ๋ nginx ์๋ฒ๋ฅผ ์์ํ์ง ์์์ ์ ์์ต๋๋ค.
์ด์ MySQL/MariaDB ์๋ฒ๋ฅผ ์ค์ ํฉ๋๋ค.
๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ์ ํ๋ ๊ถํ์ผ๋ก ์ ์ฌ์ฉ์/๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ธ๋ถ ์น ์๋ฒ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ ์น ์๋ฒ๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ์ ์๋๋ก ๋ฐฉํ๋ฒฝ(iptables/firewalld/ufw/etc)์ ์ค์ ํ ์๋ ์์ต๋๋ค.
๋ง์ธํฌ๋ํํธ ์๋ฒ๋ฅผ ํธ์คํ ํ๋ ์๋ฒ์ ํฐ๋ฏธ๋์ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
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 ์ฌ์ฉ์์๊ฒ ์ค์ ํ ์ ์๋ ์ด๋ฌํ ๊ถํ์ด ์์ต๋๋ค.
์ด์ ํ๋ฌ๊ทธ์ธ์์ ๊ตฌ์ฑ์ ์ผ๋ถ ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฒ์ ์ต์ ๋ฒ์ ์ 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
ํฉ๋๋ค.
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์ ํ๋ก์๋ฅผ ์ค์นํด์ผํฉ๋๋ค!
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ๋๋ค!
๋ค์์ ๋ช ๊ฐ์ง ์ต์ ์ ๋๋ค.
์ต์
1 : ํ๋ฌ๊ทธ์ธ ํด๋์ dynmap ์น ํด๋์ ์น ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. (์ฝ๊ฒ)
์ต์
2 : ์น ํด๋๋ฅผ ์๋ฒ์ ๋ค๋ฅธ ์์น๋ก ๋ณต์ฌ(๋ ์์ ํจ)
์ ์ผํ ์ต์ : ์ ์ผํ ์ต์ ์ ์น ํด๋๋ฅผ ์น ์๋ฒ๊ฐ ์๋ ์๋ฒ์ ๋ณต์ฌํ๋ ๊ฒ์ ๋๋ค.
hostgator, namecheap, 000webhost ๋ฑ๊ณผ ๊ฐ์ ์น ํธ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ผํ ์ต์
์ ์น ํด๋๋ฅผ ์น ํธ์คํธ์ ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค.
๋ค๋ฃฐ ์น ํธ์คํธ๊ฐ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ ์ด ์์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ ์ถ๊ฐํ์ง ์๊ฒ ์ต๋๋ค.
์ค์ ์ต์ ์ด ์๋ ๋ค์ ์น์ ์ผ๋ก ์ด๋ํ๊ธฐ ์ ์. 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๋ณด๋ค ๋ ์์ ํ ์ต์ ์ด๋ฏ๋ก ์ต์ 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;
}
}
์์:
root /home/someuser/minecraft/servers/creative/plugins/dynmap/web;
๋ณด๋ค ์์ ํ ๋ฐฉ๋ฒ์ผ๋ก ์น ์๋ฒ๋ฅผ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด. ์ด๊ฒ์ ๋น์ ์๊ฒ ์ ํฉํ ์ต์ ์ ๋๋ค!
์ฅ์ :
๋จ์ :
dynmap ์น ํ์ผ์ ๋ค๋ฅธ ์์น๋ก ๋ณต์ฌ
sudo cp -r /home/<USERNAME>/<MINECRAFTSERVER>/plugins/dynmap/web/ /var/www/dynmap/
์์:
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;
}
}
์ต์ 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 ์น ์๋ฒ๋ฅผ ํธ์คํ ํ๋ ๊ฒฝ์ฐ. ์ด๊ฒ์ ๋น์ ์๊ฒ ๋ฑ ๋ง๋ ์น์ ์ ๋๋ค!
๋ฉ๋ชจ
์ฅ์ :
๋จ์ :
dynmap ์น ํ์ผ์ ๋ค๋ฅธ ์์น๋ก ๋ณต์ฌ
๋ง์ธํฌ๋ํํธ ์๋ฒ๋ฅผ ํธ์คํ ํ๋ ์๋ฒ์์ ์ด ๋ช ๋ น์ ์คํํฉ๋๋ค. ์ด ๋ช ๋ น์ ๋ง์ธํฌ๋ํํธ ์๋ฒ์์ ์น ์๋ฒ๋ก ํด๋๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์น ์๋ฒ์ ๋ํ ์ํธ๋ฅผ ๋ฌป์ต๋๋ค.
sudo scp -r /home/<USERNAME>/<MINECRAFTSERVER>/plugins/dynmap/web <WEBSERVER_USERNAME>@<WEBSERVER_IP>:/var/www/dynmap
์์:
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 ์น ์๋ฒ ์ค์ ์ ๋ฐ๋ก๊ฐ๊ธฐ๋ฅผ ๋ง๋ค์ด ํด๋์ ๋ฃ์ด ๋ณด๊ฒ ์ต๋๋ค.
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 ์น์ฌ์ดํธ์์ ์ด ์ง์นจ ์
์ฐธ๊ณ ๋ก certbot์ ์ธ์ฆ์ ๋ค๋ฅธ ์ ๊ณต์๋ณด๋ค ๋ ๋นจ๋ฆฌ ๋ง๋ฃ๋์ง๋ง ์ธ์ฆ์ ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ๋ฐ๋ฅด๋ฉด ์ธ์ฆ์ ๊ฐฑ์ ํ๋ ์๋ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋์์ผ๋ก 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 ์น์ฌ์ดํธ๋ก ์ด๋ํ๋ฉด ์ด์ ๋ณด์์ด ์ ์ง๋ฉ๋๋ค!
Cloudflare ํ๋ก์์ ์ข์ ์ ์ ์น ์๋ฒ์ ํด๋น ์๋น์ค ๊ฐ์ ํต์ ์๋ง ์ฌ์ฉ๋๋ ํน์ ์ธ์ฆ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ ์ธ์ฆ์ ์ต๋ 15๋ ๋์ ์ ์งํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ "์ค์ " SSL ์ธ์ฆ์ ๋ฐ๋ ๊ฒ์ ๋ํ ๋์์ผ ๋ฟ์ ๋๋ค.
๋จผ์ Cloudflare์ ๋ก๊ทธ์ธํ๊ณ ํ๋ก์๋ฅผ ์ค์ ํ๋ ค๋ ๋๋ฉ์ธ์ผ๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ "SSL/TLS" ์น์
์ผ๋ก ์ด๋ํฉ๋๋ค.
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 ์น์ฌ์ดํธ๋ก ์ด๋ํ๋ฉด ์ด์ ๋ณด์์ด ์ ์ง๋ฉ๋๋ค!
๋ฆฌ๋
์ค๋ ์ด๋ป๊ฒ ํ๋์?
๋งค์ฐ ์ ์คํ๊ฒ.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ง์งํ ๋๋ต์ด ์์ต๋๋ค.
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 ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.์ฌ์ ํ ํ๋ ์ด์ด ์์ด์ฝ ๋ฐ/๋๋ ์ฑํ
์ด ํ์๋๋์?
์, ํ๋ ์ด์ด ์์ด์ฝ์ ์นํ์ด์ง์์ ๊ณ์ ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค.
์ฑํ
์ฐฝ๋ ์ ์๋ํด์ผ ํฉ๋๋ค.
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๋ก ๊ตฌ์ฑ๋์์ผ๋ฉฐ ๊ฐ์ด๋๋ฅผ ์์ํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฒ์ด ์๋ํ๊ณ ๋ ๋๋ง๋์์ต๋๋ค.
๋ํ: ์ฝ์์ ์ด ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ด๋ จ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํํ ๋ฆฌ์ผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! 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:
์น์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.