Thủ thuật Website

Sử dụng Composer với WordPress để dễ dàng triển khai

Có nhiều cách để quản lý một ứng dụng WordPress. May mắn thay, có thể sử dụng Composer với WordPress.

Trong bài viết này, chúng tôi sẽ hướng dẫn cách sử dụng Composer với WordPress để bạn có thể dễ dàng bảo trì , quản lý và triển khai nó trong các môi trường máy chủ khác nhau.

Điều đó có nghĩa là bạn sẽ có thể cài đặt lõi WordPress, chủ đề, plugin, v.v. cũng như cập nhật và xóa chúng khi cần thông qua Composer.

Để đạt được điều này, chúng tôi sẽ sử dụng các công cụ sau:

  • Composer – để quản lý các gói
  • WPackagist – kho chứa các plugin và chủ đề WordPress
  • Laravel Envoy – để viết các tập lệnh triển khai dễ dàng

Sử dụng Composer với WordPress

Mục tiêu đầu tiên của chúng tôi là tải xuống lõi WordPress, các plugin và chủ đề dưới dạng phụ thuộc của Trình soạn thảo phiên bản .

Vì vậy, để sử dụng Composer với WordPress , trước tiên chúng ta sẽ cài đặt Composer và sau đó tạo một composer.jsontệp trong thư mục gốc của dự án của chúng ta:

{
    "repositories":[
        {
            "type":"composer",
            "url":"https://wpackagist.org"
        }
    ]
}

Vì Composer sử dụng Packagist theo mặc định làm kho lưu trữ gói, chúng tôi sẽ cần nói với Composer rằng chúng tôi sẽ cần WPackagist để thay thế.

Bây giờ chúng tôi có thể cài đặt các plugin và chủ đề WordPress công khai dưới dạng phụ thuộc của Composer , ví dụ như thế này:

{
    "require": {
        "wpackagist-plugin/akismet":"^4.1",
        "wpackagist-theme/twentytwenty":"*"
    }
}

Tiếp theo, hãy cài đặt lõi WordPress thông qua Composer . Chúng tôi sẽ sử dụng bản sao WordPress Core của John P Bloch để đạt được điều đó:

{
    "require": {
            "johnpbloch/wordpress": ">=5.4"
    },
    "extra": {
            "installer-paths": {
                "wp-content/plugins/{$name}/": [
                    "type:wordpress-plugin"
                ],
                "wp-content/themes/{$name}/": [
                    "type:wordpress-theme"
                ]
            },
            "wordpress-install-dir": "wordpress"
    },
    "repositories": [
            {
                "type": "composer",
                "url": "https://wpackagist.org"
            }
    ]
}       

Trong requirephần này, chúng tôi đã thêm phần phụ thuộc. Tiếp theo, trong extraphần này, chúng tôi đã nói với Composer nơi tìm các chủ đề và plugin . Cuối cùng, chúng tôi đã xác định thư mục cài đặt WordPress wordpress.

Bây giờ chúng ta có thể chạy lệnh sau:

composer install --prefer-dist

Composer bây giờ sẽ cài đặt WordPress trong thư mục wordpresstrong thư mục gốc của dự án của chúng tôi.

Để có thể quản lý đầy đủ WordPress bằng Composer , chúng ta cần sử dụng một thư mục khác wp-contentthay vì thư mục mặc định , wordpress/wp-content.

Hãy tạo một thư mục mới trong thư mục gốc của dự án, được gọi là wp-content.

Hãy tiếp tục và tạo wp-config.phptệp tiêu chuẩn, sau đó thêm mã sau:

$domain = 'mydomain.test';

define('WP_SITEURL', "{$domain}/wordpress");
define('WP_HOME',"http:{$domain}");

$httpHost =  isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $domain;

define( 'WP_CONTENT_DIR', dirname( __FILE__ ) . '/wp-content' );
define( 'WP_CONTENT_URL', 'http://' . $httpHost . '/wp-content' );

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') ) {
    define('ABSPATH', dirname(__FILE__) . '/wordpress');
}

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

Tiếp theo, hãy tạo một index.phptệp trong thư mục gốc của dự án:

<?php 
define('WP_USE_THEMES', true);
require( dirname( __FILE__ ) . '/wordpress/wp-blog-header.php' );

Vì wp-config.phptệp chứa dữ liệu nhạy cảm, chúng tôi sẽ không chuyển nó vào kho lưu trữ của mình bằng cách tạo .gitignoretệp:

