2019년 달력, 사진엽서(소량) 판매합니다(+이벤트)

https://blog.naver.com/bob_ss/22139614603

     원문 : https://blog.naver.com/bob_ss/22139614603
<div class="se_background_dim"></div>

2019년 캘린더와 엽서.
2018년 '버킷리스트(
[재능을 통한]기부)'를 위한 '위시리스트'로, 달력과 엽서(2차)를 제작 했습니다. 
순 수익금의 29%는 후원할 예정입니다.
(제작 배경 : 
https://blog.naver.com/bob_ss/221396142038)

얼마 전 여행다니며 찍은 사진들 중, 맘에 드는 사진 몇 장을 선별해서 
엽서를 만들어 무료나눔을 했었는데 생각보다 반응이 좋아 
너무 감사하게 2차 제작을 하게 되었습니다.
(1차 나눔 : 
https://blog.naver.com/bob_ss/221395123936)


처음 해보는 분야(?)에 미적 감각이 없던 터라, 약 2~3주 동안 고생아닌 고생을 했습니다. 

제작 중에 동생도 그 뜻을 같이 해보고싶다 하여 도움을 주었습니다. 


공대생 의 디자인 치곤 몇몇 검토자(?)분들 께서 만족해 하셔서
샘플 제작하고 검수까지 완료했고, 최종 인쇄 요청을 했습니다. 

 

사진은 여행지에서 밥남매(저와 동생)이 '지금 이 순간'을 기억하고 싶어 노력해서 찍은 사진들이고, 
저만의 느낌을 조금 더 담은
(보정) 열정(?)이 들어갔습니다. 

좋은 사진들이 많아 어려웠지만, 
달력은 13장의 사진(표지포함)엽서는 14장의 사진을 선정해 제작합니다. 

 
달력, 엽서
1. 달력세트

달력세트 입니다.

 

달력은 2가지 세트가 있어요.  월별 사진은 밑쪽에 있습니다. 
인테리어에 감성을 더해줄      
① 일본감성세트
유럽의 모던함을 느낄 수 있는 
② 유럽세트

 
 
달력세트 기본구성
 

구매하신 분들을 위해 끈과 집게 그리고 받침대까지 예쁘게 포장해서 보내드려요.

2019 달력구성

사이즈 : A5(21.0x14.8cm)  * A5 사이즈로, 벽걸이 형 대형달력이 아닙니다!
재   질 : 르느와르 230g (두껍고 도톰한 종이로 잘 구겨지지 않습니다)
구   성 : 달력내지 12p, 표지 1p
             엽서 1장
(이벤트, 한정수량, 랜덤), 포장,
             액세서리 3종(원목받침대
[한정], [약 90cm내외], 나무집게 3개)
                   * 원목받침대는 핸드메이드 제품으로, 특성 상 옹이/갈라짐 등 있을 수 있습니다. 
                   * 7장까지 달력을 꽂을 수 있습니다. 
가   격 : 10,900원
(배송비 별도)
배송비 : 3,000원(제주, 산간 별도요금)

달력 월별 구성
 
일본감성세트(좌), 유럽모던세트(우)
2. 엽서세트

엽서세트입니다

 
 


엽서도 
2가지 세트가 있어요.   
① A.너의이름은 ② B.안녕,오늘
추천받아서 지은 이름입니다(오글거려도 참아주..)

 

기본 세트는 이렇게 7장씩 구성돼 있고, 추가로 선택하여 구매하실 수 있습니다.

 

엽서도 정성스레 포장해서 보내드려요! 
(사탕은 불포함..^^;)

엽서 구성

사이즈 : 규격엽서(14.8x10.0cm)
재   질 : 르느와르 230g (두껍고 도톰한 종이로 잘 구겨지지 않습니다)
구   성 : 엽서 내지 7장, 포장, [약 90cm내외]
가   격 : 5,900원
(배송비 별도)
배송비 : 3,000원(제주, 산간 별도요금)
* 달력과 같이 구매하시면 1,000원 할인 합니다. 

구매 방법

<안내사항>
- 소량 주문 제작이기 때문에 현재 재고 소진(?.. 희망사항) 시에는 추가 제작 후 발송 예정입니다. (11.16.금 추가주문)
- 엽서 기본 세트는 수량을 맞춰 제작했기에 구성품 일부를 다른 상품으로 교환이 어렵습니다. 
- 달력은 낱장으로 구성되어있습니다.
- 달력은 A5 사이즈로, 벽에 거는 대형 사이즈가 아니니 구매 시 참고해 주세요!
- 25,000원 이상 구매 시 배송비는 무료입니다. 
1. 아래의 정보를 비밀 댓글로 달아주세요 

① 상품명 
② 수량
③ 성함 
④ 연락처  
⑤ 주소 
2. 댓글 확인 후 구매 가능여부와 가격 / 입금계좌 안내해드리겠습니다.
3. 입금 확인 후 안내 댓글 드린 후, 최대한 빠르게 꼼꼼하게 포장해서 배송 드리겠습니다

댓글은 여기(https://blog.naver.com/bob_ss/22139614603)에서 달아주세요




'Storage > 메모용' 카테고리의 다른 글

2019년 달력, 사진엽서(소량) 판매합니다(+이벤트)  (0) 2018.11.12


1. Integers(Int) / 정수타입 


let age = 25



2. Floating Point Number / 실수


Float은 소숫점 6자리까지

Double은 소숫점 15자리 

애플은 굳이 Float이 필요하지 않으면 Double을 권유함



3. Boolean /  참 거짓 확인을 위한 타입


let isTrue = true //Bool
Binary 값으로, Swift는 0/1로 인식함.
(True = 1, False = 0)


'공부 > iOS' 카테고리의 다른 글

Swift Numbers& Booleans 정수, 실수  (0) 2018.11.08
Swift Naming Convention  (0) 2018.11.08
Swift 변수 Variables / 상수 let 차이  (0) 2018.11.08
iOS ) UIImage VS CGImage VS CIImage  (0) 2018.11.03


1. Concatenation


let address = "Seoul" + ", " + "Yongsan" + ", " + "Hangangro"
print(address)
 -> "Seoul, Yongsan, Hangangro"


2. String Interpolation


let city = "Seoul
let country = "South Korea" 

let interpolatedAddress = "\(city)"
print(interpolatedAddress)
 -> "Seoul"

interpolatedAddress = "\(city), \(country)"
print(interpolatedAddress)
 -> "Seoul, South Korea


Swift 시 통상 사용하는 규칙들

 


1. 띄어쓰기 허용X


let programminglanguage = "Objective-c"

2. 낙타표기법 사용


let favoriteProgrammingLanguage = "Swift"



3. 숫자로 시작할 수 없다


4. 스페이스, 탭과 같은 공백문자도 허용 X


5. 수학기호 사용 X

'공부 > iOS' 카테고리의 다른 글

Swift Numbers& Booleans 정수, 실수  (0) 2018.11.08
Swift Naming Convention  (0) 2018.11.08
Swift 변수 Variables / 상수 let 차이  (0) 2018.11.08
iOS ) UIImage VS CGImage VS CIImage  (0) 2018.11.03

변수(Mutable Type)

var str = "hello, playGround"


str = "Hello, World"


변수 선언 


var number = 7

 = > 가능



상수(Immutable Type)

let language = "Swift"


language = "Objective-c" 

 -> Cannot assign to value : "laungage' is a 'let' constant

에러

'공부 > iOS' 카테고리의 다른 글

Swift Numbers& Booleans 정수, 실수  (0) 2018.11.08
Swift Naming Convention  (0) 2018.11.08
Swift 변수 Variables / 상수 let 차이  (0) 2018.11.08
iOS ) UIImage VS CGImage VS CIImage  (0) 2018.11.03

