Phân Tích Chi Tiết Cấu Trúc Thư Mục ServBay
ServBay là một môi trường phát triển Web cục bộ được thiết kế riêng cho macOS với cấu trúc thư mục logic, gọn gàng. Nếu bạn quen thuộc với hệ thống Linux/Unix, bạn sẽ nhận ra cách tổ chức tệp của ServBay học hỏi nhiều từ bố cục tiêu chuẩn của các hệ thống file này, giúp nhà phát triển dễ dàng định vị và quản lý các loại tệp khác nhau.
Việc hiểu được cấu trúc thư mục của ServBay rất quan trọng để phát triển hiệu quả, cấu hình môi trường, xử lý sự cố và sao lưu dữ liệu. Bài viết này sẽ giải thích chi tiết các thư mục chính của ServBay cũng như mục đích sử dụng của chúng.
Một cấu trúc cài đặt ServBay tiêu biểu như sau:
ServBay
|____backup # Thư mục sao lưu dữ liệu
| |____config # Sao lưu cấu hình
| |____databases # Sao lưu cơ sở dữ liệu
| |____ssl # Sao lưu chứng chỉ SSL
| |____websites # Sao lưu tệp website
|____bin # Thư mục file thực thi (liên kết tới package/bin)
|____data # Thư mục dữ liệu nội bộ của ServBay
| |____servbay # Cấu hình và dữ liệu lõi của ServBay
|____db # Thư mục lưu trữ dữ liệu cơ sở dữ liệu
| |____mariadb # Dữ liệu MariaDB
| |____mongodb # Dữ liệu MongoDB
| |____mysql # Dữ liệu MySQL
| |____postgresql # Dữ liệu PostgreSQL
| |____redis # Dữ liệu Redis
|____etc # Thư mục cấu hình (liên kết tới package/etc)
|____logs # Thư mục nhật ký (liên kết tới package/var/log)
|____package # Thư mục cài đặt gói phần mềm
| |____bin # Tệp thực thi của gói phần mềm
| |____common # Thư viện chung và thư viện phát triển
| | |____imap-uw
| | |____include # Tệp header (ServBay Development Library)
| | |____lib # Thư viện chia sẻ và tĩnh (ServBay Development Library)
| | |____libexec
| | |____openssl
| | |____share
| |____etc # Vị trí lưu trữ cấu hình thực tế cho các gói phần mềm
| | |____caddy
| | |____dnsmasq
| | |____mariadb
| | |____mongodb
| | |____mysql
| | |____nginx
| | |____openldap
| | |____php
| | |____postgresql
| | |____redis
| | |____... (Các cấu hình cho: Python, Go, Java, Ruby, Rust, v.v.)
| |____<package_name> # Thư mục chính của mỗi gói
| | |____<major_version> # Thư mục số phiên bản chính
| | | |____<full_version> # Thư mục số phiên bản đầy đủ (chứa bản thân gói)
| | | |____current # Liên kết tới phiên bản mới nhất
| | |____...
| |____sbin # Tệp thực thi hệ thống của gói phần mềm
| |____var # Dữ liệu biến đổi của gói phần mềm (như vị trí thực tế của logs)
| | |____log # Vị trí lưu trữ nhật ký thực tế
| | |____run # Tệp trong thời gian chạy (.pid, ...)
|____sbin # Tệp thực thi hệ thống (liên kết tới package/sbin)
|____script # Script quản trị nội bộ ServBay
|____ssl # Thư mục chứng chỉ SSL
| |____acme # Chứng chỉ SSL cấp bởi ACME
| |____caddy # Chứng chỉ SSL tự động của Caddy
| |____import # Chứng chỉ SSL bên thứ ba được nhập vào
| |____private # ServBay User CA
| |____public # ServBay Public CA
|____tmp # Thư mục tạm thời và các tệp Socket
|____www # Thư mục gốc website
| |____servbay # Website mẫu
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
Dưới đây là giải thích chi tiết về mục đích và vai trò của từng thư mục.
Thư Mục Gốc ServBay
Thư mục gốc của ServBay mặc định là /Applications/ServBay
. Tất cả các gói phần mềm, tệp cấu hình, dữ liệu, nhật ký v.v... liên quan tới ServBay đều tập trung tại đây.
Để bảo đảm an toàn cho môi trường phát triển cục bộ và dữ liệu của bạn, hãy định kỳ sao lưu thư mục chính này. Bạn có thể sử dụng Time Machine hoặc công cụ sao lưu khác để sao lưu toàn bộ thư mục /Applications/ServBay
.
Thư Mục Gốc Website (www
)
Tệp của website được đặt chủ yếu trong /Applications/ServBay/www
. Đây là nơi bạn lưu trữ toàn bộ các dự án web cá nhân trên máy.
Để dễ tổ chức, quản lý cũng như tránh nhầm lẫn, bạn nên tạo một thư mục con cho mỗi dự án website hoặc mỗi tên miền riêng biệt (gọi là "website" trong ServBay) ngay trong thư mục này.
Ví dụ, nếu bạn tạo các website web.servbay.demo
, api.servbay.demo
hoặc new.servbay.local
thì cấu trúc lưu trữ nên như sau:
/Applications/ServBay/www
|____servbay.demo # Chứa tất cả các website *.servbay.demo
| |____web # website web.servbay.demo
| |____api # website api.servbay.demo
|____servbay.local # Chứa *.servbay.local
| |____new # website new.servbay.local
|____myproject # Những dự án độc lập khác (ví dụ: myproject.local)
2
3
4
5
6
7
Cách tổ chức này giúp phân biệt các dự án cũng như tên miền rõ ràng, quản lý thuận tiện hơn.
Thư Mục Cấu Hình (etc
)
/Applications/ServBay/etc
thực tế là một liên kết tới /Applications/ServBay/package/etc
. Đây là nơi lưu trữ các tệp cấu hình chính cho mọi gói bạn cài đặt (như PHP, MariaDB, Nginx, Caddy, ...).
Bạn nên truy cập, chỉnh sửa file cấu hình qua đường dẫn /Applications/ServBay/etc
. Hầu hết thay đổi cấu hình cần khởi động lại dịch vụ tương ứng để áp dụng.
Ví dụ về cách ServBay lưu cấu hình của các gói phổ biến:
PHP (etc/php
)
Cấu hình PHP được tổ chức gồm hai cấp thư mục để phân biệt các phiên bản lớn. Trong etc/php
bạn sẽ thấy các thư mục như 5.6
, 7.4
, 8.3
..., mỗi thư mục tương ứng với một phiên bản lớn của PHP. Ví dụ:
php
|____5.6 # Cấu hình PHP 5.6
| |____conf.d # Thư mục cấu hình extension
| |____php.ini # Tệp cấu hình chính PHP
|____7.4 # Cấu hình PHP 7.4
| |____conf.d # Thư mục cấu hình extension
| |____php-fpm.d # Thư mục cấu hình pool PHP-FPM
| |____php-fpm.conf # Cấu hình chính PHP-FPM
| |____php.ini # Tệp cấu hình chính PHP
|____8.3 # Cấu hình PHP 8.3
| |____conf.d
| |____php-fpm.d
| |____php-fpm.conf
| |____php.ini
|____... (các phiên bản PHP khác)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Mỗi phiên bản sẽ chứa tệp php.ini
(cấu hình chính PHP), php-fpm.conf
(cấu hình chính PHP-FPM, nếu có hỗ trợ FPM), pear.conf
, ... Khi sửa các file này, bạn cần khởi động lại PHP-FPM qua bảng điều khiển hoặc lệnh servbayctl
để cập nhật.
Thư mục conf.d
dành cho cấu hình các extension của PHP như xdebug.ini
, opcache.ini
, redis.ini
... Việc sửa đổi các tệp này cho phép bạn tải, gỡ hoặc thay đổi cấu hình của từng extension. Sau sửa đổi, dịch vụ PHP-FPM version tương ứng cũng cần được khởi động lại.
Lưu ý: ServBay cho mỗi phiên bản nhỏ của PHP cùng một phiên bản lớn sẽ dùng chung cấu hình. Ví dụ: 8.3.3
và 8.3.5
đều dùng file cấu hình nằm trong etc/php/8.3
.
MariaDB / MySQL / PostgreSQL (etc/mariadb
, etc/mysql
, etc/postgresql
)
Các tệp cấu hình của phần mềm cơ sở dữ liệu cũng tổ chức theo phiên bản lớn, ví dụ etc/mariadb/11.2
. Trong các thư mục này thường chứa file cấu hình chính như my.cnf
(MariaDB/MySQL) hoặc postgresql.conf
(PostgreSQL). Khi sửa đổi file này, bạn cần khởi động lại dịch vụ DB. Mỗi phiên bản nhỏ cùng phiên bản lớn sẽ dùng chung cấu hình.
Để reset mật khẩu người dùng root
của MariaDB, MySQL hoặc PostgreSQL, bạn nên sử dụng các công cụ dòng lệnh chuyên biệt hoặc tính năng của trình điều khiển ServBay, thay vì chỉnh file cấu hình trực tiếp.
Caddy (etc/caddy
)
Tệp cấu hình của Caddy (Caddyfile
) nằm trong etc/caddy
.
Lưu ý quan trọng: ServBay sẽ tự động sinh lại file Caddyfile
dựa trên các thiết lập website trong bảng điều khiển. KHÔNG chỉnh sửa thủ công file này, bởi vì mọi thay đổi có thể bị ghi đè khi ServBay cập nhật cấu hình. Nếu muốn thêm cấu hình đặc biệt, hãy cấu hình trực tiếp trong bảng điều khiển website.
Nginx (etc/nginx
)
File nginx.conf
nằm tại etc/nginx
. Giống như Caddy, ServBay cũng tự sinh/cập nhật các đoạn cấu hình website liên quan. Nếu cần sửa cấu hình thủ công, hãy cân nhắc kỹ và nên ưu tiên sử dụng bảng điều khiển ServBay.
dnsmasq (etc/dnsmasq
)
Thư mục cấu hình dnsmasq gồm dnsmasq.conf
(mặc định) và domains.conf
(được ServBay tự động sinh dựa trên tên miền cục bộ bạn cấu hình).
Lưu ý quan trọng: Cả dnsmasq.conf
và domains.conf
đều được ServBay quản lý tự động để bảo đảm website cục bộ hoạt động ổn định. KHÔNG sửa trực tiếp các file này, vì điều đó có thể gây lỗi không truy cập được website nội bộ.
Các cấu hình khác
Với các gói phần mềm như Node.js, Python, Go, Java, Ruby, Rust..., nếu có cấu hình toàn cục hoặc dạng dịch vụ, chúng cũng lưu tại các thư mục con trong etc
, tuân theo cấu trúc tổ chức theo phiên bản.
Thư Mục Dữ Liệu Nội Bộ ServBay (data/servbay
)
/Applications/ServBay/data/servbay
Đây là nơi lưu trữ các file cấu hình, trạng thái và thiết lập cá nhân quan trọng giúp ServBay hoạt động bình thường. Các tệp này cực kỳ quan trọng với bảng điều khiển ServBay, quản lý gói phần mềm và cấu hình website/cSDL.
Chú ý: Hãy thường xuyên sao lưu thư mục này. Không tự ý xóa sửa bất kỳ tệp nào ở đây, nếu không ServBay có thể hoạt động lỗi hoặc mất cấu hình quan trọng.
Thư Mục Thực Thi & Script (bin
, sbin
, script
)
/Applications/ServBay/bin -> package/bin
/Applications/ServBay/sbin -> package/sbin
/Applications/ServBay/script
2
3
Toàn bộ các tệp thực thi được tổ chức trong bin
và sbin
(liên kết tới các thư mục tương ứng trong package
). Ở đây bao gồm các tool, runtime của các ngôn ngữ lập trình...
Bạn có thể chạy trực tiếp các lệnh này trong Terminal vì ServBay tự động thêm các thư mục này vào biến môi trường PATH khi khởi động. Bao gồm:
- Công cụ dòng lệnh phổ biến:
curl
,openssl
,frpc
... - Các phiên bản runtime: ví dụ
php
(mặc định),php-5.6
,php-7.4
,php-8.3
,node
(mặc định),node-16
,node-18
,python3
,go
,java
,ruby
,rustc
... - Phần mềm client cho database:
mysql
,psql
,mongosh
,redis-cli
...
Thư mục script
(/Applications/ServBay/script
) chứa các script quản lý hệ thống nội bộ như khởi động/dừng dịch vụ, khởi tạo DB, tác vụ bảo trì... Chúng thuộc phần lõi ServBay. Tuy bạn có thể tự chạy các script này, nhưng nên ưu tiên sử dụng lệnh servbayctl
được ServBay cung cấp để thao tác thuận tiện, an toàn hơn.
Ví dụ khởi động PHP 7.4 FPM:
servbayctl start php 7.4
servbayctl
nằm trong /Applications/ServBay/bin
.
Thư Mục Dữ Liệu Cơ Sở Dữ Liệu (db
)
/Applications/ServBay/db
Đây là nơi lưu trữ dữ liệu thực tế của các phần mềm cơ sở dữ liệu được cài cùng ServBay, tổ chức theo loại phần mềm và phiên bản:
/Applications/ServBay/db/mariadb/<major_version>
: Dữ liệu MariaDB/Applications/ServBay/db/mysql/<major_version>
: Dữ liệu MySQL/Applications/ServBay/db/postgresql/<major_version>
: Dữ liệu PostgreSQL/Applications/ServBay/db/mongodb
: Dữ liệu MongoDB/Applications/ServBay/db/redis
: Dữ liệu Redis
Mỗi phiên bản lớn (major) của database sẽ dùng chung một thư mục dữ liệu, ví dụ toàn bộ MariaDB 11.2.x sẽ dùng dưới /Applications/ServBay/db/mariadb/11.2
.
Lưu ý quan trọng: Thư mục này chứa toàn bộ dữ liệu cơ sở dữ liệu cục bộ của bạn. Trước mỗi thao tác lớn như nâng cấp ServBay hoặc di chuyển hệ thống, hãy sao lưu đầy đủ /Applications/ServBay/db
. Chức năng sao lưu tự động của ServBay cũng bao gồm thư mục này.
Thư Mục Nhật Ký (logs
)
/Applications/ServBay/logs -> package/var/log
Tất cả nhật ký của các dịch vụ được lưu tại /Applications/ServBay/logs
(liên kết tới /Applications/ServBay/package/var/log
). Điều này giúp bạn dễ dàng xem, giám sát trạng thái các dịch vụ và lỗi phát sinh.
Nhật ký được tổ chức thành thư mục con theo loại dịch vụ. Ví dụ:
logs/caddy/
hoặclogs/nginx/
: Nhật ký truy cập và lỗi của Caddy hoặc Nginx, thường phân loại theo tên miền website.logs/php/
: Nhật ký PHP-FPM (php-fpm.log
) và lỗi thực thi của PHP (errors.log
).errors.log
ghi các lỗi nghiêm trọng chưa được framework hoặc ứng dụng PHP xử lý.logs/mariadb/
,logs/mysql/
,logs/postgresql/
,logs/mongodb/
,logs/redis/
: Nhật ký lỗi, truy vấn chậm của các dịch vụ DB tương ứng.- Nhật ký của các dịch vụ khác: Python, Go, Java, Ruby, Rust,... cũng lưu trong thư mục con của chúng.
Lưu ý: Tệp nhật ký – đặc biệt là nhật ký truy cập và lỗi – có thể chiếm nhiều dung lượng ổ đĩa, nhất là khi dự án phát triển mạnh. Bạn nên kiểm tra và dọn dẹp các file không cần thiết định kỳ để tối ưu dung lượng.
Thư Mục Gói Phần Mềm (package
)
/Applications/ServBay/package
Đây là nơi thực tế cài đặt, quản lý các gói phần mềm của ServBay. Mỗi gói phần mềm nằm trong thư mục con độc lập có cấu trúc tên_gói/phiên_bản_lớn/phiên_bản_đầy_đủ
. Ví dụ, PHP có thể được cài ở /Applications/ServBay/package/php/8.3/8.3.7
.
Bạn có thể dễ dàng cài mới, gỡ bỏ hoặc chuyển đổi phiên bản ở bảng điều khiển ServBay.
Các phiên bản cũ không còn dùng có thể xóa thủ công các thư mục phiên bản đầy đủ (ví dụ /Applications/ServBay/package/php/8.2/8.2.10
) để tiết kiệm dung lượng.
Lưu ý quan trọng: Trong mỗi thư mục phiên bản lớn (ví dụ /Applications/ServBay/package/php/8.3
), luôn có một liên kết tên là current
trỏ tới phiên bản nhỏ đang kích hoạt hoặc mới nhất. Không xóa/sửa liên kết current
này, nếu không có thể làm ServBay không tìm thấy file thực thi hoặc thư viện, dẫn đến lỗi dịch vụ.
Thư Mục Chứng Chỉ SSL (ssl
)
/Applications/ServBay/ssl
Đây là nơi quản lý file chứng chỉ SSL/TLS, bao gồm:
- Chứng chỉ SSL ServBay tự động đăng ký qua ACME cho website cục bộ (vị trí
ssl/caddy
,ssl/acme
tuỳ theo server bạn dùng). - Chứng chỉ CA gốc và công khai ServBay sinh ra cho phát triển HTTPS cục bộ, lưu tại
ssl/private
,ssl/public
. Khi cài CA vào kho tin cậy hệ thống, trình duyệt sẽ tin các chứng chỉ do ServBay phát cho website nội bộ, tránh cảnh báo HTTPS.
Thư Mục Sao Lưu (backup
)
/Applications/ServBay/backup
Đây là nơi lưu trữ tự động các bản sao lưu do ServBay thực hiện, giúp bạn bảo vệ dữ liệu phát triển quan trọng và cấu hình:
backup/config
: Sao lưu cấu hình lõi và file cấu hình các gói phần mềm.backup/databases
: Sao lưu dữ liệu MariaDB, MySQL, PostgreSQL, MongoDB,...backup/ssl
: Sao lưu tệp chứng chỉ SSL.backup/websites
: Sao lưu tệp dự án website trong/Applications/ServBay/www
.
Bạn nên thường xuyên kiểm tra thư mục này và nếu cần, chuyển các bản sao lưu ra thiết bị lưu trữ ngoài để bảo đảm an toàn dữ liệu tốt hơn.
Thư Mục Tạm Thời (tmp
)
/Applications/ServBay/tmp
Nơi lưu file tạm thời sinh ra trong quá trình chạy dịch vụ, phổ biến nhất là file .pid
và các socket tạm cho giao tiếp nội bộ.
- File
.pid
: Lưu quá trình ID của dịch vụ đang chạy. - File socket: Chẳng hạn như
php-cgi.sock
,mysql.sock
,pgsql.sock
... Giúp các chương trình nội bộ giao tiếp trực tiếp qua Unix Domain Socket với php-fpm, database,... Thay vì dùng TCP, socket thường nhanh hơn, hiệu năng tốt hơn, độ trễ thấp, đặc biệt phù hợp giao tiếp process trên cùng máy.
Thư Viện Chung & Thư Viện Phát Triển (package/common
)
/Applications/ServBay/package/common
Chứa các thành phần dùng chung, thư viện chia sẻ (*.dylib
) và các thư viện phát triển mà mọi gói ServBay phụ thuộc.
Nếu bạn cài đặt thêm gói ServBay Development Library (tùy chọn, cung cấp cho biên dịch), thư mục này còn có include
(tệp header) và lib
(thư viện tĩnh *.a
, thư viện liên kết *.la
). Những file này rất hữu ích nếu bạn cần biên dịch extension PHP hoặc phần mềm phụ thuộc ServBay.
Lưu ý: Không xóa các file *.dylib
dưới package/common/lib
bởi vì chúng cực kỳ quan trọng, thiếu sẽ gây lỗi khi chạy phần mềm.
Tổng Kết
Cấu trúc thư mục của ServBay tách bạch rõ ràng các thành phần gói phần mềm, cấu hình, dữ liệu, nhật ký và website, dựa trên nguyên tắc hệ thống file của Unix nên rất thân thiện với các lập trình viên. Hiểu kỹ các vai trò từng thư mục sẽ giúp bạn phát triển web với ServBay linh hoạt, hiệu quả hơn rất nhiều. Đặc biệt, hãy lưu ý thường xuyên sao lưu các thư mục quan trọng (đặc biệt là data
và db
) để bảo vệ công việc phát triển của mình.