เรื่อง Multiple Site

By hellmonster

จากที่ผู้ถามใน Codenone เรื่องการทำ multiple site

แต่ผมยังไม่เข้าใจถ่องแท้เท่าไร แต่ทว่าผมข้อตั้งคำถามใหม่ดีกว่านะครับ

ถ้าผมต้องการทำ multi site โดยที่มี source ที่เดียว แต่มี database หลายๆก้อน เก็บตามแต่ละ site (ประมาณว่ามี drupal หลายๆ อันแต่มี folder drupal ใน www อันเดียวน่ะครับ) ถ้าเปรียบเทียบก้อคือ

1องค์กร มีหลายแผนก และให้แต่ละแผนกคือแต่บะ site ขององค์กร โดยที่แต่ละแผนกก้อจะเก็บข้อมูลของแผนกๆตนเอาไว้ทั้งพนักงานก็จะเข้าได้เพียงแผนกของตนเท่านั้น อะไรประมาณนี้น่ะครับ

ต้องใช้วิธีไหนอย่างไรหรือครับ


ปล. ขออภัยหากถามแล้วไม่ชัดเจน ครับ

22 comments

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

ชี้ DocumentRoot

  1. ชี้ DocumentRoot ไปที่เดียวกัน
  2. สร้างไดเรกทอรี่ตามชื่อโฮสใน sites/ เช่น

    • sites/www.abc.com
    • sites/www.def.com
    • sites/www.ghi.com
  3. สร้างฐานข้อมูลสำหรับแต่ละเว็บรอไว้

  4. ติดตั้งตามปกติโดยเข้าไปยังชื่อโฮส

    • http://www.abc.com/install.php
    • http://www.def.com/install.php
    • http://www.ghi.com/install.php
  5. ตอนตอบก็บอกชื่อฐานข้อมูลให้ตรงกับที่สร้างไว้

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

ชี้ DocumentRoot

  • ชี้ DocumentRoot ไปที่เดียวกัน
    หมายถึงถ้าเป็น appserv ซึ่งลงไว้ที่ C:\AppServ\www ก็แปลว่าต้องลง drupal ไว้ที่ www เลยใช่ไหมครับ

  • ซึ่งแต่ละ sites ก็จะมีโฟลเดอร์บางอย่างเป็นของตนเอง

    • /files
    • /modules
    • /themes
    • (ครบไหมครับ)
รูปภาพของ sugree
By sugree
4 years 18 weeks ago

การชี้มีห

การชี้มีหลายวิธี อาจจะใช้ Alias หรือจะตั้ง DocumentRoot ก็ได้ ในกรณีนี้เป็น Alias จะเหมาะกว่า ส่วนเรื่องไดเรกทอรี่ ที่มักจะแยกกันก็มีแค่ files กับไฟล์ .htaccess เท่านั้น นอกนั้นอยู่รวมกันได้ อะไรที่แยกกันก็จะอยู่ใน sites

รูปภาพของ hellmonster
By hellmonster
4 years 18 weeks ago

ยังอยูที่

ยังอยูที่เดิมเลยนะครับผม เหอะๆ

ความสงสัยก้อคือ ชื่อโฮสนี่ครับ ...

ถ้าของผมเป็น www.drupal.in.th

แต่ผมต้องการสร้างใหม่โดยอยุ่ภายใต้ drupal.in.th เป็นแบบนี้ใช่มั้ยครับ

sites/www.drupal.in.th/drupalforkid
sites/www.drupal.in.th/drupalforteen
sites/www.drupal.in.th/drupalforadult

หรือต้องเป็น

site/drupalforkid.drupal.in.th
site/drupalforteen.drupal.in.th
site/drupalforadult.drupal.in.th

ขอบคุณมากครับ

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

sites/www.drupal.in.th.drupal

sites/www.drupal.in.th.drupalforkid
sites/www.drupal.in.th.drupalforteen
sites/www.drupal.in.th.drupalforadult

รูปภาพของ hellmonster
By hellmonster
4 years 18 weeks ago

ขอบคุณมาก

ขอบคุณมากครับ เดี๋ยวไปลองทำดู ติดขัดประการใด

ขอรบกวนใหม่นะครับ ^^

รูปภาพของ hellmonster
By hellmonster
4 years 18 weeks ago

ลืมบอกไปว

