Chuyển đổi cài đặt WordPress từ Development sang Production
Câu hỏi
Tôi làm development trên một box và có sử dụng cho production. Tôi kết xuất cơ sở dữ liệu rồi sau đó thực hiện tìm kiếm thay thế các thay đổi URL và sao chép các tệp rồi nhập SQL mới.
Có cách nào tốt hơn để thực hiện việc này không?
Ryan Gibbons
Cho những người mới đọc câu hỏi. Một năm sau đó và tôi vẫn đang sử dụng @MikeSchinkel plugin. Anh ấy có một 0.7 out và tôi đã sử dụng để chuyển đổi một vài cài đặt mà không có vấn đề gì xảy ra. mikeschinkel.com/downloads/wp-migrate-webhosts-0.7.zip – Ryan Gibbons Aug 26 ’11 at 20:35
Đây là một tập lệnh không có plugin (plugin-free script) và nó đã vô cùng hữu ích đối với tôi philipdowner.com/2012/01/… – Philip Downer Jan 17 ’12 at 2:12
wp.tutsplus.com/tutorials/… – agileapricot Jan 27 ’12 at 10:48
Hiện nay đang có một plugin gọi là Duplicator: wordpress.org/extend/plugins/duplicator. Đó là một quá trình ba bước theo đúng nghĩa đen và hoạt động cực kì tuyệt vời. Tôi đã sử dụng cái này rất nhiều lần để triển khai một web site thử nghiệm đi vào hoạt động. – Matthias Jul 30 ’12 at 12:04
Câu trả lời chính xác nhất
@Insanity5902: Việc triển khai một trang web từ box này sang một box khác đã trở thành một PITA kể từ lúc tôi bắt đầu làm việc với WordPress. (Nói đúng ra thì nó đã là một PITA với Drupal trong vòng 2 năm trước khi tôi bắt đầu với WordPress, vì vậy vấn đề ở đây chắc chắn không chỉ riêng với WordPress.
Tôi cảm thấy rất phiền phức khi mỗi lần cần chuyển đổi một trang web thì mất rất nhiều công sức. Và vì vậy tôi không thể triển khai để kiểm tra một cách thường xuyên như tôi muốn. 4-6 tháng trước, tôi bắt đầu làm việc trên một plugin để giải quyết vấn đề chuyển webhost và tôi đã có đề cập các ý tưởng của tôi trên diễn đàn WP Tavern.
Cho đến hôm nay thì nó hoạt động rất tốt và tôi gọi nó một cách ngắn gọn là “WP Migrate Webhosts”. Mặc dù các plugin vẫn còn rất nhiều phiên bản beta (thậm chí có thể là alpha) với câu hỏi của bạn tôi nghĩ rằng tôi đã sẵn sàng giới thiệu nó với mọi người.
Được áp dụng với các trường hợp sau:
- Trước tiên, nhà phát triển (developer) xử lý việc tải lên tất cả các tệp plugin và chủ đề đã được thay đổi thông qua FTP
- Sau đó tải lên cơ sở dữ liệu MySQL phát triển (development MySQL database) cho toàn bộ máy chủ thử nghiệm và cuối cùng
- Cho chạy plugin để di chuyển mọi tham chiếu từ miền trước đó sang miền mới. (Plugin của tôi không hỗ trợ giải quyết việc hợp nhất các trường hoặc bảng cơ sở dữ liệu mới với dữ liệu trực tiếp. Đó là vấn đề lớn mà tôi không chắc chắn cách giải quyết.)
Bạn có thể tải plugin từ trang web của tôi và giải nén vào thư mục plugin của bạn (nếu bạn không biết cách làm việc này thì plugin này không dành cho bạn bởi vì nó đòi hỏi bạn phải biết bạn đang làm cái gì để sử dụng nó). Tôi sẽ để plugin này online cho đến khi tôi phát hành nó lên WordPress.org sau đó bạn nên tìm nó ở đó.
Để sử dụng nó, bạn có một cách tiếp cận khác trong wp-config.php của bạn, bình thường bằng cách bình luận ra bốn (4) định nghĩa DB_NAME, DB_USER, DB_PASSWORD và DB_HOST và thay vào đó đăng ký mặc định cho webhost và sau đó đăng ký thông tin về mỗi webhost. Phân đoạn wp-config.php sẽ trông như thế này (lưu ý phần đầu tiên là mã không cần thiết đã nhận xét và cũng lưu ý rằng tôi thiết lập tệp máy chủ lưu trữ trên máy cục bộ của mình với các miền cấp cao nhất không thể định tuyến .dev để làm cho việc phát triển hàng ngày dễ dàng hơn. Trên Mac VirtualHostX hướng dẫn việc này một cách dễ hiểu):
// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
//define(‘DB_NAME’, ‘wp30’);/** MySQL database username */
//define(‘DB_USER’, ‘wp30_anon’);/** MySQL database password */
//define(‘DB_PASSWORD’, ‘12345’);/** MySQL hostname */
//define(‘DB_HOST’, ‘127.0.0.1:3306’);require_once(ABSPATH . ‘wp-content/plugins/wp-migrate-webhosts/wp-webhosts.php’);
register_webhost_defaults(array(
‘database’ => ‘example_db’,
‘user’ => ‘example_user’,
‘password’ => ‘12345’,
‘host’ => ‘localhost’,
‘sitepath’ => ”, // ” if WordPress is installed in the root
));
register_webhost(‘dev’,array(
‘name’ => ‘Example Local Development’,
‘host’ => ‘127.0.0.1:3306’,
‘domain’ => ‘example.dev’,
‘rootdir’ => ‘/Users/mikeschinkel/Sites/example/trunk’,
));
register_webhost(‘test’,array(
‘name’ => ‘Example Test Server’,
‘rootdir’ => ‘/home/example/public_html/test’,
‘domain’ => ‘test.example.com’,
));
register_webhost(‘stage’,array(
‘name’ => ‘Example Staging Server’,
‘rootdir’ => ‘/home/example/public_html/stage’,
‘domain’ => ‘stage.example.com’,
));
register_webhost(‘live’,array(
‘name’ => ‘Example Live Site’,
‘rootdir’ => ‘/home/example/public_html/’,
‘password’ => ‘%asd59kar12*fr’,
‘domain’ => ‘www.example.com’,
));
require_once(ABSPATH . ‘wp-content/plugins/wp-migrate-webhosts/set-webhost.php’);
Hy vọng câu trả lời trên đã giải đáp được thắc mắc của các bạn. Tôi đã cố gắng để làm code gọn nhất có thể, nhưng không may là nó yêu cầu hai dòng require_once () trước và sau khối mã đăng ký webhost, vì vậy tôi không có cách nào để “hook” WordPress trước khi wp-config.php được gọi. Một khi bạn đã cập nhật wp-config.php của bạn sau đó bạn chỉ cần sử dụng các phím tắt URL wp-migrate-webhosts để đi đến màn hình quản trị:
http://example.com/wp-migrate-webhosts
Đường link trên sẽ dẫn đến một màn hình admin như dưới đây, nó có các dòng mô tả và cho phép bạn di chuyển từ bất kì miền webhost nào chỉ bằng một nhấp chuột sau khi chọn các miền để di chuyển từ đó (LƯU Ý: ví dụ này biểu diễn sự đi xuống từ các máy chủ thử nghiệm/ giai đoạn/ trực tiếp đến phát triển cục bộ nhưng bạn yên tâm rằng nó có thể di chuyển đến bất kỳ miền nào ở chỗ nó được định vị. Điều này cũng đồng nghĩa với việc sẽ rất tuyệt khi plugin tham gia một trang web trực tuyến hiện có và nhanh chóng nhận được một môi trường phát triển cục bộ):
Nếu trong trường hợp này “di chuyển (migration)” không có nghĩa là cập nhật tất cả các tham chiếu trong cơ sở dữ liệu hiện tại để phù hợp với webhost hiện đang được xác định. (và “hiện tại” bị phát hiện bằng cách kiểm tra $ _SERVER [‘SERVER_NAME’].)
Điều thú vị về plugin này đó là nó thực hiện một vài di chuyển cơ bản nhưng bất cứ ai cũng có thể móc và thực hiện việc di chuyển của riêng họ. Ví dụ, nếu bạn thêm một thư viện plugin đã lưu trữ đường dẫn đầy đủ vào hình ảnh trong cơ sở dữ liệu, bạn có thể móc migrate_webhosts, cái mà sẽ được chuyển qua “from” webhost và “to” webhost như một mảng siêu dữ liệu và bạn sẽ được phép thực hiện bất cứ điều gì bạn cần làm trong cơ sở dữ liệu bằng cách sử dụng SQL hoặc bất kỳ chức năng API WordPress áp dụng nào để thực hiện việc di chuyển. Vâng, và có thể là một vài người làm việc đó mà không cần đến plugin nhưng không có plugin tôi thấy rằng viết tất cả các mã cần thiết mất sức hơn rất nhiều. Với plugin việc viết các móc nhỏ trở nên rất dễ dàng.
Bạn cũng có thể thấy rằng các di chuyển của tôi thất bại trong các trường hợp tôi không thử nghiệm và có lẽ bạn có thể giúp tôi cải thiện các plugin? Bất kỳ ai muốn góp ý hãy gửi email cho tôi qua tài khoản gmail của tôi (bí danh của tôi là “mikeschinkel”). Ngoài ra, plugin được thiết kế để chấp nhận siêu dữ liệu webhost do người dùng xác định ngoài các siêu dữ liệu mà nó nhận ra như cơ sở dữ liệu, người dùng, mật khẩu, máy chủ, tên miền, v.v. Một ví dụ hoàn hảo có thể là googlemaps_apikey, nơi bạn có thể lưu trữ các khóa API khác nhau cho từng tên miền mà plugin Google Map của bạn cần hoạt động chính xác (trong số các bạn, ai đã sử dụng plugin Google Maps mà chưa triển khai ứng dụng cho máy chủ trực tiếp và quên thay đổi mã thành khóa API chính xác? Thôi nào, hãy thành thật đi … 🙂 Với plugin này, một phần tử googlemaps_apikey trong mảng register_webhost () của bạn và một móc migrate_webhosts tùy chỉnh nhỏ (custom migrate_webhosts hook), bạn có thể loại bỏ điều đó một cách hiệu quả!
Vâng đó là tất cả cho câu hỏi trên. Tôi đang khởi chạy plugin này tại đây trên giao dịch WordPress bởi vì câu hỏi của @ Insanity5902 đã nhắc đến nó. Hãy cho tôi biết nếu nó hữu ích.
Tái bút: Nếu bạn quyết định sử dụng nó, hãy nhớ rằng đó là alpha/ beta và điều đó có nghĩa là nó sẽ thay đổi vì vậy hãy chuẩn bị cho một số sửa chữa nhỏ nếu bạn muốn sử dụng nó ngay bây giờ và sau đó sử dụng phiên bản đã phát hành khi nó được sử dụng rộng rãi.
Mục đích của tôi là gì? Tôi muốn thấy di chuyển vào lõi WordPress này dễ dàng để mọi người có thể truy cập vào. Nhưng trước đó phải có nhiều người quan tâm đến việc sử dụng nó để đảm bảo nó thực sự giải quyết được nhiều vấn đề hơn. Vì vậy, nếu bạn thích ý tưởng thì bằng mọi cách hãy sử dụng nó để giúp tôi có động lực với nó.
Trả lời bởi MikeSchinkel