摘要:在這些部署工作完成之后,的配置需要更改為指向新的后端容器。這允許用戶為現(xiàn)有的并基于這些變化的服務(wù)生成配置文件。下面的教程會介紹如何自動生成運(yùn)行博客平臺后端服務(wù)的配置文件。第步部署服務(wù)為簡單起見,我們打算使用中的官方鏡像。
Docker和Rancher讓大家能更輕易地部署和管理基于微服務(wù)的應(yīng)用程序。然而,如果有些服務(wù)是依賴于其他動態(tài)服務(wù)的,那該如何管理它們的配置?你是否時常覺得,要是有方法能自動檢測后端服務(wù)的變化,并實(shí)現(xiàn)配置文件的動態(tài)更新就好了?本文給你答案。
前言Docker和Rancher讓大家能更輕易地部署和管理基于微服務(wù)的應(yīng)用程序。然而,有一個關(guān)鍵的挑戰(zhàn)是,如果有些服務(wù)是依賴于其他動態(tài)服務(wù)的,那該如何管理它們的配置?
試想以下情形:您有多個運(yùn)行Web應(yīng)用程序的后端容器,和一些將所有的請求都代理到這些后端容器的nginx容器。現(xiàn)在,你必須要部署一個新版本的Web應(yīng)用程序,這意味著你需要構(gòu)建和部署新版本的后端容器。在這些部署工作完成之后,nginx的配置需要更改為指向新的后端容器。那么,你該怎樣處理nginx呢?改變其配置,構(gòu)建一個新的容器并部署它?此刻的你是不是會覺得,要是有方法能自動檢測后端服務(wù)的變化,并實(shí)現(xiàn)nginx的動態(tài)更新就好了?
這就是Rancher-Gen要閃亮登場的時刻!
Rancher-Gen是一個Python的工具,它能監(jiān)聽的Rancher服務(wù)的變化,并呈現(xiàn)一個用戶指定的Jinja2模板。這允許用戶為現(xiàn)有的、并基于這些變化的服務(wù)生成配置文件。另外,Rancher-Gen提供了一種機(jī)制,在模板呈現(xiàn)之后會運(yùn)行通知命令。下面的教程會介紹如何自動生成運(yùn)行g(shù)host博客平臺后端服務(wù)的nginx配置文件 。
教程下面介紹的所有配置文件都可以在Rancher-Gen庫中的演示目錄下找到。
第1步 – 部署Ghost服務(wù)
為簡單起見,我們打算使用Docker hub中的官方ghost鏡像。因此,創(chuàng)建一個docker-compose.yml 文件,并添加以下的ghost服務(wù):
ghost: image: ghost expose: - "2368"
現(xiàn)在,用Rancher Compose部署ghost服務(wù):
$ rancher-compose -p demo up -d ghost
第2步 – 用Rancher-Gen創(chuàng)建nginx鏡像
下面是用以搭建nginx鏡像的Dockerfile:
FROM phusion/baseimage:0.9.17 MAINTAINER pitrho # Step 1 - Install nginx and python ENV DEBIAN_FRONTEND noninteractive RUN apt-add-repository -y ppa:nginx/stable && apt-get update && apt-get install -y python-software-properties wget nginx python-dev python-pip libev4 libev-dev expect-dev && rm -rf /var/lib/apt/lists/* && chown -R www-data:www-data /var/lib/nginx && apt-get clean # Step 2 - Install rancher-gen ENV RANCHER_GEN_VERSION 0.1.2 RUN pip install rancher-gen==$RANCHER_GEN_VERSION # Step 3 - Define services RUN mkdir /etc/service/nginx /etc/service/rancher_gen /nginxconf COPY nginx_run /etc/service/nginx/run COPY rancher-gen_run /etc/service/rancher_gen/run COPY default.j2 /nginxconf # Step 4 - Use baseimage-docker"s init system. CMD ["/sbin/my_init"] # Step 5 - Expose ports. EXPOSE 80 EXPOSE 443
讓我們來一步一步拆解Dockerfile。步驟1和2不言自明:只需安裝nginx、Python和Rancher-Gen。
第3步要設(shè)置鏡像啟動時運(yùn)行的服務(wù)。第一個服務(wù)是nginx,它用/etc/servce/nginx文件運(yùn)行。該文件的內(nèi)容是:
#!/bin/bash rancher-gen --host $RANCHER_GEN_HOST --port $RANCHER_GEN_PORT --access-key $RANCHER_GEN_ACCESS_KEY --secret-key $RANCHER_GEN_SECRET_KEY --project-id $RANCHER_GEN_PROJECT_ID $RANCHER_GEN_OPTIONS --notify "service nginx reload" /nginxconf/default.j2 /etc/nginx/sites-available/default
注意一下在通知步驟之后,我們是怎樣通過名為 /nginxconf/default.j2 和/etc/nginx/sites-available/default 的這兩個路徑的。前者是Jinjia2模板,后者是渲染模板的輸出位置。以下是在default.j2文件的內(nèi)容:
upstream ghost.backend { {% for container in containers %} {% if container["state"] == "running" %} server {{container["primaryIpAddress"]}}:2368; {% endif %} {% endfor %} } server { listen 80; server_name ghost_demo; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://ghost.backend; proxy_redirect off; } }
Dockerfile的第4步和第5步在鏡像中設(shè)置了運(yùn)行命令“/sbin/my_init”并暴露端口80和443。
現(xiàn)在是時候構(gòu)建鏡像了:
$ docker build -t="pitrho/nginx-rancher-gen-demo" .
第3步 – 創(chuàng)建并部署nginx服務(wù)
現(xiàn)在我們已有了nginx鏡像,就可以開始向我們在第1步中創(chuàng)建的docker-compose.yml文件中添加nginx服務(wù)了。
ghost: image: ghost expose: - "2368" nginx: image: pitrho/nginx-rancher-gen-demo:latest ports: - 80:80 links: - ghost environment: NGINX_RUN_TYPE: rancher-gen RANCHER_GEN_HOST: $RANCHER_HOST RANCHER_GEN_PORT: $RANCHER_PORT RANCHER_GEN_ACCESS_KEY: $RANCHER_ACCESS_KEY RANCHER_GEN_SECRET_KEY: $RANCHER_SECRET_KEY RANCHER_GEN_PROJECT_ID: $RANCHER_GEN_PROJECT_ID RANCHER_GEN_OPTIONS: --stack demo --service ghost
上述可變的RANCHER_GEN_OPTIONS環(huán)境是用于向Rancher-Gen傳遞附加命令行選項(xiàng)的 。你可以在Rancher-Gen文檔中查看這些選項(xiàng)的說明。
現(xiàn)在運(yùn)行rancher-compose來啟動nginx服務(wù):
$ rancher-compose -p demo up -d nginx
此時,ghost和nginx服務(wù)都啟動并運(yùn)行了:
而且,將瀏覽器指向運(yùn)行中的nginx容器中主機(jī)的IP地址,你就可以訪問ghost了:
如果你使用shell來檢查nginx容器,并打開渲染的文件 /etc/nginx/sites-enabled/default,你將會看到以下的輸出:
upstream ghost.backend { server 10.42.136.216:2368; } server { listen 80; server_name ghost_demo; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://ghost.backend; proxy_redirect off; } }
正如預(yù)期的那樣,這是在運(yùn)行rancher-gen命令時的基于指定模板的渲染輸出。此時,如果你要升級ghost服務(wù),并再次查看渲染文件,你會發(fā)現(xiàn)上游部分下的IP地址已經(jīng)改變了。
結(jié)論總結(jié)來說,Rancher-Gen是一個自動化工具,可用于生成文件,并運(yùn)行通知命令。借助Jinja2的模板表現(xiàn)力,及其整潔的命令行界面,Rancher-Gen可用于生成大多數(shù)配置文件,并自動解決那些對大多數(shù)系統(tǒng)管理員和軟件工程師而言繁瑣和重復(fù)的工作。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28015.html
摘要:目前最常用的軟件反向代理服務(wù)器有和。基于實(shí)現(xiàn)動態(tài)代理為了實(shí)現(xiàn)動態(tài)代理方案,需要在反向代理服務(wù)器中增加定制的功能。同時,由于反向代理服務(wù)器需要處理大量的代理請求,因此會頻繁的讀取反向代理配置數(shù)據(jù)。 基于 Nginx 的動態(tài)代理 作者:趙波日期:2016 年 8 月 4 日 在實(shí)際應(yīng)用中,遇到了這樣一個場景: 已有一個手機(jī) APP 客戶端,需要在該 APP 客戶端中實(shí)現(xiàn)通過 Web 的形式...
摘要:即在內(nèi)添加版本號的解決方案這樣的做法的確可以達(dá)到清緩存的目的。重新渲染而代理又緩存了的,如果在更新的話就只能繼續(xù)改版本號。 最近項(xiàng)目中出現(xiàn)修改js,線上并沒有實(shí)時更新而是使用的緩存中的js。 當(dāng)然如果你的頁面是單頁面應(yīng)用的話,解決方案就很簡單了,修改index.js后面的版本號就好了。 mudel.export = { //html文件名 不能重名-。- a:{ ...
閱讀 2155·2021-11-12 10:36
閱讀 2147·2021-09-03 10:41
閱讀 2761·2021-08-19 10:57
閱讀 1230·2021-08-17 10:14
閱讀 1487·2019-08-30 15:53
閱讀 1210·2019-08-30 15:43
閱讀 975·2019-08-30 13:16
閱讀 2983·2019-08-29 16:56