/wp-config.php
/wordpress/
/wp-content/
/vendor/

Thư wordpressmục wp-contentvà vendorcũng cần được bỏ qua, vì vậy chúng tôi cũng sẽ thêm chúng vào .gitignoretệp.

Bây giờ chúng ta kết thúc với một cấu trúc dự án rất đơn giản:

  • người bán/
  • wordpress /
  • wp-content /
  • nhà soạn nhạc.json
  • composer.lock
  • wp-config.php
  • .gitignore

Sử dụng trình soạn nhạc để cài đặt các plugin và chủ đề WordPress từ các kho lưu trữ riêng tư

Bạn có thể muốn cài đặt các plugin hoặc chủ đề được lưu trữ trong các kho lưu trữ riêng tư trên Github, Bitbucket hoặc một nơi nào khác, nhưng không phải trên WPackagist.
Điều đó là có thể, nhưng có hai điều bạn cần làm:
1) cung cấp thông tin đăng nhập của bạn trong auth.jsontệp
2) trong phần composer.json, trong repositoriesphần, bạn cần cho Composer biết nơi để tìm kho lưu trữ:

{
            "type": "vcs",
            "url": "https://bitbucket.org/your-company/your-theme.git"
}

Sử dụng Envoy để triển khai WordPress với Composer

Bây giờ chúng ta đã thiết lập dự án WordPress của mình với Composer, hãy xem cách triển khai nó.

Như chúng tôi đã đề cập trước đây, chúng tôi sẽ sử dụng Laravel Envoy để viết một kịch bản triển khai cho WordPress .

Lý do tại sao chúng tôi sử dụng Envoy là vì sự đơn giản. Bạn cũng có thể quyết định sử dụng một công cụ khác như Deployer .

Hãy tiếp tục và tải xuống Envoy.

Với tập lệnh triển khai, chúng tôi có thể triển khai ứng dụng WordPress của mình đến các máy chủ khác nhau : phát triển, dàn dựng và sản xuất.

Vì cấu trúc dự án rất nhẹ nên bây giờ bạn sẽ dễ dàng viết các bước triển khai.

Đây là những gì kịch bản triển khai của chúng tôi cho WordPress sẽ trông như thế nào:

  1. tạo bản phát hành mới có dấu thời gian trong releasesthư mục trên máy chủ của bạn
  2. sao chép kho lưu trữ
  3. cài đặt tất cả các phụ thuộc
  4. sao chép wp-configvà .htaccesscác tệp khác dành riêng cho môi trường máy chủ (ví dụ: sản xuất)
  5. tạo một liên kết tượng trưng của uploadsthư mục cho bản phát hành mới
  6. tạo một liên kết tượng trưng của bản phát hành mới vào thư mục gốc tài liệu của miền trên máy chủ
  7. dọn dẹp các bản phát hành cũ khỏi máy chủ.

Đầu tiên, hãy vào máy chủ của chúng tôi và thiết lập một thư mục được gọi là currentthư mục gốc của tài liệu miền trên máy chủ.

Nếu bạn chưa quen, bạn có thể làm theo hướng dẫn về cách thực hiện.

Bạn có thể tạo cấu trúc thư mục sau trên máy chủ của mình:~/sites/yoursite

Bây giờ, hãy cài đặt Envoy bằng lệnh sau:

composer global require laravel/envoy

Tiếp theo, hãy viết kịch bản triển khai cho WP . Hãy tạo một tệp mới trong thư mục gốc của dự án có tên Envoy.blade.php.

Trong Envoy, chúng tôi sẽ sử dụng các lệnh @serverssau :, @setupvà @task@storyNó rất đơn giản, đây là ý của chúng:

  • @servers– đây là nơi bạn xác định tất cả các máy chủ của mình với các IP tương ứng của chúng.
  • @setup– phần nơi bạn có thể xác định các biến hoặc cấu hình.
  • @task– một hành động duy nhất nên được thực hiện trên máy chủ được chỉ định.
  • @story– một chuỗi các nhiệm vụ cần được thực hiện trên máy chủ được chỉ định.

Cách hoạt động của Envoy, nó sẽ chuyển đến các máy chủ được chỉ định và thực thi tập lệnh đã xác định, bằng cách tuân theo các lệnh.

Bên trong các chỉ thị, bạn có thể sử dụng PHP để xác định lệnh UNIX nào cần được thực thi trên máy chủ.

Bước đầu tiên sẽ là xác định nhiều môi trường máy chủ:

