成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

docker進(jìn)階,nginx部署的幾個(gè)重要點(diǎn)詳解以及開發(fā)流程---持續(xù)更新

ytwman / 2605人閱讀

摘要:無論這個(gè)連接是外部主動(dòng)建立的,還是內(nèi)部建立的。協(xié)議有表示層數(shù)據(jù)的表示安全壓縮。在整個(gè)發(fā)展過程中的所有思想和著重點(diǎn)都以一種稱為的文檔格式存在。

部署基礎(chǔ)知識(shí)
url:協(xié)議://網(wǎng)站地址:端口(/)路徑地址?參數(shù)
eg: http://www.baidu.com:80/abc/dd/
www.baidu.com找服務(wù)器
80端口:找服務(wù)器上提供服務(wù)的應(yīng)用 nginx
uri:/abc/dd/
nginx的pid文件是可變化的
等號(hào)兩邊不能空格,否則會(huì)報(bào)錯(cuò)

tail -f 1.txt 實(shí)時(shí)監(jiān)控文件變化

1.1 部署基礎(chǔ)
1.11.1 項(xiàng)目生命周期

         傳統(tǒng)項(xiàng)目生命周期
        階段

? 調(diào)研階段 找方向點(diǎn)

        設(shè)計(jì)階段        方向點(diǎn)可視化
                        產(chǎn)品:產(chǎn)品需求文檔、項(xiàng)目里程表
        開發(fā)階段        產(chǎn)品階段功能實(shí)現(xiàn)
        測試階段        保證產(chǎn)品的階段功能
        運(yùn)營階段        項(xiàng)目部署 + 運(yùn)營維護(hù)
  關(guān)鍵點(diǎn):
        階段間是有前后關(guān)系依賴的
        階段間項(xiàng)目的推進(jìn)是有文檔來主導(dǎo)
        理想化的生命周期和開發(fā)模型

1.2新型項(xiàng)目周期

            軟件項(xiàng)目:    一個(gè)產(chǎn)品被拆分成了非常多的子功能
            團(tuán)隊(duì)組織:高效協(xié)作,溝通
            圖的理解:
                四個(gè)圈串在一起  --- 子功能的完整周期
                單個(gè)圈        ---    崗位的工作內(nèi)容
               圖片: https://uploader.shimo.im/f/hRwe365QitwNgyS7.png
                團(tuán)隊(duì)組織間的高效協(xié)作是很重要的    

? 流程:

                1 根據(jù)需求文檔來梳理網(wǎng)站的目標(biāo)架構(gòu)
                2 分析產(chǎn)品需求文檔的功能,來梳理部署結(jié)點(diǎn)
          部署節(jié)點(diǎn)示意圖:

圖片: https://uploader.shimo.im/f/U...

                3 根據(jù)部署結(jié)點(diǎn)去互聯(lián)網(wǎng)上梳理各種解決方案(根據(jù)業(yè)務(wù)需求                 
                4 整合所有的解決方案,-- 初版部署方案
                5 根據(jù)實(shí)際的公司業(yè)務(wù)情況,對初版部署方案進(jìn)行優(yōu)化調(diào)整

1.3 部署環(huán)境:

            個(gè)人開發(fā)環(huán)境                內(nèi)容:項(xiàng)目子模塊
      公司開發(fā)環(huán)境              內(nèi)容:項(xiàng)目模塊間聯(lián)調(diào)
                                                環(huán)境一定要和線上環(huán)境一致 
            測試環(huán)境                      內(nèi)容:項(xiàng)目產(chǎn)品質(zhì)量保證
            預(yù)發(fā)布環(huán)境                  內(nèi)容:項(xiàng)目產(chǎn)品質(zhì)量保證
            線上環(huán)境                      內(nèi)容:項(xiàng)目產(chǎn)品部署+維護(hù)

拓展: 環(huán)境之間彼此隔離
第 2 章 Nginx進(jìn)階

2.1 Nginx快速入門
    2.1.1 Nginx簡介
        方向:
            web服務(wù) 反向代理服務(wù)器、緩存服務(wù)器、郵件服務(wù)器
            ****** web 反向代理  
            *****  緩存 
            
        特點(diǎn):
            成本低 
                資源占用少
                模塊化設(shè)計(jì) 
                
    2.1.2 Nginx部署    
    軟件安裝
            apt-get install -y build-essential libssl-dev libtool libpcre3 libpcre3-dev make openssl zlib1g-dev 
            apt-get install nginx -y
            注意
                如果軟件安裝過程中,由于遠(yuǎn)程倉庫安全限制方面的原因?qū)е聼o法安裝成功,使用  --allow-unauthenticated 參數(shù)
                
           服務(wù)啟動(dòng)命令:(linux自帶的)
            systemctl start|stop|restart|reload nginx            ***
          nginx服務(wù)命令:
            nginx -t                     每次修改配置文件后,都要檢查配置文件,如果錯(cuò)誤即使啟動(dòng)nginx也不生效更改的內(nèi)容             ***
            nginx -s stop|reload         停止|重載        注意nginx -s  reload不需要關(guān)閉并重新打開nginx進(jìn)程,只需要將配置信息重新加載就可以了
         其他命令:

查看服務(wù)的端口信息:
netstat -tnulp | grep nginx


