Laravel中使用阿里云ACM

  • 安全性:配置跟随源代码保存在版本管理系统中,容易造成配置泄漏
  • 时效性:修改配置,需要每台服务器每个应用修改并重启服务
  • 局限性:无法支持动态调整,例如日志开关、功能开关等
jason@Jason laravel % composer require donjan-deng/laravel-acm-client
Using version ^1.0 for donjan-deng/laravel-acm-client
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.6.1): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.5.3): Loading from cache
  - Installing donjan-deng/laravel-acm-client (1.0.0): Downloading (100%)
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
Package jakub-onderka/php-console-color is abandoned, you should avoid using it. Use php-parallel-lint/php-console-color instead.
Package jakub-onderka/php-console-highlighter is abandoned, you should avoid using it. Use php-parallel-lint/php-console-highlighter instead.
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: donjan-deng/laravel-acm-client
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: maatwebsite/excel
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
jason@Jason laravel %

env 配置文件中添加:

ALIYUN_ACM_NAMESPACE=
ALIYUN_ACM_DATA_ID=
ALIYUN_ACM_GROUP=
ALIYUN_ACM_AK=
ALIYUN_ACM_SK=

从 ACM 获取配置:

jason@Jason laravel % php artisan acm:get-config
success
jason@Jason laravel %

添加数据库配置服务:

jason@Jason laravel % php artisan make:provider DatabaseServiceProvider
Provider created successfully.
jason@Jason laravel %
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class DatabaseServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        // 用于绑定服务到容器,请求进入时,框架先调用所有的 provider 的 register 方法
        // 所有的服务注册完毕后,再调用每个服务的 boot 方法
        // 因此不能在 register 方法中调用其他 provider 提供的服务,因为不能保证其他服务已经注册完毕
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        if (config('DRIVER') && strtolower(config('DRIVER')) == 'mysql') {
            $this->app->get('config')->set('database.connections.mysql.host', config('DB_HOST', env('DB_HOST')));
            $this->app->get('config')->set('database.connections.mysql.port', config('DB_PORT', env('DB_PORT')));
            $this->app->get('config')->set('database.connections.mysql.database', config('DB_DATABASE', env('DB_DATABASE')));
            $this->app->get('config')->set('database.connections.mysql.username', config('DB_USERNAME', env('DB_USERNAME')));
            $this->app->get('config')->set('database.connections.mysql.password', config('DB_PASSWORD', env('DB_PASSWORD')));
        }
    }
}

全局注册服务 config/app.php:

...

'providers' => [

    ...
    
    App\Providers\DatabaseServiceProvider::class,
    
    ...
],

...

添加任务调度任务 app/Console/Kernel.php

$schedule->command('acm:get-config')->everyMinute();

发表评论

您的电子邮箱地址不会被公开。