內網後台同步到線上

2022-09-14 19:30:21 字數 4285 閱讀 6988

內網後台同步到線上

一、需求引入

上周四公司突然來個通知,說周五停電,放假一天,週六補班(工作日不上班我內心其實是竊喜的。。。因為上到周四感覺人已經比較疲累了,一定是年齡上去了的緣故 = =)

停電意味著內網兩台大伺服器需要關機,關機意味著內網後台新聞發布不了,如下圖。即定時上傳那條路徑因為沒電的原因,斷了。內容發布**最重要的事通常就是每天更新內容嘛~~~當時大家都慌了,尤其老闆。本來聽說連停三天(周五

六、日),那就更恐怖了,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

rm -rf html u r

問題二:內網資料庫配置連線檔案不同步到gitlab處理這個檔案就不能刪了,必須傳到gitlab上,不然會影響完整性,即資料庫連線檔案都刪除了,整個後台跑不動。

首先也是可以像問題一那種麻煩的方法,每次同步到線上之後用線上的資料庫連線檔案覆蓋,不過我覺得太麻煩。

因為已經上傳過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/bash

2## 內網資料庫同步到線上天翼資料庫

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 ...