nginx目錄結(jié)構(gòu):
前提:使用apt-get來安裝的nginx
家目錄: /etc/nginx
日志目錄:/var/log/nginx
html目錄:/var/www/html 一般會(huì)把//usr/share/nginx/html/index.html注釋
nginx配置文件:
路徑: /etc/nginx/nginx.conf (官方默認(rèn)里面會(huì)包含下面的兩個(gè)存放目錄)
存放目錄:
/etc/nginx/ /etc/nginx/conf.d
nginx 的配置文件結(jié)構(gòu):
全局配置段
http配置段
server配置段 -----項(xiàng)目或者應(yīng)用的網(wǎng)站
location配置段 ------網(wǎng)站里面的文件 -----/var/www/html
nginx的訪問原理:
瀏覽器拆分url請求:
地址和端口 和路徑關(guān)鍵字
根據(jù)地址找服務(wù)器 ------nginx服務(wù)器
根據(jù)端口找服務(wù)器上面的應(yīng)用或者框架 -------server配置段
根據(jù)路徑關(guān)鍵字找對應(yīng)的文件 ------location配置段
---------------------------------------------- lscpu 查看cpu信息,全局配置段里面的worker_processes 是根據(jù)這個(gè)來設(shè)置的,auto的話是一樣多的,也可以定制
-----------------------------------------------默認(rèn)的worker_connections:768
高并發(fā)的一個(gè)配置點(diǎn): worker_procees 一般是和cpu內(nèi)核數(shù)相匹配的,多開的話可能會(huì)造成影響主進(jìn)程調(diào)度,占用CPU資源,適當(dāng)?shù)脑捑蛣倓偤?,?shí)際運(yùn)行時(shí)都會(huì)多一個(gè),這個(gè)就是主進(jìn)程,負(fù)責(zé)調(diào)度的,
worker_connections:這個(gè)屬性是指單個(gè)工作進(jìn)程可以允許同時(shí)建立外部連接的數(shù)量。無論這個(gè)連接是外部主動(dòng)建立的,還是內(nèi)部建立的。這里需要注意的是,一個(gè)工作進(jìn)程建立一個(gè)連接后,進(jìn)程將打開一個(gè)文件副本。所以這個(gè)數(shù)量還受操作系統(tǒng)設(shè)定的,進(jìn)程最大可打開的文件數(shù)有關(guān)。
兩個(gè)命令:ps -elf | grep nginx查看進(jìn)程配置信息

       cat /proc/pid/limits 查看硬盤支持的最大可打開文件數(shù)

圖片: https://uploader.shimo.im/f/m...
nginx -s reload命令重新啟動(dòng)Nginx。
https://blog.csdn.net/zs74294...
worker_rlimit_nofile配置要和系統(tǒng)的單進(jìn)程打開文件數(shù)一致,
根據(jù)我配置實(shí)踐,
服務(wù)器是“多個(gè)CPU+gzip+網(wǎng)站總文件大小大于內(nèi)存”的環(huán)境,worker_processes設(shè)置為CPU個(gè)數(shù)的兩倍比較好。

2.1.3 配置詳解:
全局配置段:
user 指的是worker_processes的用戶
worker_processes
pid
events
worker_connections 768
use 默認(rèn)epoll 面試掌握select /poll.epoll z阻塞非阻塞并行串行

http配置段:
sendfile 開啟高效文件傳輸
gzip 開啟gzip壓縮
tcp_delay 防止網(wǎng)絡(luò)阻塞
tcp_nopush 防止網(wǎng)絡(luò)阻塞
autoindex 開啟目錄列表訪問,適合下載服務(wù)器
keepalive_timeout 保持長連接
include 將相關(guān)的配置文件導(dǎo)入到文件中

面試掌握:tcp/ip協(xié)議的有限狀態(tài)機(jī)

server常見配置段:
格式:
server {
listen 端口;
server_name 主機(jī)名;
root 服務(wù)器響應(yīng)請求的html文件所在路徑 /var/www/html
index 定義響應(yīng)請求后返回的文件名稱或者格式; index index.html index.htm index.nginx-debian.html;
return 響應(yīng)請求返回的http狀態(tài)碼;
}
server {
listen 88; 監(jiān)聽的端口(優(yōu)先匹配)
server_name a.com 端口相同的情況下匹配server_name

                使用原則:

優(yōu)先使用完整樣式,然后使用前綴正則樣式,最后使用后綴正則樣式,如果正則樣式相同的時(shí)候,匹配最長,
否則就走非法規(guī)則。
非法域名/IP,表示請求到該主機(jī)上一個(gè)不存在的IP或者域名

}
server {
listen 88;
server_name b.com

}

location配置段

            語法:
                    location 匹配條件 匹配樣式 {執(zhí)行動(dòng)作}
                    匹配條件:
                        1 精確匹配    =
                        2 優(yōu)先正則    ^~
                        3 普通正則    ~區(qū)分大小寫 !~區(qū)分大小寫不匹配 ~*不區(qū)分大小寫 !~* 雙重否定
                        4 默認(rèn)規(guī)則    空
                        
                    匹配樣式:
                        針對的是url 里面的路徑部分
                            location ~ .(jpe?g)$ {}
                            location ^~ .(jpeg)$ {}

