3 回答

TA貢獻1772條經(jīng)驗 獲得超5個贊
部署的良好實踐是在潔凈室(例如 Docker 映像)中運行可重現(xiàn)的構建過程并生成要部署的工件(二進制文件、配置、資產(chǎn)),理想情況下還可以運行一些測試來證明上次沒有任何問題。
將服務 - 二進制文件及其所有需要的文件(配置、輔助文件,如 systemd、nginx 或 logrotate 配置等)打包成某種包是一個好主意 - 無論是目標環(huán)境 Linux 發(fā)行版 (DPKG) 的原生包, RPM)、虛擬機映像、docker 映像等。這樣您(或負責部署的其他人)就不會忘記任何文件等。一旦您有了包,您就可以使用該打包格式的本機工具輕松驗證和部署( apt
, yum
, docker
...) 到生產(chǎn)環(huán)境。
對于配置和其他文件,我建議讓軟件從眾所周知的位置讀取它,或者至少可以選擇在命令行參數(shù)中傳遞路徑。如果您部署到 Linux,我建議您遵循LFHS(tldr;配置為/etc/yourapp/
,二進制文件為/usr/bin/
)
不建議在生產(chǎn)環(huán)境中從源代碼構建軟件,因為構建需要通常不需要的工具(例如go
,git
依賴項等)。安裝和運行這些需要更多維護,并可能導致安全和性能風險。通常,您希望根據(jù)運行應用程序的要求將生產(chǎn)環(huán)境保持在最低限度。

TA貢獻1895條經(jīng)驗 獲得超3個贊
我認為應用程序最常見的部署策略是嘗試遵循 12-factor-app方法論。
因此,在這種情況下,如果您的 YAML 文件是配置文件,那么將配置放在環(huán)境變量(ENV vars)上會更好。因此,當您在容器上部署應用程序時,從 ENV 變量配置正在運行的實例比將配置文件復制到容器更容易。
但是,在編寫系統(tǒng)軟件時,最好遵守您所使用的操作系統(tǒng)定義的文件系統(tǒng)層次結構。如果您使用的是類 Unix 系統(tǒng),您可以通過man hier
在終端上鍵入來讀取層次結構。通常,我將編譯后的二進制文件安裝在/usr/local/bin
目錄中,并將配置放在/usr/local/etc
.
對于生產(chǎn)環(huán)境的部署,我創(chuàng)建了一個簡單的 Makefile 來完成構建和安裝過程。如果部署環(huán)境是裸機服務器或虛擬機,我通常使用 Ansible 使用 ansible-playbook 進行部署。playbook 將從代碼存儲庫中獲取源代碼,然后通過運行make
命令構建、編譯和安裝軟件。
如果應用程序?qū)⒉渴鹪谌萜魃?,我建議您創(chuàng)建一個鏡像并使用多階段構建,這樣構建二進制文件所需的源代碼和其他工具就不會在生產(chǎn)環(huán)境中,并且鏡像大小會更小。但是,正如我之前提到的,從 ENV 變量而不是配置文件中讀取應用程序配置是一種常見的做法。如果應用程序需要配置很多東西,則可以在構建映像時將文件復制到映像中。

TA貢獻1860條經(jīng)驗 獲得超9個贊
當我們等待提案時::cmd/go
支持在二進制文件中嵌入靜態(tài)資產(chǎn)(文件)來實現(xiàn)(請參閱當前提案),您可以使用該提案中列出的嵌入靜態(tài)資產(chǎn)文件工具之一。
這個想法是將您的靜態(tài)文件包含在您的可執(zhí)行文件中。
這樣,您可以分發(fā)您的程序而不依賴于您的來源。
- 3 回答
- 0 關注
- 315 瀏覽
添加回答
舉報