[마젠토2] 멀티 웹사이트 및 스토어 설정 하기

0
477

마젠토의 강력함 중에 하나가 하나의 관리자 화면에서 여러 웹사이트, 스토어, 스토어뷰를 관리할 수 있는 것이다. 웹사이트, 스토어, 스토어뷰의 차이는 다소 혼동 되는 부분이 있는데, 간단히 설명하면 웹사이트는 완전히 다른 상품군과 고객들을 가질 수 있기 때문에, 상이한 품목군의 상품을 따로 팔고자 할때 이용하면 된다. 스토어는 같은 웹사이트 아래에서 상품과 사용자들을 공유하면서, 다른 루트카테고리를 가질 수 있기 때문에 독립된 메뉴를 가질수 있다. 그래서 스토어는 다국적 사이트나 상품 테마에 따라 스토어를 나누고 싶을 때 이용하면 된다. 마지막으로  스토어뷰는 언어에 관련된 것이다. 언어에 따라 여러개의 스토어뷰를 만들수 있으며, 당연한 소리지만 스토어는 무조건 하나의 스토어뷰를 가져야 한다.

마젠토2에서의 멀티 웹사이트 및 스토어 설정도 마젠토1 에서와 거의 동일한데, Varnish 를 이용하게 되면 Varnish 설정해주는 내용이 조금 추가된다.  내가 하고자 하는 구성은 웹사이트1개에 3개의 스토어를 가진 멀티 스토어 이고, 그 중 1개의 스토어는 2개의 스토어뷰를 가진다. 각 스토어는 각각의 도메인으로 접속할 수 있다.

1. 새 루트 카테고리 생성

다른 루트 카테고리를 가진 새 스토어를 생성하기 위해 카테고리에 가서 새 루트카테고리를 생성한다. 기존의 카테고리를 이용해도 되기 때문에 스토어를 생성한 다음 루트카테고리를 생성해도 무관하다. [Products] -> [Categories] -> [Add Root Category] 클릭한뒤 생성.

 

2. 스토어 추가 

[Stores] -> [All Stores] 로 이동 하여 [Create Store] 를 클릭한다. Website 를 선택하고, Name 을 입력하고, Root Category 를 선택한뒤 저장하면 된다. 나는 KP, SS, SB 세 개의 스토어를 생성했다.

 

 

3. 스토어뷰 추가

[Stores] -> [All Stores] 로 이동 하여 [Create Store View] 를 클릭한다. Store 를 선택하고, Name 을 입력하고, Code 를 입력한다. 이때 코드는 나중에 각각 다른 도메인으로 접속을 하기 위한 설정을 할때 필요하다.  Status 설정하고 저장한다. 나는 KP 스토어는 English, Chinese 두개를 생성하고, 나머지는 English 만 생성했다.

 

4. 스토어별 홈페이지 생성

멀티 스토어를 운영하게 되면 각 스토어에 맞는 페이지를 따로 생성해 주고, 그 페이지에 뷰 범위를 제대로 설정해 주어야 한다. [Content] -> [Pages]->[Add New Page] 해서 페이지를 생성한다. 이 때 Store View 에서 그 페이지에 해당되는 스토어뷰를 선택해주면 된다.

 

5. 스토어별 주소 변경 및 홈페이지 주소 설정

각 스토어에 해당되는 페이지 생성이 끝나면, [Stores]->[Configuration]->[General]->[Web] 로 이동을 한다. 여기서 왼쪽 상단에 보면 Store View 를 선택하는 버튼이 있다. 이것을 눌러 수정하고자 하는 웹사이트나 스토어뷰를 선택한다.

 

해당되는 스토어에 접속하기 위해 사용할 도메인을 입력해준다. Base URL 은 http://도메인네임, Secure Base URL 은 https://도메인네임 을 입력하면 된다.

 

마지막으로 각 스토어에 맞는 홈페이지를 선택해준뒤 저장하면 된다.

 

6. 도메인 세팅 

도메인의 DNS 세팅은 되어 있어야 한다. 내용이 많기 때문에 우선 생략한다.

7. 엔트리 포인트 생성

index.php 에 있는 내용을 아래 내용으로 수정해준다.

Original

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);

Replace with

$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

$params = $_SERVER;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = $mageRunCode;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = $mageRunType;
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);

8. .htaccess 설정

마지막에 아래와 같이 붙여 넣으면 되는데, 스토어를 만들 때 입력했던 코드를 입력하면 된다. 만약 웹사이트를 추가했다면 웹사이트 코드를 넣고, MAGE_RUN_TYPE=website 로 하면 된다.

SetEnvIf Host .*kpaparazzi.com.* MAGE_RUN_CODE=kp_en
SetEnvIf Host .*kpaparazzi.com.* MAGE_RUN_TYPE=store

SetEnvIf Host .*sleepysue.com.* MAGE_RUN_CODE=ss_en
SetEnvIf Host .*sleepysue.com.* MAGE_RUN_TYPE=store

SetEnvIf Host .*singlebingle.com.* MAGE_RUN_CODE=sb_en
SetEnvIf Host .*singlebingle.com.* MAGE_RUN_TYPE=store

9. Varnish 설정 ( /etc/varnish/default.vcl 파일 수정 )

아래 코드대로 설정을 해주면 된다. 빨간색 글자들이 중요한데, vcl 4.0 은 현재 작성하는 언어의 버전이다. 아래 req.backend_hint 에서 설정한 대로 위의 backend 에 설정을 해주면 된다. 예를 들면 req.backend_hint = kp 로 했기 때문에, 위에 backend kp 로 설정을 한 것이다.

vcl 4.0;

 

backend kp {
.host = "domain1.com";
.port = "8080";
}
backend ss {
.host = "domain2.com";
.port = "8080";
}
backend sb {
.host = "domain3.com";
.port = "8080";
}

sub vcl_recv {
if (req.http.host == "domain1.com") {
#You will need the following line only if your backend has multiple virtual host names
set req.http.host = "domain1.com";
set req.backend_hint = kp;
}
if (req.http.host == "domain2.com") {
#You will need the following line only if your backend has multiple virtual host names
set req.http.host = "domain2.com";
set req.backend_hint = ss;
}
if (req.http.host == "domain3.com") {
#You will need the following line only if your backend has multiple virtual host names
set req.http.host = "domain3.com";
set req.backend_hint = sb;
}
}

10. 인덱스 리인덱싱, 캐시 갱신 

./bin/magento indexer:reindex

./bin/magento cache:flush

 

레퍼런스가 아직 많지 않아 여기저기서 막히는 바람에 꽤 시간이 걸렸는데, 그래도 한번 설정을 해놓으니 이상없이 잘 작동이 된다.

 

 

 

 

LEAVE A REPLY

Please enter your comment!
Please enter your name here