2024年6月28日 星期五

Rock Idea PDF 完全免費合併拆分PDF檔案工具

 這是一款我自己開發的免費 PDF 工具,提供合併多個 PDF 文件或將單個 PDF 文件拆分為多個文件。

如果有其他客製化需求,歡迎來信討論,也提供付費服務。

最新的版本是 v2.0.1,請下載並執行 rockidea-pdf.exe 檔案。

如果您想要支持我,以改進品質和增加新功能,可以通過以下方式:

感謝您的支持!


GitHub : https://github.com/wallishuang/rockidea-pdf


2019年12月6日 星期五

How to install docker and kubernate in Windows 10 home version

If you want to run docker in your local window 10, you have to check which version first and there are different ways to install them. This article is focus on window 10 home version.
  1. you hava to download and install it.
  2. use Chocolatey which is the tool of managing window package and just follow it’s . If you install correctly . Type choco search docker on cmder.exe then you can see some infomation.
  3. To install minikube, type choco install minikube -y on cmder.exe
  4. enter command minikube start
  5. enter command kubectl get nodes
  6. enter command choco install docker -y
  7. finally , enter comman docker ps , it’s sucessful liks as the following pic.
  8. enter comman dminikube dashboard


2018年9月21日 星期五

Putty 連GCP的SSH設定

1. 使用google shell 直接先進入主機
2. 輸入ssh-keygen以及相關訊如檔案名稱等
3. 將產出的 ~ssh/xxx.pub  公鑰貼在google compute engine/中繼資料/SSH金鑰,記得去除最後@[instance ID],只留帳號即可。
4. 將私鑰的部分存入本機中,並以.ppk副檔名存檔。
5. 因為如果用putty的話格式會有所不同,可用puttygen.exe先將私鑰讀出,再存成putty私鑰即可,其他欄位值都不要改。
6. 開始進行連線IP [帳號@google提供的外部IP],Putty的Connection/SSH/Auth的私鑰路經記得要指定好,即可連線。

PS. root 設定會有些問題,再研究~

2017年3月22日 星期三

設定SSH,remode connection whithout password

Container Jenkins Setting
1. 至jenkins container(/var/jenkins_home/.ssh)
    docker exec -i -t demo-jenkins bash //進入container
    ssh-keygen  <==用預設的方法建立金鑰
2. ssh-copy-id -i ~/.ssh/id_rsa.pub root@IP
3. ssh 'root@IP' //可以進去代表成功

//下載遠端檔案
scp root@172.20.2.29:/etc/docker/certs.d/docker1:9527/ca.crt /etc/docker/certs.d/docker1:9527

建立多個docker host共用的private registry

//建立多個docker host(swarm mode)共用的private registry

1.  mkdir /certs

2.  openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/dockerrepo.key -x509 -days 365 -out /certs/dockerrepo.crt -subj /CN=docker1

3.  mkdir /home/registry

4.  docker run -d -p 9527:5000 --restart=always --name myregistry \
-v /certs:/certs -v /home/registry:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/dockerrepo.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/dockerrepo.key \
registry

5.  mkdir -p /etc/docker/certs.d/docker1:9527/

6.  cp dockerrepo.crt /etc/docker/certs.d/docker1\:9527/ca.crt

7.  docker tag alpine:latest docker1:9527/alpine:1

8.  docker push docker1:9527/alpine:1

※每個docker host都要做步驟5~6
docker stop myregistry && docker rm -v myregistry //停止

2017年3月15日 星期三

Spring Cloud 搭配Docker (swarm mode) 建置 Eureka Cluster

這問題卡了我好幾天...後來發現是我觀念上有,可惡超浪費時間的,本來想說很簡單的>_<

事情是這樣的,我利用docker service create --mode global(swarm mode , 1 manager node and 2 worker node) 建好Eureka Peer to Peer後(共三個 Eureka Server) ,但到Eureka server UI 看,發現其他兩個node一直顯示在unavailable-replicas 的區塊, 雖然查了很多資料,網路上甚至有人說...功能正常就好(意旨即使把其中一個server關掉,其他eureka也會做cluster), 但其實這只是用docker 的load balance機制應變(前面講了我是用global模式),並不是真正eureka的 cluster模式, 雖然乍看之下功能"好像正常",但其實根本不正常呀,因為會發現微服務會一直瞬斷再重連,是有問題的。

原因是因為我們在eureka server 設定檔分別設置了defaultZone三種不同的profile(分別是manager and worker node),但如果是用global mode,雖然會在三個節點起eureka server container,但事實上三台節點所使用的eureka profile是同一份,根本不是available-repicas,所以UI顯示的當然是unavailable-replicas ,不要懷疑,就是整個設定上有問題。

所以如果想在swarm mode下使用docker 建置eureka cluster,應該正確讓三個節點分別解正確的吃到不同的profile設定,怎麼做勒?其實很簡單。
就是使用docker service create 建立三個service (不要使用global mode),並且分別指定service 的節點及所要使用的profile即可。

eureka server參考設定檔:
---
spring:
  profiles: docker1
server:
  port: 8761
eureka:
  instance: 
    preferIpAddress: true
    hostname: docker1
  server:
    enableSelfPreservation: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://docker2:8762/eureka/,http://docker3:8763/eureka/

---
spring:
  profiles: docker2
server:
  port: 8762
eureka:
  instance:
    preferIpAddress: true
    hostname: docker2
  server:
    enableSelfPreservation: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://docker1:8761/eureka/,http://docker3:8763/eureka/

---
spring:
  profiles: docker3
server:
  port: 8763
eureka:
  instance:
    preferIpAddress: true
    hostname: docker3
  server:
    enableSelfPreservation: true 
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://docker1:8761/eureka/,http://docker2:8762/eureka/


config server 參考設定檔:
...
eureka:
  instance:
    # 心跳时间,即服务续约间隔时间(預設为30s)
    leaseRenewalIntervalInSeconds: 20
    # 发呆时间,即服务续约到期时间(預設为90s)
    lease-expiration-duration-in-seconds: 60
    prefer-ip-address: false
  client:
    registryFetchIntervalSeconds: 5
    serviceUrl:
       defaultZone: http://docker1:8761/eureka/,http://docker2:8762/eureka/,http://docker3:8763/eureka/
    healthcheck:
      enabled: true

參考指令:
docker service create -p 8761:8761 --constraint node.hostname==docker1 -e spring.profiles.active=docker1 --network mynet --name demo-registry1 docker1:9527/demo-registry:v1

docker service create -p 8762:8762 --constraint node.hostname==docker2 -e spring.profiles.active=docker2 --network mynet --name demo-registry2 docker1:9527/demo-registry:v1

docker service create -p 8763:8763 --constraint node.hostname==docker3 -e spring.profiles.active=docker3 --network mynet --name demo-registry3 docker1:9527/demo-registry:v1



成功畫面:

PS. 如果還是在unavailable-replicas,請確認registerWithEureka及fetchRegistry:是否有設置為true。