웹사이트 검색

Ubuntu 14.04에서 Nginx로 WordPress Multisite를 설정하는 방법


소개

WordPress의 다중 사이트 기능은 단일 WordPress 설치에서 여러 웹사이트를 생성할 수 있는 기능을 제공합니다. 각 사이트에는 별도의 테마, 플러그인 세트 및 콘텐츠 모음(게시물 및 페이지)이 있을 수 있습니다. 이렇게 하면 WordPress의 여러 설치를 유지 관리하고 업데이트하는 오버헤드가 줄어들고 서로 전혀 관련이 없는 여러 사이트를 호스팅할 수 있습니다.

WordPress 다중 사이트는 하위 디렉토리 또는 하위 도메인의 두 가지 유형으로 제공됩니다. 이 자습서에서는 하위 도메인을 사용하도록 WordPress 다중 사이트를 설정합니다. 즉, 우리가 만드는 사이트는 http://wp-site.net과 같은 하위 도메인 웹 주소를 가지므로 각 사이트는 외부와 독립적으로 보입니다.

전제 조건

이 자습서를 사용하려면 사용자가 다음에 대한 지식이 있어야 합니다.

  • WordPress 네트워크 관리 화면
  • WordPress Multisite의 기초

다음 도메인 이름을 사용하여 세 개의 WordPress 사이트를 만들 것입니다.

  • 사이트 1:
    도메인: examplewp.com(기본 도메인)
    워드프레스 설치시 생성되는 사이트입니다.\n
  • 사이트 2:
    외부 도메인: shoppingsite.com
    하위 도메인: shoppingsite.example.com\n
  • 사이트 3:
    외부 도메인: companysite.org
    하위 도메인: companysite.example.com\n

첫 번째 도메인은 WordPress를 설치할 기본 도메인 이름입니다. WordPress를 호스팅할 Droplet의 IP 주소를 가리키도록 세 도메인 모두에 대해 DNS를 설정해야 합니다.

1단계 - DNS 와일드카드 레코드 설정

이 섹션에서는 개별 A 레코드 없이도 언제든지 더 많은 사이트를 추가할 수 있도록 기본 도메인에 대한 DNS 와일드카드 레코드를 추가합니다. (또는 각 하위 도메인에 대해 새 A 레코드를 추가할 수 있습니다.)

참고: 이 작업은 *기본 도메인(이 자습서의 examplewp.com)에 대해서만 수행해야 합니다.

DigitalOcean 제어판에 로그인하고 네트워킹 섹션으로 이동합니다. 기본 도메인을 편집하고 Droplet의 IP 주소를 가리키는 이 도메인에 대한 와일드카드 A 레코드를 만듭니다. 아래 스크린샷과 같이 호스트 이름 입력 상자에 별표(*)를 입력하면 와일드카드 레코드가 생성됩니다.

도메인의 DNS를 다른 곳에서 호스팅하는 경우 대신 해당 위치에서 와일드카드 레코드를 설정해야 합니다.

지금 확인해야 할 사항:

random-sub-domain.examplewp.com에 대한 DNS 쿼리는 Droplet의 IP 주소를 반환해야 합니다.

2단계 - LEMP 스택 설치 및 구성

이 섹션에서는 Nginx, MySQL 및 PHP를 설치하고 구성합니다. 원하는 경우 참조할 수 있는 LEMP 스택 설정에 대한 자세한 문서가 있습니다. 이 섹션은 빠른 설정 역할을 합니다. Droplet을 만들 때 이미지 선택 섹션의 응용 프로그램 탭 아래 Ubuntu 14.04 이미지에 LEMP도 있습니다.

리포지토리를 업데이트하고 Nginx, MySQL, PHP5-FPM 및 기타 필요한 PHP 모듈을 설치합니다.

apt-get update
apt-get install -y nginx mysql-server php5-fpm php5-mysql php5-curl php5-mcrypt php5-gd

MySQL 서버가 설치될 때 루트 데이터베이스 사용자의 암호를 입력하라는 메시지가 표시됩니다. 강력한 암호를 입력하고 공백으로 두지 마십시오. 비밀번호를 두 번 입력하게 됩니다.

WordPress 파일을 보관할 Nginx용 문서 루트를 만듭니다. 이 튜토리얼 전체에서 /usr/share/nginx/wordpress를 사용할 것입니다.