jpeg

                            jg
                  ~*  !~  Jpg
                    
            location = /image { 
        http://a.com/image 
            
            location = / {       location ~ .(gif|jpg|png|js|css)$ {      location !~* .xhtml$ {
            ? ?#精確規(guī)則A                  ? ?    #正則規(guī)則D                             ? ?    #正則規(guī)則G
            }                                  }                                             }
            location = /login {            location ~* .png$ {                          location / {
            ? ?#精確規(guī)則B                  ? ?    #正則規(guī)則E                             ? ?    #通用規(guī)則H
            }                                  }                                             }
            location ^~ /static/ {         location !~ .xhtml$ {
            ? ?#優(yōu)先規(guī)則C                  ? ?    #正則規(guī)則F
            }                                  }            

http://a.com/other

            $uri      /other
            $uri/    /other/ 默認(rèn)首頁 
        
        location實(shí)踐1:
            root@itcast:/etc/nginx/conf.d# cat test.conf 
            server{
              listen 99;
              location / {
                root /nihao/nibuhao;
                index index.html;
                try_files $uri $uri/ =404;
              }
            }
        
        location實(shí)踐2: 網(wǎng)站質(zhì)量頁面,監(jiān)控nginx運(yùn)行狀況:nginx-status
            root@itcast:/etc/nginx/conf.d# cat /data/backup/status.conf 
            server{
              listen 99;
              location /nginx-status {
                stub_status on;
                allow 192.168.8.15;  安全權(quán)限配置點(diǎn),不允許別人訪問
                deny all;
              }
            }            
        location實(shí)踐3:上傳服務(wù)器
            root@itcast:/etc/nginx/conf.d# cat upload.conf 
            server{
              listen 99;
              location /upload {
                alias /var/www/upload;
                autoindex on;
              }
            }            
        
    root VS alias

簡單點(diǎn)講:root是/var/www/image + /img/ 加上匹配的uri ----相對 用于location配置

      alias是/var/www/image/   忽略匹配的uri             -----絕對  用于other配置
        圖片: https://uploader.shimo.im/f/mXKynyi3pEE3eh5e.png
        
        root@itcast:/etc/nginx/conf.d# cat upload.conf 
        server{
          listen 99;
          location /upload {
            #alias /var/www/upload;
            root /var/www;
            autoindex on;
          }
        }        

    拓展:
        server中 listen 端口一樣,主機(jī)名不一樣 
                     直接3個(gè)server字段,端口一樣,server_name不一樣
        主機(jī)1 
            a.com     80
            b.com     80
            c.com     80 

            root@itcast:/etc/nginx/conf.d# cat test.conf 
            server{
              listen 99;
              root /nihao/nibuhao;
              index index.html;
              location / {
                root /nihao/nibuhao1;
                index index.html;
                try_files $uri $uri/ =404;
              }
            }    


2.2.1 反向代理

        代理:
            分類:
                正向代理: 代替公司內(nèi)網(wǎng)的客戶端去互聯(lián)網(wǎng)上訪問
                                相親的時(shí)候,自己的照片
                反向代理: 代替公司內(nèi)網(wǎng)的服務(wù)器向互聯(lián)網(wǎng)提供服務(wù)
                                相親的時(shí)候,媒婆說的女方形象
                                
            拓展:
                正向解析和反向解析  --- dns知識(shí)范疇 

王樹森 18:01:28 (多人發(fā)送)

2.2 Nginx進(jìn)階知識(shí)
    2.2.1 反向代理    
        代理:
            分類:
                正向代理: 代替公司內(nèi)網(wǎng)的客戶端去互聯(lián)網(wǎng)上訪問
                                相親的時(shí)候,自己的照片
                反向代理: 代替公司內(nèi)網(wǎng)的服務(wù)器向互聯(lián)網(wǎng)提供服務(wù)
                                相親的時(shí)候,媒婆說的女方形象
                                
            拓展:
                正向解析和反向解析  --- dns知識(shí)范疇 

正向解析:域名解析為IP
反向解析:IP解析為域名 https://www.cnblogs.com/weiap...

                
            
        關(guān)鍵配置:
            proxy_pass 代理后的地址;
            
        反向代理示例:
            root@itcast:/etc/nginx/conf.d# cat proxy.conf 
            server{
              listen 99;
              location / {
                proxy_pass http://192.168.8.15:999/nilaiya/;
              }
            }

            server {
              listen 999;
              location /nilaiya/ {
                root /ni/laiya;
                index index.html;
                try_files $uri $uri/ =404;
              }
            }                
        
        關(guān)鍵點(diǎn):
            proxy_pass 后面的地址結(jié)尾的"/" 很重要 
            配置示例:
                location /html/ {
                  1 proxy_pass http://proxy.com; 
                    2 proxy_pass http://proxy.com/;
                }
            請求地址:
                http://domain.com/html/test.js
                
            結(jié)果:
                如果是 1 ,由于地址后面沒有 "/", 所以$uri(/html/test.js)作為一個(gè)內(nèi)容和我們的地址拼接在一起
                    http://proxy.com/html/test.js
                如果是 2 ,由于地址后面有 "/", 所以$uri(/html/test.js)中關(guān)鍵字之后的 的內(nèi)容 (/test.js),和代理的地址拼接在一起
                    http://proxy.com/test.js

——————————————————————————————————————————
2.2.2 負(fù)載均衡

        負(fù)載均衡是一種特殊的反向代理,區(qū)別在于團(tuán)伙打群架
        負(fù)載均衡的分類:
            四層負(fù)載    port  傳輸層
            七層負(fù)載    url   應(yīng)用層
            
        upstream 的格式:
            upstream 主機(jī)群名稱 {
              server  主機(jī)1;
              server  主機(jī)2;
              ...
              server  主機(jī)3;
            }
            
            關(guān)鍵點(diǎn):    
                配置關(guān)鍵字: upstream
                主機(jī)群名用在哪里? proxy_pass 后面指定主機(jī)
                主機(jī)列表如何來制作: server指令了解一下。

簡單實(shí)踐1:

            root@itcast:/etc/nginx/conf.d# cat upstream.conf backends.conf 
            upstream obackends {
              server 192.168.8.15:10086;
              server 192.168.8.15:10087;
              server 192.168.8.15:10088;
            }

            server{
              listen 80;
              location / {
                proxy_pass http://backends;
              }
            }
            server {
              listen 192.168.8.15:10086;
              root /var/www/html/huang;
              index index.html;
              location / {
                try_files $uri $uri/ =404;
              }
            }
            server {
              listen 192.168.8.15:10087;
              root /var/www/html/li;
              index index.html;
              location / {
                try_files $uri $uri/ =404;
              }
            }
            server {
              listen 192.168.8.15:10088;
              root /var/www/html/liu;
              index index.html;
              location / {
                try_files $uri $uri/ =404;
              }
            }
        
            mkdir /var/www/html/{huang,li,liu}
            ls /var/www/html/
            echo "

nihao huangxiong

" > /var/www/html/huang/index.html echo "

nihao lixiong

" > /var/www/html/li/index.html echo "

nihao liuxiong

" > /var/www/html/liu/index.html nginx -t systemctl restart nginx

__
OSI七層模型
應(yīng)用層

網(wǎng)絡(luò)服務(wù)與最終用戶的一個(gè)接口。
協(xié)議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示層

數(shù)據(jù)的表示、安全、壓縮。(在五層模型里面已經(jīng)合并到了應(yīng)用層)
格式有,JPEG、ASCll、DECOIC、加密格式等

會(huì)話層

建立、管理、終止會(huì)話。(在五層模型里面已經(jīng)合并到了應(yīng)用層)
對應(yīng)主機(jī)進(jìn)程,指本地主機(jī)與遠(yuǎn)程主機(jī)正在進(jìn)行的會(huì)話

傳輸層

定義傳輸數(shù)據(jù)的協(xié)議端口號(hào),以及流控和差錯(cuò)校驗(yàn)。
協(xié)議有:TCP UDP,數(shù)據(jù)包一旦離開網(wǎng)卡即進(jìn)入網(wǎng)絡(luò)傳輸層,port,ssl位于傳輸層,、

網(wǎng)絡(luò)層

進(jìn)行邏輯地址尋址,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇。
協(xié)議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

數(shù)據(jù)鏈路層

建立邏輯連接、進(jìn)行硬件地址尋址、差錯(cuò)校驗(yàn) [2]  等功能。(由底層網(wǎng)絡(luò)定義協(xié)議)
將比特組合成字節(jié)進(jìn)而組合成幀,用MAC地址訪問介質(zhì),錯(cuò)誤發(fā)現(xiàn)但不能糾正。

物理層

建立、維護(hù)、斷開物理連接。(由底層網(wǎng)絡(luò)定義協(xié)議)
TCP/IP 層級(jí)模型結(jié)構(gòu),應(yīng)用層之間的協(xié)議通過逐級(jí)調(diào)用傳輸層(Transport layer)、網(wǎng)絡(luò)層(Network Layer)和物理數(shù)據(jù)鏈路層(Physical Data Link)而可以實(shí)現(xiàn)應(yīng)用層的應(yīng)用程序通信互聯(lián)。
應(yīng)用層需要關(guān)心應(yīng)用程序的邏輯細(xì)節(jié),而不是數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸活動(dòng)。應(yīng)用層其下三層則處理真正的通信細(xì)節(jié)。在 Internet 整個(gè)發(fā)展過程中的所有思想和著重點(diǎn)都以一種稱為 RFC(Request For Comments)的文檔格式存在。針對每一種特定的 TCP/IP 應(yīng)用,有相應(yīng)的 RFC [3]  文檔。
一些典型的 TCP/IP 應(yīng)用有 FTP、Telnet、SMTP、SNTP、REXEC、TFTP、LPD、SNMP、NFS、INETD 等。RFC 使一些基本相同的 TCP/IP 應(yīng)用程序?qū)崿F(xiàn)了標(biāo)準(zhǔn)化,從而使得不同廠家開發(fā)的應(yīng)用程序可以互相通信
圖片: https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=591aacf100f79052eb1f403c3cf1d738/0dd7912397dda144d48ab350bbb7d0a20df48655.jpg
超鏈接:https://www.cnblogs.com/wxd01... curl命令:掌握即成功

