Tuesday, February 3, 2015

Hướng dẫn Setup môi trường development APACHE-MYSQL-PHP trên Mac OS X 10.10 Yosemite

Bài viết này hướng dẫn cách tạo dựng một môi trường Apache-MySQL-PHP (còn gọi tắt là AMP) đầy đủ, thuận tiện cho develop các ứng dụng PHP ở local trên HĐH Mac OS X 10.10 Yosemite.

Các thành phần sẽ cài đặt gồm có:

Apache / Web Sharing

Mặc định, Mac Yosemite đã được cài sẵn một phiên bản Apache và được kích hoạt để chạy sẵn. Chúng ta không được cung cấp một tuỳ chọn, hoặc một GUI cài đặt nào để có thể tuỳ chỉnh, cũng như ON/OFF chức năng này. Do đó, hầu hết việc thay đổi sẽ được dựa vào Terminal để thực hiện. Đối với anh em lập trình viên thì điều này cũng không phải là khó khăn gì, và rất nhanh thôi chúng ta sẽ quen thuộc với việc gõ lệnh trên Termanal tiện dụng hơn nhiều lần so với tool Command Prompt trên Windows :)

Để START Apache, chúng ta gõ lệnh:
sudo apachectl start

Để STOP Apache, chúng ta gõ lệnh:
sudo apachectl stop

Để RESTART Apache, chúng ta gõ lệnh:
sudo apachectl restart

Và để kiểm tra lại version Apache hiện có, ta gõ lệnh:
httpd -v

Nếu mọi thứ hoạt động một cách bình thường, thì ngay lập tức ta đã có thể kiểm tra bằng cách mở trình duyệt Safari và gõ vào địa chỉ
http://localhost/
kết quả:



Root Document

Document Root là nơi chứa các files, thư mục phục vụ cho việc vận hành một website. Và thường được đặt bởi các tên thông dụng như "public_html", "htdocs",...

Trong Mac Yosemite, thì mặc định sẽ có 2 Document Root được thiết lập. Một dành cho system level, một dành cho user level. Với system level thì cả hệ thống sẽ dùng chung, còn với user level thì mỗi user trong máy có thể thiết lập riêng một thư mục làm Document Root cho mình.

Nếu bạn có quyền, bạn có thể cài đặt lại để có thể dùng chung cả system level và user level vào chỉ một thư mục.

System Level Web Root

Mặc định, System Level Web Root có địa chỉ web là:
http://localhost/
và được đặt ở thư mục vật lý có đường dẫn (path):
/Library/WebServer/Documents/


User Level Web Root

User Level Web Root đặt ở địa chỉ "~/Sites" trong Home của mỗi User. Và mặc định thì thư mục này không được tạo sẵn. Do đó chúng ta phải tạo thư mục "Sites" trong Home của user của mình thì nó sẽ hoạt động bình thường.

Ngay sau khi chúng ta tạo ra thư mục "Sites" thì có thể thấy hệ thống tự động thay đổi icon của thư mục thành một icon dễ dàng nhận biết là thư mục web.

Để bắt đầu làm việc với thư mục này, chúng ta cần phải có một vài tweaks (tinh chỉnh sửa đổi) nho nhỏ trước, theo các bước dưới đây.

Thêm file config tuỳ chỉnh theo username

Tạo một file “username.conf” bằng cách gõ các lệnh sau trong Terminal:
cd /etc/apache2/users/

Thay username.conf trong câu lệnh dưới đây bằng username của user mà bạn đang dùng. Nếu bạn không rõ thì cõ thể gõ lệnh "whoami" trong Terminal để biết username mà mình đang dùng.
sudo nano username.conf

Sau khi gõ vào mật khẩu Admin, trình Terminal sẽ chuyển sang chế độ soạn thảo, và bạn cần đưa vào nội dung dưới đây:

<Directory "/Users/username/Sites/">
AddLanguage en .en jp .jp vi .vn
LanguagePriority en jp vn
ForceLanguagePriority Fallback
AllowOverride All
Options Indexes MultiViews FollowSymLinks
Order allow,deny
Allow from localhost
Require all granted
</Directory>


Nhấn nút control + O để tiến hành write file.
Nhấn nút control + X để thoát chế độ soạn thảo trên Terminal.

Thay đổi quyền truy cập file username.conf như dưới đây:
sudo chmod 644 username.conf

Thay đổi các tuỳ chọn ở cài đặt gốc của apache httpd - add modules

Gõ vào Terminal lệnh sau để có thể tiến hành thay đổi nội dung file httpd.conf:
sudo nano /etc/apache2/httpd.conf