UIImage VS CGImage VS CIImage



● UIImage 

UIImage라는 이름에 걸맞게, UIImage는 UIKit안에 있는 클래스입니다.

정의도 간단;;;


"An object that manages image data in your app."

"앱의 이미지 데이터를 관리하는 객체입니다."


이미지 객체를 사용하여 모든 종류의 이미지 데이터를 표현 할 수 있으며, UIImage 클래스는 기본 플랫폼에서 지원하는 모든 이미지 형식의 데이터를 관리 할 수 있습니다. 
이미지객체는 변경 불가능(immutable)하므로, 당신은 항상 이미 존재하는 디스크에있는 이미지파일이나 프로그래밍으로 생성된 이미지 데이터에서 새로운 이미지객체를 만들어야 합니다.
이미지 객체가 모든 플랫폼 고유의 이미지 형식을 지원하지만 앱의 대부분의 이미지에 PNG 또는 JPEG 파일을 사용하는 것이 좋습니다. 객체는 두 형식 모두를 읽고 표시 할 수 있도록 최적화되어 있으며 이러한 형식은 다른 대부분의 이미지 형식보다 우수한 성능을 제공합니다. PNG 형식은 무손실이기 때문에 앱 인터페이스에서 사용하는 이미지에 특히 좋습니다.




