從接觸運維開始,最苦逼的事情就是業務上線,為什麼這麼說? 就是因為有了很多的大坑隊友。不是因為開發的童鞋漏提代碼,就是因為測試童鞋線下測試的不到位導緻代碼扔到線上後出現各種問題,各種404。近期和各位童鞋研究了應對這種現象的解決方案,得到了如下結果:
上線分為如下幾種等級:測試釋出、預釋出、灰階釋出、正式釋出,下面分來來針對這四種釋出介紹下差別。
測試釋出:寫完程式線上下測試,測試的過程和結果成為測試釋出。
預釋出:程式經曆過測試釋出後要把代碼線上上部署一套(和生産環境一模一樣的環境),使用生産環境的資料庫等等應用,測試人員線上上進行測試,測試的過程不影響生産環境使用.
灰階釋出:程式經曆過預釋出後下一步就是灰階釋出。使用線上的生産環境進行測試,使用對象是部分客戶,這種過程稱之為灰階釋出。
正式釋出:代碼經曆過上述三種測試後,基本可以确定ok了,就可以進行代碼正式釋出了。環境使用生産環境,客戶是全部客戶。
以上講述了四種釋出的差別以及作用,接下來繼續說說前幾天預釋出的過程。
預釋出的意思是,我們自己的測試人員使用線上的環境線上的資料進行線上測試,但是還不能影響線上正常用的使用,解決辦法如下:
根據公網ip進行反向代理,本部門的公網ip是固定的,那麼當客戶通路的時候,如果是本部門的公網ip的話,nginx進行方向代理到新代碼tomcat上,如果非本部門的公網ip,那麼代理到原有tomcat上,拓撲如下:
<a href="https://s4.51cto.com/wyfs02/M00/A4/80/wKioL1ms03qAIglSAAA_Gp7NKN8885.png" target="_blank"></a>
nginx代碼:動态請求的規則下面這麼寫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<code>upstream jljerp {</code>
<code> </code><code>server 192.168.1.190:8001 weight=20 max_fails=2 fail_timeout=30s;</code>
<code> </code><code>ip_hash;</code>
<code> </code><code>}</code>
<code>upstream jljerp_rc {</code>
<code> </code><code>server 192.168.1.190:8004 weight=20 max_fails=2 fail_timeout=30s;</code>
<code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>server_name jljerp.jinlejia.com;</code>
<code> </code><code>root </code><code>/var/www/index</code><code>;</code>
<code> </code><code>index index.html index.htm;</code>
<code>location / {</code>
<code> </code><code>proxy_set_header HOST $host;</code>
<code> </code><code>proxy_set_header X-Real-IP $remote_addr;</code>
<code> </code><code>proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;</code>
<code> </code><code>proxy_connect_timeout 600;</code>
<code> </code><code>proxy_read_timeout 600;</code>
<code> </code><code>proxy_send_timeout 600;</code>
<code> </code><code># 預釋出規則,這個位址是部門内部公網位址,當這個位址過來的請求轉發到新tomcat上</code>
<code> </code><code>if</code> <code>($remote_addr ~* </code><code>"202.106.0.20"</code><code>) {</code>
<code> </code><code>proxy_pass http:</code><code>//jljerp_rc</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code># 如果不是本部門ip請求,按照原有規則進行原有生産環境進行轉發</code>
<code> </code><code>proxy_pass http:</code><code>//jljerp</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>error_page 500 502 503 504 </code><code>/50x</code><code>.html;</code>
<code> </code><code>location = </code><code>/50x</code><code>.html {</code>
<code> </code><code>root </code><code>/usr/share/nginx/html</code><code>;</code>
<code> </code><code>}</code>
<code>}</code>
nginx代碼:靜态請求的規則這麼寫(換湯不換藥)
<code> </code><code>listen 80;</code>
<code> </code><code>server_name www.a.com;</code>
<code> </code><code>root </code><code>/var/www/a</code><code>;</code>
<code> </code><code>location / {</code>
<code> </code><code># 預釋出規則,如果是本部門的公網的ip,通路這個目錄下的位址</code>
<code> </code><code>if</code> <code>($remote_addr ~* </code><code>"202.106.0.20"</code><code>){</code>
<code> </code><code>root </code><code>/var/www/b</code><code>;</code>
<code> </code><code>}</code>
<code># 由于字型使用跨域的方式進行的調用,預設浏覽器拒絕通路,加上這個location就可以在其他域名下通路這個域名的字型了</code>
<code> </code><code>location ~* \.(eot|ttf|woff|svg|otf|woff2)$ {</code>
<code> </code><code>add_header Access-Control-Allow-Origin *;</code>
<code> </code><code>error_page 404 500 502 503 504 </code><code>/404</code><code>.html;</code>
<code> </code><code>location = </code><code>/404</code><code>.html {</code>
上述就是整個過程,并非權威,有問題歡迎大家指正
本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/1962485,如需轉載請自行聯系原作者