nacos部署和启动:
-
部署(docker方式)
- 官方启动方式,参照如下文档:
https://nacos.io/zh-cn/docs/quick-start-docker.html - mac m1的启动方式
(1) 拉取以下镜像
docker pull zhusaidong/nacos-server-m1:2.0.3
(2) 启动镜像
docker run --name nacos-quick -e MODE=standalone -p 8848:8848 -d zhusaidong/nacos-server-m1:2.0.3
- 官方启动方式,参照如下文档:
-
验证
- 访问如下地址,正常启动,就代表成功:
http://127.0.0.1:8848/nacos/
- 访问如下地址,正常启动,就代表成功:
nacos默认的登录用户名密码都是 nacos
在nacos添加配置:
-
新建命名空间
在命名空间,新建dev环境
-
添加配置
在配置列表点击+号,添加配置
Data ID填写的就是服务/应用的名称
在lumen中集成nacos:
-
下载php-nacos客户端依赖:
composer require alibaba/nacos
-
需要另一个依赖,用于动态加载配置,下载:
composer require vlucas/phpdotenv:"^4.0"
-
打开环境变量(本例mac环境):
open -e ~/.zprofile
-
将nacos配置中心配置写入环境变量:
-
执行下面命令,让环境变量生效(确保所有终端都关闭):
source ~/.zprofile
LARAVEL_NACOS_HOST:nacos服务地址
LARAVEL_NACOS_DATAID:配置在nacos中的当前服务的data id
LARAVEL_ENV:配置的命名空间名称,服务运行环境,如:dev、test、pre、prod
LARAVEL_NACOS_GROUPID:配置的group id
LARAVEL_NACOS_NAMESPACEID:配置的命名空间id
-
创建laravel命令的执行文件,代码如下:
在 app/Console/Commands
下创建laravel命令的执行文件RefreshNacosConfig.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class RefreshNacosConfig extends Command
{
protected $name = 'nacos:refresh';
protected $description = '拉取nacos的配置文件';
public function __construct()
{
parent::__construct();
}
public function handle()
{
//拉取nacos的配置文件
\alibaba\nacos\NacosConfig::setSnapshotPath(dirname(dirname(__DIR__)) . "/Http/nacos/config");
\alibaba\nacos\Nacos::init(
getenv("LARAVEL_NACOS_HOST"),
getenv("LARAVEL_ENV"),
getenv("LARAVEL_NACOS_DATAID"),
getenv("LARAVEL_NACOS_GROUPID"),
getenv("LARAVEL_NACOS_NAMESPACEID") ? : "",
)->runOnce();
}
}
-
在
Kernel.php
中声明这个命令:
protected $commands = [
\App\Console\Commands\RefreshNacosConfig::class
];
-
执行命令,拉取配置:
执行命令php artisan nacos:refresh
,就在如下目录里面自动拉取到了配置
正式使用时,需要定时获取最新配置,可以使用linux的cron,每分钟执行上面命令一次
-
使用配置中心的配置替代.env文件:
- 删除根目录下的.env文件。
- 修改
bootstrap/app.php
文件,在require_once __DIR__.'/../vendor/autoload.php';
后面,添加下面代码:
//加载nacos配置
\alibaba\nacos\NacosConfig::setSnapshotPath(dirname(__DIR__).
"/app/Http/nacos/config");
$filename = \alibaba\nacos\failover\LocalConfigInfoProcessor::getSnapshotFile(
getenv("LARAVEL_ENV"),
getenv("LARAVEL_NACOS_DATAID"),
getenv("LARAVEL_NACOS_GROUPID"),
getenv("LARAVEL_NACOS_NAMESPACEID") ?: ""
);
if (file_exists($filename)) {
\Dotenv\Dotenv::createImmutable(dirname($filename),
getenv("LARAVEL_NACOS_DATAID"))->load();
}
-
最后看效果,成功: