摘要:在這些部署工作完成之后,的配置需要更改為指向新的后端容器。這允許用戶為現(xiàn)有的并基于這些變化的服務生成配置文件。下面的教程會介紹如何自動生成運行博客平臺后端服務的配置文件。第步部署服務為簡單起見,我們打算使用中的官方鏡像。
Docker和Rancher讓大家能更輕易地部署和管理基于微服務的應用程序。然而,如果有些服務是依賴于其他動態(tài)服務的,那該如何管理它們的配置?你是否時常覺得,要是有方法能自動檢測后端服務的變化,并實現(xiàn)配置文件的動態(tài)更新就好了?本文給你答案。
前言Docker和Rancher讓大家能更輕易地部署和管理基于微服務的應用程序。然而,有一個關鍵的挑戰(zhàn)是,如果有些服務是依賴于其他動態(tài)服務的,那該如何管理它們的配置?
試想以下情形:您有多個運行Web應用程序的后端容器,和一些將所有的請求都代理到這些后端容器的nginx容器?,F(xiàn)在,你必須要部署一個新版本的Web應用程序,這意味著你需要構建和部署新版本的后端容器。在這些部署工作完成之后,nginx的配置需要更改為指向新的后端容器。那么,你該怎樣處理nginx呢?改變其配置,構建一個新的容器并部署它?此刻的你是不是會覺得,要是有方法能自動檢測后端服務的變化,并實現(xiàn)nginx的動態(tài)更新就好了?
這就是Rancher-Gen要閃亮登場的時刻!
Rancher-Gen是一個Python的工具,它能監(jiān)聽的Rancher服務的變化,并呈現(xiàn)一個用戶指定的Jinja2模板。這允許用戶為現(xiàn)有的、并基于這些變化的服務生成配置文件。另外,Rancher-Gen提供了一種機制,在模板呈現(xiàn)之后會運行通知命令。下面的教程會介紹如何自動生成運行ghost博客平臺后端服務的nginx配置文件 。
教程下面介紹的所有配置文件都可以在Rancher-Gen庫中的演示目錄下找到。
第1步 – 部署Ghost服務
為簡單起見,我們打算使用Docker hub中的官方ghost鏡像。因此,創(chuàng)建一個docker-compose.yml 文件,并添加以下的ghost服務:
ghost: image: ghost expose: - "2368"
現(xiàn)在,用Rancher Compose部署ghost服務:
$ 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步要設置鏡像啟動時運行的服務。第一個服務是nginx,它用/etc/servce/nginx文件運行。該文件的內容是:
#!/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文件的內容:
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步在鏡像中設置了運行命令“/sbin/my_init”并暴露端口80和443。
現(xiàn)在是時候構建鏡像了:
$ docker build -t="pitrho/nginx-rancher-gen-demo" .
第3步 – 創(chuàng)建并部署nginx服務
現(xiàn)在我們已有了nginx鏡像,就可以開始向我們在第1步中創(chuàng)建的docker-compose.yml文件中添加nginx服務了。
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傳遞附加命令行選項的 。你可以在Rancher-Gen文檔中查看這些選項的說明。
現(xiàn)在運行rancher-compose來啟動nginx服務:
$ rancher-compose -p demo up -d nginx
此時,ghost和nginx服務都啟動并運行了:
而且,將瀏覽器指向運行中的nginx容器中主機的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; } }
正如預期的那樣,這是在運行rancher-gen命令時的基于指定模板的渲染輸出。此時,如果你要升級ghost服務,并再次查看渲染文件,你會發(fā)現(xiàn)上游部分下的IP地址已經(jīng)改變了。
結論總結來說,Rancher-Gen是一個自動化工具,可用于生成文件,并運行通知命令。借助Jinja2的模板表現(xiàn)力,及其整潔的命令行界面,Rancher-Gen可用于生成大多數(shù)配置文件,并自動解決那些對大多數(shù)系統(tǒng)管理員和軟件工程師而言繁瑣和重復的工作。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/28015.html
摘要:目前最常用的軟件反向代理服務器有和?;趯崿F(xiàn)動態(tài)代理為了實現(xiàn)動態(tài)代理方案,需要在反向代理服務器中增加定制的功能。同時,由于反向代理服務器需要處理大量的代理請求,因此會頻繁的讀取反向代理配置數(shù)據(jù)。 基于 Nginx 的動態(tài)代理 作者:趙波日期:2016 年 8 月 4 日 在實際應用中,遇到了這樣一個場景: 已有一個手機 APP 客戶端,需要在該 APP 客戶端中實現(xiàn)通過 Web 的形式...
摘要:即在內添加版本號的解決方案這樣的做法的確可以達到清緩存的目的。重新渲染而代理又緩存了的,如果在更新的話就只能繼續(xù)改版本號。 最近項目中出現(xiàn)修改js,線上并沒有實時更新而是使用的緩存中的js。 當然如果你的頁面是單頁面應用的話,解決方案就很簡單了,修改index.js后面的版本號就好了。 mudel.export = { //html文件名 不能重名-。- a:{ ...
閱讀 2224·2021-11-12 10:36
閱讀 2211·2021-09-03 10:41
閱讀 2879·2021-08-19 10:57
閱讀 1349·2021-08-17 10:14
閱讀 1542·2019-08-30 15:53
閱讀 1265·2019-08-30 15:43
閱讀 1028·2019-08-30 13:16
閱讀 3060·2019-08-29 16:56