● CGImage 

<CGColor와 UIColor의 차이>글을 읽고오신분이라면...CG라는 것을 보고......바로 알아챘을 수도 ㅎㅎ..
네, CGImage의 CG는 Core Graphics의 약자입니다!!!
Core Graphics 프레임워크 안에 있는 녀석이죠.
정의는;;UIImage보다 더 간단함 

"A bitmap image or image mask."
"비트맵 이미지 또는 이미지 마스크."

허허..이걸 알려면 Quartz 2D Programming Guide를 읽어야 하네요..
간단하게 말하면, CGImage는 비트맵만 나타낼 수 있다고 합니다. blend modes나 masking과 같은 작업에는 CGImageRefs가 필요해요. 
실제 비트 맵 데이터에 접근하고 변경해야하는 경우 CGImage를 사용할 수 있습니다. 또한 NSBitmapImageReps로 변환 될 수 있습니다. CGImage에서 새로운 UIImage를 생성하려면, 이런식으로 하면 돼요. 

var aNewUIImage = UIImage(CGImage: imageRef)
//where imageRef is a CGImage




CGImage의 프로퍼티들을 보면, 



아주 비트비트스럽죠





 CIImage 

CIImage의 CI는 뭘까...

못들어본 사람도 있을거에요! 바로 "Core Image"라는 프레임워크의 약자이며, CIImage는 바로 이 Core Image프레임워크 안에 있는 클래스에요.

정의는 

"A representation of an image to be processed or produced by Core Image filters."

"코어 이미지 필터(Core Image filters)에 의해 처리되거나 생성 될 이미지의 표현."

그리고 아주아주 흥미로운 정보가 있어요.


"A CIImage is a immutable object that represents an image. It is not an image."

CIImage는 이미지를 나타내는 불변(immutable)객체 입니다. 그것(CIImage)은 이미지가 아닙니다. 


이미지가 아니래요!!! 이미지가 아니면 뭐냐? 

"관련된 이미지 데이터만 있으며, 이미지를 생성하는데 필요한 모든 정보가 있습니다"

오...신기..더 알아봅시다.


일반적으로 CIImage 객체는 CIFilter, CIContext, CIColor 및 CIVector와 같은 다른 Core Image 클래스와 함께 사용됩니다. CIImage 객체에는 연관된 이미지 데이터가 있지만 이미지가 아닙니다. CIImage 객체를 이미지 "레시피(recipe)"로 생각할 수 있습니다.


CIImage 객체는 이미지를 생성하는 데 필요한 모든 정보를 가지고 있지만 Core Image  실제로 그렇게 할 때까지(실제로 이미지를 생성할 때 까지) 이미지를 렌더링하지 않습니다. 

이 "게으른 평가(lazy evaluation)"방법은 Core Image가 가능한 한 효율적으로 작동하도록합니다.


CIContext 및 CIImage 객체는 변경 불가능합니다. 즉, 각 객체를 스레드간에 안전하게 공유 할 수 있습니다. 여러 스레드가 동일한 GPU 또는 CPU CIContext 객체를 사용하여 CIImage 객체를 렌더링 할 수 있습니다. 


하지만 이는 CIFilter객체 경우에는 아닙니다. CIFilter 객체는 스레드간에 안전하게 공유 할 수 없습니다

앱이 다중 스레드 인 경우 각 스레드는 고유 한 CIFilter 객체를 만들어야합니다. 