主機(jī)列表屬性:

            down             主機(jī)故障直接隔離
            backup             主機(jī)管用,但是一般不用,只有緊急或者繁忙的時(shí)候再用
            max_fails         重試次數(shù),當(dāng)重試失敗次數(shù)達(dá)到一定程度,就終止給該主機(jī)發(fā)送請求
            fail_timeout    當(dāng)重試失敗停止后,等待一段時(shí)間,繼續(xù)重試

調(diào)度算法:

            內(nèi)置策略
                雨露均沾     輪訓(xùn)  加權(quán)輪訓(xùn) fair
                定向服務(wù)    ip_hash 
                沒錢不用
            擴(kuò)展策略
                自定義
                第三方    

圖片: https://uploader.shimo.im/f/9...

                
        實(shí)踐:
            加權(quán)輪訓(xùn)
            upstream backends {
              server 192.168.8.15:10086 weight=1;
              server 192.168.8.15:10087 weight=3;
              server 192.168.8.15:10088 weight=1;
            }
                        
        
            ip_hash算法
            upstream backends {
              ip_hash;    *** ip_hash 加上這句話就實(shí)現(xiàn)了ip哈希
              server 192.168.8.15:10086 weight=1;
              server 192.168.8.15:10087 weight=3;
              server 192.168.8.15:10088 weight=1;
            }
url_hash算法

2.2.3 日志解析

        日志定制是工作中很重要的意向內(nèi)容,特別是監(jiān)控網(wǎng)站的運(yùn)行狀態(tài)
        在 /etc/nginx/nginx.conf 文件中配置
            日志格式定制:
                log_format 日志格式名 "內(nèi)置變量組成的日志格式 ";
            日志格式使用:
                access_log 日志文件所在路徑 采用日志格式名;
                err_log 日志文件所在路徑 采用日志格式名;
                

$remote_addr 前一臺(tái)主機(jī)的ip地址,不一定是真實(shí)的客戶端IP
$remote_user 用于記錄遠(yuǎn)程客戶端的用戶名稱(一般為“-”)
$time_local 用于記錄訪問時(shí)間和時(shí)區(qū)
$request 用于記錄請求的url以及請求方法
$status 響應(yīng)狀態(tài)碼,例如:200成功、404頁面找不到等。
$body_bytes_sent 給客戶端發(fā)送的文件主體內(nèi)容字節(jié)數(shù)
$http_referer 可以記錄用戶是從哪個(gè)鏈接訪問過來的
$http_user_agent 用戶所使用的代理(一般為瀏覽器)