mkdir /usr/share/nginx/wordpress

Nginx의 기본 가상 호스트를 자체 호스트로 교체할 것이므로 사이트 활성화 디렉토리에서 심볼릭 링크를 제거합니다.

rm /etc/nginx/sites-enabled/default

사이트 사용 가능 디렉토리 내에 새 가상 호스트 파일을 만듭니다. 이 파일의 이름은 무엇이든 지정할 수 있습니다. 이 예에서는 wp-ms라고 합니다.

nano /etc/nginx/sites-available/wp-ms

이 파일을 편집하고 다음 구성을 배치하십시오. 환경에 따라 빨간색으로 강조 표시된 텍스트를 편집합니다. server_name 줄에 다중 사이트 도메인 3개 이상을 모두 추가하고 첫 번째 도메인에 대한 와일드카드 하위 도메인을 추가해야 합니다.

server {
    listen [::]:80 ipv6only=off;
    server_name examplewp.com *.examplewp.com shoppingsite.com companysite.org;

    root /usr/share/nginx/wordpress;
    index index.php index.html index.htm;

    location / {
	    try_files $uri $uri/ /index.php?$args ;
    }

    location ~ /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location ~ \.php$ {
        try_files $uri /index.php;
		include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	access_log	/var/log/nginx/$host-access.log;
	error_log	/var/log/nginx/wpms-error.log;
}

이 Droplet이 이 WordPress 설치만 호스팅하는 경우 listenserver_name 지시문을 다음과 같이 변경할 수 있습니다.

listen [::]:80 default_server ipv6only=off;
server_name examplewp.com *.examplewp.com;

access_log 지시문에서 $host 변수를 사용하면 examplewp.com-access.log과 같은 각 도메인에 대한 별도의 로그 파일이 생성됩니다. >shoppingsite.com-access.log. error_log 지시문에 이러한 변수를 사용할 수 없으므로 모든 오류가 단일 파일에 기록됩니다.

이 파일을 저장하고 사이트 활성화 디렉토리 내에 이 파일의 심볼릭 링크를 만듭니다.

ln -s /etc/nginx/sites-available/wp-ms /etc/nginx/sites-enabled/wp-ms

Nginx 구성 테스트를 실행하고 OK를 반환하면 다시 시작합니다.

service nginx configtest
service nginx restart

3단계 - WordPress용 MySQL 데이터베이스 및 사용자 생성

이 섹션에서는 WordPress용 MySQL 데이터베이스와 이 데이터베이스에 대한 권한만 있는 사용자를 생성합니다.

루트 사용자로 MySQL 명령줄에 로그인합니다.

mysql -u root -p

데이터베이스를 생성합니다.

CREATE DATABASE wordpress;

MySQL 사용자를 만들고 이 데이터베이스에 권한을 부여합니다.

CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress_user'@'localhost';

password라는 단어를 강력한 암호로 바꿉니다. 권한을 플러시하고 MySQL 명령줄을 종료합니다.

FLUSH PRIVILEGES;
exit

4단계에서 필요하므로 이러한 세부 정보를 기록해 둡니다.

데이터베이스 이름: wordpress

MySQL 사용자에 대한 자세한 내용은 이 문서에서 확인할 수 있습니다.

4단계 - WordPress 다운로드 및 설치

이 섹션에서는 최신 버전의 WordPress를 다운로드하여 설치합니다. 이것은 우리의 첫 번째 사이트인 examplewp.com을 위한 것입니다.

워드프레스를 다운로드하고 압축을 풉니다.

wget http://wordpress.org/latest.tar.gz
tar -xf latest.tar.gz

추출된 파일을 문서 루트로 이동합니다.

mv wordpress/* /usr/share/nginx/wordpress/

www-data 사용자에게 소유권을 할당합니다. 이는 미디어 업로드 및 WordPress에서 작동하는 코어/플러그인/테마 업데이트에 필수적입니다.

chown -R www-data:www-data /usr/share/nginx/wordpress

브라우저에서 기본 도메인에 액세스하여 WordPress 설치를 시작합니다.

http://examplewp.com/

필요한 경우 URL에 "www” 접미사를 추가할 수 있습니다. 구성 파일 만들기 버튼을 클릭한 다음 시작하겠습니다! 버튼을 클릭합니다. 데이터베이스 세부 정보를 입력하고(3단계의 정보 사용) 제출을 클릭합니다.

이 시점에서 WordPress는 입력된 자격 증명을 테스트하기 위해 데이터베이스와의 연결을 설정합니다. 연결에 성공하면 설치 실행 버튼이 나타납니다. 그것을 클릭하십시오. 필요한 정보 양식을 작성하여 사이트 제목, 사용자 이름, 암호 및 이메일을 설정한 다음 WordPress 설치를 클릭합니다. 보안을 위해 일반이 아닌 사용자 이름을 선택하는 것이 좋습니다.

5단계 - 다중 사이트 활성화 및 추가 사이트 만들기

이 섹션에서는 WordPress Multisite를 활성화하고 이 문서의 전제 조건 섹션에 언급된 두 개의 추가 사이트를 만듭니다.

네트워크 설정 페이지.

wp-config.php 파일을 편집합니다.

nano /usr/share/nginx/wordpress/wp-config.php

주석 앞에 다음 코드를 추가합니다. /* 그게 다입니다. 편집을 중지하세요! 행복한 블로깅. */:

/* Multisite settings */
define( 'WP_ALLOW_MULTISITE', true );

이 튜토리얼에서 이 파일을 몇 번 더 편집할 것입니다. 방금 만든 /* Multisite settings */ 섹션에 새 줄을 모두 자유롭게 추가하십시오.

파일을 저장합니다. WordPress 관리자 패널에 로그인하고 도구 > 네트워크 설정으로 이동합니다. 하위 도메인 옵션을 선택하고 네트워크 제목을 원하는 대로 수정한 다음 설치를 클릭합니다.

wp-config.php 및 .htaccess 파일에 추가할 두 개의 코드 블록이 표시됩니다. 다음과 유사한 wp-config.php 코드를 복사합니다.

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'examplewp.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

wp-config.php 파일을 편집합니다.

nano /usr/share/nginx/wordpress/wp-config.php

/* 주석 앞에 다음 줄을 추가하세요. 편집을 중지하세요! 행복한 블로깅. */를 입력하고 저장합니다. .htaccess에 대해 표시되는 코드는 Nginx에 이 파일이 없으므로 무시해도 됩니다.

WordPress 관리자 패널에서 로그아웃하고 다시 로그인합니다. 왼쪽 상단의 관리 도구 모음에서 내 사이트 > 네트워크 관리자 > 사이트로 이동합니다.

새로 추가 버튼을 클릭하여 새 사이트 추가 양식을 엽니다. 다음 스크린샷은 예제에서 쇼핑 사이트에 대해 채워진 세부 정보를 보여줍니다. 입력한 사이트 주소는 이 사이트의 하위 도메인을 형성합니다.

사이트 추가를 클릭하면 생성된 사이트가 http://shoppingsite.examplewp.com을 통해 액세스할 수 있습니다.

이 단계를 반복하여 두 번째 사이트(예제에서는 companysite.examplewp.com)를 만듭니다.

지금 확인해야 할 사항:

다음 세 가지 WordPress 사이트:

  • examplewp.com
  • shoppingsite.examplewp.com
  • companysite.examplewp.com

그들 각각은 고유한 콘텐츠, 테마 및 활성 플러그인 세트를 갖게 됩니다.

6단계 - 도메인 매핑 설정

이 섹션에서는 WordPress MU 도메인 매핑 플러그인을 다운로드하고 활성화하여 각 WordPress 사이트에 별도의 도메인 이름을 사용할 수 있도록 합니다. 이 플러그인을 사용하면 WordPress Multisite 사용자가 자신의 블로그/사이트를 다른 도메인에 매핑할 수 있습니다.

SSH를 통해 Droplet에 로그인하고 WordPress MU 도메인 매핑 플러그인을 다운로드합니다. 먼저 unzip 명령을 설치한 다음 플러그인을 추출합니다.

wget http://downloads.wordpress.org/plugin/wordpress-mu-domain-mapping.latest-stable.zip
apt-get install unzip
unzip wordpress-mu-domain-mapping.latest-stable.zip

추출된 파일을 WordPress 플러그인 디렉터리로 이동합니다.

mv wordpress-mu-domain-mapping /usr/share/nginx/wordpress/wp-content/plugins/

플러그인 디렉토리에서 wp-content 디렉토리로 sunrise.php 파일을 복사하십시오.

cp /usr/share/nginx/wordpress/wp-content/plugins/wordpress-mu-domain-mapping/sunrise.php /usr/share/nginx/wordpress/wp-content/

wp-config.php 파일을 편집하고 주석 /* 앞에 다음 행을 추가하십시오. 편집을 중지하십시오! 행복한 블로깅. */.

파일: /usr/share/nginx/wordpress/wp-config.php

define('SUNRISE', 'on');

이 파일을 저장하고 웹 브라우저로 돌아갑니다. WordPress 도구 모음에서 내 사이트 > 네트워크 관리자 > 플러그인으로 이동합니다.

WordPress MU 도메인 매핑 플러그인에서 네트워크 활성화 링크를 클릭합니다. 설정 > 도메인 매핑으로 이동하고 도메인 옵션을 다음과 같이 변경합니다.

  • 원격 로그인 선택 취소
  • 영구 리디렉션 확인
  • 관리 페이지를 사이트의 원래 도메인으로 리디렉션 선택 취소

완료되면 저장을 클릭합니다. 이러한 설정은 관리 페이지(/wp-admin)를 포함하여 하위 도메인(예: companysite.org)에 대한 모든 요청을 리디렉션합니다.

다음 단계에서는 사이트 ID를 기반으로 도메인 이름을 각 사이트에 매핑합니다. 사이트의 ID를 찾는 방법에는 여러 가지가 있지만 더 쉬운 관리를 위해 사이트 페이지에 추가 ID 열을 표시하는 간단한 WordPress Must-use 플러그인을 만들 것입니다.

SSH를 통해 Droplet에 로그인하고 mu-plugins 디렉토리를 생성합니다.

mkdir /usr/share/nginx/wordpress/wp-content/mu-plugins

이 디렉터리 안에 PHP 파일을 만들고 다음 코드를 붙여넣습니다.

nano /usr/share/nginx/wordpress/wp-content/mu-plugins/wpms_blogid.php

이 콘텐츠를 정확하게 복사할 수 있습니다.

<?php
add_filter( 'wpmu_blogs_columns', 'do_get_id' );
add_action( 'manage_sites_custom_column', 'do_add_columns', 10, 2 );
add_action( 'manage_blogs_custom_column', 'do_add_columns', 10, 2 );

function do_add_columns( $column_name, $blog_id ) {
    if ( 'blog_id' === $column_name )
	    echo $blog_id;
    return $column_name;
}

function do_get_id( $columns ) {
	$columns['blog_id'] = 'ID';
	return $columns;
}

이제 사이트 > 모든 사이트 섹션에 추가 ID 열이 표시됩니다.

각 사이트의 ID 값을 기록하고 설정 > 도메인 페이지로 이동합니다. 사이트 ID 다음에 사이트의 외부 도메인을 입력합니다. 예를 들어 companysite의 ID가 3이므로 이 페이지에서 사이트 ID는 3이고 도메인은 companysite.org여야 합니다.

사이트 URL을 www.companysite.org로 설정하려면 "www\ 접두사를 추가할 수 있습니다. 다른 도메인에 대해 이 단계를 반복합니다. 페이지 하단에서 저장을 클릭합니다.

지금 확인해야 할 사항:

각 사이트에는 하위 도메인 대신 자체 도메인 이름이 있습니다. 즉, http://companysite.org를 입력합니다. 페이지의 왼쪽 상단 모서리에서 사이트 제목이 변경된 것을 볼 수 있습니다.

이제 각 사이트는 자체 WordPress 관리자 패널을 통해 별도로 유지 관리할 수 있습니다.

http://examplewp.com/wp-admin/
http://shoppingsite.com/wp-admin/
http://companysite.org/wp-admin/

코어/플러그인/테마 업데이트 및 플러그인/테마 설치는 기본 도메인의 네트워크 관리 페이지에서 수행해야 합니다.

http://examplewp.com/wp-admin/network/

추가 자료

  • Apache에서 WordPress Multisite 설정
  • Mika Epstein의 WordPress Multisite를 사용하지 마십시오
  • WordPress 다중 사이트 관리