Chắc chắn rằng 3 module sau cần được cài đặt (bỏ dấu # đầu dòng nếu có):
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so

Đồng thời, bỏ comment (dấu # đầu dòng) trước dòng có nội dung sau:
Include /private/etc/apache2/extra/httpd-userdir.conf

Nhấn nút control + O để tiến hành write file.
Nhấn nút control + X để thoát chế độ soạn thảo trên Terminal.


Thay đổi các tuỳ chọn ở cài đặt httpd-userdir.conf

Gõ lệnh:
sudo nano /etc/apache2/extra/httpd-userdir.conf

Bỏ comment (dấu # đầu dòng) trước dòng có nội dung sau:
Include /private/etc/apache2/users/*.conf

Nhấn nút control + O để tiến hành write file.
Nhấn nút control + X để thoát chế độ soạn thảo trên Terminal.


Khởi động lại Apache để các thay đổi trên được kích hoạt

Gõ lệnh:
sudo apachectl restart

Sau khi Apache đã được khởi động, kiểm tra lại hoạt động bằng cách truy cập vào địa chỉ sau ở Safari:
http://localhost/~username/

Nếu trình duyệt không báo lỗi, một giao diện web hiển thị directory tree hiện lên nghĩa là mọi việc đã làm đúng.


Tips & Info

- Bạn có thể thay đổi Document Root thành một thư mục ở ổ đĩa khác bằng cách:
  • Tạo thư mục mong muốn làm Document Root, ví dụ /Volumes/WORK/WWW
  • Gõ lệnh sau vào Terminal:
    ln -s /Volumes/WORK/WWW /Users/username/Sites
  • Gõ lệnh để khởi động lại Apache
- Xem video:




.htaccess, mod rewrites

Để có thể override URL, một phương pháp để có những URL rút gọn dễ nhớ, thì bạn cần enable module mod_rewite cũng như là .htaccess.

Enable cho phép .htaccess hoạt động

Sửa file httpd.conf, tìm kiếm và thay đổi settings AllowOverride thành
AllowOverride All

Enable mod_rewrite hoạt động

Uncomment dòng dưới đây:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so



PHP

Mặc định, Mac OS X Yosemite đã có Apache và PHP version 5.5.14 đi kèm. Dù Apache được cài đăt để hoạt động bình thường, ngay từ đầu, nhưng PHP thì không. Để có môi trường phát triển PHP, ta cần phải enable PHP trong Apache config để nó có thể hoạt động.

Config PHP

Chỉnh sửa file httpd.conf, bỏ comment (xoá dấu # ở đầu dòng) cho dòng sau:
LoadModule php5_module libexec/apache2/libphp5.so

Lưu lại và sau đó khởi động lại Apache.
Để kiểm tra xem PHP đã hoạt động chưa, tạo một file ở đường dẫn "~/Sites/index.php, nội dung:




Mở trình duyệt Safari và truy cập vào:
http://localhost/~username/

Nếu PHP hoạt động bình thường, bạn sẽ thấy nội dung như sau được hiển thị:




MySQL

Với lập trình PHP thì MySQL là hệ cơ sở dữ liệu phổ biến đi cùng thành một cặp. Nhắc đến PHP thì đồng thời cũng cần có MySQL nếu nói về CSDL tương tự như khi nói tới ASP.NET thì nói tới MS SQL Server vậy.

MySQL thì không được cung cấp kèm với Mac OS X Yosemite như là Apache. Bạn bắt buộc phải download bộ cài đặt từ website. Hãy chọn bộ cài đặt Mac OS X 10.9 (x86, 64-bit), DMG Archive (chạy được trên Mac Yosemite 10.10). Khi download, bạn có thể bấm chọn No thanks, just start my download. ở bên dưới, để tiến hành ngay mà không cần Login hoặc Sign Up.
Có một vấn đề là phiên bản này sẽ không tự khởi động lại mỗi lần khởi động Mac, mà ta phải chạy nó bằng command line.

Nếu trước đó đã có một bản MySQL khác hoạt động trên Mac rồi, thì bạn có thể yên tâm rằng nó vẫn sẽ hoạt động tiếp. Và nếu bạn đang sử dụng bản MySQL cũ hơn, mà muốn nâng cấp lên thì bạn cần chú ý là TẮT MySQL Server đi trước khi upgrade tránh tình trạng data bị hư hỏng.

Cài đặt MySQL


Sau khi download, ta tiến hành mở file .DMG và tiến hành cài đặt bằng trình Installer.



Ở bước cuối cùng quá trình cài đặt, ta nhận được thông báo cài đặt không thành công. Tuy nhiên thực tế là MySQL Server đã được cài đặt và có thể chạy được đầy đủ, lý do báo failed là vì script để restart MySQL Server mỗi lần reboot bị lỗi trên Mac Yosemite.
Ta sẽ khắc phục được vấn đề này sau.

Nếu ta chọn tuỳ biến cài đặt, nhớ chú ý bỏ chọn ở Startup Item. Khi khởi động lại Mac, ta sẽ có thể khởi động lại MySQL Server thông qua System Preferences hoặc Command Line ở Terminal.


Chạy MySQL


Bạn có thể khởi động MySQL Server từ System Preferences hoặc thông qua command line, hoặc nếu nó đang chạy mà muốn restart thì có thể dùng command line.

Command Line để start MySQL Server trên Terminal: (bạn cần có mật khẩu Admin để làm việc này)
sudo /usr/local/mysql/support-files/mysql.server start

Command line để restart MySQL Server trên Terminal:
sudo /usr/local/mysql/support-files/mysql.server restart

Để kiểm tra version hiện tại của MySQL, dùng command sau:
/usr/local/mysql/bin/mysql -v

Đặt mysql vào shell path

Để thao tác bằng command line mysql ngắn gọn mà không phải gõ full path trong Terminal, ta nên làm thêm bước này.
Việc này được hoàn thành bằng cách chỉnh sửa file .bash_profile có trong thư mục Home của user.
Nếu file .bash_profile không tồn tại, bạn có thể tạo nó bằng vi hoặc nano.
cd; touch .bash_profile

Command line để mở file này ra để edit:
sudo nano .bash_profile

Thêm dòng sau vào nội dung của file, khi Terminal chuyển sang chế độ soạn thảo sửa file (chú ý dấu nháy kép cần được gõ chính xác):
export PATH="/usr/local/mysql/bin:$PATH"

Nhấn nút control + O để tiến hành write file.
Nhấn nút control + X để thoát chế độ soạn thảo trên Terminal.

Ra lệnh tải lại file vừa chỉnh sửa bằng command:
source ~/.bash_profile

Bây giờ thì ta có thể dùng lệnh ngắn gọn để thao tác với mysql. Ví dụ như kiểm tra version, có thể gõ ngắn gọn như sau:
mysql -v


Cài đặt root password cho MySQL

Trong MySQL thì root là user cao cấp nhất có toàn quyền. Do đó root cần phải có mật khẩu mạnh để đảm bảo an toàn dữ liệu.
Nhớ rằng root user này không liên quan gì đến root user của linux hay là Mac OS X.

Dùng lệnh sau để cài đặt password cho user root của MySQL, cần nhớ password này, hoặc take note nó:
/usr/local/mysql/bin/mysqladmin -u root password 'yourpasswordhere'
Chú ý: password được bao quanh bởi dấu nháy đơn '.

Sửa lỗi 2002 MySQL Socket error

Trong quá trình hoạt động ta có thể gặp lỗi 2002. Lỗi này xảy ra khi MySQL muốn truy cập vào các socket trong thư mục /tmp, tuy nhiên Mac OSX lại tìm trong thư mục /var/mysql/.

Các command cần thực hiện:
sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Sửa vấn đề với auto-start MySQL Server khi reboot

Làm theo hướng dẫn sau đây sẽ sửa được lỗi auto start MySQL khi reboot Yosemite:

Edit file bằng trình nano trong Terminal:
sudo nano /Library/LaunchDaemons/com.mysql.mysql.plist


Paste vào nội dung dưới đây:

<!--?xml version="1.0" encoding="UTF-8"?-->
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true />
<key>Label</key>
<string>com.mysql.mysqld</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/mysql/bin/mysqld_safe</string>
<string>--user=mysql</string>
</array>
</dict>
</plist>


Lưu lại và thoát chế độ soạn thảo.
Chỉnh lại quyền permission cho các file:
sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist

Sau đó thì MySQL có thể tự khởi động lại khi hệ điều hành khởi động.





phpMyAdmin

phpMyAdmin là web tool rất quen thuộc để thao tác với MySQL để thực hiện việc quản lý users cũng như là dữ liệu.

Cài đặt và Config phpMyAdmin

Download phpMyAdmin từ trang chủ.
Unzip vào thư mục Document Root, và đổi tên thư mục của nó thành phpmyadmin.

Tạo bên trong thư mục đó, thư mục con có tên là config.
mkdir ~/Sites/phpmyadmin/config

Đổi quyền truy cập cho thư mục đó:
chmod o+w ~/Sites/phpmyadmin/config

Mở Safari, tiến hành cài đặt phpmyadmin bằng cách truy cập vào địa chỉ: http://localhost/~username/phpmyadmin/setup/ hoặc http://localhost/phpmyadmin/setup/

Bạn cần tạo mới một Server connection, nhấn vào nút New server


Chuyển sang tab Authentication, và đưa vào root user, password (root password đã được cài đặt ở bước trên, khi mà ta cài đặt xong MySQL Server).

Nhấn vào nút Save để lưu lại thông tin cài đặt. Khi đó một file config.inc.php được tạo ra trong thư mục /phpmyadmin/config/.
Di chuyển (move,cut) file này ra ngoài thư mục gốc /phpmyadmin. Xoá thư mục trống /config đi.

Bây giờ truy cập lại http://localhost/~username/phpmyadmin/ sẽ có thể thao tác được với MySQL databases.

Nâng cấp phpMyAdmin

Để nâng cấp, đơn giản chỉ cần tiến hành download bản mới. Đổi tên thư mục sau khi xả nén thành phpmyadmin, và copy file config.inc.php từ thư mục backup của bản cũ hơn vào là xong.




Trên đây là toàn bộ các bước để cài đặt đủ một bộ môi trường phát triển Apache-PHP-MySQL trên Mac OS X Yosemite.
Nếu có vấn đề gì khó khăn, bạn có thể để lại comment.