日志定制案例:
圖片: https://uploader.shimo.im/f/g...

        1 定制日志格式
        2 在第一個(gè)代理上 設(shè)置兩個(gè)真實(shí)的報(bào)文頭
            X-Real-IP X-Forwarded-For
        3     
            方法一:在所有的主機(jī)上獲取 $http_x_forwarded_for
            方法二:在最后一臺(tái)主機(jī)上設(shè)置 $http_x_real_ip
            
        4 在后端主機(jī)上使用定制日志
        
            root@itcast:/etc/nginx/conf.d# cat upstream.conf backends.conf 
            upstream backends {
              server 192.168.8.15:10086;
            }

            server{
              listen 80;
              location / {
                proxy_pass http://backends;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              }
            }
            server {
              listen 192.168.8.15:10086;
              root /var/www/html/huang;
              index index.html;
              access_log /var/log/nginx/huang.log proxy_format;
              real_ip_header X-Forwarded-For;
      # set_real_ip_from 192.168.142.0/17     (監(jiān)聽特定網(wǎng)段的ip) 
      -# real_ip_recursive on;  (多層代理要開啟這個(gè)才能獲得真實(shí)的ip地址)
              location / {
                try_files $uri $uri/ =404;
              }
            }
        
        拓展:    
            分析一下,real_ip_header 和 X-Forwarded-For
                在多層代理中的一個(gè)表示樣式

real_ip_header 和 X-Forwarded-For的比較
real_ip : 用于記錄真實(shí)客戶端IP,如果只有一層代理的話,這兩者是一樣的,但是如果客戶端之前就使用了正向代理的話就會(huì)出現(xiàn)代理IP,不是真實(shí)IP,這時(shí)要開啟real_ip_recursive
X-Forwarded-For:用于記錄代理信息的,每經(jīng)過一層代理就記錄一次(匿名代理除外)
eg:來自4.4.4.4的一個(gè)請求,header包含這樣一行
  X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
  代表 請求由1.1.1.1發(fā)出,經(jīng)過三層代理,第一層是2.2.2.2,第二層是3.3.3.3,而本次請求的來源IP4.4.4.4是第三層代理
而X-Real-IP
// 最后一跳是正向代理,可能會(huì)保留真實(shí)客戶端IP
X-Real-IP: 1.1.1.1
// 最后一跳是反向代理,比如Nginx,一般會(huì)是與之直接連接的客戶端IP
X-Real-IP: 3.3.3.3

多層代理使用X-Forwarded-For的效果好于X-Real-IP

附帶:最全的真實(shí)ip獲取,涉及CDN,XFF欺騙等

多級(jí)代理下的Nginx獲取用戶真實(shí)IP地址的方法
https://blog.csdn.net/abc8631...

http_realip_module這個(gè)模塊,它包括三個(gè)指令:

1、set_real_ip_from 是指接受從哪個(gè)信任前代理處獲得真實(shí)用戶ip

2、real_ip_header 是指從接收到報(bào)文的哪個(gè)http首部去獲取前代理傳送的用戶ip

3、real_ip_recursive 是否遞歸地排除直至得到用戶ip(默認(rèn)為off)

首先,real_ip_header 指定一個(gè)http首部名稱,默認(rèn)是X-Real-Ip,假設(shè)用默認(rèn)值的話,nginx在接收到報(bào)文后,會(huì)查看http首部X-Real-Ip。

(1)如果有1個(gè)IP,它會(huì)去核對,發(fā)送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它會(huì)去認(rèn)為這個(gè)X-Real-Ip中的IP值是前代理告訴自己的,用戶的真實(shí)IP值,于是,它會(huì)將該值賦值給自身的$remote_addr變量;如果不被信任,那么將不作處理,那么$remote_addr還是發(fā)送方的ip地址。

(2)如果X-Real-Ip有多個(gè)IP值,比如前一方代理是這么設(shè)置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;

得到的是一串IP,那么此時(shí)real_ip_recursive 的值就至關(guān)重要了。nginx將會(huì)從ip列表的右到左,去比較set_real_ip_from 的信任列表中的ip。如果real_ip_recursive為off,那么,當(dāng)最右邊一個(gè)IP,發(fā)現(xiàn)是信任IP,即認(rèn)為下一個(gè)IP(右邊第二個(gè))就是用戶的真正IP;如果real_ip_recursive為on,那么將從右到左依次比較,知道找到一個(gè)不是信任IP為止。然后同樣把IP值復(fù)制給$remote_addr。(可以參考上面的例子,幫助理解這個(gè)過程)

因此,明白了整個(gè)過程后,我們知道,用realip模塊是非常好用的,能滿足各種獲取用戶IP的需求,而且不會(huì)受到XFF欺騙!

那么問題來了,后端除了想獲取用戶ip,也想獲取代理ip,怎么辦呢?那么此時(shí)$proxy_add_x_forwarded_for派上用場。只需要在每一層代理IP,都保持一個(gè)良好的習(xí)慣:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;然后后端得到的X-Forwarded-For首部,依次就是用戶IP到各層代理的IP,至于最靠近自己的代理ip,各種web開發(fā)語言都有獲取發(fā)送方真實(shí)IP的接口了,然后你知道該怎么做了吧?


第 3 章 Docker快速入門

3.1 docker快速入門
    3.1.1 docker是什么
        快速解決生產(chǎn)問題的一種技術(shù)手段        --- 使用范圍相當(dāng)廣  C/S客戶端服務(wù)器
        三大組成部分:
            鏡像        構(gòu)建    build
            倉庫         運(yùn)輸    ship
            容器         運(yùn)行    running

特點(diǎn):多(運(yùn)用場景多)快(更新,使用)好(好多人使用)?。ㄩ_源,省錢,好用),依賴操作系統(tǒng),依賴網(wǎng)絡(luò),銀行U盾等場景(模擬的軟件環(huán)境不是真實(shí)的硬件環(huán)境,模擬不出來)不能使用

        
    3.1.2 部署docker    
        1 安裝依賴軟件
            apt-get update
            apt-get install apt-transport-https ca-certificates curl software-properties-common -y                
        2 安裝軟件
            curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
            add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"                
            apt-get update
            apt-get install docker-ce 

如果這里的走不通報(bào)錯(cuò)的話,可以按照下面步驟來
報(bào)錯(cuò):Process: 3485 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
走加速器

            
    3.1.3 docker加速器(有好多免費(fèi)的,下面是北京科大的,18.04)

其他版本的信息也有:http://mirrors.ustc.edu.cn/he...
1.cat /etc/docker/daemon.json,加上后面紅色字體
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"],"insecure-registries":[]}
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"], "insecure-registries": ["192.168.142.145:5000"]}
還是這個(gè)最靠譜

        注意:
            daemon.json 文件存在的前提,得有 /etc/docker/ 目錄
            這個(gè)目錄是docker啟動(dòng)后才創(chuàng)建的
            
            
    基本命令:
        docker -v 
        docker info 
