๐Ÿ‡จ๐Ÿ‡ณ ์ƒ์„ธ ์„ค์น˜ ๊ฐ€์ด๋“œ + ์ œ์–ด ํŒจ๋„ | ๋””์Šค์ฝ”urs ์„ค์น˜ ๋ฐ ์ œ์–ด ํŒจ๋„ ์ƒ์„ธ ํŠœํ† ๋ฆฌ์–ผ

์ €๋Š” ์›น ์‚ฌ์ดํŠธ ๊ตฌ์ถ• ์ดˆ๋ณด์ž…๋‹ˆ๋‹ค. ์ทจ๋ฏธ๋กœ ๊ธฐ์ˆ  ๊ต๋ฅ˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์–ด์„œ Discourse๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ๊ณต์œ ํ•˜์—ฌ Discourse ์„ค์น˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๊ณ , ํ•จ์ •์— ๋น ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. Discourse์— ๋Œ€ํ•œ ์ค‘๊ตญ์–ด ํŠœํ† ๋ฆฌ์–ผ์€ ์ ๊ณ , ์ผ๋ถ€๋Š” ์ด๋ฏธ ๊ตฌ์‹์ด ๋˜์—ˆ์œผ๋ฉฐ, ๋ฒˆ์—ญ ๋„๊ตฌ์— ์˜์กดํ•˜์—ฌ ๋ฉฐ์น  ๋™์•ˆ ์—ฐ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž์‹ ์˜ Discourse๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ:

  1. ์•Œ๋ฆฌ๋ฐ”๋ฐ” ํด๋ผ์šฐ๋“œ(Alibaba Cloud) ํ™์ฝฉ ๊ฒฝ๋Ÿ‰ ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„ 1๋Œ€. ์ค‘๊ตญ ๋‚ด ์„œ๋ฒ„์—์„œ GitHub ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๊ฑฐ๋ถ์ด์ฒ˜๋Ÿผ ๋А๋ฆฌ๋ฏ€๋กœ, ์•Œ๋ฆฌ๋ฐ”๋ฐ” ํด๋ผ์šฐ๋“œ ํ™์ฝฉ ๊ฒฝ๋Ÿ‰ ํด๋ผ์šฐ๋“œ๋‚˜ ๋‹ค๋ฅธ ์—…์ฒด์˜ ๊ฒฝ๋Ÿ‰ ์„œ๋ฒ„๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋Ÿ‰ ์„œ๋ฒ„๋Š” ์ €๋ ดํ•˜์—ฌ ์ดˆ๋ณด์ž์—๊ฒŒ ์ ํ•ฉํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋Š” 2GB ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ค‘๊ตญ ๋‚ด ์„œ๋ฒ„์— ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ํ™์ฝฉ ์„œ๋ฒ„๋ฅผ ์ข…๋Ÿ‰์ œ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ํ”Œ๋žซํผ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“  ํ›„ ์ค‘๊ตญ ๋‚ด ์„œ๋ฒ„๋กœ ๋ณต์ œํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œํ–‰์ฐฉ์˜ค ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šด ์งง์€ ๋„๋ฉ”์ธ. ์„œ๋ฒ„ IP๋กœ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. com๊ณผ net์„ ๊ถŒ์žฅํ•˜๋ฉฐ, ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์€ ์‹๋ณ„๋ ฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ์€ ๋„๋ฉ”์ธ ์ผ๊ด„ ์กฐํšŒ์—์„œ ์งง์€ ๋„๋ฉ”์ธ์„ ๊ทœ์น™์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์šด์˜์ฒด์ œ: Ubuntu 20.04. ๋น„๊ต์  ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ์„œ๋ฒ„๋ฅผ ํ™œ์„ฑํ™”ํ•œ ํ›„, ๋จผ์ € ๋ฐฉํ™”๋ฒฝ ํฌํŠธ ๋ชจ๋‘๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‚˜์ค‘์— ๋””๋ฒ„๊น…์ด ์™„๋ฃŒ๋˜๋ฉด ํ•„์š”์— ๋”ฐ๋ผ ํฌํŠธ๋ฅผ ๋‹ซ๊ณ , ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋งŒ ์œ ์ง€ํ•˜์—ฌ ํ•ด์ปค ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค). ์ œ์–ดํŒ์—์„œ root ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•œ ํ›„, ์›น ํŽ˜์ด์ง€์—์„œ SSH๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์›๊ฒฉ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ XTerminal ๊ฐ™์€ SSH ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์•„๋ž˜ ์„ธ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋Ÿฌ ์‹คํ–‰ํ•˜์„ธ์š”. ์˜ต์…˜์ด ์žˆ์„ ๊ฒฝ์šฐ yes๋ฅผ ๋ˆ„๋ฅด์„ธ์š”. ์‹œ์Šคํ…œ ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  git ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.


