웹사이트 검색

Ubuntu 18.04 LTS에 담론 포럼을 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 20.04(Focal Fossa)
  • Ubuntu 18.04(Bionic Beaver)

이 페이지에서

  1. 요구 사항\n
  2. 시작하기\n
  3. PostgreSQL 설치 및 구성
  4. 루비 설치
  5. Discourse 설치 및 구성
  6. 담화를 위한 Nginx 구성\n
  7. 액세스 담화 웹 인터페이스\n

Discourse는 메일링 리스트 및 채팅방으로 사용할 수 있는 무료 오픈 소스 토론 포럼 애플리케이션입니다. 사용자가 Single Sign-On으로 로그인할 수 있는 매우 강력하고 유연한 플랫폼입니다. WordPress, Google Analytics, Zendesk, Patreon, Slack 등과 통합할 수 있습니다. 이메일 알림, 이메일 답장 및 소셜 네트워크, 싱글 사인온과 같은 다양한 인증 방법을 지원합니다. 간단하고 사용하기 쉽고 평평하며 모바일 레이아웃이 내장되어 있습니다.

이 튜토리얼에서는 Ubuntu 18.04 서버에 Discourse 포럼을 설치하고 구성하는 방법을 배웁니다.

요구 사항

  • Ubuntu 18.04를 실행하는 서버.\n
  • 고정 IP 주소 192.168.0.101이 서버에 설정되어 있습니다.
  • 루트 암호가 서버에 설정됩니다.\n

시작하기

먼저 최신 버전으로 서버를 업데이트해야 합니다. 다음 명령으로 수행할 수 있습니다.

apt-get update -y
apt-get upgrade -y

서버가 업데이트되면 시스템을 다시 시작하여 모든 변경 사항을 적용하십시오.

다음으로 서버에서 FQDN을 설정해야 합니다. 다음 명령으로 수행할 수 있습니다.

hostnamectl set-hostname test.example.com

다음으로 /etc/hosts 파일을 열고 다음 줄을 추가합니다.

nano /etc/hosts

다음 줄을 추가합니다.

192.168.0.101 test.example.com test

완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 실행하여 모든 변경 사항을 적용합니다.

hostname -f

다음으로 시스템에 몇 가지 필수 패키지를 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.

apt-get install nginx curl git wget unzip nano -y

완료되면 다음 단계로 진행할 수 있습니다.

PostgreSQL 설치 및 구성

먼저 시스템에 PostgreSQL을 설치해야 합니다. 다음 명령을 실행하여 설치할 수 있습니다.

apt-get install postgresql -y

PostgreSQL을 설치한 후 다음 명령을 사용하여 PostgreSQL 콘솔에 로그인합니다.

sudo -u postgres psql

다음으로 다음 명령을 사용하여 Discourse용 데이터베이스와 사용자를 생성합니다.

postgres=#CREATE DATABASE discoursedb;
postgres=#CREATE USER discourseuser;
postgres=#ALTER USER discourseuser WITH ENCRYPTED PASSWORD 'password';
postgres=#ALTER DATABASE discoursedb OWNER TO discourseuser;

다음으로, discoursedb에 연결하고 다음 명령을 사용하여 hstore 및 pg_trgm 확장을 만듭니다.

postgres=#\c discoursedb;
postgres=#CREATE EXTENSION hstore;
postgres=#CREATE EXTENSION pg_trgm;

마지막으로 다음 명령을 사용하여 PostgreSQL을 종료합니다.

postgres=#\q

루비 설치

다음으로 최신 버전의 Ruby를 시스템에 설치해야 합니다. RVM을 사용하여 Ruby를 설치할 수 있습니다.

먼저 다음 명령을 사용하여 GNU 프라이버시 가드를 설치합니다.

apt-get install gnupg2 -y

다음으로 다음 명령을 사용하여 공개 Ruby 버전 관리자를 가져옵니다.

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

다음 출력이 표시되어야 합니다.

gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: key 105BD0E739499BDB: 6 signatures not checked due to missing keys
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 105BD0E739499BDB: public key "Piotr Kuczynski <>" imported
gpg: key 3804BB82D39DC0E3: 103 signatures not checked due to missing keys
gpg: key 3804BB82D39DC0E3: public key "Michal Papis (RVM signing) <>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 2
gpg:               imported: 2

다음으로 다음 명령을 사용하여 기본 Ruby 및 Rails로 RVM을 설치합니다.

curl -sSL https://get.rvm.io | bash -s stable --rails

Ruby 및 Rails를 설치한 후 RVM 스크립트를 소싱해야 합니다. 다음 명령으로 수행할 수 있습니다.

source /usr/local/rvm/scripts/rvm

이제 다음 명령을 사용하여 Ruby 버전을 볼 수 있습니다.

rvm list

다음 출력이 표시되어야 합니다.

=* ruby-2.6.3 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

담화 설치 및 구성

먼저 Git 저장소에서 최신 버전의 Discourse를 다운로드해야 합니다. 다음 명령으로 다운로드할 수 있습니다.

cd /var/www/
git clone https://github.com/discourse/discourse.git

산출:

Cloning into 'discourse'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 403387 (delta 26), reused 34 (delta 20), pack-reused 403330
Receiving objects: 100% (403387/403387), 267.39 MiB | 235.00 KiB/s, done.
Resolving deltas: 100% (252384/252384), done.
Checking out files: 100% (27055/27055), done.

다음으로 다음 명령을 사용하여 Discourse의 최신 안정 릴리스를 확인하십시오.

cd discourse
git checkout v2.2.4

다음으로 다음 명령을 사용하여 Ruby 종속성 관리자를 설치합니다.

/usr/local/rvm/src/ruby-2.6.3/bin/gem install bundler -v '1.17.3'

다음 출력이 표시되어야 합니다.

Fetching bundler-1.17.3.gem
Successfully installed bundler-1.17.3
Parsing documentation for bundler-1.17.3
Installing ri documentation for bundler-1.17.3
Done installing documentation for bundler after 15 seconds
1 gem installed

다음으로 소스 코드를 컴파일하기 위해 몇 가지 추가 패키지를 설치해야 합니다. 다음 명령으로 모두 설치할 수 있습니다.

apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev libpq-dev imagemagick redis-server optipng pngquant jhead jpegoptim gifsicle -y

다음으로 다음 명령을 사용하여 Discourse에 필요한 모든 종속 항목을 설치합니다.

RAILS_ENV=production bundle install --path vendor/bundle/

다음으로 다음 명령을 사용하여 Discourse 기본 구성 파일의 이름을 바꿉니다.

mv config/discourse_defaults.conf config/discourse.conf

다음으로, discourse.conf 파일을 열고 데이터베이스 설정을 정의합니다.

nano config/discourse.conf

다음 줄을 변경합니다.

db_host = localhost
db_port = 5432
db_name = discoursedb
db_username = discourseuser
db_password = password
hostname = "test.example.com"

파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 프로덕션 환경 구성 파일을 편집합니다.

nano /var/www/discourse/config/environments/production.rb

다음 줄을 세 번째 줄로 추가

require 'uglifier'

그런 다음 다음 행을 찾으십시오.

config.assets.js_compressor = :uglifier

그리고 다음과 같이 바꿉니다.

config.assets.js_compressor = Uglifier.new(harmony: true)

완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 프로덕션용 Discourse를 준비합니다.

RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompile

그런 다음 다음 명령을 사용하여 puma.rb 파일을 엽니다.

nano /var/www/discourse/config/puma.rb

다음 줄을 찾으십시오.

APP_ROOT = '/home/discourse/discourse'

다음 줄로 바꿉니다.

APP_ROOT = '/var/www/discourse'

완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 소켓 및 프로세스 ID 디렉터리를 만듭니다.

mkdir /var/www/discourse/tmp/sockets/
mkdir /var/www/discourse/tmp/pids/

마지막으로 다음 명령을 실행하여 Discourse를 시작합니다.

RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rb

다음 출력이 표시되어야 합니다.

[29834] Puma starting in cluster mode...
[29834] * Version 3.11.4 (ruby 2.6.3-p62), codename: Love Song
[29834] * Min threads: 8, max threads: 32
[29834] * Environment: development
[29834] * Process workers: 4
[29834] * Preloading application

[29834] * Listening on unix:///var/www/discourse/tmp/sockets/puma.sock
[29834] ! WARNING: Detected 3 Thread(s) started in app boot:
[29834] ! #<Thread:/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus.rb:667 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/hiredis-0.6.1/lib/hiredis/ext/connection.rb:19:in `read'
[29834] ! #<Thread:/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:38 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:123:in `sleep'
[29834] ! #<Thread:/var/www/discourse/lib/discourse.rb:584 sleep> - /var/www/discourse/lib/discourse.rb:587:in `sleep'
[29834] * Daemonizing...

