Docker 포트와 리버스 프록시를 통한 Discourse, Caddy, WordPress 통합

이것은 제 첫 게시글이며, 공식 설치 설명서를 따르며 Discourse를 설치한 후 Caddy를 리버스 프록시로 설정하는 방법에 며칠 동안 고생한 끝에, 친구인 ChatGPT와 함께 만든 가이드를 공유하고 싶었습니다. 여기 Caddy 포럼에서 찾은 정보를 활용했습니다. Caddy Discourse Setup . 이 내용은 직관적일 수 있지만, Discourse를 처음 시작하는 우리들에게는 이를 구동시키기까지 꽤나 험난한 과정이었을 것입니다.

분명히 훌륭한 커뮤니티에 감사드립니다.

Docker 포트와 리버스 프록시를 위한 Discourse, Caddy, WordPress 통합


개요

이 가이드는 Docker Compose를 사용하여 Caddy를 리버스 프록시로, WordPress 설치와 함께 Discourse를 설정하는 단계별 과정을 제공합니다. 이 설명서는 일반적인 Ubuntu 22 LTS 서버를 대상으로 하며, 여러 서비스를 통합하고 깔끔하고 재현 가능한 설정을 보장하는 방법을 보여줍니다.


전제 조건

진행하기 전에 다음 전제 조건이 충족되었는지 확인하십시오:

  1. DockerDocker Compose:

bash

코드 복사

apt update && apt install docker docker-compose -y
  1. Discourse 설치됨:
  1. 도메인 이름:
  • WordPress용 기본 도메인 (예: website.com).
  • Discourse용 서브도메인 (예: forum.website.com).

1단계: docker-compose.yml 구성

docker-compose.yml 파일은 Caddy(리버스 프록시), WordPress, MySQL에 대한 서비스를 정의합니다.

파일 위치

파일을 /etc/docker-services/docker-compose.yml로 저장하십시오.

구성

yaml

코드 복사

version: '3.8'

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - caddy_net

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: example_user
      WORDPRESS_DB_PASSWORD: example_password
      WORDPRESS_DB_NAME: example_db
    volumes:
      - ./wordpress:/var/www/html
    networks:
      - caddy_net

  db:
    image: mysql:5.7
    container_name: wordpress_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: example_password
      MYSQL_DATABASE: example_db
      MYSQL_USER: example_user
      MYSQL_PASSWORD: example_password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - caddy_net

volumes:
  caddy_data:
  caddy_config:
  db_data:

networks:
  caddy_net:
    external: true

2단계: Caddy 리버스 프록시 설정

Caddy는 Discourse와 WordPress 모두로 요청을 프록시하고 HTTPS 인증서를 관리합니다.

파일 위치

구성을 /etc/docker-services/Caddyfile로 저장하십시오.

구성

caddyfile

코드 복사

website.com {
    reverse_proxy wordpress:80
}

forum.website.com {
    reverse_proxy app:80
}

이 구성은 다음을 보장합니다:

  • website.com에 대한 요청은 WordPress 컨테이너로 프록시됩니다.
  • forum.website.com에 대한 요청은 Discourse 컨테이너로 프록시됩니다.

3단계: Discourse 구성

Discourse를 Caddy 및 Docker 네트워크와 통합하도록 app.yml을 업데이트하십시오.

파일 위치

/var/discourse/containers/app.yml에 위치합니다.

구성 변경 사항

  1. 비표준 HTTP 포트 노출:

yaml

코드 복사

expose:
  - "8880:80"   # http
  1. SSL 템플릿 제거:

yaml

코드 복사

# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. Docker 네트워크 설정:

yaml

코드 복사

docker_args:
  - '--network caddy_net'

networks:
  caddy_net:
    external: true
  1. Discourse 재빌드: Discourse 컨테이너를 재빌드하여 변경 사항을 적용하십시오:

bash

코드 복사

cd /var/discourse
./launcher rebuild app

4단계: 서비스 배포

Caddy 및 WordPress의 Docker 서비스를 시작하십시오:

  1. Docker Compose 디렉터리로 이동:

bash

코드 복사

cd /etc/docker-services
  1. 컨테이너 실행:

bash

코드 복사

docker compose up -d

5단계: 테스트 및 검증

  1. 실행 중인 컨테이너 확인:

bash

코드 복사

docker ps
  1. WordPress 액세스: 다음으로 이동:

arduino

코드 복사

https://website.com
  1. Discourse 액세스: 다음으로 이동:

arduino

코드 복사

https://forum.website.com
  1. 로그 확인:
  • Caddy:

bash

코드 복사

docker logs caddy
  • Discourse:

bash

코드 복사

tail -f /var/discourse/shared/standalone/log/rails/production.log

문제 해결

  1. Discourse 응답 없음:
  • Discourse가 포트 8880에 바인딩되었는지 확인하십시오.
  • 컨테이너가 caddy_net에 연결되었는지 확인하십시오:

bash

코드 복사

docker network inspect caddy_net
  1. Caddy SSL 오류:
  • /data에서 Caddy 인증서 로그를 확인하십시오.
  1. 재빌드 문제:
  • Discourse를 재빌드할 때 caddy_net 네트워크가 활성 상태인지 확인하십시오:

bash

코드 복사

docker network ls

결론

이 가이드는 Docker Compose와 리버스 프록시 구성을 사용하여 Discourse, Caddy, WordPress를 통합하는 방법을 보여줍니다. 이 단계를 따르면 자체 웹사이트 인프라를 위한 모듈화되고 안전한 설정을 달성할 수 있습니다.

You used an Arduino for this?