apt update
apt upgrade -y
apt install git

๊ทธ๋Ÿฐ ๋‹ค์Œ ์•„๋ž˜ ์„ธ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋Ÿฌ ์‹คํ–‰ํ•˜์„ธ์š”. ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ sudo -s๋ฅผ ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์„ค์น˜ ์‹œ ์ด์œ  ์—†์ด ์ƒ์„ฑ ์‹คํŒจ๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์–ด ์„ค์น˜ ์‹คํŒจ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ถŒํ•œ์ด ์—†์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์„ค์น˜ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

./discourse-setup

๊ทธ๋Ÿฐ ๋‹ค์Œ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ๋ฐ”์ธ๋”ฉํ•  ๋„๋ฉ”์ธ์„ ์ž…๋ ฅํ•˜์„ธ์š”. ์ฒซ ๋ฒˆ์งธ ์„ค์น˜์—๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ, ์ฃผ ๋„๋ฉ”์ธ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋Š” ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ž…๋ ฅํ•˜๊ณ , ๋‚˜์ค‘์— ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜๋ฉด ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์€ ์Šคํฌ๋ฆฐ์ƒท์„ ์ฐ์–ด ์œ„์ฑ—(WeChat) ์ด๋ฏธ์ง€ ๋ฒˆ์—ญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฉ”์ผ์€ ์•Œ๋ฆฌ๋ฐ”๋ฐ” ํด๋ผ์šฐ๋“œ ์ด๋ฉ”์ผ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ค์น˜๋ฅผ ๊ณ„์†ํ• ์ง€ ์•„๋‹ˆ๋ฉด Ctrl+C๋ฅผ ๋ˆŒ๋Ÿฌ ์ทจ์†Œํ• ์ง€ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์„ค์น˜๋ฅผ ๊ณ„์†ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ๋ฐ”์ธ๋”ฉ๋œ ๋„๋ฉ”์ธ์— ์ ‘์†ํ•˜๋ฉด ๋“ฑ๋ก ํŽ˜์ด์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด Discourse ์„ค์น˜์— ์„ฑ๊ณตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Linux ํŒจ๋„์„ ์„ค์น˜ํ•˜์„ธ์š”. ์ด ๋‹จ๊ณ„๋Š” ์ฃผ๋กœ ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ , ์ดˆ๋ณด์ž๊ฐ€ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํŒจ๋„์€ Baota(๋ฐ”์˜คํƒ€) ํŒจ๋„๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ๊น”๋”ํ•˜๋ฉฐ, ๊ด‘๊ณ ๊ฐ€ ๋งŽ์ง€ ์•Š๊ณ , ์„ค์น˜ ์†๋„๊ฐ€ ๋ช‡ ์ดˆ๋ฉด ๋๋‚˜๋ฉฐ, Baota์ฒ˜๋Ÿผ ํ™˜๊ฒฝ์„ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

