0%

前言

在 docker 中,預設是使用 root user, 但這樣非常不安全,所以通常會在 docker 中另外建立 user,可以透過 --build-args 傳入當前使用者的 User ID 和 Group ID,將新增的 user 的 User ID 和 Group ID 設為當前使用者,最後使用 USER new_user 切換為 non-root user 再執行所需指令。

Read more »

Conda

前言

之前在開發 Python 程式時,我都是使用 pip 來做套件管理,使用 virtualenv 來建立虛擬環境,後來發現 Conda 這個工具,Conda 是一個開源的套件及虛擬環境管理工具,支援多種程式語言(Python, R…等),這邊來記錄一下它的使用方式,以下的指令是以 Windows 環境為主,Linux 或 MacOS 的指令可以參考官方文件。

Read more »

前言

tmux 是一個 Terminal Multiplexer, 它可以在一個 terminal 中開啟多個視窗、切割視窗區塊,讓我們在一個 terminal 中就能完成許多操作。它還可以保存 session 狀態,我們可以隨時離開(detach)這個連線 session, 也能夠隨時回到(attach)上次離開時的 session 狀態, 可以避免操作內容因為網路斷線而未儲存或是被中斷。而 tmux 會一直維持這個 session 直到被 delete 或是機器重新啟動。

Read more »

前言

使用 Nginx 當作 proxy 時,可以設定 Nginx 作為 failover 機制,但是 Nginx 判斷 node 失敗預設是以 connection refuse 和 timeout 為主,而不是以 HTTP 錯誤狀態來做判斷,因為 HTTP 只要可以回傳狀態,代表該 node 可以正常連接,因此 Nginx 會判斷該 node 是正常的。如果想要針對特定的 HTTP 錯誤來做處理,可以使用 proxy_next_upstream 參數來設定。

Read more »

前言

Elasticsearch 預設的 Lucene BooleanQuery 的 clauses 長度限制為 1024, 不只有 bool query, 其他的 query 也幾乎會在內部被轉換為 Lucene 的 BooleanQuery. 此限制主要是要避免 query 過大,造成使用過多 CPU 和 memory, 一般來說預設的 1024 就很夠用,但是如果出現 max_clause_count is set to 1024 這個錯誤訊息,代表 query 長度超過限制,可以透過以下的設定來做調整,不過要注意將此限制調高的話,可能會降低 performance 或是產生記憶體相關問題。

Read more »

前言

最近發現 Nginx 運行一段時間之後,就會出現以下幾種 error:

  • connect() failed (111: Connection refused) while connecting to upstream
  • upstream timed out (110: Connection timed out) while connecting to upstream

本來一直以為是 config 少設定了一些參數,後來才發現是 動態IP 的問題。
Nginx 在啟動時會向 DNS server 查詢 Domain 對應的 IP,之後就會 cache IP,直到下次重新載入 config 才會再更新,所以當我們服務的 IP 改變之後,Nginx 就會開始出現 Connect failed, Connection timeout 等 error.

Read more »