@servers(['local' => '127.0.0.1', 'staging' => 'w.x.y.z' 'production' => ['a.b.c.d']])

Tiếp theo, hãy xác định một số biến cho các bước thiết lập của chúng tôi. Đây là những thứ chúng ta có thể cấu hình, tùy thuộc vào nhu cầu của chúng ta.

Trong trường hợp của chúng tôi, chúng tôi sẽ giả sử chúng tôi có một kho lưu trữ riêng trên Bitbucket cho dự án.

Kịch bản triển khai sẽ sao chép nhánh chính và thiết lập cấu trúc thư mục bản phát hành, như đã thảo luận ở trên.

@setup

    // the repository to clone
    $repo = 'git@bitbucket.org:your-company/your-wp-composer-project.git';

    // the branch to clone
    $branch = 'master';

    // set up timezones
    date_default_timezone_set('Europe/Berlin');

    // we want the releases to be timestamps to ensure uniqueness
    $date = date('YmdHis');

    // the application directory on your server
    $appDir = '~/sites/yoursite';

    // this is where the releases will be stored
    $buildsDir = $appDir . '/releases';

    // this is where the deployment will be
    $deploymentDir = $buildsDir . '/' . $date;

    // and this is the document root directory
    $serve = $appDir . '/current';

@endsetup

Tiếp theo, hãy tạo một nhiệm vụ để thực sự tạo thư mục cho bản phát hành mới:

@task('dir')
    echo "Preparing new deployment directory..."

    cd {{ $buildsDir }}
    mkdir {{ $date }}

    echo "Preparing new deployment directory complete."
@endtask

Như bạn có thể thấy, nó sử dụng cú pháp Blade cho các lệnh UNIX, với các biến mà chúng tôi đã xác định trong đó @setup.

Tác vụ sau sẽ sao chép kho lưu trữ và nhánh được chỉ định:

@task('git')
    echo "Cloning repository..."

    cd {{ $deploymentDir }}
    git clone --depth 1 -b {{ $branch }} "{{ $repo }}" {{ $deploymentDir }}

    echo "Cloning repository complete."
@endtask

Tất nhiên, bạn sẽ cần đảm bảo máy chủ của mình có thể truy cập vào kho lưu trữ git.

Tác vụ tiếp theo, sẽ cài đặt các phụ thuộc và sao chép wp-config.phptệp:

@task('install')
    echo "Installing dependencies...";

    composer install --prefer-dist
    cp ../../wp-config.php ./wp-config.php

    echo "Installing dependencies complete."
@endtask

Nhiệm vụ tiếp theo sẽ tạo các liên kết tượng trưng cho bản phát hành mới và đến thư mục uploads:

@task('live')
    echo "Creating symlinks for the live version..."

    cd {{ $deploymentDir }}
    ln -nfs {{ $deploymentDir }} {{ $serve }}
    ln -nfs {{ $appDir }}/uploads {{ $serve }}/wp-content/

    echo "Creating symlinks completed."
@endtask

Tác vụ cuối cùng sẽ thực hiện dọn dẹp và xóa các bản phát hành cũ:

@task('deployment_cleanup')
    echo "Cleaning up old deployments..."

    cd {{ $buildsDir }}
    ls -t | tail -n +4 | xargs rm -rf

    echo "Cleaned up old deployments."
@endtask

Chúng tôi có thể định cấu hình số lượng bản phát hành cũ mà chúng tôi muốn giữ lại trên máy chủ. Trong trường hợp của chúng tôi, nó là 4.

Bây giờ chúng ta hãy viết một @storychỉ thị nơi chúng ta có thể nhóm các tác vụ mà chúng ta vừa viết:

@story('deploy-staging', ['on' => 'staging'])
    dir
    git
    install
    live
    deployment_cleanup
@endstory
@story('deploy-production', ['on' => 'production'])
    dir
    git
    install
    live
    deployment_cleanup
@endstory

Như bạn có thể thấy, chúng tôi đã sử dụng tên của các tác vụ bên trong @storyđể xác định thứ tự thực hiện.

Cuối cùng, chúng tôi sẽ có thể chạy các lệnh sau để triển khai WordPress của chúng tôi lên máy chủ :

envoy run deploy-staging

envoy run deploy-production

và như vậy, cho mỗi môi trường mà chúng tôi muốn.

Vì vậy, bây giờ chúng ta có thể quản lý cài đặt WP của mình hoàn toàn thông qua Composer.