Core Image는 자동 조정 방법도 제공합니다. 이 메소드는 이미지에 공통적 인 결함이 있는지 분석하고 해당 결함을 수정하기 위해 일련의 필터를 반환합니다. 필터에는 스킨 톤, 채도, 대비 및 그림자의 값을 변경하고 플래시로 인한 적목 현상 또는 기타 아티팩트를 제거하여 이미지 품질을 향상시키는 값이 미리 설정되어 있습니다. 


OverView에 있는 내용을 번역해본건데..막 스레드니.......뭐니...잘 이해가 안가죠? 그래서 CIImage로 뭘 할 수 있는데;;

CIImage를 가지고, CIFilter등 다른 Core Image 클래스를 사용하면,

이런거


또는 이런거





를 할 수 있게됩니다. 그냥 쉽게 생각해서!!!!!이미지에 필터 씌울 수 있다!!!!라고 생각하시면 편합니다. 아니 음..Core Image에서의 기능 중 하나라고 보시면 됩니다. 이런 작업들을 하려면 CIImage로 해야한다는 것이죠.

CIFilter를 보면..정말 엄청나게 많은 효과?필터?들을 이미지에 입힐 수 있다는 것을 보실 수 있습니다...


음...솔직히 말해서 CGImage는 아직 조금 감이 안온달까

비트맵을 다룰 수 있다는건 알겠는데....어떤식으로 뭘 할 수 있는지...잘...ㅎㅎ..

오늘 글을 정리하자면, 앱 내에서 기본 이미지 타입을 다룰거라면 UIImage(png가 제일 좋다), 비트맵을 다룰거라면 CGImage, 이미지에 필터나 다양한 효과를 적용하고 싶다면 CIImage를 사용하면 된다?..이정도가 되겠네요 :)

오늘도 도움이 되었길 바래요 :) 혹시 틀린부분이 있다면 댓글로 말해주세요 XD


참고 : https://medium.com/@ranleung/uiimage-vs-ciimage-vs-cgimage-3db9d8b83d94

https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIBoxBlur

https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html

https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html



출처: https://zeddios.tistory.com/455 [ZeddiOS]

'공부 > iOS' 카테고리의 다른 글

Swift Numbers& Booleans 정수, 실수  (0) 2018.11.08
Swift Naming Convention  (0) 2018.11.08
Swift 변수 Variables / 상수 let 차이  (0) 2018.11.08
iOS ) UIImage VS CGImage VS CIImage  (0) 2018.11.03

https://m.blog.naver.com/metooneis/221205368477


많이 찾아봤지만 되는 방법은 결국 여기서 찾았따

출처 :https://m.blog.naver.com/catstar9898/220804915390


서버를 열고싶은데..
저희집 와이파이 기종이 kt에요ㅠㅠ
저희집은 olleh에요..ㅠㅠ

서버를 열고싶은데 어떻게열어요? 

그런 kt,올레 마크유저들을 위한 강좌 시작합니다!

2017.07.06(월)
올레 포트포워딩이 여러차례 바뀐탓에
수정하였습니다. 올레와이파이 유저분들은
아래로 쭉 스크롤 내리셔서 나오는 영상을 참고하여주세요

MINECRAFT
~kt,olleh 포트포워딩법~


먼저 포트포워딩을 하기위해서는
외부아이피와 내부아이피
이 두가지가 필요합니다!

먼저 외부아이피를 확인해볼까요?

먼저 인터넷에 들어가 초록검색창을 띄워줍니다

여기에다가
내ip확인
이렇게 입력해서 검색해주면

이렇게 외부아이피가 뜹니다!
이 외부아이피를 기억해 놓으세요

그 다음은 내부아이피 확인입니다
많은사람들이 어플을깔아서 확인하려하죠
꼭 어플을 설치하지 않아도 되는데 말이죠..
설정에서 와이파이로 들어가봅시다!
그럼 위 사진처럼 내가 접속한 와이파이가 뜨죠?

내가 접속한 와이파이를 터치하면
위 사진처럼 정보가 뜹니다
맨 아래의 ip주소를 기억하세요
당신의 내부아이피 주소랍니다! 


그럼 외부.내부아이피가 준비되었으니
포트포워딩을 해볼까요?

http://172.30.1.254/login.asp