์„ค์น˜ ์‹œ Docker๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๊ณ , ๋ฐฑ์—”๋“œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์•ˆ๋‚ด์— ๋”ฐ๋ผ ๋ฐฑ์—”๋“œ์— ๋กœ๊ทธ์ธํ•˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ์—์„œ app์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋Š” Discourse์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํŒŒ์ผ๋กœ ๋“ค์–ด๊ฐ€ app.yml์„ ํŽธ์ง‘ํ•˜์„ธ์š”. ์ฃผ์š” ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ค‘๊ตญ์–ด ์ฃผ์„์œผ๋กœ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Uncomment the next line to enable the IPv6 listener
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Set db_shared_buffers to a max of 25% of the total memory.
  ## will be set automatically by bootstrap based on detected RAM, or you can override
  db_shared_buffers: "128MB"
  ## ์ฒจ๋ถ€ ํŒŒ์ผ ์—…๋กœ๋“œ ์ตœ๋Œ€๊ฐ’ ์ˆ˜์ •
  upload_size: 300m
  ## can improve sorting performance, but adds memory usage per-connection
  #db_work_mem: "40MB"

  ## Which Git revision should this container use? (default: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: zh_CN

  ## How many concurrent web requests are supported? Depends on memory and CPU cores.
  ## will be set automatically by bootstrap based on detected CPUs, or you can override
  UNICORN_WORKERS: 2

  ## TODO: The domain name this Discourse instance will respond to
  ## Required. Discourse will not work with a bare IP number.
  ## ์ฃผ ๋„๋ฉ”์ธ ์ˆ˜์ •
  DISCOURSE_HOSTNAME: bbs.izdh.net

  ## Uncomment if you want the container to be started with the same
  ## hostname (-h option) as specified above (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: List of comma delimited emails that will be made admin and developer
  ## on initial signup example 'user1@example.com,user2@example.com'
  ## ๊ด€๋ฆฌ์ž ์ด๋ฉ”์ผ ์ˆ˜์ •
  DISCOURSE_DEVELOPER_EMAILS: 'xxxx@gmail.com'

  ## TODO: The SMTP mail server used to validate new accounts and send notifications
  # SMTP ADDRESS, username, and password are required
  # WARNING the char '#' in SMTP password can cause problems!
  ## ๋ฐœ์‹  ์ด๋ฉ”์ผ ์„œ๋ฒ„ ์ˆ˜์ •
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## ๋ฐœ์‹  ์ด๋ฉ”์ผ ํฌํŠธ ์ˆ˜์ •
  DISCOURSE_SMTP_PORT: 80
  ## ์ž๋™ ๋ฐœ์‹  ์ด๋ฉ”์ผ ๊ณ„์ •์œผ๋กœ ์ˆ˜์ •
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## ๋ฐœ์‹  ์ด๋ฉ”์ผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ •
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## ์ž๋™ ๋ฐœ์‹  ์ด๋ฉ”์ผ ๊ณ„์ •์œผ๋กœ ์ˆ˜์ •
  DISCOURSE_NOTIFICATION_EMAIL: xxxx@xxx.net
  DISCOURSE_SMTP_ENABLE_START_TLS: false
  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## The http or https CDN address for this Discourse instance (configured to pull)
  ## see https://meta.discourse.org/t/14857 for details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## The maxmind geolocation IP address key for IP address lookup
  ## see https://meta.discourse.org/t/-/137387/23 for details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
## 2๊ฐœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved	 
          - git clone https://github.com/discourse/discourse-reactions

## Any custom commands to run after building
run:
  - exec: echo "Beginning of custom commands"
  ## If you want to set the 'From' email address for your first registration, uncomment and change:
  ## After getting the first signup email, re-comment the line. It only needs to run once.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

์ˆ˜์ • ํ›„ ์ €์žฅํ•˜๋ฉด ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฑ์—”๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•œ ํ›„ ๋‹ค์‹œ ๋นŒ๋“œ(rebuild)ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ํŒจ๋„์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , ์ด ํŒจ๋„์„ ์„ค์น˜ํ•œ ํ›„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