=====================================================================        
3.2 鏡像管理    
    3.2.1 鏡像簡介    
        特點(diǎn):
            只讀文件
    3.2.2 搜索、查看、獲取、歷史

避免每次都要輸入sudo,可以設(shè)置用戶全信啊,注意執(zhí)行后必須重啟后登錄
sudo usermod -a -G docker $USER

        docker search  
        docker images 
        docker pull
        docker history   鏡像名  ----- 可以看到版本變化信息,是否安全
    3.2.3 重命名、刪除
        docker tag image_old_name:old_version image_new_name:new_version
            注意:版本號(hào)不寫,表示 latest
        docker rmi image_name|image_id
            注意:如果image_id一樣,那么就用 image_name:version形式來刪除
    3.2.4 導(dǎo)出、導(dǎo)入
        docker save -o 鏡像文件名 docker鏡像名
        docker load < 鏡像文件名
        

=======================================================================

3.3 容器管理

    3.3.1 容器簡介
        特點(diǎn):

容器本身就是一個(gè)進(jìn)程

            在docker中我們可以為所欲為的地方
    3.3.2 查看、啟動(dòng)    
        docker ps 
        docker run 
                    -d      守護(hù)進(jìn)程
                    -i         接受輸入的命令
                    -t         用于接受命令的終端
                    --name  給容器命名  (docker run -d --name  test nginx)
    3.3.3 關(guān)閉、刪除    
        docker stop|start 
        docker rm | rm -f 
 docker ps  -a -q   獲取所有容器的ID
        小技巧:
            docker rm -f $(docker ps  -a -q)  批量刪除所有的容器
            注意:生產(chǎn)中不要用
            
    3.3.4 進(jìn)入、退出    
        docker exec -it 容器名稱 /bin/bash
        exit
        
    3.3.5 基于容器創(chuàng)建鏡像    
        docker commit -m "注釋" -a "作者" 容器id 新鏡像名:新鏡像版本
    3.3.6 查看正在運(yùn)行的容器日志、信息
        docker logs 容器id  查看容器的日志信息
        docker inspect  容器id  查看容器的配置內(nèi)容
            注意:
                二次開發(fā)好好的了解一下inspect命令的結(jié)果內(nèi)容

為了避免docker每次命令都輸入sudo,可以設(shè)置用戶權(quán)限,注意執(zhí)行后需要注銷重新登錄

sudo usermod -a -G docker $USER
3.4 倉庫管理    
    3.4.1 倉庫簡介    
        分類:    
            安全角度
                安全倉庫 不安全
            位置角度
                本地倉庫
                私有倉庫     registry  harbor
                公有倉庫
    3.4.2 私有倉庫部署
        流程:
            1 獲取倉庫鏡像
            2 運(yùn)行鏡像倉庫
            3 倉庫權(quán)限配置
            4 鏡像打標(biāo)簽
            5 推送拉取測試
            
        流程:
            1 獲取倉庫鏡像
                docker pull registry
            2 運(yùn)行鏡像倉庫
                docker run -d --name registry1 --restart=always -p 5000:5000 registry
            3 倉庫權(quán)限配置
                root@itcast:~# cat /etc/docker/daemon.json 
                {"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.15:5000"]}                    
            4 鏡像打標(biāo)簽
                docker tag busybox 192.168.8.15:5000/busybox:v0.1
            5 推送拉取測試
                docker push 192.168.8.15:5000/busybox:v0.1
                docker pull 192.168.8.15:5000/busybox:v0.1    

        注意事項(xiàng):
            1 運(yùn)行倉庫的時(shí)候,添加 --restart參數(shù)
            2 推送鏡像的時(shí)候,鏡像的名稱應(yīng)該攜帶倉庫地址
            
        
        拓展:
            1 安全倉庫的搭建
            2 攜帶用戶名和密碼的安全倉庫
            3 企業(yè)級(jí)倉庫harbor的搭建
            4 私有倉庫里面鏡像的刪除-====================================================-------===============

3.5 數(shù)據(jù)管理

    3.5.1 數(shù)據(jù)卷簡介
        宿主機(jī)和容器間共享數(shù)據(jù)的一種機(jī)制
        -v 宿主機(jī)文件:容器文件路徑
    3.5.2 數(shù)據(jù)卷實(shí)踐    
        目錄 
            docker run -d -v /tmp:/test1 nginx
        文件 
            docker run -d --name hah -v /tmp/nihao.txt:/nicai/h.py nginx
            
            
        需求:
            如果我準(zhǔn)備啟動(dòng)10個(gè)容器每個(gè)容器我都同時(shí)掛載2個(gè)文件
            思路1:
                一個(gè)數(shù)據(jù)卷操作的命令執(zhí)行10遍
            
    3.5.3 數(shù)據(jù)卷容器簡介
        場景:
            批量數(shù)據(jù)卷的操作
            
        步驟:
            1 創(chuàng)建數(shù)據(jù)卷容器
                注意:數(shù)據(jù)卷容器不會(huì)啟動(dòng)
            2 啟動(dòng)應(yīng)用容器的時(shí)候,掛載數(shù)據(jù)卷容器
            
            
    3.5.4 數(shù)據(jù)卷容器實(shí)踐
            docker create -v /tmp/:/test -v /suzhuji:/jizhusu -v /su:/us --name vc-test nginx 
            docker ps
            docker ps -a
            docker inspect 5d8526a2abe9
            docker ps -a
            docker run --volumes-from vc-test --name nginx-test1 nginx
            docker run -d --volumes-from vc-test --name nginx-test1 nginx
            docker run -d --volumes-from vc-test --name nginx-test2 nginx
            docker run -d --volumes-from vc-test --name nginx-test3 nginx
            docker ps
            docker exec -it nginx-test2 /bin/bash
            docker exec -it nginx-test3 /bin/bash
            
        拓展:
            容器里面的數(shù)據(jù)備份和還原
            

