資安

如何以源碼形式運行Nacos Server

官方標準運行方式

下載解壓可運行包

curl -O https://github.com/alibaba/nacos/releases/download/1.3.2/nacos-server-1.3.2.tar.gz
tar -zxvf nacos-server-1.3.2.tar.gz
cd nacos/bin

執行運行

# Linux/Unix/Mac 啟動命令(standalone代表著單機模式運行,非集群模式):

sh startup.sh -m standalone

# 如果您使用的是ubuntu系統,或者運行腳本報錯提示[[符號找不到,可嘗試如下運行:

bash startup.sh -m standalone

# Windows 啟動命令(或者雙擊startup.cmd運行文件)

cmd startup.cmd

為什麼要源碼化運行

1. 方便開發過程使用

如果從 Spring Cloud Netflix 體系遷移到 Spring Cloud Alibaba 技術體系,明顯的感受是整個體系得到簡化。 Nacos 承擔整個 Spring Cloud 的服務發現、配置管理部分的實現。 是整個開發過程中強依賴,啟動微服務業務要去檢查 Nacos Server 是否已經啟動,解壓安裝的方式變的非常不便。

如果把 Nacos Server 作為整個微服務框架的一部分直接 Main 啟動,是不是更加方便便利?

2. UI 個性定製化

  • 若以解壓運行方式,修改 UI 幾乎不可能。可以下載 Nacos 源碼繼續修改 然後重新打包運行。 非常的不方便
git clone https://github.com/alibaba/nacos.git

cd nacos/

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
  • 若以源碼方式運行,可以試試的調整 UI 然後 build 看到效果。

3. 保證 Server & Client 保持一致

  • pig 作為微服務開源項目,更新迭代速度非常快。每個版本依賴的 Nacos Client 版本都可能發生變化,這就意味著對應的 Nacos Server 版本也要對應升級,這需要用戶自行下載升級成本很高
  • Nacos 具有良好小版本向下兼容性,但是大版本功能變化挺大,比如 1.2 、1.3 權限的變更。所以建議大家在實際開發過程中保持版本一致。
  • 若以源碼運行的方式,可以很好的解決此問題。

如何實現

1. 下載 Nacos 源碼

  • 只需保留 nacos console 模塊,其他模塊均可刪除

2. console 源碼結構說明

├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── alibaba
    │   │           └── nacos
    │   │               ├── Nacos.java  # main 啟動類
    │   │               └── console    # 控制檯相關源碼
    │   └── resources
    │       ├── application.properties  # nacos 配置文件
    │       └── static    # 靜態頁面目錄
    └── test    # 單元測試部分

3. 修改 Nacos.java 類

  • 主要在 main 方法中增加 兩個參數,是否是單機啟動 & 是否關閉權限校驗
@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
@ServletComponentScan
@EnableScheduling
public class Nacos {

    public static void main(String[] args) {
        # 通過環境變量的形式 設置 單機啟動
            System.setProperty(ConfigConstants.STANDALONE_MODE, "true");

        # 通過環境變量的形式 設置 關閉權限校驗
            System.setProperty(ConfigConstants.AUTH_ENABLED, "false");
        SpringApplication.run(Nacos.class, args);
    }
}

4. 修改 console/pom.xml

  • 由於不在使用 nacos bom 管理,需要給所有依賴座標增加版本號
  • 由於 nacos-config /nacos-naming 等包沒有上傳至中央參考 無法下載到,groupId 變更為 com.pig4cloud.nacos 即可下載
  • 變更後參考如下
<dependency>
  <groupId>com.pig4cloud.nacos</groupId>
  <artifactId>nacos-config</artifactId>
  <version>1.3.2</version>
</dependency>
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <version>7.0.59</version>
</dependency>
<dependency>
  <groupId>com.pig4cloud.nacos</groupId>
  <artifactId>nacos-naming</artifactId>
  <version>1.3.2</version>
</dependency>
...

總結

    1. 以上修改後源碼參考: https://gitee.com/log4j/pig
    1. 是否以源碼形式運行,此問題仁者見仁智者見智 根據你們實際情況來。

項目推薦: Spring Cloud 、Spring Security OAuth2的RBAC權限管理系統 歡迎關注

Leave a Reply

Your email address will not be published. Required fields are marked *