다음으로 다음 명령을 사용하여 Discourse 웹 인터페이스에 액세스할 관리자 계정을 만듭니다.

cd /var/www/discourse
RAILS_ENV=production bundle exec rake admin:create

아래와 같이 이메일과 비밀번호를 입력합니다.

Email:  
Password:  
Repeat password:  

Ensuring account is active!

Account created successfully with username example
Do you want to grant Admin privileges to this account? (Y/n)  Y

Your account now has Admin privileges!

그런 다음 다음 명령을 사용하여 Discourse 서비스를 다시 시작합니다.

RAILS_ENV=production bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid restart

담화를 위한 Nginx 구성

다음으로 포트 80에서 Discourse 웹 인터페이스에 액세스하려면 Nginx를 리버스 프록시로 구성해야 합니다.

먼저 다음 명령을 사용하여 샘플 Nginx 가상 호스트 구성 파일을 복사합니다.

cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf

그런 다음 다음 명령을 사용하여 discourse.conf 파일을 엽니다.

nano /etc/nginx/conf.d/discourse.conf

다음과 같이 변경합니다.

#upstream discourse {
#    server unix:/var/www/discourse/tmp/sockets/thin.0.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.1.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.2.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.3.sock;
#}

upstream discourse {
       server unix:/var/www/discourse/tmp/sockets/puma.sock;
 }
server_name test.example.com;

완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 캐시 디렉토리를 생성합니다.

mkdir -p /var/nginx/cache/

다음으로 다음 명령을 사용하여 Nginx에서 구문 오류가 있는지 확인합니다.

nginx -t

산출:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

그런 다음 Nginx를 다시 시작하여 모든 변경 사항을 적용합니다.

systemctl restart nginx

다음 명령을 사용하여 Nginx의 상태를 확인할 수도 있습니다.

systemctl status nginx

산출:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-05-26 04:19:12 UTC; 29min ago
     Docs: man:nginx(8)
  Process: 1052 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 848 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 1065 (nginx)
    Tasks: 3 (limit: 1114)
   CGroup: /system.slice/nginx.service
           ??1065 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??1066 nginx: worker process
           ??1067 nginx: cache manager process

May 26 04:19:04 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
May 26 04:19:12 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
May 26 04:19:12 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.

또한 Discourse 웹 인터페이스에 액세스하는 데 오류가 발생하면 다음 JS 파일을 복사해야 합니다.

cp /var/www/discourse/public/assets/_vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js /var/www/discourse/public/assets/vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js

담화 웹 인터페이스 액세스

이제 Discourse가 설치 및 구성되었으므로 Discourse 웹 인터페이스에 액세스할 시간입니다.

웹 브라우저를 열고 URL http://test.example.com을 입력합니다. 다음 페이지로 리디렉션됩니다.

이제 로그인 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

이제 사용자 이름과 비밀번호를 제공하십시오. 그런 다음 로그인 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

이제 웹 브라우저에서 URL http://test.example.com/wizard를 사용하여 설정 마법사를 시작할 수 있습니다. 다음 페이지에 시작 화면이 표시되어야 합니다.

이제 언어를 선택하고 다음 버튼을 클릭하십시오. 다음 페이지가 표시됩니다.

여기에 주제를 입력하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

여기에서 공개를 선택하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

여기에서 이메일과 연락처 페이지를 제공하십시오. 그런 다음 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

여기에 회사 이름과 주소를 입력하십시오. 그런 다음 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

이제 테마를 선택하고 다음 버튼을 클릭하십시오. 다음 페이지가 표시됩니다.

이제 로고를 업로드하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

이제 아이콘을 선택하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

이제 홈 페이지를 선택하고 다음 버튼을 클릭하십시오. 다음 페이지가 표시됩니다.

이제 원하는 대로 이모티콘을 선택하고 다음 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

이제 이 포럼에 직원을 초대하고 다음 버튼을 클릭하십시오. 설치가 완료되면 다음 페이지가 표시됩니다.

이제 완료 버튼을 클릭하십시오. 다음 페이지에 표시된 Discourse 대시보드로 리디렉션됩니다.

축하합니다! Ubuntu 18.04 서버에 Discourse 포럼을 성공적으로 설치하고 구성했습니다.