3.6 網(wǎng)絡(luò)管理    
    3.6.1 端口映射詳解
        隨機(jī)端口的起始端口號(hào)是:32768 
        每次使用隨機(jī)端口映射,都會(huì)在之前的端口號(hào)基礎(chǔ)上+1 
        好處:
            無需關(guān)心容器的端口號(hào)和宿主機(jī)上的端口號(hào)
            所有的容器永遠(yuǎn)不可能沖突
            
    3.6.2 隨機(jī)映射實(shí)踐    
        docker run -d -P nginx
    3.6.3 指定映射實(shí)踐
        -p [宿主機(jī)ip]:[宿主機(jī)port]:[容器端口]
        注意:    
            宿主機(jī)ip不寫 表示 0.0.0.0
            宿主機(jī)port不寫,表示 隨機(jī)端口 
            容器端口必須寫
            生產(chǎn)中在使用指定端口映射的時(shí)候,一定要合理的安排端口的分配
            
             docker run -d -p 192.168.8.15:999:80 nginx
             docker run -d -p :999:80 nginx
             docker run -d -p :998:80 nginx
             docker run -d -p ::80 nginx
            
    拓展:
        1  docker的網(wǎng)絡(luò)模型 (5種)
            docker自帶的網(wǎng)絡(luò)模型:bridge(默認(rèn)) none host
            docker其他的網(wǎng)絡(luò)模型:container overlay
        2  docker 網(wǎng)絡(luò)模型簡單實(shí)踐
        3  docker overlay網(wǎng)絡(luò)模型實(shí)踐
            weave、flannel、calico、canel、openswitch

4.1 Dockerfile

    4.1.1 Dockerfile簡介
        作用;
            自動(dòng)化的將我們的定制docker鏡像創(chuàng)建出來
            類似于我們的python腳本
                1 命令必須可執(zhí)行
                2 目標(biāo)需要相應(yīng)的流程來配合
            一句話:
                在使用Dockerfile之前,手工執(zhí)行一定要成功
                
        使用準(zhǔn)則:
            大     文件名 Dockerfile 首字母大寫
            空     Dockerfile文件在一個(gè)空目錄下(只存放和Dockerfile相關(guān)的內(nèi)容)
            單     構(gòu)建后的docker鏡像盡量只有一個(gè)功能
            少    Dockerfile里面的命令,越少越好,
                即使是5條命令實(shí)現(xiàn)一個(gè)目的,也要把這5條命令放在一行來執(zhí)行
                
        Dockerfile的指令類型:
            1 來源
            2 維護(hù)者
            3 定制命令
            4 容器啟動(dòng)時(shí)候的第一條命令
            
            
        Dockerfile的使用
            docker  build -t 鏡像名稱:鏡像版本 Dockerfile文件所在路徑
            注意:
                Dockerfile文件所在路徑 可以是相對路徑,也可以是絕對路徑

4.1.2 Dockerfile快速入門

        跨主機(jī)免密碼認(rèn)證:
            1 自己有鑰匙和鎖
            2 把鎖掛載房東家屋子門上
            3 房東同意我掛鎖
            4 鑰匙和鎖測試一下
            
            
        跨主機(jī)免密碼認(rèn)證:
            1 主機(jī)1 自己創(chuàng)建秘鑰對兒
            2 主機(jī)2 使用主機(jī)1上面的公鑰文件
            3 主機(jī)2 使用公鑰文件來進(jìn)行用戶登錄的認(rèn)證
            4 主機(jī)1 登錄一下主機(jī)2 測試一下公鑰和私鑰的認(rèn)證是否成功

        mkdir /docker/images/ssh -p 
        cd /docker/images/ssh
        ssh-keygen -t rsa 
        cat ~/.ssh/id_rsa.pub > authorized_keys

            root@admina-virtual-machine:/docker/images/ssh# cat Dockerfile 
            # 構(gòu)建一個(gè)基于ubuntu的ssh定制鏡像
            # 基礎(chǔ)鏡像
            FROM ubuntu
            # 鏡像作者
            MAINTAINER President.Wang 000000@qq.com

            # 執(zhí)行命令
            # 增加軟件源    -- 由于課堂網(wǎng)絡(luò)原因,我們不執(zhí)行這一步
            # ADD sources.list /etc/apt/sources.list
            # 安裝 ssh 服務(wù)
            RUN apt-get update && apt-get install -y openssh-server curl vim net-tools && mkdir -p /var/run/sshd && mkdir -p /root/.ssh && sed -i "s/.*pam_loginuid.so/#&/" /etc/pam.d/sshd && apt-get autoclean && apt-get clean && apt-get autoremove
            # 復(fù)制配置文件到相應(yīng)位置,并賦予腳本可執(zhí)行權(quán)限
            ADD authorized_keys /root/.ssh/authorized_keys
            # 對外端口
            EXPOSE 22

            # 啟動(dòng)ssh
            ENTRYPOINT ["/usr/sbin/sshd","-D"]    

        docker build -t ubuntu-ssh:v0.1 .
        docker run -d -p 10086:22 ubuntu-ssh:v0.1
        ssh 192.168.8.14 -p 10086

======================================================================
4.1.3 基礎(chǔ)指令詳解

        FROM 
        MAINTAINER
        RUN 
        EXPOSE
        ENTRYPOINT
    4.1.4 文件編輯指令詳解    
        ADD             如果傳輸?shù)氖菈嚎s包,會(huì)自動(dòng)在容器里面解壓
        COPY            純純的拷貝動(dòng)作
        VOLUME            產(chǎn)生一個(gè)共享的目錄
            # ADD yasuobao.tar.gz /test/
            # COPY yasuobao.tar.gz /copy/
            # COPY authorized_keys /copy/
            # VOLUME ["VOLUMES"]
        
    4.1.5 環(huán)境指令詳解    
        需求:    
            mysql 鏡像,設(shè)定好了登錄用戶名USERNAEM和密碼PASSWD
            
            基于鏡像創(chuàng)建的容器,我們想使用這兩個(gè)變量來登錄,    docker run -e 
            
        ENV 
            在構(gòu)件鏡像的時(shí)候,給他設(shè)定一個(gè)環(huán)境變量
        WORKDIR
            切換工作目錄
            注意:
                如果切換工作目錄后,并沒有執(zhí)行回退的WORKDIR指令,那么就會(huì)一直在指定的目錄下
                
            ENV USERNAME=itcast
            ENV PASSWD=itcast
            WORKDIR ["/nihao/hah"]
            RUN ["touch","itcast.txt"]