Giữ cho WordPress đồng bộ với Composer

Như bạn đã biết, có thể cập nhật plugin thông qua bảng quản trị WordPress Admin. Vì vậy, nếu quản trị viên WordPress cập nhật plugin theo cách thủ công, nó sẽ làm cho trang web không đồng bộ với tệp Composer, điều này sẽ đánh bại mục đích sử dụng Composer và nó có thể khiến trang web ngừng hoạt động bình thường.

Vậy, làm thế nào để tránh tình trạng này?

Tốt nhất là nên nói với quản trị viên không nên tự cập nhật plugin, đặc biệt là không phải trong phiên bản sản xuất.

Khi đã giải quyết xong, bạn có thể viết một tác vụ đơn giản trong Envoy để cập nhật một plugin nhất định:

@task('update-plugin')
cd {{  $deploymentDir  }}
wp plugin update {{ $plugin }} --version={{ $pluginVersion }}
@endtask

@story('update')
update-plugin
@endstory

Ở đây chúng tôi đang sử dụng WP-CLI để thực hiện cập nhật (nhưng bạn cũng có thể thực hiện việc đó thông qua bảng điều khiển quản trị nếu muốn)

Bạn có thể thực thi nó bằng cách gõ:

envoy run update --plugin=bbpress --version=2.6.4

Ở đây chúng tôi giả sử chúng tôi muốn cập nhật plugin bbpress lên phiên bản 2.6.4

Khi điều này được thực thi, bạn cũng có thể cập nhật composer.json:

composer require wpackagist-plugin/bbpress 2.6.4

Và cuối cùng, hãy triển khai thay đổi của chúng tôi đối với máy chủ:

envoy run deploy-production

Các cách khác để sử dụng Composer với WordPress

Chúng tôi đã chỉ ra cách quản lý WordPress bằng Composer và cách triển khai nó với tập lệnh triển khai có thể tùy chỉnh của riêng bạn.

Tất nhiên, có những cách khác để quản lý các trang web WordPress bằng Composer . Một trong những cách phổ biến để làm như vậy là với Bedrock .

Bedrock là một dự án viết sẵn WordPress, với cấu trúc thư mục được xác định trước.

Nó trông như thế này:

├── composer.json
├── config
   ├── application.php
   └── environments
       ├── development.php
       ├── staging.php
       └── production.php
├── vendor
└── web
    ├── app
       ├── mu-plugins
       ├── plugins
       ├── themes
       └── uploads
    ├── wp-config.php
    ├── index.php
    └── wp

Bedrock sẽ giúp bạn di chuyển WordPress đến một thư mục được gọi wpvà thiết lập các môi trường khác nhau: phát triển, dàn dựng và sản xuất.

Nó cũng thực hiện tốt công việc thiết lập các giá trị cấu hình trong tệp .env với sự trợ giúp của PHP Dotenv .

Nó wp-config.phpđọc tệp .env không nằm trong thư mục webvà điều đó cải thiện tính bảo mật của trang web.

wp-contentđược đổi tên thànhapp

Khi bạn đã thiết lập xong, bạn có thể thêm các plugin làm phụ thuộc của Trình soạn nhạc, tương tự như những gì chúng tôi đã trình bày trước đó.

Để triển khai, bạn có thể viết một kịch bản triển khai bằng Envoy, Deployer hoặc một số công cụ khác.

Kết luận – quản lý và triển khai các trang web WordPress với Composer

Trong bài viết này, chúng tôi đã chỉ ra hai cách (thủ công và với Bedrock) để quản lý WordPress bằng Composer và một cách dễ dàng triển khai WordPress cho nhiều môi trường khi nó được sử dụng với Composer.

Đầu tiên, chúng tôi xác định một composer.jsontệp cho phép chúng tôi cài đặt WordPress Core, cũng như các chủ đề và plugin dưới dạng phụ thuộc.

Điều này làm cho dự án rất nhẹ và dễ dàng triển khai với một script.

Mặc dù ban đầu WordPress không được cho là được sử dụng như một phụ thuộc của Composer, nhưng đó là một lợi thế lớn khi sử dụng nó trong quy trình phát triển hiện đại vì nó đảm bảo triển khai khá dễ dàng với thời gian chết và khôi phục nhanh chóng .

Nếu bạn có bất kỳ kinh nghiệm nào khi sử dụng WordPress với Composer (và triển khai nó), chúng tôi muốn biết về điều đó trong phần bình luận.

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Back to top button