./launcher stop app
./launcher bootstrap app`

๋‹ค์‹œ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

./launcher start app

Discourse์— ์ ‘์†ํ•˜๋ฉด ์ด๋ฉ”์ผ ํ™œ์„ฑํ™” ์•ˆ๋‚ด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ๊ฑด๋„ˆ๋›ด ํ›„, ์™ผ์ชฝ ์„ค์ •์—์„œ ์–ธ์–ด๋ฅผ ์ค‘๊ตญ์–ด๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์žˆ์œผ๋ฉฐ, ์˜ค๋ฅ˜ ์›์ธ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ ์‹œ๋„ํ•˜๋ฉด ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

./launcher enter app
rake admin:create

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

์ฃผ์š” ํ•ด๊ฒฐ ์‚ฌํ•ญ์€ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์„œ๋ฒ„ ๊ตฌ๋งค ๋น„์šฉ์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ดˆ๋ณด์ž์—๊ฒŒ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์ด๋ฉ”์ผ ์ „์†ก์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ:

์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋Ÿฌํ•œ ์„ค์ •์€ app.yml์„ ํŽธ์ง‘ํ•ด๋„ ๋‹ค์‹œ ๋นŒ๋“œ(rebuild)ํ•ด๋„ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ 5~6์ดˆ๋ฉด ์ ์šฉ๋˜๋ฉฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€๋Š” ์•„์ง ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ์™€ ๊ณต์กดํ•˜๋ ค๋ฉด ๋จผ์ € ์—ญํ”„๋ก์‹œ(reverse proxy)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ 443 ํฌํŠธ๋ฅผ 10443์œผ๋กœ ๋ณ€๊ฒฝํ•œ ํ›„, ์ธ์ฆ์„œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ญํ”„๋ก์‹œ

์ธ์ฆ์„œ ๊ตฌ์„ฑ

2๊ฐœ์˜ ์ข‹์•„์š”

์‚ฌ์‹ค discourse_docker๋ฅผ ์–ด๋–ค ํด๋”๋กœ ํด๋ก ํ•˜๋“  ์ƒ๊ด€์—†์ด, ์ž๋™์œผ๋กœ /var/discourse ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋ฉ๋‹ˆ๋‹คโ€ฆโ€ฆ

์‚ฌ์‹ค์ƒ discourse_docker ์ €์žฅ์†Œ๋ฅผ ์–ด๋””๋กœ ํด๋ก ํ•˜๋“  ๋ฌด๊ด€ํ•˜๋ฉฐ, ํ•ญ์ƒ ์ž๋™์œผ๋กœ /var/discourse ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋ฉ๋‹ˆ๋‹คโ€ฆโ€ฆ

์ด๋ก ์ ์œผ๋กœ๋Š” ๊ทธ๋Ÿด ๋ฆฌ๊ฐ€ ์—†๋Š”๋ฐ, ์ •์‹ ์ ˆ์ฐจ๋Š” app.yml ํŒŒ์ผ์„ ํŽธ์ง‘ํ•œ ํ›„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ก ์ ์œผ๋กœ๋Š” ๊ทธ๋Ÿด ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ ˆ์ฐจ๋Š” app.yml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

:sweat_smile: ํ•˜์ง€๋งŒ ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ rebuild๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์„œ ๊ฒฐ๊ตญ ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋‹ˆ ๋ช‡ ์ดˆ ๋งŒ์— ๋ฐ”๋กœ ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— rebuildํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋„ค์š”. ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€๋Š” ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ „์—๋Š” sudo -s๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„์„œ ๊ณ„์† ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ์š”, ์–ด๋””์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋„๋ฌด์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹คยทยทยทยท

:sweat_smile: ๋ง์”€๋“œ๋ฆฌ๊ฑด๋Œ€, ์„ค์ • ํŒŒ์ผ์„ ๋งŒ์ ธ๋ดค์ง€๋งŒ rebuild๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์•„์„œ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋‹ˆ ๋ถˆ๊ณผ ๋ช‡ ์ดˆ ๋งŒ์— ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜์—ฌ rebuildํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋‹น์žฅ์€ ๋ถˆํ™•์‹คํ•ฉ๋‹ˆ๋‹ค.

์ด์ „์—๋Š” sudo -s๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๊นœ๋นกํ–ˆ๋”๋‹ˆ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฐ์ด์–ด ์Ÿ์•„์ ธ์„œ ๋ฌธ์ œ๊ฐ€ ์–ด๋””์„œ ๋น„๋กฏ๋œ ๊ฑด์ง€ ์ „ํ˜€ ํŒŒ์•…์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

:sweat_smile: ์•„, ์ค‘๊ตญ์–ด ์‚ฌ์šฉ์ž๋ช…์ด API๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ˜น์‹œ ์•„์‹œ๋Š” ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”? ํ—ค๋”์—๋Š” ์ค‘๊ตญ์–ด ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๊ฑฐ๋“ ์š”.

์•ผ, ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‚˜? ๋กœ๊ทธ ์ข€ ์˜ฌ๋ ค๋ด

์•„, ์ •๋ง๋กœ ๊ทธ๋Ÿฐ ๋ฌธ์ œ์ธ๊ฐ€? ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๋‚˜ํ•œํ…Œ ๊ณต์œ ํ•ด ์ค„ ์ˆ˜ ์žˆ์„๊นŒ?

์™ธ๊ตญ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์–ด๋–ป๊ฒŒ ํ•ด๋„ ์•ˆ ๋˜๋„ค์š”ยทยทยท :sweat_smile:

๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์กฐ์–ธ์„ ์ฃผ์…จ๋Š”๋ฐ, ์•„๋ฌด๋ฆฌ ์‹œ๋„ํ•ด๋ด๋„ ๊ฒฐ๊ตญ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹คโ€ฆ :sweat_smile:

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ด๊ฑธ๋กœ ์‹œ๋„ํ•ด ๋ณด๋Š” ๊ฒŒ ์ข‹๊ฒ ์–ด. ๋„ค๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์— ์–ด๋–ค ์ธ์ฝ”๋”ฉ์ด ์‚ฌ์šฉ๋๋Š”์ง€ ๋ˆ„๊ฐ€ ์•Œ๊ฒ ์–ด.

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ด๊ฑธ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„. ๋„ค ์š”์ฒญ์— ์–ด๋–ค ์ธ์ฝ”๋”ฉ์ด ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ์•„๋ฌด๋„ ๋ชจ๋ฅธ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

์ด๋Ÿฐ, ์ด ํฌ๋Ÿผ์—์„œ ์ค‘๊ตญ์–ด ๊ฒŒ์‹œ๋ฌผ์„ ๋ณด๊ฒŒ ๋  ์ค„์ด์•ผ๐Ÿ˜ญ

๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ์ž๋‹˜, ํฌ๋Ÿผ ๊ตฌ์ถ•์— ๊ด€ํ•œ ๊ฒฝํ—˜์„ ํ•จ๊ป˜ ๋‚˜๋ˆ„์‹ค ์˜ํ–ฅ์ด ์žˆ์œผ์‹ ๊ฐ€์š”?

์ด ํฌ๋Ÿผ์—์„œ ์šฐ์—ฐํžˆ ์ค‘๊ตญ์–ด ๊ฒŒ์‹œ๋ฌผ์„ ๋ฐœ๊ฒฌํ•˜๋‹ค๋‹ˆ ๋†€๋ž์Šต๋‹ˆ๋‹ค! :sob:

๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ์ž๋‹˜๊ป˜ ์—ฌ์ญ™๊ฑด๋Œ€, ํฌ๋Ÿผ ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ด ์ฃผ์‹ค ์˜ํ–ฅ์ด ์žˆ์œผ์‹ ๊ฐ€์š”? ๊ท€ํ•œ ์กฐ์–ธ์„ ๋“ค๋ ค์ฃผ์‹ ๋‹ค๋ฉด ๋งค์šฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

:sweat_smile: ์ €๋„ ์ดˆ๋ณด์ธ๋ฐ, ์ฝ˜ํ…์ธ ๊ฐ€ ์ฃผ๊ฐ€ ๋˜๊ณ  ๊ธฐ์ˆ ์€ ๋ณด์กฐ์ ์ธ ์—ญํ• ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”. ์ง€๊ธˆ์€ ์น ์ธ์šฐ(ไธƒ็‰›ไบ‘)์˜ ์ฝ˜ํ…์ธ  ์ €์žฅ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ๊ณ , ํŠธ๋ž˜ํ”ฝ ์œ ์ž… ๋ฐฉ๋ฒ•๋„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๋ง‰๋ง‰ํ•ฉ๋‹ˆ๋‹ค.

:sweat_smile: ์ €๋„ ์ดˆ๋ณด์ธ๋ฐ, ์ฝ˜ํ…์ธ ๊ฐ€ ์ฃผ๊ฐ€ ๋˜๊ณ  ๊ธฐ์ˆ ์€ ๋ณด์กฐ์ ์ธ ์—ญํ• ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”. ์ง€๊ธˆ์€ ์น ์ธ์šฐ(ไธƒ็‰›ไบ‘)์˜ ์ฝ˜ํ…์ธ  ์ €์žฅ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ๊ณ , ํŠธ๋ž˜ํ”ฝ ์œ ์ž… ๋ฐฉ๋ฒ•๋„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๋ง‰๋ง‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. upload_size: 300m ์„ค์ •์ด ์ฒจ๋ถ€ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐ ์ ์šฉ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ, ์›์ธ์„ ์ฐพ์ง€ ๋ชปํ•ด ๊ฒฐ๊ตญ ์ปจํŠธ๋กค ํŒจ๋„ ์„ค์น˜๋ฅผ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

Subsequently, a flaw was uncovered. The โ€˜upload_size: 300mโ€™ setting proved ineffective in regulating attachment dimensions. The root cause remained elusive, compelling me to forgo the installation of the control panel altogether.

์ €๋Š” ์•„๋งˆ์กด S3๋ฅผ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ, ์•Œ๋ฆฌ๋ฐ”๋ฐ” OSS๋„ ์ด์ œ S3์™€ ํ˜ธํ™˜๋˜๋ฏ€๋กœ ํ•œ๋ฒˆ ์‹œ๋„ํ•ด ๋ณด์‹œ๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

๋งž์•„์š”, ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•œ ํ›„์—๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฑ„์šธ์ง€๊ฐ€ ํ•ต์‹ฌ์ด ๋˜์ฃ .

๊ทธ๊ฐ€ ์ œ์•ˆํ•œ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋•Œ ์ œ๊ฐ€ ์ˆ˜์ •ํ•  ๋•Œ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žฌ๊ตฌ์ถ•์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Tencent Cloud๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๋งค๋ฒˆ ์žฌ๊ตฌ์ถ•ํ•  ๋•Œ ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ด์„œ ์ •๋ง ๊ณ ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฐ€ ์ œ์•ˆํ•œ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋•Œ ์ œ๊ฐ€ ์ˆ˜์ •ํ•  ๋•Œ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์žฌ๊ตฌ์ถ•์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. Tencent Cloud๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๋งค๋ฒˆ ์žฌ๊ตฌ์ถ•ํ•  ๋•Œ ํ”„๋ก์‹œ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ •๋ง ๊ณ ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

@Lhc_fl @zengyunsi ํฌ๋Ÿผ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ํ•„๋“œ ๋ณดํ˜ธ๋ฅผ ๊ตฌํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? ์‚ฌ์šฉ์ž ์ •์˜ ์„ค์ •์—๋Š” ๋ฏผ๊ฐ์–ด ํ•„ํ„ฐ๋ง๊ณผ ํ—ˆ์šฉ๋œ ์‚ฌ์šฉ์ž ํ•„๋“œ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๊ตญ์–ด ์œ ๋‹ˆ์ฝ”๋“œ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ง€์›: Discourse ๆ”ฏๆŒไธญๆ–‡็”จๆˆทๅ - Discourse - iSharkFly

์ค‘๊ตญ์–ด ์œ ๋‹ˆ์ฝ”๋“œ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ง€์›: Discourse accommodates Chinese usernames - Discourse - iSharkFly

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , '์‚ฌ์šฉ์ž ์ด๋ฆ„ ํ•„๋“œ ๋ณดํ˜ธโ€™๋ž€ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ณ€๊ฒฝ์— ๋ฐ˜๋“œ์‹œ ๊ฒ€ํ†  ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ผ๋ฉด, Discourse์—๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณด์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ์ „์ฒด ์‚ฌ์ดํŠธ์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ์ ๊ฒ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@go_ahead ์ถ”๊ฐ€์ ์œผ๋กœ, ๋ฉ”ํƒ€(Meta) ์„น์…˜์—์„œ ์˜คํ”„ํ†ฑ๋ฆญ(Off-topic) ๊ฒŒ์‹œ๋ฌผ์€ ๋ถ„๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ, ์˜์–ด ๋˜๋Š” ์˜์ค‘ ํ˜ผํ•ฉ์œผ๋กœ ๋ณ„๋„ ๊ฒŒ์‹œ๋ฌผ์„ ๋งŒ๋“ค์–ด ์งˆ๋ฌธํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ค‘๊ตญ์–ด๋งŒ ์‚ฌ์šฉํ•˜์‹ค ๊ฒฝ์šฐ, ์ค‘๊ตญ์–ด๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๋ช‡๋ช‡ ๊ด€๋ฆฌ์ž๋ถ„๋“ค์ด ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ ๋ถˆํŽธํ•จ์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ์„ ์ดํ•ด๋Š” ํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ด๋ฆ„ ํ•„๋“œ ๋ณดํ˜ธ์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ณ€๊ฒฝ ์‹œ ๊ฒ€ํ†  ๊ณผ์ •์ด ํ•„์š”ํ•œ ์ด์œ ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๋ฉด, Discourse์—๋Š” ํ•ด๋‹น ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋งž์ถคํ˜• ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์•ˆ์œผ๋กœ, ํ”Œ๋žซํผ ์ „์ฒด์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฒ€ํ† ํ•˜์—ฌ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@go_ahead ๋˜ํ•œ, ๋ฉ”ํƒ€ ์„น์…˜์˜ ์˜คํ”„ํ†ฑ๋ฆญ ํ† ๋ก ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์Šค๋ ˆ๋“œ ๋ถ„๋ฆฌ์˜ ๋Œ€์ƒ์ด ๋˜๋ฏ€๋กœ, ์˜์–ด ๋˜๋Š” ์˜์–ด์™€ ์ค‘๊ตญ์–ด์˜ ์กฐํ•ฉ์œผ๋กœ ๋ณ„๋„ ์Šค๋ ˆ๋“œ์—์„œ ์งˆ๋ฌธํ•˜์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ค‘๊ตญ์–ด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ค‘๊ตญ์–ด๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋”๋ ˆ์ดํ„ฐ๋ถ„๋“ค์ด ๋Œ€ํ™”์˜ ๋‚ด์šฉ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ์–ด ๋ถˆํŽธ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

์ œ ์˜์–ด ์‹ค๋ ฅ์ด ์ •๋ง ํ˜•ํŽธ์—†์–ด์„œ, ๊ทธ๋ถ„๋“ค๊ณผ ์†Œํ†ตํ•˜๋Š” ๊ฒฝํ—˜๋„ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” ์ด ๋ฌธ์ œ์— ์ข€ ๋” ์‹ ๊ฒฝ ์“ฐ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ œ ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด, ๊ด€๋ฆฌ์ž๋“ค์€ ๋ณดํ†ต ์ค‘๊ตญ์–ด ๋‚ด์šฉ์„ ํฌํ•จํ•œ ์ฃผ์ œ๋ฅผ chinese-translation ํƒœ๊ทธ ์•„๋ž˜์— ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๋ฉฐ, ๊ฒŒ์‹œ๊ธ€ ์•„๋ž˜์— ์˜์–ด๋กœ ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•ด ๋‘๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค ํฌ๊ฒŒ ๊ฑฑ์ •ํ•  ์ผ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋“ค์ด ๋ฒˆ์—ญ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ๋Œ€๋žต์ ์ธ ๋‚ด์šฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”. ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

๐Ÿ‡จ๐Ÿ‡ณ Discourse Official Install Guide | Discourse ไบ‘ๅนณๅฐๅฎ‰่ฃ… ์ด ๋‚ด์šฉ์€ ์—ฌ์ „ํžˆ ์œ ํšจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ˆœ์ˆ˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹œ์ž‘ํ–ˆ์œผ๋ฏ€๋กœ, ์ฝ˜์†” ๊ด€๋ จ ์„ค์ •์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๊ตญ์–ด ํ…์ŠคํŠธ์—์„œ ์–ธ๊ธ‰๋œ ๊ณต์‹ Discourse ์„ค์น˜ ๊ฐ€์ด๋“œ๋Š” ์—ฌ์ „ํžˆ ์ ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์˜ ๊ตฌํ˜„์€ ๋ฒ ์–ด ๋ฉ”ํƒˆ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์ด๋“œ์— ์–ธ๊ธ‰๋œ ์ฝ˜์†” ๊ด€๋ จ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ ์„œ๋ฒ„์—์„œ Docker ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฝ˜์†” ์„ค์ • ๋ฐ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ํ‘œ์ค€ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅผ ๋•Œ ์ด ์ฐจ์ด๋ฅผ ์—ผ๋‘์— ๋‘๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฉฐ, ํŠน์ • ๋‹จ๊ณ„๋Š” ์šฐ๋ฆฌ์˜ ๊ตฌ์ฒด์ ์ธ ๋ฐฐํฌ ๋ฐฉ์‹์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์ƒ๋žตํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

:sweat_smile: API์— ๋Œ€ํ•ด ๋ง์”€ํ•˜์‹  ๊ฑด๋ฐ, ์ค‘๊ตญ์–ด๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์–ด์š”.

:sweat_smile: API๊ฐ€ ์ค‘๊ตญ์–ด ์ž…๋ ฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŒจ๋„์˜ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์•„ยทยทยทยท ๊ทธ๋ƒฅ ์›๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํด๋ฆฐ ์„ค์น˜ํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ๊ฒƒ ๊ฐ™์•„ยทยท ๋‚˜๋Š” ์ด ์ž‘์—…์„ ์œ„ํ•ด Qiniu Cloud๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ด.

์ด ๋ฌธ์ œ๊ฐ€ ์ด ํŠน์ • ํŒจ๋„์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„โ€ฆ ์•„๋งˆ๋„ ์›๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ํด๋ฆฐ ์„ค์น˜๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์ผ ๊ฒƒ์ด๋‹ค. ์ด ๋ชฉ์ ์„ ์œ„ํ•ด Qiniu Cloud๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค.