日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

某小公司项目环境部署演变之路

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 某小公司项目环境部署演变之路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在環境部署問題上,我們經歷了3個階段:傳統安裝、鏡像恢復、自動發現注冊+指令下達。目前鏡像恢復后,啟動虛擬機,一旦能ping通我們公司地址,就會自動注冊這臺機器(即使沒有其他外網訪問權限、也未開放任何對外端口),我們也就有了這臺機器的管理權限,可批量群控下發指令。(第二階段、第三階段均為我自主設計。)

背景

我們是一家產品+定制化需求公司,項目做好之后會直接部署到客戶服務器上。而客戶很少選擇云服務器,因為他們有自己的機房,部署前會提供給我們1-2臺虛擬機,然后整個環境部署問題就交給我們了。

演變

第一階段:傳統安裝

使用時間:?~2016年

  • 需甲方提供windows或linux服務器遠程連接方式(這里各個甲方提供都不一樣,有堡壘機、vpn、直接定向開放端口、vpn+堡壘機等)非常復雜,只能case by case

  • 遠程到服務器上

  • 上傳數據庫、jdk、tomcat各類安裝包(受限帶寬因素,往往很耗時)

  • 安裝安裝數據庫

  • 安裝jdk、tomcat、nginx(linux環境下,使用寫好的sh腳本直接運行,依然比較耗時)

  • 人工部署war包等 等

  • ?

    此方式缺點太多,往往需要3-5人天才能完成所有部署,但我們只有一位運維人員,所以當項目沖突時,極為被動。而且因為各個軟件版本發生變動、甲方提供的虛擬機3個盤符、2個盤符,或者沒有D盤(雖然可以通過計算機管理更改驅動器顯示號,但可能導致其他軟件無法運行)所以環境比較亂。

    這種方式比較老,我也不介紹更多。當然,據我了解,目前還有一些小公司在沿用這種部署方式,所以在這里勸采用這種方式的公司盡快完成轉型。

    第二階段:鏡像恢復

    使用時間:2016年~2017年

  • 需甲方提供windows或linux服務器遠程連接方式(這里各個甲方提供都不一樣,有堡壘機、vpn、直接定向開放端口、vpn+堡壘機等)非常復雜,只能case by case

  • 使用vm鏡像恢復虛擬機并設置好ip(內含docker)

  • 通過deploy模塊一鍵部署war包

  • ?

    此方式,我們將第一階段的2、3、4、5封裝成vm虛擬機鏡像、開發了deploy模塊、抽取項目無狀態。

    這時我們對運維人員依賴大大減少,工作量大大減少至2-6小時。(這個階段起,我們公司沒有運維人員,進入DevOps時代。事實上,此階段初我們運維人員離職,使得我不得不加快設計)

    第三階段:自動發現注冊+指令下達

    使用時間:2017年~2018年

  • 甲方使用我們vm鏡像恢復并設置好ip,保證能ping通我們公司地址

  • 自動發現注冊+指令下達

  • 通過deploy模塊一鍵部署war包

  • 此階段,我們部署耗時在5-10分鐘,而且我們不再需要甲方提供遠程,我們還可以批量管理所有機器,不僅滿足了此時的需求,并為后面擴展做了鋪墊。

    具體技術

    這里主要講二、三兩個階段

    因為傳統方式缺點特別多,所以在我向領導介紹方案后,領導很感興趣,很快就安排我著手去干。為了提高效率,期間選型多款工具或框架組成的方案,本文只介紹最終選型的設計。

    frp

    frp是一款內網穿透軟件,可以使得沒有外網ip的機器暴露在外網里,但本文利用它將一臺內網機器端口暴露在另外一個內網中的特性。

    安裝frp服務端

    選擇一臺內網機器比如172.0.0.2,需臨時保證這臺服務器走公網固定ip線路

    wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh chmod 700 ./install-frps.sh ./install-frps.sh install

    全部參數都有默認值,直接回車就是輸入默認值:

    Please input frps bind_port [1-65535](Default Server Port: 5443): #輸入frp提供服務的端口,用于服務器端和客戶端通信,默認即可 Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80): #輸入frp進行http穿透的http服務端口,建議不用默認 Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443): #輸入frp進行https穿透的https服務端口,建議不用默認 Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):#輸入frp的控制臺服務端口,用于查看frp工作狀態,默認即可 Please input dashboard_user (Default: admin):#登錄控制臺的用戶名,默認即可 Please input dashboard_pwd (Default: kpkpM7VZ):#登錄控制臺的密碼,如果記不住默認的建議修改 Please input privilege_token (Default: 9m2UAOWa6hx5Eise):#輸入frp服務器和客戶端通信的密碼,默認是隨機生成的,默認即可 Please input frps max_pool_count [1-200](Default max_pool_count: 50):#設置每個代理可以創建的連接池上限,默認50 ##### Please select log_level ##### 1: info 2: warn 3: error 4: debug ##################################################### Enter your choice (1, 2, 3, 4 or exit. default [1]): 默認即可 Please input frps log_max_days [1-30](Default log_max_days: 3 day): ##### Please select log_file ##### 1: enable 2: disable ##################################################### Enter your choice (1, 2 or exit. default [1]):默認即可

    至此frp服務端就搭建好了

    客戶端

    這里我們以linux為例

    打開http://diannaobos.iok.la:81/frp/frp-v0.14.0/

    下載frp_0.14.0_linux_amd64.tar.gz文件,只保留frpc開頭的文件(frp客戶端)

    以frp文件夾形式解壓到linux的home目錄

    編寫reg.sh腳本

    reg.sh也放在linux的home目錄

    UUID=$(cat /sys/class/dmi/id/product_uuid) wget -O frpc.ini http://114.114.114.114/frp.php?file=$UUID; a=`du -s frpc.ini | awk '{print $1}'` if [ $a -lt 1 ] thenecho "none" elseecho "action"pkill frpcsleep 2srm -rf ~/frp/frpc.inicp frpc.ini ~/frp/frpc.ini~/frp/./frp.sh fi

    其中UUID為服務器唯一標識,即使vm虛擬機鏡像相同,但uuid不會相同。

    其中114.114.114.114為公司對外注冊中心

    編寫crontab

    crontab -e */5 * * * * ~/reg.sh

    每隔5分鐘執行一次,意思是每隔5分鐘去注冊一次或者說是拉取一次變更請求,當服務端配置不改變時不會重啟服務。

    frp開機自啟

    linux

    chmod +x ~/frp/frp.sh vi /etc/rc.d/rc.local #文件底部追加 bash ~/frp/frp.shchmod +x /etc/rc.d/rc.local #重啟即可

    frp.php簡易版內容如下

    <?php $filename=$_GET['file'].'.ini'; $filename='frp/'.$filename;if(!file_exists($filename)){file_put_contents($filename,"");file_put_contents($filename.'.update',$_SERVER['REMOTE_ADDR']); }else{if (!file_exists($filename.'.update')){$str = file_get_contents($filename);echo $str;file_put_contents($filename.'.update',$_SERVER['REMOTE_ADDR']);} } ?>

    ?

    當有機器注冊時,frp文件夾下會有id對應的文件名,我們只需要在.ini中寫入配置,再刪除.update文件即可,待服務端收到frp新配置后,會自動再創建一個.update文件,并且將ip寫入.update文件。

    .ini例子

    [common] server_addr = 114.114.114.114 server_port = 5443 privilege_token =密鑰[webserver] type = tcp local_ip = 127.0.0.1 local_port = 22 use_encryption = false use_compression = false remote_port = 7001[a-web] type = http local_ip = 127.0.0.1 local_port = 80 use_encryption = false use_compression = true custom_domains = a.a.com

    common為公共部分

    webserver是將本地22端口使用隧道技術穿透到公司的172.0.0.2機器里

    內網機器遠程只需訪問172.0.0.2的7001端口

    a-web是本機80端口在公司內網中的直接訪問url:a.a.com

    ?

    通過frp管理后臺,可以實時查看到各個機器連接情況。

    至此,我們可以遠程機器、訪問該機器80端口,理論上可以訪問該機器所有端口,如新增端口穿透,只需要去修改.ini,這是一簡易版的介紹。

    再接入ansible即可遠程群控。

    ansible

    ansible 是一款自動化運維工具,具體使用可參考我另外一篇博文《自動化運維工具ansible的實踐》

    外網映射

    假設公司外網為114.114.114.114 需將114.114.114.114的5443端口映射到172.0.0.2的5443上,其他端口均不要映射,

    docker

    前兩年docker很火,DevOps很火,所以我們選擇了docker,以便我們docker鏡像快速部署我們系統。可參考我另外一篇博文《我是如何重構整個研發項目,促進自動化運維DevOps的落地?》

    Portainer

    可參考我的另外一篇博文《Docker的web端管理平臺對比(DockerUI 、Shipyard、Portainer、Daocloud)》

    deploy

    deploy為我們自研,底層原理可參考《java web項目war包自動升級部署方案》

    總結

    本文主要講利用frp內網穿透、構建隧道的技術實現對無外網、無端口機器的運維部署;利用ansible工具實現群控;利用docker進行快速部署;通過自研deploy進行版本控制等。

    該套方案極大的節省了我們的運維成本,使我們這樣的小公司跑步進入了一個無運維人員、DevOps時代。

    如果你有類似場景,希望本文對你有所幫助。

    總結

    以上是生活随笔為你收集整理的某小公司项目环境部署演变之路的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。