이 게시물에서는 지원되는 설치 방법을 그대로 사용하면서 nginx 리버스 프록시 뒤에 discourse를 실행하는 방법을 정확히 보여드리겠습니다.
요구 사항:
- 유효한 도메인 이름.
- 유효한 SSL 인증서.
- 해당 도메인 이름으로 가리키는 유효한 DNS 항목.
- 정상 작동하는 이메일 서버 또는 SMTP 제공업체.
- 정상 작동하는 Nginx 리버스 프록시 및 나중에 SSL 인증서를 생성하기 위해 인스턴스에 접근할 수 있는 능력.
- docker를 실행할 수 있는 VM 또는 LxC 컨테이너.
이 가이드에서는 모든 기능이 작동하고, 백업, 업그레이드 등이 가능한 제 인스턴스를 예로 사용하겠습니다. 약 2주간 테스트했습니다.
제 Discourse VM 사양:
- CPU: 4코어
- RAM: 6GB
- Swap: 8GB (SSD 스왑 파일)
- 저장소: 50GB (SSD)
- OS: Ubuntu 22.04.3
테스트 시에는 최소 사양을 사용할 수 있습니다. Discourse는 기본적으로 2GB를 쉽게 초과하여 사용합니다. 비활성 상태에서의 사용량은 6GB 중 약 1.48GB입니다.
참고: 이 설치 방법은 리버스 프록시를 사용하여 SSL 인증서를 생성합니다. 원하시는 경우 certbot을 사용할 수도 있습니다.
단계 1:
Get Ubuntu Server | Download | Ubuntu 에서 최신 ubuntu 서버를 다운로드합니다.
단계 2:
- VM/LxC 템플릿에 Ubuntu 서버를 설치합니다.
1.1 모든 서버 패키지로 ubuntu가 최신 상태인지 확인합니다. - 다음 명령을 사용하여 필요한 모든 패키지를 설치합니다:
apt update -y && apt upgrade -y && apt wget curl zip git docker.io nginx -y && reboot
단계 3:
Discourse 설치. 초보자 가이드 discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub 를 따릅니다.
서버에 ssh로 로그인하고 단순히 다음을 입력합니다:
sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers
위 내용을 완료한 후 ./discourse-setup를 실행할 수 있습니다.
모든 단계를 따르고 올바르게 입력하십시오. 이는 성공적인 설치를 위해 매우 중요합니다.
단계에서는 다음과 같은 내용을 묻습니다. 설치 가이드의 예시:
설치를 실행 상태로 두십시오. 인터넷 연결과 서버 사양에 따라 시간이 걸릴 수 있습니다. 제 VM 설정을 사용하여 설치를 완전히 완료하는 데 약 5~8분이 걸렸습니다.
단계 4:
설치가 완료되면 docker 컨테이너가 사용하는 시작 명령과 생성된 컨테이너 ID(해시)를 볼 수 있습니다.
참고: WAN을 통해 프록시 뒤에 있으므로 502 오류가 표시되며 컨테이너가 dockers 네트워크를 사용하므로 WAN 또는 LAN에서 접근할 수 없습니다. 172.17.0.1/16 네트워크에 연결하는 경우를 제외합니다. 이 네트워크는 필요하지 않습니다.
설치가 완료되었고 docker 컨테이너가 실행 중인지 다음을 사용하여 다시 확인하십시오:
docker ps
다음과 같은 출력을 받아야 합니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
XXXXXX local_discourse/app "/sbin/boot" 6 days ago Up 7 hours app
단계 5:
리버스 프록시 구성에 맞게 app.yml 파일을 업데이트합니다.
선호하는 텍스트 편집기를 사용하여 /var/discourse/container/app.yml을 엽니다.
다음 줄을 대체/주석 처리합니다: (이는 로컬 Nginx에서 처리합니다)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml" 바로 다음에 다음을 추가합니다:
- "templates/web.socketed.template.yml"
그런 다음 discourse가 이제 웹소켓을 사용하므로 expose 섹션을 주석 처리합니다. 마지막으로 nginx는 필요한 80 및 443 포트를 로컬에서 해제할 수 있으므로 시작할 수 있습니다.
#expose:
# - "80:80" # http
# - "443:443" # https
이제 Discourse가 HTTPS로만 링크를 제공하도록 강제하려면 env 섹션에 다음을 추가하십시오:
# FORCE SSL
DISCOURSE_FORCE_HTTPS: true
이제 마침으로 작업을 시작하려면 앱을 다시 빌드해야 합니다. 다음을 사용합니다:
cd /var/discourse
./launcher rebuild app
실행을 완료되도록 둡니다. 성공했는지 확인하려면 docker run 명령이 표시되는지 확인하거나 단순히 docker ps를 실행하면 컨테이너가 실행 중임을 볼 수 있습니다.
단계 6:
Nginx를 활성화하고 기본 사이트를 docker 컨테이너를 가리키도록 구성합니다. 로컬 nginx를 사용하여 리버스 프록시가 컨테이너에 액세스할 수 있도록 합니다.
다음과 같이 실행합니다:
systemctl enable nginx && systemctl start nginx
실행 중인지 확인하려면 브라우저와 로컬 IP를 사용하여 nginx의 기본 랜딩 페이지에 액세스해 보십시오.
예:
http://10.10.0.4
Nginx의 축하 페이지가 표시되어야 합니다.
단계 7:
기본 구성을 다음으로 업데이트합니다.
먼저 구성 파일을 비웁니다:
echo "" > /etc/nginx/sites-available/default
텍스트 편집기를 사용하여 구성 파일을 열고 다음을 추가합니다:
참고: server_name을 도메인으로, ssl_certificate, ssl_certificate_key을 SSL 인증서와 키 파일 위치로 업데이트하십시오.
Certbot을 사용할 수 있지만 저는 단순히 리버스 프록시에서 인증서와 키를 rsync합니다.
server {
listen 80; listen [::]:80;
server_name add.yourdomain.com;
server_tokens off;
return 301 https://$host$request_uri;
}
# Default server configuration
#
server {
# SSL configuration
#
server_tokens off;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name add.yourdomain.com;
ssl_certificate /etc/ssl/certs/your_ssl_cert.bundle;
ssl_certificate_key /etc/ssl/private/your_ssl_cert.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
새 기본 파일을 저장하고 systemctl restart nginx를 실행합니다.
단계 8:
브라우저를 열고 포럼 도메인 https://somedomain.com으로 이동하면 다음 페이지가 표시됩니다.
이상으로 모든 것이 끝났습니다. 이제 등록 단계를 따르고 포럼/커뮤니티를 시작할 수 있습니다 :).
추가 단계:
설치 후 유지 관리
OS의 자동 보안 업데이트를 켜는 것을 강력히 권장합니다. Ubuntu에서는 dpkg-reconfigure -plow unattended-upgrades를 사용합니다.
지원이 필요하면 이 커뮤니티를 사용하면 되며, 로컬 Nginx에 대해서는 이 게시물에서 도움을 요청할 수 있습니다.

