內網後台同步到線上
一、需求引入
上周四公司突然來個通知,說周五停電,放假一天,週六補班(工作日不上班我內心其實是竊喜的。。。因為上到周四感覺人已經比較疲累了,一定是年齡上去了的緣故 = =)
停電意味著內網兩台大伺服器需要關機,關機意味著內網後台新聞發布不了,如下圖。即定時上傳那條路徑因為沒電的原因,斷了。內容發布**最重要的事通常就是每天更新內容嘛~~~當時大家都慌了,尤其老闆。本來聽說連停三天(周五
六、日),那就更恐怖了,3天內容不更新,中心肯定不高興的。一邊老闆在看能不能臨時借個類似ups的電源,供電一天(據說公司的ups最多只能支援供電2~3小時);一邊行政經理打12345投訴。最終結果是投訴是有效的,只停周五1天,借不了ups。老闆腦洞大開,還想把兩台巨無霸伺服器載回家去,通電來維持這個新聞發布,想想真覺得不可思議 = =
最終我們的開發,本著大無畏精神,決定把內網後台拉下來,放到自己辦公電腦上,然後把硬碟拆下來帶回家,如果真的急著更新文章,就自己發。
幸好周五大概晚上7點的時候有電了,如果真要發文章,可以找住公司附近的同事去開伺服器,開發也省事不用在自己家裡電腦跑後台發新聞,據我了解應該是不急著更新的,週六回來才搞起。
前面來龍去脈講完(一匹布甘長 。。。)
正題來了,老闆覺得這樣風險太大,漫漫暑熱才剛開始,誰知道三天兩頭又來停電的~~開發拉後台**到本地也挺久,因為很大,而且還得把資料庫導下來,這樣才能保證資料是最新的。注意上圖的公司內部伺服器,實際上既包括後台,也包括資料庫!所以老闆希望我做個把後台同步到gitlab上的,再同步到線上,防止再出現這種停電無法更新新聞的情況。
二、實現思路及問題處理
首先我要澄清一下,上面那個圖的傳輸同步,實際上僅僅是資源目錄同步,什麼意思呢,請看下圖(有點醜,大家將就下)
本地後台**目錄檔案及資料夾實際上只有乙份!現在就需要把**目錄檔案和資料夾都要同步到gitlab上。
實現思路:
(1)後台**目錄檔案拷貝乙份做同步測試
(2)gitlab上新建乙個任務用於放**目錄檔案及資料夾,其中需要排除靜態資源目錄的軟連線,因為已經做過同步了
(3)線上伺服器定時拉取
一些問題處理:
問題一:內網軟連線同步處理
(1)後台**目錄整個拷貝乙份的時候,軟連線還是有的,雖然不會上傳。gitlab對於已存在的目錄上傳,命令是這樣的:
1直接同步到線上,會報錯軟連線目的目錄找不到,因為內網和線上的使用者及目錄稍有不同,其實「——>」 過去的目錄是閃爍狀態的,也就是找不到的意思。cd 拷貝的後台**目錄
2git init
3git remote add git位址
4git add .
5 git commit -m "
initial commit
"6 git push -u origin master
當時git push上去已經傳到gitlab上了,我就嘗試用.gitignore 和 .git/info/exclude 來控制不上傳,發現還是沒效果,最終處理方法是刪除,就是上面的r、u、html。然後線上只需要改一次軟連線到線上的資源目錄就好。當然也可以在每次同步到線上之後,刪除線上的軟連線重新做(同步過去的軟連線實際上是內網的軟連線),不過我覺得這樣處理比較麻煩。
cd ***/gz_houtai問題二:內網資料庫配置連線檔案不同步到gitlab處理這個檔案就不能刪了,必須傳到gitlab上,不然會影響完整性,即資料庫連線檔案都刪除了,整個後台跑不動。rm -rf html u r
首先也是可以像問題一那種麻煩的方法,每次同步到線上之後用線上的資料庫連線檔案覆蓋,不過我覺得太麻煩。
因為已經上傳過jdbc.properties 上了
git update-index --assume-unchanged web-inf/config/jdbc.properties效果如下:
(a)內網伺服器資料庫連線檔案
(b)gitlab儲存的資料庫連線檔案
證明了內網提交沒有同步到gitlab上了
假設如果想改成線上配置連線,可以直接在gitlab上的web頁面修改
如下操作:
線上伺服器讀取了gitlab上的資料庫連線檔案,不然連不了內網的資料庫ip(192.168.0.0/24 網段),這裡是通過ngrok**內網資料庫,成了公網連線,這樣線上伺服器也能連。
當然如果真的停電,這個連線配置檔案要改成線上的庫。所以第3個問題是內網資料庫同步到線上
問題三:內網資料庫同步到線上
直接貼指令碼算了,因為ngrok**的內網資料庫,成了公網網域名稱連線,所以mysqldump下來非常慢,足足半個小時,所以一天同步2次綽綽有餘。如果知道停電手動執行一次更新mysql也行。
cat mysql_sync.sh
1 #!/bin/bash2## 內網資料庫同步到線上天翼資料庫
3 ## on 20210518
by ljy
45 dump='
/usr/bin/mysqldump'6
7 local_ip='
ngrok.***.cn
'8 local_port=***
9 local_bak='
/home/ljy/data_bakup/mysql_local
'10 [ ! -d $ ] && mkdir -p $
1112 logfile='
/home/ljy/data_bakup/mysql_local/bak.log
'13 begin=`date +"
%y年%m月%d日_%h:%m:%s"`
1415
echo
"$begin 資料庫開始備份。。。
" >>$
1617 local_user=***
18 local_pwd=***
19 db='
***'
2021 remote_ip=***
22 remote_port=***
23 remote_user=***
24 remote_pwd='
***'
2526 export lang=en_us.utf-8
27 date=`date +%y%m%d_%h%m`
28 dumpfile=$date.sql
2930 ### 1
、備份內網資料庫
31 $ -u$ -p$ -h$ -p$ $ > $/$_$
3233 ### 2
、匯入到線上mysql
34 mysql -u$ -p$ -h$ -p$ $ < $/$_$
3536
37 ### 3
、寫入到日誌
38 end=`date +"
%y年%m月%d日_%h:%m:%s"`
39echo
"$end 資料庫同步完成。。。
" >>$
40echo
"############
" >>$
4142 ### 4
、定時刪除備份的資料庫
43find $ -type f -mtime +1 -exec rm -f {} \;
GitHub線上專案更新如何同步到本地
1,轉殖專案 git clone 專案ip當此專案更新時,同步到本地 1,建立乙個叫做bian的分支,用來同步新的資料 git branch bian2,給更新的遠端庫起別名 次步可選擇不寫,僅僅是為了之後同步方便 不用再複製 git remote add laobian git github.co...
nodejs 線上後台管理
npm install pm2 g 命令列安裝 pm2 也可以把 max 引數傳遞給 start 正確的程序數目依賴於cpu的核心數目 pm2 list 顯示所有程序狀態 pm2 monit 監視所有程序 pm2 logs 顯示所有程序日誌 pm2 stop all 停止所有程序 pm2 resta...
設定 svn 與 web線上同步
預設你已經配置好了svn服務 2.假設svn的倉庫目錄為 data svn repo 一 checkout乙份svn到線上 目錄 svn co svn localhost repo data www 二 進入repo下的hooks,建立post commit cp post commit.tmpl ...