=====================================================================
4.2 Dockerfile構(gòu)建django環(huán)境(拓展)

    4.2.1 項(xiàng)目描述    
    4.2.2 手工部署django項(xiàng)目環(huán)境    
    4.2.3 Dockerfile案例實(shí)踐
    
    如何在生產(chǎn)中定制標(biāo)準(zhǔn)的docker鏡像
        1 標(biāo)準(zhǔn)的工作目錄
            /docker/images/功能目錄
            
        2 標(biāo)準(zhǔn)的手工流程
            按照我們課件上的分析流程做出來手工執(zhí)行方案
                需求 -- 方案分析 -- 技術(shù)關(guān)鍵點(diǎn) -- 梳理出實(shí)施方案
                注意:    
                    在進(jìn)入到Dockerfile步驟之前,一定要保證手工執(zhí)行是成功的
                    而且必須報(bào)手工執(zhí)行的命令梳理出來
        3 標(biāo)準(zhǔn)的Dockerfile轉(zhuǎn)換

3.1 根據(jù)手工梳理出來的命令,準(zhǔn)備Dockerfile所依賴的軟件和文件,放到專用的Dockerfile目錄里

            3.2 分析手工命令,將其轉(zhuǎn)換成Dockefile指令
            3.3 整理Dockefile指令
            3.4 執(zhí)行Dockefile文件
            3.5 整體測試

===================================================================
項(xiàng)目初期

            單機(jī)階段            
                所有服務(wù)都部署到一臺(tái)主機(jī)
            應(yīng)用數(shù)據(jù)分離階段
                數(shù)據(jù)庫有壓力的時(shí)候,多帶帶部署
            頁面動(dòng)靜分離階段
                web服務(wù)有壓力的時(shí)候,動(dòng)態(tài)請求和靜態(tài)請求分別管理
            應(yīng)用|數(shù)據(jù)緩存階段
                采取數(shù)據(jù)緩存的策略,實(shí)現(xiàn)有限的資源,創(chuàng)造更高的效益
                
            拓展分析:
                1 網(wǎng)站項(xiàng)目的架構(gòu)是一次性做出來的么?    
                    不是,一步一步演變過來的
                2 演變的措施是一股腦全部實(shí)現(xiàn)么?
                    不是,遇到什么問題就解決什么問題
                3 每個(gè)階段的措施是一次的么?
                    不是,前面的措施,在后面也可以用,是一個(gè)選項(xiàng)

5.2 項(xiàng)目運(yùn)營

    5.2.1 網(wǎng)站分析
        常見術(shù)語:
            通用的:
                IP         獨(dú)立ip數(shù)            日志里面的關(guān)鍵字  獨(dú)立的訪問ip 
                PV        頁面訪問量            日志里面的關(guān)鍵字
                UV        獨(dú)立的用戶數(shù)量        日志里面的關(guān)鍵字
                VV        用戶訪問的頁面數(shù)量    日志里面的關(guān)鍵字
            專用的:
                BR        頁面跳出率             -- 辣眼睛
                CR        頁面轉(zhuǎn)化率            -- 大眼睛    
                
        常見的指標(biāo)分析方法:
            定制的
                日志分析、監(jiān)控平臺(tái)、等等
            其他的
                通用的網(wǎng)站統(tǒng)計(jì)工具



















    



文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/40413.html

相關(guān)文章

  • docker進(jìn)階nginx部署幾個(gè)重要點(diǎn)詳解以及開發(fā)流程---持續(xù)更新

    摘要:無論這個(gè)連接是外部主動(dòng)建立的,還是內(nèi)部建立的。協(xié)議有表示層數(shù)據(jù)的表示安全壓縮。在整個(gè)發(fā)展過程中的所有思想和著重點(diǎn)都以一種稱為的文檔格式存在。 部署基礎(chǔ)知識(shí)url:協(xié)議://網(wǎng)站地址:端口(/)路徑地址?參數(shù)eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服務(wù)器 80端口:找服務(wù)器上提供服務(wù)的應(yīng)用 nginx uri:/ab...

    KunMinX 評(píng)論0 收藏0
  • 后端知識(shí)拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞這個(gè)詞來自操作系統(tǒng)的線程進(jìn)程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語言現(xiàn)未來已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個(gè)月的業(yè)余時(shí)間用 Laravel 開發(fā)了一個(gè)項(xiàng)目,在此之前,除了去年換工作準(zhǔn)備面試時(shí),我并...

    Carl 評(píng)論0 收藏0
  • 后端知識(shí)拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞這個(gè)詞來自操作系統(tǒng)的線程進(jìn)程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語言現(xiàn)未來已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個(gè)月的業(yè)余時(shí)間用 Laravel 開發(fā)了一個(gè)項(xiàng)目,在此之前,除了去年換工作準(zhǔn)備面試時(shí),我并...

    CoderBear 評(píng)論0 收藏0
  • CI Weekly #4 | 不同規(guī)模的團(tuán)隊(duì),如何做好持續(xù)集成?

    摘要:王者榮耀項(xiàng)目組高級(jí)測試工程師工程師文化團(tuán)隊(duì)中的實(shí)踐本文不是一篇入門教程,而是從結(jié)合實(shí)際場景,闡述在團(tuán)隊(duì)協(xié)作中如何去好好地應(yīng)用。 CI Weekly 圍繞『 軟件工程效率提升』 進(jìn)行一系列技術(shù)內(nèi)容分享,包括國內(nèi)外持續(xù)集成、持續(xù)交付,持續(xù)部署、自動(dòng)化測試、 DevOps 等實(shí)踐教程、工具與資源,以及一些工程師文化相關(guān)的程序員 Tips 。同步于 flow.ci Blog、微信公眾號(hào)、官方微...

    jeffrey_up 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<