เจาะลึกโครงสร้างไดเรกทอรีของ ServBay
ภาพรวม
ServBay คือสภาพแวดล้อมพัฒนาเว็บบนเครื่องที่รองรับทั้ง macOS และ Windows โดยออกแบบโครงสร้างไดเรกทอรีให้เรียบง่ายแต่เป็นระเบียบ หากคุณคุ้นเคยกับระบบ Linux/Unix จะเห็นว่า ServBay ยึดแนวทางจัดเก็บไฟล์แบบเดียวกันกับ OS เหล่านี้ ซึ่งช่วยให้นักพัฒนาค้นหาและจัดการไฟล์ได้อย่างรวดเร็ว
ตำแหน่งติดตั้ง ServBay
ตำแหน่งติดตั้งมาตรฐานของ ServBay แต่ละแพลตฟอร์มคือ:
- macOS:
/Applications/ServBay
- Windows:
C:\ServBay
การเข้าใจโครงสร้างไดเรกทอรีของ ServBay เป็นสิ่งสำคัญสำหรับการพัฒนา การตั้งค่าระบบ การแก้ไขปัญหา รวมถึงการสำรองข้อมูลบทเครื่องของคุณ บทความนี้จะอธิบายไดเรกทอรีหลักและการใช้งานแต่ละรายการโดยละเอียด
โครงสร้างตัวอย่างของโฟลเดอร์ติดตั้ง ServBay คือ:
ServBay
|____backup # โฟลเดอร์ไฟล์สำรองข้อมูล
| |____config # สำรองไฟล์ตั้งค่า
| |____databases # สำรองฐานข้อมูล
| |____ssl # สำรอง SSL Certificate
| |____websites # สำรองเว็บไซต์
|____bin # ไฟล์ Executable สำหรับผู้ใช้ (ลิงก์กับ package/bin)
|____data # ข้อมูลภายในของ ServBay
| |____servbay # การตั้งค่าและข้อมูลหลักของ ServBay
|____db # ไฟล์ฐานข้อมูล
| |____mariadb # ไฟล์ข้อมูล MariaDB
| |____mongodb # ไฟล์ข้อมูล MongoDB
| |____mysql # ไฟล์ข้อมูล MySQL
| |____postgresql # ไฟล์ข้อมูล PostgreSQL
| |____redis # ไฟล์ข้อมูล Redis
|____etc # ไฟล์คอนฟิก (ลิงก์กับ package/etc)
|____logs # ไฟล์ล็อก (ลิงก์กับ package/var/log)
|____package # ที่ติดตั้งแพ็คเกจซอฟต์แวร์
| |____bin # ไฟล์ Executable ของแพ็คเกจ
| |____common # ไลบรารี่ทั่วไปและไลบรารี่สำหรับพัฒนา
| | |____imap-uw
| | |____include # ไฟล์ header (ServBay Development Library)
| | |____lib # shared และ static library (ServBay Development Library)
| | |____libexec
| | |____openssl
| | |____share
| |____etc # ตำแหน่งจัดเก็บไฟล์คอนฟิกของแพ็คเกจ
| | |____caddy
| | |____dnsmasq
| | |____mariadb
| | |____mongodb
| | |____mysql
| | |____nginx
| | |____openldap
| | |____php
| | |____postgresql
| | |____redis
| | |____... (แพ็คเกจอื่นๆ เช่น Python, Go, Java, Ruby, Rust ฯลฯ)
| |____<package_name> # โฟลเดอร์หลักแต่ละแพ็คเกจ
| | |____<major_version> # โฟลเดอร์หลักแต่ละเวอร์ชันหลัก
| | | |____<full_version> # โฟลเดอร์เวอร์ชันเต็ม (ตัวโปรแกรมจริง)
| | | |____current # ลิงก์ไปยังเวอร์ชันเต็มล่าสุด
| | |____...
| |____sbin # Executable สำหรับระบบ
| |____var # ข้อมูลแปรผันของแพ็คเกจ (เช่น ตำแหน่งไฟล์ล็อก)
| | |____log # ตำแหน่งจัดเก็บไฟล์ล็อกจริง
| | |____run # ไฟล์ runtime (.pid ฯลฯ)
|____sbin # Executable สำหรับระบบ (ลิงก์กับ package/sbin)
|____script # สคริปต์ภายใน ServBay
|____ssl # ที่จัดเก็บ SSL Certificate
| |____acme # SSL จาก ACME Protocol
| |____caddy # SSL ที่สร้างอัตโนมัติโดย Caddy
| |____import # SSL จากภายนอกที่ผู้ใช้นำเข้า
| |____private # ServBay User CA
| |____public # ServBay Public CA
|____tmp # ไฟล์ชั่วคราวและไฟล์ Socket
|____www # เว็บไซต์ราก
| |____servbay # เว็บไซต์ตัวอย่าง
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
ต่อไปนี้คือคำอธิบายเกี่ยวกับโฟลเดอร์แต่ละส่วน
โฟลเดอร์หลักของ ServBay
โฟลเดอร์หลักของ ServBay จะอยู่ที่ /Applications/ServBay
โดยรวมซอฟต์แวร์ แพ็คเกจ ไฟล์คอนฟิก ข้อมูล ไฟล์ล็อก และองค์ประกอบที่สำคัญอื่น ๆ
เพื่อความปลอดภัยของงานและข้อมูล แนะนำให้สำรองข้อมูลโฟลเดอร์นี้อย่างสม่ำเสมอด้วย Time Machine หรือเครื่องมือสำรองข้อมูลอื่น ๆ
เว็บไซต์ราก (www
)
เว็บไซต์หลักจะอยู่ที่ /Applications/ServBay/www
เป็นพื้นที่ที่คุณควรนำไฟล์โปรเจกต์เว็บแต่ละรายไว้
เพื่อความเป็นระเบียบและบริหารจัดการง่าย ควรสร้างโฟลเดอร์ย่อยสำหรับแต่ละโปรเจกต์หรือโดเมนเสมือน (ServBay เรียกว่า ‘เว็บไซต์’) ตัวอย่างโครงสร้าง:
/Applications/ServBay/www
|____servbay.demo # เก็บไฟล์เว็บไซต์โดเมน *.servbay.demo
| |____web # ไฟล์เว็บไซต์ web.servbay.demo
| |____api # ไฟล์เว็บไซต์ api.servbay.demo
|____servbay.local # เก็บไฟล์เว็บไซต์โดเมน *.servbay.local
| |____new # ไฟล์เว็บไซต์ new.servbay.local
|____myproject # โปรเจกต์อื่น ๆ เช่น myproject.local
1
2
3
4
5
6
7
2
3
4
5
6
7
โครงสร้างนี้ช่วยให้แต่ละโปรเจกต์แยกเป็นสัดส่วน จัดการได้ง่าย
โฟลเดอร์ไฟล์คอนฟิก (etc
)
โฟลเดอร์ /Applications/ServBay/etc
เป็นลิงก์ไปยัง /Applications/ServBay/package/etc
ซึ่งเป็นที่เก็บไฟล์คอนฟิกหลักสำหรับแต่ละซอฟต์แวร์ (PHP, MariaDB, Nginx, Caddy ฯลฯ)
ในชีวิตจริง คุณสามารถเข้าไปแก้ไขไฟล์คอนฟิกผ่านเส้นทางนี้ เมื่อมีการแก้ไขส่วนใหญ่ ต้อง restart service นั้น ๆ เพื่อให้การตั้งค่ามีผล
ตัวอย่างตำแหน่งไฟล์คอนฟิกของแต่ละแพ็คเกจ:
PHP (etc/php
)
ไฟล์คอนฟิกของ PHP จัดตามเวอร์ชันหลัก เช่น ใน etc/php
จะมีโฟลเดอร์ 5.6
, 7.4
, 8.3
ฯลฯ โครงสร้างมาตรฐาน:
php
|____5.6 # ตั้งค่า PHP 5.6
| |____conf.d # โฟลเดอร์คอนฟิกสำหรับ extension
| |____php.ini # ไฟล์ตั้งค่าหลัก
|____7.4 # ตั้งค่า PHP 7.4
| |____conf.d # โฟลเดอร์คอนฟิกสำหรับ extension
| |____php-fpm.d # คอนฟิก PHP-FPM pool
| |____php-fpm.conf # คอนฟิกหลัก PHP-FPM
| |____php.ini # ไฟล์ตั้งค่าหลัก
|____8.3 # ตั้งค่า PHP 8.3
| |____conf.d
| |____php-fpm.d
| |____php-fpm.conf
| |____php.ini
|____... (PHP เวอร์ชันอื่น ๆ)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
แต่ละเวอร์ชันหลักมี php.ini
(ตั้งค่าหลัก), php-fpm.conf
(ถ้า support FPM), pear.conf
ฯลฯ หากมีการแก้ไข ต้อง restart PHP-FPM service ผ่าน ServBay Control Panel หรือคำสั่ง servbayctl
conf.d
คือโฟลเดอร์สำหรับตั้งค่า extension เช่น xdebug.ini
, opcache.ini
, redis.ini
ฯลฯ การแก้ไขจะมีผลเมื่อ restart PHP-FPM service
หมายเหตุ: PHP minor version หลายตัวภายใต้เวอร์ชันหลักเดียวกันจะใช้ไฟล์คอนฟิกร่วมกัน เช่น 8.3.3
กับ 8.3.5
ใช้ไฟล์ใน etc/php/8.3
MariaDB / MySQL / PostgreSQL (etc/mariadb
, etc/mysql
, etc/postgresql
)
ไฟล์คอนฟิกฐานข้อมูลแยกตามเวอร์ชันหลัก เช่น etc/mariadb/11.2
โดยแต่ละโฟลเดอร์จะมีไฟล์คอนฟิกหลักอย่าง my.cnf
หรือ postgresql.conf
ต้อง restart service หลังแก้ไข ส่วนการเปลี่ยนรหัส root database ให้ใช้เครื่องมือพิเศษหรือผ่าน Control Panel ของ ServBay
Caddy (etc/caddy
)
ไฟล์คอนฟิกของ Caddy (Caddyfile
) อยู่ที่ etc/caddy
คำเตือนสำคัญ: ไฟล์นี้ถูกสร้างจากข้อมูลเว็บไซต์ใน Control Panel โดยอัตโนมัติ อย่าแก้ไขเอง เพราะจะถูกทับเมื่อ ServBay สร้างไฟล์ใหม่ หากต้องการคอนฟิกพิเศษ ให้ตั้งค่าผ่าน Control Panel
Nginx (etc/nginx
)
ไฟล์หลัก nginx.conf
อยู่ที่ etc/nginx
เช่นกับ Caddy การแก้ไขไฟล์ควรทำผ่าน Control Panel เพื่อความถูกต้องและปลอดภัย
dnsmasq (etc/dnsmasq
)
ประกอบด้วย dnsmasq.conf
(ตั้งค่าหลัก) และ domains.conf
(สร้างโดย ServBay ตามโดเมนที่ตั้งค่าในเครื่อง)
คำเตือนสำคัญ: ทั้งสองไฟล์ถูก ServBay สร้างและจัดการเอง อย่าแก้เอง มิฉะนั้นอาจทำให้เว็บไซต์บนเครื่องเข้าไม่ได้
คอนฟิกของแพ็คเกจอื่น ๆ
แพ็คเกจอื่น ๆ เช่น Node.js, Python, Go, Java, Ruby, Rust หากมีไฟล์คอนฟิกระดับ global หรือ service จะเก็บไว้ใน etc โฟลเดอร์ตามโครงสร้างแบบแยกเวอร์ชันหลัก
ไดเรกทอรีข้อมูลภายใน ServBay (data/servbay
)
/Applications/ServBay/data/servbay
1
ไดเรกทอรีนี้เป็นที่เก็บไฟล์คอนฟิก, สถานะระบบ และการตั้งค่าส่วนตัวที่ ServBay ต้องใช้เพื่อให้ Control Panel, package management, การตั้งค่าเว็บไซต์/ฐานข้อมูล ฯลฯ ทำงานได้
คำเตือน: ควรสำรองข้อมูลโฟลเดอร์นี้เสมอ ห้ามลบหรือแก้ไขไฟล์ในนี้เอง เพราะจะทำให้ ServBay รันไม่ขึ้นหรือข้อมูลคอนฟิกสูญหาย
ไดเรกทอรี Executable และ Script (bin
, sbin
, script
)
/Applications/ServBay/bin -> package/bin
/Applications/ServBay/sbin -> package/sbin
/Applications/ServBay/script
1
2
3
2
3
Executable ทั้งหมดจะอยู่ใน bin
และ sbin
ซึ่งเป็นลิงก์กับ package/bin
และ package/sbin
สามารถรันเครื่องมือและ runtime ภาษาได้โดยตรงผ่าน Terminal (ServBay จะเพิ่มลง PATH ให้อัตโนมัติขณะที่รันบริการ)
- เครื่องมือทั่วไป:
curl
,openssl
,frpc
ฯลฯ - ภาษาและ runtime หลายเวอร์ชัน: เช่น
php
,php-5.6
,php-7.4
,php-8.3
,node
,node-16
,node-18
,python3
,go
,java
,ruby
,rustc
ฯลฯ เลือกใช้ version ตามต้องการ - ไคลเอนต์ฐานข้อมูล:
mysql
,psql
,mongosh
,redis-cli
ฯลฯ
โฟลเดอร์ script
(/Applications/ServBay/script
) เก็บ script สำหรับบริการภายใน เช่น start/stop service, init database, maintenance task แนะนำให้ใช้ tool servbayctl
ที่รวบรวม script เหล่านี้ไว้ให้ใช้ง่ายขึ้น
ตัวอย่างการ start PHP 7.4 FPM:
bash
servbayctl start php 7.4
1
servbayctl
จะอยู่ใน /Applications/ServBay/bin
ไดเรกทอรีฐานข้อมูล (db
)
/Applications/ServBay/db
1
เป็นที่เก็บไฟล์ข้อมูลที่ใช้จริงของแต่ละฐานข้อมูล ตามโครงสร้างแพ็คเกจและเวอร์ชันหลัก เช่น
/Applications/ServBay/db/mariadb/<major_version>
: ข้อมูล MariaDB/Applications/ServBay/db/mysql/<major_version>
: ข้อมูล MySQL/Applications/ServBay/db/postgresql/<major_version>
: ข้อมูล PostgreSQL/Applications/ServBay/db/mongodb
: ข้อมูล MongoDB/Applications/ServBay/db/redis
: ข้อมูล Redis
ServBay จะใช้ข้อมูลเดียวกันสำหรับฐานข้อมูลแต่ละเวอร์ชันหลัก เช่น MariaDB 11.2.x
ใช้ข้อมูลจาก /Applications/ServBay/db/mariadb/11.2
คำเตือนสำคัญ: โฟลเดอร์นี้รวมฐานข้อมูลที่สำคัญทั้งหมด ควร backup ก่อนที่จะ upgrade, migrate หรือดำเนินการใด ๆ ที่เสี่ยง ServBay จะสำรองข้อมูลอัตโนมัติในที่นี้เช่นกัน
ไดเรกทอรีไฟล์ล็อก (logs
)
/Applications/ServBay/logs -> package/var/log
1
ServBay จะเก็บล็อกของทุกบริการไว้ที่เดียวที่ /Applications/ServBay/logs
ซึ่งลิงก์กับ /Applications/ServBay/package/var/log
ใช้สำหรับตรวจสอบสถานะหรือแก้ไขปัญหาบริการต่าง ๆ
ล็อกแต่ละบริการจะจัดเป็นโฟลเดอร์แยก เช่น
logs/caddy/
หรือlogs/nginx/
: ล็อกการเข้าใช้งานและข้อผิดพลาดของ Caddy/Nginx แยกตามเว็บไซต์logs/php/
: บันทึก PHP-FPM (php-fpm.log
) และ error ของ PHP (errors.log
)logs/mariadb/
,logs/mysql/
,logs/postgresql/
,logs/mongodb/
,logs/redis/
: ล็อกของฐานข้อมูล- บริการอื่น เช่น Python, Go, Java, Ruby, Rust ฯลฯ ก็เก็บล็อกในโฟลเดอร์ตัวเอง
หมายเหตุ: ไฟล์ล็อกอาจใช้พื้นที่มากโดยเฉพาะกับโปรเจกต์ที่รันบ่อยๆ ควรล้างไฟล์เก่าออกบ้างเพื่อลดการสิ้นเปลืองพื้นที่
ไดเรกทอรีแพ็คเกจซอฟต์แวร์ (package
)
/Applications/ServBay/package
1
ที่รวมโปรแกรมและแพ็คเกจทั้งหมดที่ติดตั้งโดย ServBay โดยแต่ละโปรแกรมจะอยู่ในโฟลเดอร์ย่อย จัดโครงสร้างแบบชื่อ/เวอร์ชันหลัก/เวอร์ชันเต็ม เช่น PHP อาจอยู่ที่ /Applications/ServBay/package/php/8.3/8.3.7
สามารถติดตั้ง/ถอน/เปลี่ยนเวอร์ชันผ่าน Control Panel ได้
แต่ละโฟลเดอร์เวอร์ชันหลักจะมีลิงก์ชื่อ current
ไปยังเวอร์ชันล่าสุด อย่าลบหรือแก้ไขเอง มิฉะนั้นบริการจะหาไฟล์ executable หรือ library ไม่เจอ
ไดเรกทอรี SSL Certificate (ssl
)
/Applications/ServBay/ssl
1
เป็นที่เก็บไฟล์ SSL/TLS ของเว็บไซต์โลคอล ซึ่งประกอบด้วย:
- SSL Certificate ที่ได้มาจาก ACME protocol สำหรับเว็บไซต์ (เช่นใน
ssl/caddy
หรือssl/acme
) - CA certificate ถูกสร้างสำหรับใช้ในโลคอล (
ssl/private
,ssl/public
) เมื่อติดตั้งในระบบแล้วจะไม่เจอ error certificate บน browser
ไดเรกทอรีสำรองข้อมูล (backup
)
/Applications/ServBay/backup
1
ฟีเจอร์ backup ของ ServBay จะเก็บ data ที่สำคัญไว้ในนี้ ได้แก่:
backup/config
: คอนฟิกหลักของ ServBay และแต่ละแพ็คเกจbackup/databases
: สำรองข้อมูลฐานเช่น MariaDB, MySQL, PostgreSQL, MongoDBbackup/ssl
: สำรอง SSL Certificatebackup/websites
: สำรองเว็บโปรเจกต์ใน/Applications/ServBay/www
ควรตรวจสอบโฟลเดอร์นี้เป็นระยะ ๆ และโยกไฟล์สำรองไปเก็บนอกเครื่องด้วยเพื่อความปลอดภัยสูงสุด
ไดเรกทอรีไฟล์ชั่วคราว (tmp
)
/Applications/ServBay/tmp
1
ที่เก็บไฟล์ชั่วคราว เช่น .pid
สำหรับบอก process ID และ socket ที่ใช้ในการติดต่อระหว่างโปรแกรม เช่น php-cgi.sock
, mysql.sock
, pgsql.sock
ฯลฯ Socket file เหมาะกับการสื่อสารในเครื่องแบบตกทอดมีความเร็วและประสิทธิภาพสูงกว่า TCP communication
ส่วนประกอบทั่วไปและไลบรารี่สำหรับพัฒนา (package/common
)
/Applications/ServBay/package/common
1
รวมไลบรารี่สาธารณะและไลบรารี่ static/dynamic (*.dylib
) รวมถึงหัวไฟล์ (include
) และไลบรารี่สำหรับพัฒนา (lib
) โดยติดตั้ง ServBay Development Library เท่านั้น นักพัฒนาที่ต้องการ compile extension จาก source จำเป็นต้องใช้ไฟล์เหล่านี้
คำเตือน: ห้ามลบไฟล์ *.dylib
ใน package/common/lib
เพราะเป็นไฟล์ที่ซอฟต์แวร์สำคัญของ ServBay ต้องใช้ในการรันงาน
สรุป
โครงสร้างไดเรกทอรีของ ServBay แบ่งสัดส่วนแพ็คเกจ, คอนฟิก, ข้อมูล, ล็อก, และไฟล์เว็บไซต์อย่างชัดเจน โดยอิงแนวคิดของ Unix File System ทำให้นักพัฒนาบริหารโปรเจกต์ได้ง่ายและเป็นระบบ รู้จักการใช้งานในแต่ละโฟลเดอร์จะช่วยเพิ่มประสิทธิภาพในการพัฒนาเว็บ local เป็นอย่างมาก อย่าลืมสำรองข้อมูลในไดเรกทอรีที่สำคัญ (data
, db
) เพื่อความปลอดภัยของการพัฒนาบนเครื่องของคุณ