이 주소가 포트포워딩을 하기위한사이트입니다
주소를 복사하여 인터넷에서 복붙하여 사이트로 들어가볼까요?

하지만 그들은 우리가
쉽게 포포하는걸 허락하지않지

비밀번호 입력 개귀찮앙


kt유저
아이디:ktuser
비밀번호:megaap

olleh유저
아이디:ktuser
비밀번호:homehub



그리고 보안키를 입력하고 로그인하시면

사이트 로그인 성공!
이렇게 메인화면이 뜰거랍니다

왼쪽에 보면 창이 있는데 
장치설정->트래픽관리
이렇게 이동해주세요

그럼 이렇게 생긴 곳으로 이동이 되는데요
여기서 포트포워딩을 할겁니다!

맨 위의 칸에는 아까 인터넷에서 찾은
외부아이피를 입력

소스포트와 외부포트는
전부 19132로 입력해주세요

내부IP주소에는
아까 와이파이에서 확인한
내부아이피를 입력

내부포트는
마찬가지로19132

프로토콜에서는 
kt와 올레는 유동성 아이피입니다
그러니 UDP로 바꿔주세요


유동성이라서 내부아이피가 매일 바뀌기에
자주 포트포워딩을 해야하는 깊은 빡


설명은 아무거나 해도 좋아요:)
그리고 저장하기 눌러주세요


아까 위에서 이런 창이 있었죠?
이제 DMZ설정으로 이동해주세요!

그럼 이렇게 생긴 창이 뜹니다!
여기서 DMZ호스트 IP주소에 
내부아이피를 입력해주세요!
그리고 설정하기를 눌러주시면
포트포워딩이 끝난답니다!

-----------------------
2017.08.07(월) 3차수정

올레 포트포워딩 방법(영상)

포트포워딩 방법이 다시 바뀌었던걸 모르고있었습니다.
정보수집이 부족했던점 죄송합니다..
영상은 친구님이 직접 찍어주셨습니다
댓가는 피시방비용


KT포트포워딩 방법(영상)

이건 좀 더 이해하실수 있도록 찍은 영상
블로거가 멍청해서 약간 헤매는점은 양해부탁드려요



------------------------


서버를 열고자 할때
서버에 들어올 사람들에게
외부아이피를 알려주셔야 합니다!
그리고 서버온의 여부를 알려주고
마인크래프트에 들어가 아무 맵에나 들어가있으면
곧 사람들이 입장한답니다!

처음으로 해본 강좌라 그런지
많이 어색하고 그렇네요0w0
무엇보다 설명을 제대로 했을까..듀근두근

kt와 올레유저분들
이 글 보시고 포포에 도움되길 바랄게요:)
늦은 수정과 정보에 죄송합니다..!!
더욱더 노력해보이겠습니다!


첫번째 강좌는 여기서 끝!


구글의 공식 도움말(한글)이 잘돼있어서 참고용으로 작성




 출처 : https://support.google.com/adsense#topic=3373519



NGINX + WORDPRESS + 멀티페이지 설치방법
1. wp-config.php 파일 설정

define('WP_ALLOW_MULTISITE', true);

2. wp관리자 로그인 - 도구 - 네트워크 설정 중 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); 

 * 반드시 1번 코드를 삭제해주어야함.. 이것도 모르고 계속 같이 반영했다가 삽질..


/------- 참고 -------/

Introduction

WordPress's multisite feature offers the ability to create multiple websites from a single installation of WordPress. Each site can have a separate theme, set of plugins, and collection of content (posts and pages). This reduces the overhead of maintaining and updating several installations of WordPress, while allowing you to host multiple sites which are totally unrelated to one another.

WordPress multisite comes in two flavours: subdirectory or subdomain. In this tutorial, we will set up WordPress multisite to use subdomains. That means that sites we create will have a subdomain web address like http://wp-site.yourdomain.com. This can be mapped to an external domain like http://wp-site.net so that each site looks independent from the outside.

Prerequisites

This tutorial requires the user to have a knowledge of the following:

We will be creating three WordPress sites with the following domain names:

  • Site 1:

    Domain: examplewp.com (Primary domain)

    This is the site that is created when WordPress is installed.

  • Site 2:

    External Domain: shoppingsite.com

    Subdomain: shoppingsite.example.com

  • Site 3:

    External Domain: companysite.org

    Subdomain: companysite.example.com

