2022年4月3日 星期日

騎車去東港

爸爸: 妹妹這裡左轉一直騎就可以到東港了

妹妹: 好啊 好久沒去了 我們去東港


清明連假4天 掃墓是最後一天

待在家幾天也無聊了 中午過後

想說沒事去夢時代晃晃

沿著凱旋路騎 在中山路口等紅綠燈

臨時又很隨性的改往東港出發



沿著中山路 接沿海路 這裡大車多

總想快快騎過這段

小港,林園,新園過去就是東港

沿著光復路 再轉往中正路市場

帶妹來沙蝦肉圓 難得他可以把整份吃完

再往大鵬灣去

遊客服務中心 拍拍照

再往華僑市場 買了旗魚黑輪 就要回家了

妹妹喜歡坐摩托車 吹風唱歌

出來 去哪 不是重點 騎車唱歌才是目的 




2022年4月1日 星期五

ansible 在使用loop或with_items時加入條件when判斷

目前有一個使用情境

在管理多台主機的nginx設定時

要寫一個更新nginx config設定檔的腳本

因為是要套用在多台主機上

因為設定檔 都會以j2樣板方式寫好再套用各主機資料產生config檔案

所以會先準備好多個樣板

ex:

api.conf.j2 設定api相關

web.conf.j2 設定web相關

service.conf.j2 設定其他各式服務

socket.conf.js 設定 socket服務


但也因為各主機屬性不一樣

並不是所有的主機都會同時有這些設定檔案


因此在寫ansible控制腳本時就會需要使用迴圈

判斷如果樣板檔案存在就使用樣板產生設定檔案的功能


- name: check the nginx template config exist
  with_items:
    - src: '../../files/nginx/default.conf.j2'
      dest: '/etc/nginx/sites-available/default.conf'
    - src: '../../files/nginx/conf/web.conf.j2'
      dest: '/etc/nginx/sites-available/conf/web.conf'
    - src: '../../files/nginx/conf/api.conf.j2'
      dest: '/etc/nginx/sites-available/conf/api.conf'
  delegate_to: localhost
  stat:
    path: '{{item.src}}'
  register: stat_result
- name: build the nginx template config
  become: true
  with_items: '{{stat_result.results}}'
  template:
    src: '{{item.item.src}}'
    dest: '{{item.item.dest}}'
  when: item.stat.exists
- name: restart nginx
  service:
    name: nginx
    state: restarted

說明
以兩段工作來執行
第1段是檢查所有檔案是否存在
第2段是以上面檢查的結果判斷是否執行樣板render
第1段以stat來檢查檔案得到的回應stat_result
取得的 stat_result.results 為loop結果
{
  item: 即為with_items的一項,
  stat: {
    exists: true|false 是否存在
  }
}
第2段就可以以stat_result.results當作迴圈的內容
以when判斷是否執行
這樣 就不會因為檔案不存在由造成loop有錯誤

另外當執行loop發生錯誤
loop 內其他的正常項目還是都會作完
但下一段動作會因為錯誤而不執行
如同sample code內 如果loop出錯
那下一個重啟nginx的動作將不會被執行

這裡有一個特別注意的地方是
要檢查本機上的檔案是否存在
需要加上delegate_to: localhost
而且不可以使用root
也就是不可使用become:true

2022年3月16日 星期三

ssh-copy-id ansible使用

在開發ansible佈署功能主要都是透過ssh

ssh連線時如果希望不用每次輸入密碼

要透過ssh-copy-id xxx@192.168.0.99

將本機的public key丟到遠端主機上

這樣之後就直接連線不需要輸入密碼


ex:

以ansible佈署的架構來看

假設區網內的幾台主機功能分別是

1.本機 192.168.0.60

2.控制機 192.168.0.99

3.應用ap 192.168.0.100

如果我們要透過控制機(99)去操作應用ap(100)

則需要在99上把99的public-key丟到100上

  ssh-copy-id user@192.168.0.100

如果ansible(99)要控制的是也是99上的程式

也要copy id給自己

  ssh-copy-id user@192.168.0.99

這樣在client機器上可以透過ssh控制control(99)機器去

代為操作99跟100的服務


2022年3月1日 星期二

pkg讀取資料檔案路徑

使用pkg將node應用程式封裝成各平台的執行檔

當執行時要讀取其他檔案的路徑

其他檔案有無被封裝 路徑是有差異的

舉例來說

有一個專案目錄

node_proj/

  tmp/

  js/

js目錄內的檔案要被封裝到執行檔內

tmp目錄內的檔案不封裝到執行檔

執行封裝好的執行檔時

1.封裝到執行檔的目錄

  在package.json內需設定要封裝的檔案

  "pkg": {

    "scripts": [

      "./js/**/**/*.js"

    ],

    "assets": ''

  }

  封裝好的執行檔在執行時 js/目錄會是在'snapshot/node_proj/js/file.js'

  在程式內要讀取的路徑需以相對路徑方式寫

  path.resolve(__dirname,'..','js','file.js')

2.若是要讀取未被封裝在執行檔內的檔案

  path.resolve('.','tmp','hello.txt')

  會讀到執行目錄下的檔案


2022年2月17日 星期四

nginx基本操作

一.完全移除

  sudo apt-get remove nginx nginx-common

  sudo apt-get purge nginx nginx-common

  sudo apt-get autoremove

二.重新安裝

  sudo apt-get install nginx

三.操作

  啟動 sudo systemctl start nginx

  停止 sudo systemctl stop nginx

  重啟 sudo systemctl restart nginx

  重載config sudo nginx -s reload

四.設定檔

  /etc/nginx/available-sites/