ลืมบอกไปว่าผม พัฒนาบน localhost อ่ะครับ

แรกเลย
ใน site/ จะมี all กับ default ใช่มั้ยครับ

คราวนี้ผมต้องการสร้าง site ใหม่ผมก้อสร้าง folder เลย

site1
site2
site3

โดยแต่ละ site ผมก้อ copy setting.php
และ แก้ไข
$db_url = 'mysql://userName:password@localhost/databaseName'; (ไม่แน่ใจว่าถูก syntax หรือเปล่า)
$base_url = 'http://localhost/dupal5.1/site1';

และผมก้อสร้าง DB มารองรับแต่ละ site
พอไป http://localhost/site1/install.php

มันบอกว่า

Not Found

The requested URL /site1/install.php was not found on this server.

เกิดความผิดพลาดประการใดครับ

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

แบบนี้เริ

แบบนี้เริ่มยุ่งยาก โดยเฉพาะอย่างยิ่งบนวินโดส์ ผมไม่แน่ใจกับการใช้ localhost เท่าไหร่ แต่น่าจะใช้ได้

  1. สร้างรอไว้

    • sites/localhost.site1/
    • sites/localhost.site2/
    • sites/localhost.site3/
  2. จัดการที่ httpd อาจจะใช้ Alias

    • Alias /site1 /var/www/drupal-5.2
    • Alias /site2 /var/www/drupal-5.2
    • Alias /site3 /var/www/drupal-5.2

วิธีนี้จะใช้ clean url ไม่ได้ ถ้าอยากจะใช้ต้องเปิด rewrite เองแยกแต่ละเว็บ เพราะ .htaccess ใช้ร่วมกันอยู่ หรือไม่ก็ใช้ symlink ให้หมด ยกเว้น files กับ .htaccess

รูปภาพของ hellmonster
By hellmonster
4 years 18 weeks ago

ถ้าผมใช้

ถ้าผมใช้ wamp แล้วเลือกที่ Alias directories > add an alias

ใช่ไหมครับ หรือไปที่ไหนแล้ว add อย่างไรเหรอครับ ...

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

น่าจะใช่

น่าจะใช่ แหม ตอบลำบากจัง ผมไม่เคยลองซะด้วย

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

ถ้าผมลง

  • ถ้าผมลง แบบใช้ script ทุกๆ subdirectory ไปเลย มีผลเสียอะไรไหมครับ คือมันจะกิน resource ของเครื่องเยอะใช่ไหมครับ
    • localhost/sudir1/
    • localhost/sudir2/
    • localhost/sudir3/
  • ถ้าใช้ตามวิธีีของคุณสุกรีแต่ยังอยากได้ clean url ก้ให้เขียน .htaccess เพื่อใช้แยกกันตามไซต์ คือเท่าที่เปิด .htaccess ดูมันก็เหมือนจะเขียนไว้แล้ว เราก็แค่ copy file ไปใส่ไว้ในทุก subdirectory เอาแค่นั้นใช่ไหมครับ หรือต้องเขียนอะไรเพิ่มพิเศษครับ

ป.ล. คือพอเป็น windows แล้วชักปวดหัวนะครับ T^T ยุ่งจังเลย ฮาๆ
หรือลง linux สักตัวไปเลย ฮาๆ แต่ สำคัญว่าไม่เคยลองใช้อีกนะสิครับ T^T

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

บนวินโดส์

บนวินโดส์ไม่มี symlink ถ้าอยากใช้แบบโค้ดเดียวใช้วิธีเขียน rewrite ใน Location ซึ่งก็ได้ผลไม่ต่างกัน

จริงๆ แล้วลงแบบปกติไม่ต้องใช้ multisite ก็ไม่ได้เป็นอะไรมาก แค่ตอนอัพเกรดต้องทำหลายรอบนิดนึง เท่านั้นจริงๆ

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

อย่างนั้น

  • อย่างนั้นเสร็จโจรครับ.. ลงมัน sub ละอันๆ ละครับ ปวดหัวแล้วครับ ไว้ตอนอัพเดทปวดหัวใหม่อีกที ฮาๆ
  • ว่าแต่มันจะยังใช้ Single Sign-On ได้ไหมครับ
  • เดาว่าน่าจะได้ แต่ยังแอบ งง เรื่อง shared database ไว้มีอะไรมีเข้าใจจะรบกวนมาถามอีกทีนะครับ
