在生產環境中執行自行託管的 Meilisearch 專案

    本教學將引導您設定可於生產環境中使用的 Meilisearch 執行個體。這些說明使用執行 Debian 的 DigitalOcean 虛擬伺服器,但應與執行 Linux 發行版的任何託管服務相容。

    注意

    Meilisearch Cloud 是在生產環境中執行 Meilisearch 的建議方式。

    需求

    提示

    DigitalOcean 有關於 如何使用 SSH 連線至虛擬伺服器 的詳細文件。

    步驟 1:安裝 Meilisearch

    透過 SSH 登入您的伺服器,更新可用套件清單,並安裝 curl

    apt update
    apt install curl -y
    

    使用最新版本的套件是良好的安全實務,尤其是在生產環境中。

    接下來,使用 curl 下載並執行 Meilisearch 命令列安裝程式

    # Install Meilisearch latest version from the script
    curl -L https://install.meilisearch.com | sh
    

    Meilisearch 安裝程式是一組腳本,可確保您將獲得適用於您系統的正確二進位檔。

    接下來,您需要讓二進位檔可從系統中的任何位置存取。將二進位檔移至 /usr/local/bin

    mv ./meilisearch /usr/local/bin/
    

    Meilisearch 現在已安裝在您的系統中,但它不是公開可存取的。

    步驟 2:建立系統使用者

    以 root 身分執行應用程式會讓您暴露在不必要的安全風險中。為了防止這種情況,請為 Meilisearch 建立專用使用者

    useradd -d /var/lib/meilisearch -s /bin/false -m -r meilisearch
    

    然後,將 Meilisearch 二進位檔的所有權授予新使用者

    chown meilisearch:meilisearch /usr/local/bin/meilisearch
    

    步驟 3:建立設定檔

    在安裝 Meilisearch 並朝著保護資料安全邁出第一步後,您需要設定基本的設定檔。

    首先,建立 Meilisearch 將儲存其資料的目錄

    mkdir /var/lib/meilisearch/data /var/lib/meilisearch/dumps /var/lib/meilisearch/snapshots
    chown -R meilisearch:meilisearch /var/lib/meilisearch
    chmod 750 /var/lib/meilisearch
    

    在本教學中,您是在虛擬伺服器的本機磁碟中建立目錄。如果您正在使用其他區塊儲存空間,請在那裡建立這些目錄。

    接下來,將預設設定下載到 /etc

    curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml
    

    最後,更新 meilisearch.toml 檔案中的下列幾行,以便 Meilisearch 使用您先前建立的目錄來儲存其資料,並將 MASTER_KEY 替換為 16 位元組的字串

    env = "production"
    master_key = "MASTER_KEY"
    db_path = "/var/lib/meilisearch/data"
    dump_dir = "/var/lib/meilisearch/dumps"
    snapshot_dir = "/var/lib/meilisearch/snapshots"
    

    請記住選擇一個安全的主金鑰,並避免將其暴露在公開可存取的位置。

    您現在已設定 Meilisearch 執行個體。

    步驟 4:以服務形式執行 Meilisearch

    在 Linux 環境中,服務是一種可以在作業系統開機時啟動並在背景中持續執行的程序。如果您的程式因任何原因停止執行,Linux 將立即重新啟動服務,有助於減少停機時間。

    4.1. 建立服務檔案

    服務檔案是文字檔案,可告知您的作業系統如何執行您的程式。

    執行此命令以在 /etc/systemd/system 中建立服務檔案

    cat << EOF > /etc/systemd/system/meilisearch.service
    [Unit]
    Description=Meilisearch
    After=systemd-user-sessions.service
    
    [Service]
    Type=simple
    WorkingDirectory=/var/lib/meilisearch
    ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml
    User=meilisearch
    Group=meilisearch
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    EOF
    

    4.2. 啟用並啟動服務

    現在您的服務檔案已準備就緒,請使用 systemctl 啟動服務

    systemctl enable meilisearch
    systemctl start meilisearch
    

    使用 systemctl enable,您是在告知作業系統您希望它在每次開機時執行。然後,systemctl start 會立即啟動 Meilisearch 服務。

    透過檢查服務狀態來確保一切正常運作

    systemctl status meilisearch
    

    您應該會看到一則訊息,確認您的服務正在執行

    ● meilisearch.service - Meilisearch
       Loaded: loaded (/etc/systemd/system/meilisearch.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2023-04-10 14:27:49 UTC; 1min 8s ago
     Main PID: 14960 (meilisearch)
    

    步驟 5:保護並完成設定

    此時,Meilisearch 已安裝並執行。它也受到保護,不會因最終的崩潰和系統重新啟動而影響。

    下一步是讓您的執行個體可公開存取。

    提示

    如果您傳送給 Meilisearch 的所有請求都是由位於同一機器的另一個應用程式完成的,則您可以安全地跳過此部分。

    5.1. 使用 Nginx 建立反向代理

    一個反向代理 應用程式會處理外部世界與您的應用程式之間的所有通訊。在本教學中,您將使用 Nginx 作為您的反向代理,以接收外部 HTTP 請求並將其重新導向至 Meilisearch。

    首先,在您的機器上安裝 Nginx

    apt-get install nginx -y
    

    接下來,刪除預設的設定檔

    rm -f /etc/nginx/sites-enabled/default
    

    Nginx 帶有一組預設設定,例如其預設的 HTTP 連接埠,這可能會與 Meilisearch 衝突。

    建立一個新的設定檔,指定反向代理設定

    cat << EOF > /etc/nginx/sites-enabled/meilisearch
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        location / {
            proxy_pass  https://127.0.0.1:7700;
        }
    }
    EOF
    

    最後,啟用 Nginx 服務

    systemctl daemon-reload
    systemctl enable nginx
    systemctl restart nginx
    

    您的 Meilisearch 實例現在可公開存取。

    5.2. 啟用 HTTPS

    唯一剩下的問題是,Meilisearch 會透過 HTTP 處理請求,而沒有任何額外的安全性。這是一個重大的安全漏洞,可能導致攻擊者存取您的資料。

    本教學假設您已註冊網域名稱,並且您已正確設定其 DNS 的 A 記錄 以指向您的 DigitalOcean 伺服器 IP 位址。請參閱 DigitalOcean DNS 文件 以取得更多資訊。

    使用 certbot 來設定在您的伺服器中啟用 HTTPS。

    首先,在您的系統上安裝所需的套件

    sudo apt install certbot python3-certbot-nginx -y
    

    接下來,執行 certbot

    certbot --nginx
    

    輸入您的電子郵件地址,同意條款和條件,然後選擇您的網域。當詢問您是否要自動重新導向 HTTP 流量時,請選擇選項 2: 重新導向

    Certbot 將完成設定 Nginx。完成後,所有傳送到您伺服器的流量都將使用 HTTPS,並且您已完成保護您的 Meilisearch 實例。

    您的安全憑證必須每 90 天更新一次。Certbot 會自動排程更新。執行測試以驗證此程序是否已就緒

    sudo certbot renew --dry-run
    

    如果此命令未傳回任何錯誤,則您已成功在 Nginx 伺服器中啟用 HTTPS。

    結論

    您已遵循提供安全且穩定服務的主要步驟。由於反向代理、HTTPS 和 Meilisearch 的內建安全金鑰的組合,您的 Meilisearch 實例現在在安全且可公開存取的環境中啟動並執行。