The first domain is the primary domain name through which WordPress will be installed. Make sure to set up DNS for all three domains to point to the IP address of the Droplet which will host WordPress.

Step One - Set Up DNS Wildcard Records

In this section, we will add a DNS wildcard record for the primary domain so that more sites can be added at any time, without needing individual A records. (Alternately, you can add a new A record for each subdomain.)

Note: This has to be done only for the *primary domain (examplewp.comin this tutorial).

Log in to your DigitalOcean control panel and navigate to the Networking section. Edit the primary domain and create a wildcard A record for this domain pointing to the Droplet's IP address. A wildcard record is created by entering an asterisk (*) in the hostname input box as shown in the screenshot below.

DNS Control Panel - wildcard record

If you host your domain's DNS elsewhere, you should set the wildcard record there instead.

What you should see now:

DNS queries for any random-sub-domain.examplewp.com should return the IP address of your Droplet.

Step Two - Install and Configure the LEMP Stack

In this section, we will install and configure Nginx, MySQL, and PHP. There is a detailed article on setting up a LEMP stack that you can reference if you would like to. This section will serve as a quick setup. There is also a LEMP on Ubuntu 14.04 image under the Applications tab in the Select Image section when creating a Droplet.

Update the repositories and install Nginx, MySQL, PHP5-FPM and other necessary PHP modules.

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

When MySQL server is being installed, you will be prompted to enter a password for the root database user. Please enter a strong password and do not leave it blank. You will enter the password twice.

MySQL root password

Create a document root for Nginx which will hold the WordPress files. We will use /usr/share/nginx/wordpress throughout this tutorial.

mkdir /usr/share/nginx/wordpress

We will replace Nginx's default virtual host with our own, so remove its symlink in the sites-enableddirectory.

rm /etc/nginx/sites-enabled/default

Create a new virtual host file inside the sites-available directory. This file can be named anything. In our example, we will call it wp-ms.

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

Edit this file and place the following configuration. Edit the text highlighted in red according to your environment. In the server_name line, you should add all three (or more) of your multisite domains, and the wildcard subdomain for the first domain.

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;
}

If this Droplet will host only this WordPress installation, the listen and server_name directives can be changed to the following:

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

The use of the $host variable in the access_log directive creates separate log files for each domain like examplewp.com-access.log and shoppingsite.com-access.log. It is not possible to use such variables for the error_log directive, so all errors are logged in a single file.

Save this file and create a symlink of this file inside the sites-enabled directory.

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

Execute an Nginx configuration test and restart if it returns OK.

service nginx configtest
service nginx restart

Step Three - Create a MySQL Database and User for WordPress

In this section, we will create a MySQL database for WordPress and a user with permissions for this database only.

Log in to the MySQL command line as the root user.

mysql -u root -p

Create a database.

CREATE DATABASE wordpress;

Create a MySQL user and grant permissions to this database:

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

Replace the word password with a strong password. Flush the privileges and exit the MySQL command line.

FLUSH PRIVILEGES;
exit

Note down these details as will be needing them in Step Four.

Database Name: wordpress

Database User: wordpress_user

Database Password: password

More information about MySQL users can be found in this article.

Step Four - Download and Install WordPress

In this section, we will download the latest version of WordPress and install it. This will be for our first site, examplewp.com.

Download and extract WordPress.

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

Move the extracted files into the document root.

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

Assign ownership to the user www-data. This is essential for media uploads and for core/plugin/theme updates to work in WordPress.

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

Access the primary domain in your browser to begin the WordPress installation.

http://examplewp.com/

You can add the "www" suffix to the URL if needed. Click the Create a Configuration File button followed by the Let's go! button. Fill in the database details (use the information from Step Three) and click Submit.

WordPress database details

At this point, WordPress will establish a connection with the database to test the entered credentials. Once the connection succeeds, the Run the install button appears. Click on it. Complete the Information needed form to set up your site title, username, password, and email, and then click Install WordPress. It is recommended to choose a non-generic username for security.

WordPress welcome screen

Step Five - Enable Multisite and Create Additional Sites