รูปภาพของ sugree
By sugree
4 years 18 weeks ago

โค้ดแยก

โค้ดแยก แต่ใช้ db ร่วมกัน

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

แล้วใช้

แล้วใช้ prefix แยกกันหรือ ร่วมกันไปเลยครับ โดยไม่ต้องใช้ prefix ครับ

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

บางตารางร

บางตารางร่วมกัน บางตารางแยก

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

- -a ลงๆ

- -a ลงๆ ไปแล้วมันไปแยกเองหรือป่าวครับ หรือว่าต้องใช้กำลังภายในกันอีก
สงสัยต้องไล่เอาตามนี้เลยสินะครับ Multi-Site, Single Codebase, Shared Database, Shared Sign-on 5.x
เหอะๆ มัน.....

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

แก้ใน settings.php

แก้ใน settings.php ครับ

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

ขอบคุณครั

ขอบคุณครับ..
เป็นที่น่าอายยิ่งนัก.. คือตั้งแต่มันลงให้เองแบบง่ายๆ ก็ไม่เคยสนใจเปิด settings.php อีกเลยครับ ก่อนหน้านี้ตอน 4.7 ตอนนั้นก็หัดลง ก้ไม่เคยสนใจอ่าน ฮาๆ

รูปภาพของ jrp13th
By jrp13th
4 years 18 weeks ago

ปัญหาต่อม

ปัญหาต่อมาครับ

ข้อ 1. ต้อง แชร์อันไหนบ้าง

$db_prefix = array(
'default'   => 'site01_',
'users'     => 'shared_',
'sessions'  => 'shared_',
'role'      => 'shared_',
'authmap'   => 'shared_',
'sequences' => 'shared_',
'profile_fields' => 'shared_',
'profile_values' => 'shared_',
'users_roles' => 'shared_',
'permission' => 'shared_',
);

แค่นี้ใช่ไหมครับ?? แล้วถ้าในอนาคตผมลง module อะไรที่เกี่ยวกับ Profile เพิ่มจะเป็นอะไรไหมครับ

ข้อ 2. ถ้าผมสร้างไซต์แรกไปแล้ว จะทำสองเพิ่ม นอกจากแก้ settings.php ทั้งของทั้ง 2 ไซต์แล้ว ผมมานั้งแก้ prefix เอาใน PhpMyAdmin เอาได้ใช่ไหมครับ

ป.ล. ไม่เติมคำว่า ข้อ แล้ว markdown แปลงเป็น order ให้ T^T แต่เป็น 1. กับ 1.

รูปภาพของ sugree
By sugree
4 years 18 weeks ago

แค่นี้ก็น

  1. แค่นี้ก็น่าจะพอ ส่วน profile มันรวมอยู่ใน profile_fields กับ profile_values แต่ถ้ามีโมดูลอื่นมาเสริมก็ต้องดูเป็นกรณีไป
  2. ของเก่าไม่ต้องแก้แล้ว ส่วนของใหม่ก็แก้แค่ default prefix

เวลาอยู่ใน list แล้วอยากจะใส่โด้ดจะต้อง indent เข้าไปอีก 4 ตัวครับ หลังจากจบโค้ดก็กลับมาใช้ indent 4 แล้วจะอยู่กับ list เดิม หรือจะมาเป็นข้อถัดไปเลยก็ได้ ลองเล่นๆ

  1. ต้องแชร์อันไหนบ้าง

    $db_prefix = array(
    'default'   => 'site01_',
    'users'     => 'shared_',
    'sessions'  => 'shared_',
    'role'      => 'shared_',
    'authmap'   => 'shared_',
    'sequences' => 'shared_',
    'profile_fields' => 'shared_',
    'profile_values' => 'shared_',
    'users_roles' => 'shared_',
    'permission' => 'shared_',
    );

    แค่นี้ใช่ไหมครับ

  2. ถ้าผมสร้างไซต์แรกไปแล้ว

By thunder
1 ปี 22 weeks ago

อยากได้แบบเป็นบทความหรือรวบรว

อยากได้แบบเป็นบทความหรือรวบรวมไว้เป็นกรณีเรยไ้ด้ไหมครับ เเบบเป็นขั้นตอนเลยครับ มือใหม่ทำไม่ถูกครับ รบกวนด้วยครับ อยากทำเหมืิอนกัน