In this section, we will enable WordPress Multisite and create the two additional sites mentioned in the Prequisites section of this article.

PHP constant has to be defined in the wp-config.php file to enable the Network Setup page.

Edit the wp-config.php file:

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

Add the following code before the comment /* That's all, stop editing! Happy blogging. */:

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

We will be editing this file a few more times during this tutorial. Feel free to add all of the new lines in the /* Multisite settings */ section we just created.

Save the file. Log in to the WordPress admin panel and navigate to Tools > Network Setup. Choose the Sub-domains option, modify the Network Title as desired, and then click Install.

WordPress Network Setup

You will be presented with two blocks of code to be added in the wp-config.php and .htaccess files. Copy the wp-config.php code which looks similar to the following:

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);

Edit the wp-config.php file.

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

Add these lines before the comment /* That's all, stop editing! Happy blogging. */ and save it. The code displayed for .htaccess can be ignored, as Nginx does not have this file.

Log out of the WordPress admin panel, and log in again. From the admin toolbar on the top left, navigate to the My Sites > Network Admin > Sites.

WordPress Toolbar

Click the Add New button to open the Add New Site form. The following screenshot shows the filled-in details for the shopping site in our example. The Site Address entered will form the subdomain of this site.

Creating a new WordPress site

Click Add Site and the created site will be accessible via http://shoppingsite.examplewp.com.

Repeat these steps to create the second site (companysite.examplewp.com in our example).

What you should see now:

The following three WordPress sites:

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

Each of them will have their own content, theme, and active set of plugins.

Step Six - Set Up Domain Mapping

In this section, we will enable you to use a separate domain name for each WordPress site, by downloading and enabling the WordPress MU Domain Mapping plugin. This plugin allows users of WordPress Multisite to map their blog/site to another domain.

Log in to your Droplet via SSH and download the WordPress MU Domain Mapping plugin. First install the unzip command, and then extract the plugin.

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

Move the extracted files to the WordPress plugin directory.

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

Copy the sunrise.php file from the plugin's directory to the wp-content directory.

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

Edit the wp-config.php file and add the following line before the comment /* That's all, stop editing! Happy blogging. */.

File: /usr/share/nginx/wordpress/wp-config.php

define('SUNRISE', 'on');

Save this file and return to the web browser. From the WordPress toolbar navigate to My Sites > Network Admin > Plugins.

Plugins

Click the Network Activate link under the WordPress MU Domain Mapping plugin. Go to Settings > Domain Mapping and make changes to the Domain Options as follows:

  • Uncheck Remote Login
  • Check Permanent Redirect
  • Uncheck Redirect administration pages to site's original domain

Domain mapping options

Click Save once done. These settings redirect all requests for subdomains (like companysite.examplewp.com) to their respective external domains (like companysite.org) including the administration pages (/wp-admin).

In the next step we will be mapping a domain name to each site based on its site ID. There are many ways to find the ID of a site but for easier administration we will create a simple WordPress Must-use plugin that displays an additional ID column on the Sites page.

Log in to your Droplet via SSH and create an mu-plugins directory.

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

Create a PHP file inside this directory and paste the code that follows:

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

You can copy this content exactly:

<?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;
}

The Sites > All Sites section should now show an additional ID column.

ID

Note down the ID values for each site and go to the Settings > Domains page. Enter the site ID followed by the external domain for the site. For example, since companysite has an ID of 3, on this page, the Site ID should be 3, and the domain should be companysite.org.

Mapping a site ID to a domain

You may add a "www" prefix if you wish to set the site URL as www.companysite.org. Repeat these steps for the other domains. Click Save at the bottom of the page.

What you should see now:

Each site will have its own domain name instead of a subdomain; i.e., entering http://companysite.org in your browser will open the My Online Company Site. You can check this now by visiting http://shoppingsite.com and http://companysite.org. You should see the site title change in the upper left corner of the page.

Now each site can be maintained separately through its own WordPress admin panel:

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

Updates to the core/plugins/themes and installation of plugins/themes should be done from the network admin page of the primary domain:

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


* 출처 : https://www.digitalocean.com/community/tutorials/how-to-set-up-wordpress-multisite-with-nginx-on-ubuntu-14-04


+ Recent posts