Thứ hai, 27/10/2014 | 00:00 GMT+7

Cách sử dụng tệp bản đồ Salt Cloud để triển khai server ứng dụng và reverse-proxy Nginx

Bạn đã viết ứng dụng của bạn và bây giờ bạn cần triển khai nó. Bạn có thể tạo môi trường production và cài đặt ứng dụng của bạn trên máy ảo, nhưng làm cách nào để mở rộng quy mô khi nó trở nên phổ biến? Làm thế nào để bạn tung ra các version mới? Còn về cân bằng tải thì sao? Và, quan trọng nhất, làm thế nào bạn có thể chắc chắn rằng cấu hình là chính xác? Ta có thể tự động hóa tất cả những điều này để tiết kiệm rất nhiều thời gian cho chính mình.

Trong hướng dẫn này, ta sẽ chỉ cho bạn cách xác định ứng dụng của bạn trong file bản đồ Salt Cloud, bao gồm việc sử dụng các hạt Salt tùy chỉnh để gán role cho server của bạn và cấu hình động Reverse Proxy .

Vào cuối hướng dẫn này, bạn sẽ có hai server ứng dụng cơ bản, một Reverse Proxy Nginx với cấu hình được tạo động và khả năng mở rộng ứng dụng của bạn trong vài phút.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Một server CentOS 7 1 GB. Tất cả các lệnh trong hướng dẫn này sẽ được miễn là root, vì vậy bạn không cần tạo user không phải root có quyền sudo .

  • Khóa SSH trên Server cho user root (tức là cặp khóa mới được tạo trên Server). Thêm SSH key này trong console DigitalOcean để bạn có thể sử dụng nó để đăng nhập vào các server DigitalOcean khác từ Server chính. Bạn có thể sử dụng hướng dẫn Cách sử dụng SSH key với DigitalOcean Server để được hướng dẫn.

    Ghi lại tên bạn gán cho khóa trong console DigitalOcean. Trong hướng dẫn này, ta đang sử dụng tên Salt-master-root-key . Bạn cũng nên ghi chú vị trí private key ; theo mặc định, đó là /root/.ssh/id_rsa .

  • Mã thông báo truy cập cá nhân mà bạn có thể tạo theo hướng dẫn trong bước này của Cách sử dụng DigitalOcean APIv2 . Đảm bảo đặt phạm vi đọc và ghi.

Bước 1 - Cài đặt Salt và Salt Cloud

Để bắt đầu, bạn cần phải cài đặt và cấu hình Salt Cloud trên server của bạn . Đối với hướng dẫn này, ta sẽ chỉ sử dụng script Salt bootstrap.

Đầu tiên, khắc script Salt bootstrap để cài đặt Salt.

  • wget -O install_salt.sh https://bootstrap.saltstack.com

Chạy tập lệnh Salt bootstrap. Ta sử dụng cờ -M để cài đặt salt-master .

  • sh install_salt.sh -M

Trong khi cơ sở mã Salt Cloud đã được hợp nhất vào dự án Salt cốt lõi, nó vẫn được đóng gói riêng cho CentOS. May mắn là tập lệnh install_salt cấu hình repository cho ta , vì vậy ta có thể chỉ cần cài đặt salt-cloud với yum:

  • yum install salt-cloud

Bây giờ ta có thể kiểm tra version của Salt Cloud để xác nhận cài đặt thành công:

  • salt-cloud --version

Bạn sẽ thấy kết quả như thế này:

muối- cloud – kết quả chuyển đổi
salt-cloud 2015.5.3 (Lithium) 

Lưu ý Salt đang trong chu kỳ phát hành luân phiên, vì vậy version của bạn có thể hơi khác so với ở trên.

Bước 2 - Cấu hình cloud muối

Trong phần này, ta sẽ cấu hình Salt Cloud để kết nối với DigitalOcean và xác định một số cấu hình cho Server của ta .

Cấu hình file nhà cung cấp DigitalOcean

Trong Salt Cloud, tệp trình cung cấp là nơi bạn xác định nơi các máy ảo mới sẽ được tạo. Nhà cung cấp được xác định trong folder /etc/salt/cloud.providers.d

Tạo và mở file nhà cung cấp DigitalOcean bằng nano hoặc editor yêu thích của bạn.

  • nano /etc/salt/cloud.providers.d/digital_ocean.conf

Chèn văn bản bên dưới, thay thế các biến có màu đỏ bằng của bạn - cụ thể là IP server và mã thông báo truy cập, cũng như tên SSH key và file nếu bạn đã tùy chỉnh chúng.

/etc/salt/cloud.providers.d/digital_ocean.conf
### /etc/salt/cloud.providers.d/digital_ocean.conf ### ###################################################### do:   provider: digital_ocean   minion:                           master: your_server_ip    # DigitalOcean Access Token   personal_access_token: your_access_token    # This is the name of your SSH key in your Digital Ocean account   # as it appears in the control panel.             ssh_key_name: salt-master-root-key     # This is the path on disk to the private key for your Digital Ocean account                                                                       ssh_key_file: /root/.ssh/id_rsa 

Bạn cần khóa các quyền trên file SSH key của bạn . Nếu không, SSH sẽ từ chối sử dụng nó. Giả sử vị trí của bạn ở vị trí mặc định, /root/.ssh/id_rsa , bạn có thể thực hiện việc này với:

  • chmod 600 /root/.ssh/id_rsa

Cấu hình cấu hình cho server có thể triển khai

Trong Salt Cloud, hồ sơ là các mô tả VM riêng lẻ được liên kết với một nhà cung cấp (ví dụ: “Máy ảo Ubuntu 512 MB trên DigitalOcean”). Chúng được định nghĩa trong folder /etc/salt/cloud.profiles.d .

Tạo và mở một file profile .

  • nano /etc/salt/cloud.profiles.d/digital_ocean.conf

Dán phần sau vào file . Không cần sửa đổi:

/etc/salt/cloud.profiles.d/digital_ocean.conf
### /etc/salt/cloud.profiles.d/digital_ocean.conf ### #####################################################  ubuntu_512MB_ny3:   provider: do   image: ubuntu-14-04-x64   size: 512MB   location: nyc3   private_networking: True  ubuntu_1GB_ny3:   provider: do   image: ubuntu-14-04-x64   size: 1GB   location: nyc3   private_networking: True 

Lưu và đóng file . Tệp này xác định hai cấu hình:

  • Máy ảo Ubuntu 14.04 với bộ nhớ 512 MB, được triển khai ở khu vực 3 New York.
  • Máy ảo Ubuntu 14.04 với bộ nhớ 1 GB, được triển khai ở khu vực 3 New York.

Nếu bạn muốn sử dụng một hình ảnh không phải Ubuntu 14.04, bạn có thể sử dụng Salt Cloud để liệt kê tất cả các tên hình ảnh có sẵn trên DigitalOcean bằng lệnh sau:

  • salt-cloud --list-images do

Điều này sẽ hiển thị tất cả các hình ảnh DigitalOcean tiêu chuẩn, cũng như hình ảnh tùy chỉnh mà bạn đã lưu trên account của bạn bằng công cụ chụp nhanh. Bạn có thể thay thế tên hình ảnh hoặc khu vực mà ta đã sử dụng trong file trình cung cấp bằng một tên hình ảnh khác từ danh sách này. Nếu bạn làm vậy, hãy đảm bảo sử dụng trường slug từ kết quả này trong cài đặt hình ảnh trong file profile .

Kiểm tra cấu hình của bạn bằng một truy vấn nhanh.

  • salt-cloud -Q

Bạn sẽ thấy thông tin như sau.

Ví dụ về kết xuất cloud muối -Q
[INFO    ] salt-cloud starting do:     ----------     digital_ocean:         ----------         centos-salt:             ----------             id:                 2806501             image_id:                 6372108             public_ips:                 192.241.247.229             size_id:                 63             state:                 active 

Điều này nghĩa là Salt Cloud đang nói chuyện với account DigitalOcean của bạn và bạn có hai cấu hình cơ bản.

Bước 3 - Viết một file bản đồ đơn giản

Tệp bản đồ là file YAML liệt kê các cấu hình và số lượng server bạn muốn tạo. Ta sẽ bắt đầu với một file bản đồ đơn giản, sau đó xây dựng trên nó trong phần tiếp theo.

Sử dụng các cấu hình trên, giả sử bạn muốn hai server ứng dụng 1 GB được hỗ trợ bởi một Reverse Proxy 512 MB duy nhất. Ta sẽ tạo một /etc/salt/cloud.maps.d/do-app-with-rproxy.map có tên /etc/salt/cloud.maps.d/do-app-with-rproxy.map và xác định ứng dụng.

Đầu tiên, hãy tạo file :

  • nano /etc/salt/cloud.maps.d/do-app-with-rproxy.map

Chèn văn bản sau. Không cần sửa đổi:

/etc/salt/cloud.maps.d/do-app-with-rproxy.map
### /etc/salt/cloud.maps.d/do-app-with-rproxy.map #### ###################################################### ubuntu_512MB_ny3:   - nginx-rproxy  ubuntu_1GB_ny3:   - appserver-01   - appserver-02 

Đó là nó! Điều đó đơn giản như một Tệp Bản đồ. Tiếp tục và triển khai các server đó với:

  • salt-cloud -m /etc/salt/cloud.maps.d/do-app-with-rproxy.map

Sau khi lệnh kết thúc, hãy xác nhận thành công bằng một cú ping nhanh:

  • salt '*' test.ping

Bạn sẽ thấy như sau:

[label salt '*' test.ping appserver-01:     True appserver-02:     True nginx-rproxy:     True 

Khi bạn đã tạo thành công các máy ảo trong file bản đồ của bạn , việc xóa chúng dễ dàng như sau:

  • salt-cloud -d -m /etc/salt/cloud.maps.d/do-app-with-rproxy.map

Tuy nhiên, hãy đảm bảo sử dụng lệnh đó một cách thận trọng! Nó sẽ xóa tất cả các máy ảo được chỉ định trong file bản đồ đó.

Bước 4 - Viết file bản đồ thực tế hơn

Tệp bản đồ đó hoạt động tốt, nhưng ngay cả một tập lệnh shell cũng có thể tạo ra một tập hợp các máy ảo. Những gì ta cần là xác định dấu ấn của ứng dụng của ta . Hãy quay lại file bản đồ của ta và thêm một vài thứ nữa; mở lại file bản đồ.

  • nano /etc/salt/cloud.maps.d/do-app-with-rproxy.map

Xóa nội dung trước đó của file và đặt nội dung sau vào đó. Không cần sửa đổi:

/etc/salt/cloud.maps.d/do-app-with-rproxy.map
### /etc/salt/cloud.maps.d/do-app-with-rproxy.map ### ##################################################### ubuntu_512MB_ny3:   - nginx-rproxy:       minion:         mine_functions:           network.ip_addrs:             interface: eth0         grains:           roles: rproxy ubuntu_1GB_ny3:   - appserver-01:       minion:         mine_functions:           network.ip_addrs:             interface: eth0         grains:           roles: appserver   - appserver-02:       minion:         mine_functions:           network.ip_addrs:             interface: eth0         grains:           roles: appserver 

Bây giờ ta đang đến một nơi nào đó! Có vẻ như rất nhiều nhưng ta chỉ thêm hai điều. Hãy xem xét hai phần bổ sung: phần mine_functions và phần grains .

Ta đã yêu cầu Salt Cloud sửa đổi cấu hình Salt Minion cho các máy ảo này và thêm một số loại ngũ cốc tùy chỉnh. Cụ thể, các loại ngũ cốc cung cấp cho điều ngược lại ủy quyền VM các rproxy role và cung cấp cho các server ứng dụng các appserver role . Điều này sẽ có ích khi ta cần cấu hình động Reverse Proxy .

mine_functions cũng sẽ được thêm vào cấu hình Salt Minion. Nó hướng dẫn Minion gửi địa chỉ IP được tìm thấy trên eth0 trở lại Salt Master để được lưu trữ trong mỏ Muối . Điều này nghĩa là Salt Master sẽ tự động biết IP của Server mới được tạo mà ta không cần phải cấu hình nó. Ta sẽ sử dụng điều này trong phần tiếp theo.

Bước 5 - Xác định Reverse Proxy

Bây giờ ta có một nhiệm vụ chung trước mắt: cài đặt web server Reverse Proxy và cấu hình nó. Đối với hướng dẫn này, ta sẽ sử dụng Nginx làm Reverse Proxy .

Viết trạng thái muối Nginx

Đã đến lúc ta làm bẩn tay và viết một vài trạng thái Salt. Đầu tiên, hãy đặt vị trí cây trạng thái Salt mặc định:

  • mkdir /srv/salt

Điều hướng đến folder đó và tạo một folder khác chỉ dành cho nginx:

  • cd /srv/salt
  • mkdir /srv/salt/nginx

Đi vào folder đó và sử dụng editor yêu thích của bạn, tạo một file mới có tên rproxy.sls :

  • cd /srv/salt/nginx
  • nano /srv/salt/nginx/rproxy.sls

Đặt phần sau vào file đó. Không cần sửa đổi:

/srv/salt/nginx/rproxy.sls
### /srv/salt/nginx/rproxy.sls ### ##################################  ### Install Nginx and configure it as a reverse proxy, pulling the IPs of ### the app servers from the Salt Mine.  nginx-rproxy:   # Install Nginx   pkg:     - installed     - name: nginx       # Place a customized Nginx config file   file:     - managed     - source: salt://nginx/files/awesome-app.conf.jin     - name: /etc/nginx/conf.d/awesome-app.conf     - template: jinja     - require:       - pkg: nginx-rproxy   # Ensure Nginx is always running.   # Restart Nginx if the config file changes.   service:     - running     - enable: True     - name: nginx     - require:       - pkg: nginx-rproxy     - watch:       - file: nginx-rproxy   # Restart Nginx for the initial installation.   cmd:     - run     - name: service nginx restart     - require:       - file: nginx-rproxy 

Trạng thái này thực hiện như sau:

  • Cài đặt Nginx.
  • Đặt file cấu hình tùy chỉnh của ta vào /etc/nginx/conf.d/awesome-app.conf .
  • Đảm bảo Nginx đang chạy.

Trạng thái Salt của ta chỉ cần cài đặt Nginx và thả một file cấu hình; nội dung thực sự thú vị nằm trong cấu hình.

Viết file cấu hình Reverse Proxy Nginx

Hãy tạo thêm một folder cho file cấu hình của ta :

  • mkdir /srv/salt/nginx/files
  • cd /srv/salt/nginx/files

Và mở file cấu hình:

  • nano /srv/salt/nginx/files/awesome-app.conf.jin

Đặt phần sau vào file cấu hình. Không cần sửa đổi, trừ khi bạn không sử dụng mạng riêng; trong trường hợp đó, hãy thay đổi 1 thành 0 như đã lưu ý trong dòng:

/srv/salt/nginx/files/awesome-app.conf.jin
### /srv/salt/nginx/files/awesome-app.conf.jin ### ##################################################  ### Configuration file for Nginx to act as a  ### reverse proxy for an app farm.  # Define the app servers that we're in front of. upstream awesome-app {     {% for server, addrs in salt['mine.get']('roles:appserver', 'network.ip_addrs', expr_form='grain').items() %}     server {{ addrs[0] }}:1337;     {% endfor %} }  # Forward all port 80 http traffic to our app farm, defined above as 'awesome-app'. server {     listen       80;     server_name  {{ salt['network.ip_addrs']()[1] }};  # <-- change the '1' to '0' if you're not using                                                         #     DigitalOcean's private networking.      access_log  /var/log/nginx/awesome-app.access.log;     error_log  /var/log/nginx/awesome-app.error.log;      ## forward request to awesome-app ##     location / {      proxy_pass  http://awesome-app;      proxy_set_header        Host            $host;      proxy_set_header        X-Real-IP       $remote_addr;      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;    } } 

Ta sử dụng phần mở rộng .jin để tự cho mình biết rằng file chứa Jinja templating . Jinja templating cho phép ta đưa một lượng nhỏ logic vào các file văn bản của bạn để ta có thể tạo động các chi tiết cấu hình.

Tệp cấu hình này hướng dẫn Nginx nhận tất cả truy cập HTTP cổng 80 và chuyển tiếp nó đến trang trại ứng dụng của ta . Nó có hai phần: phần ngược dòng (trang trại ứng dụng của ta ) và cấu hình để hoạt động như một proxy giữa user và trang trại ứng dụng của ta .

Hãy nói về việc ngược dòng. Ngược dòng bình thường, không theo khuôn mẫu chỉ định một tập hợp các IP. Tuy nhiên, ta không biết địa chỉ IP của các tay sai của ta sẽ là gì cho đến khi chúng tồn tại và ta không chỉnh sửa file cấu hình theo cách thủ công. (Nếu không, sẽ không có lý do gì để sử dụng Salt!)

Có nhớ các đường mine_function trong file bản đồ của ta không? Các tay sai đang đưa IP của chúng cho Salt Master để cất giữ chúng chỉ vì một sự kiện xảy ra như vậy. Hãy xem xét dòng Jinja đó kỹ hơn một chút:

Jinja trích đoạn
{% for server, addrs in salt['mine.get']('roles:appserver', 'network.ip_addrs', expr_form='grain').items() %} 

Đây là vòng lặp for trong Jinja, chạy một hàm Salt tùy ý. Trong trường hợp này, nó đang chạy mine.get . Các thông số là:

  • roles:appserver - Điều này cho biết chỉ lấy thông tin chi tiết từ những tay sai có role “appserver”.
  • network.ip_addrs - Đây là dữ liệu ta muốn lấy ra khỏi mỏ. Ta cũng chỉ định điều này trong file bản đồ của ta .
  • expr_form='grain' - Điều này cho Salt biết rằng ta đang nhắm đến vào tay sai của bạn dựa trên ngũ cốc của chúng. Thông tin thêm về đối sánh theo hạt tại tài liệu nhắm đến Saltstack .

Sau vòng lặp này, biến {{addrs}} chứa danh sách các địa chỉ IP (ngay cả khi đó chỉ là một địa chỉ). Vì là danh sách nên ta phải lấy phần tử đầu tiên bằng [0] .

Ngược dòng là vậy. Đối với tên server :

server_name  {{ salt['network.ip_addrs']()[0] }}; 

Đây là thủ thuật tương tự như lệnh gọi Salt mine (gọi một hàm Salt trong Jinja). Nó chỉ đơn giản hơn. Nó đang gọi network.ip_addrs và lấy phần tử đầu tiên của danh sách trả về. Điều này cũng cho phép ta tránh phải chỉnh sửa file của bạn theo cách thủ công.

Bước 6 - Xác định trang trại ứng dụng

Một Reverse Proxy không có nhiều ý nghĩa nếu nó không có ứng dụng phía sau. Hãy tạo một ứng dụng Node.js nhỏ chỉ báo cáo IP của server mà nó đang bật (để ta có thể xác nhận ta đang tiếp cận cả hai máy).

Tạo một folder mới có tên awesome-app và chuyển đến đó.

  • mkdir -p /srv/salt/awesome-app
  • cd /srv/salt/awesome-app

Tạo file trạng thái ứng dụng mới có tên app.sls .

  • nano /srv/salt/awesome-app/app.sls

Đặt phần sau vào file . Không cần sửa đổi:

/srv/salt/awesome-app/app.sls
### /srv/salt/awesome-app/app.sls ### #####################################  ### Install Nodejs and start a simple ### web application that reports the server IP.  install-app:   # Install prerequisites   pkg:     - installed     - names:        - node       - npm       - nodejs-legacy  # workaround for Debian systems   # Place our Node code   file:      - managed     - source: salt://awesome-app/files/app.js     - name: /root/app.js   # Install the package called 'forever'   cmd:     - run     - name: npm install forever -g     - require:       - pkg: install-app  run-app:   # Use 'forever' to start the server   cmd:     - run     - name: forever start app.js     - cwd: /root 

Tệp trạng thái này thực hiện như sau:

  • Cài đặt các gói nodejs , npmnodejs-legacy .
  • Thêm file JavaScript sẽ là ứng dụng đơn giản của ta .
  • Sử dụng NPM để cài đặt Forever .
  • Chạy ứng dụng.

Bây giờ tạo mã ứng dụng (nhỏ):

  • mkdir /srv/salt/awesome-app/files
  • cd /srv/salt/awesome-app/files

Tạo file :

  • nano /srv/salt/awesome-app/files/app.js

Đặt những thứ sau vào đó. Không cần sửa đổi:

/srv/salt/awesome-app/files/app.js
/* /srv/salt/awesome-app/files/app.js     A simple Node.js web application that    reports the server's IP.    Shamefully stolen from StackOverflow:    http://stackoverflow.com/questions/10750303/how-can-i-get-the-local-ip-address-in-node-js */  var os = require('os'); var http = require('http');  http.createServer(function (req, res) {   var interfaces = os.networkInterfaces();   var addresses = [];   for (k in interfaces) {       for (k2 in interfaces[k]) {           var address = interfaces[k][k2];           if (address.family == 'IPv4' && !address.internal) {               addresses.push(address.address)           }       }   }    res.writeHead(200, {'Content-Type': 'text/plain'});   res.end(JSON.stringify(addresses)); }).listen(1337, '0.0.0.0'); console.log('Server listening on port 1337');  

Đây là một server Node.js đơn giản thực hiện một việc: chấp nhận các yêu cầu HTTP trên cổng 1337 và phản hồi bằng các IP của server .

Đến đây, bạn sẽ có cấu trúc file giống như sau:

Cấu trúc file
/srv/salt          ├── awesome-app          │   ├── app.sls          │   └── files          │       └── app.js          └── nginx              ├── rproxy.sls              └── files                  └── awesome-app.conf.jin 

Bước 7 - Triển khai ứng dụng

Tất cả những gì còn lại là triển khai ứng dụng.

Triển khai server với cloud muối

Chạy cùng một lệnh triển khai trước đó, lệnh này bây giờ sẽ sử dụng tất cả các cấu hình mà ta đã thực hiện.

  • salt-cloud -m /etc/salt/cloud.maps.d/do-app-with-rproxy.map

Chờ cho Salt Cloud hoàn thành; Việc này sẽ tốn một lúc. Khi nó hoạt động trở lại, hãy xác nhận việc triển khai thành công bằng cách ping các server ứng dụng:

  • salt -G 'roles:appserver' test.ping

Bạn nên thấy:

Đầu ra ping của server ứng dụng
appserver-02:     True appserver-01:     True 

Ping Reverse Proxy :

  • salt -G 'roles:rproxy' test.ping

Bạn nên thấy:

Đầu ra ping Reverse Proxy
nginx-rproxy:     True 

Khi bạn đã có máy ảo của bạn , đã đến lúc để chúng hoạt động.

Xây dựng ứng dụng

Tiếp theo, đưa ra các lệnh Salt để tự động xây dựng trang trại ứng dụng và Reverse Proxy .

Xây dựng trang trại ứng dụng:

  • salt -G 'roles:appserver' state.sls awesome-app.app

Sẽ có một lượng kết quả hợp lý, nhưng nó phải kết thúc bằng những điều sau:

Summary ------------ Succeeded: 6 (changed=6) Failed:    0 ------------ Total states run:     6  

Xây dựng Reverse Proxy :

  • salt -G 'roles:rproxy' state.sls nginx.rproxy

, sẽ có một lượng kết quả hợp lý, kết thúc bằng những điều sau:

Summary ------------ Succeeded: 4 (changed=4) Failed:    0 ------------ Total states run:     4  

Vậy điều gì vừa xảy ra ở đây?

Lệnh đầu tiên (lệnh có server ứng dụng) lấy trạng thái Salt mà ta đã viết trước đó và thực thi nó trên hai server ứng dụng. Điều này dẫn đến hai máy có cấu hình giống hệt nhau chạy các version mã giống hệt nhau.

Lệnh thứ hai ( reverse-proxy ) đã thực thi trạng thái Salt mà ta đã viết cho Nginx. Nó đã cài đặt Nginx và file cấu hình, tự động điền các IP của trang trại ứng dụng của ta vào file cấu hình.

Khi các Salt đó chạy hoàn tất, bạn có thể kiểm tra để xác nhận việc triển khai thành công. Tìm IP của Reverse Proxy của bạn:

  • salt -G 'roles:rproxy' network.ip_addrs

Bạn có thể lấy lại hai IP nếu bạn đang sử dụng mạng riêng tư trên Server của bạn .

Cắm IP công cộng vào trình duyệt của bạn và truy cập trang web! Nhấn refresh một vài lần để xác nhận Nginx thực sự đang ủy quyền giữa hai server ứng dụng bạn đã tạo. Bạn sẽ thấy các IP thay đổi, xác nhận bạn thực sự đang kết nối với nhiều server ứng dụng.

Nếu bạn nhận được cùng một IP mặc dù đã làm mới, thì có thể là do trình duyệt lưu vào bộ nhớ đệm. Thay vào đó, bạn có thể thử sử dụng curl để cho thấy rằng Nginx đang ủy quyền giữa các server ứng dụng của bạn. Chạy lệnh này vài lần và quan sát kết quả :

  • curl http://ip-of-nginx-rproxy

Ta có thể thực hiện thêm vài bước này và tự động hóa hoàn toàn việc triển khai ứng dụng thông qua OverState . Điều này sẽ cho phép ta tạo một lệnh duy nhất để yêu cầu Salt xây dựng các server ứng dụng trước khi chuyển sang xây dựng Reverse Proxy , đảm bảo thứ tự của quá trình xây dựng của ta .

Bước 8 - Mở rộng quy mô (Tùy chọn)

Mục đích của việc sử dụng Salt là tự động hóa quá trình xây dựng của bạn; điểm của việc sử dụng Salt Cloud và các file bản đồ là dễ dàng mở rộng quy mô triển khai của bạn. Nếu bạn muốn thêm nhiều server ứng dụng hơn (giả sử, hai server nữa) vào triển khai của bạn , bạn sẽ cập nhật file bản đồ của bạn để trông giống như sau:

/etc/salt/cloud.maps.d/do-app-with-rproxy.map
### /etc/salt/cloud.maps.d/do-app-with-rproxy.map ### ##################################################### ubuntu_512MB_ny3:   - nginx-rproxy:       minion:         mine_functions:           network.ip_addrs:             interface: eth0         grains:           roles: rproxy ubuntu_1GB_ny3: - appserver-01:     minion:       mine_functions:         network.ip_addrs:             interface: eth0       grains:         roles: appserver - appserver-02:     minion:       mine_functions:         network.ip_addrs:             interface: eth0       grains:         roles: appserver - appserver-03:     minion:       mine_functions:         network.ip_addrs:             interface: eth0       grains:         roles: appserver - appserver-04:     minion:       mine_functions:         network.ip_addrs:             interface: eth0       grains:         roles: appserver         

Sau khi thực hiện cập nhật đó, bạn sẽ chạy lại lệnh cloud muối và hai lệnh muối từ Bước 6:

  • salt-cloud -m /etc/salt/cloud.maps.d/do-app-with-rproxy.map
  • salt -G 'roles:appserver' state.sls awesome-app.app
  • salt -G 'roles:rproxy' state.sls nginx.rproxy

Các server hiện có sẽ không bị ảnh hưởng bởi quá trình chạy Salt lặp lại, các server mới sẽ được xây dựng theo thông số kỹ thuật và cấu hình Nginx sẽ cập nhật để bắt đầu định tuyến lưu lượng truy cập đến các server ứng dụng mới.

Kết luận

Việc triển khai một ứng dụng chỉ báo cáo IP của server không hữu ích lắm. May mắn là cách tiếp cận này không giới hạn ở các ứng dụng Node.js. Salt không quan tâm ứng dụng của bạn được viết bằng ngôn ngữ nào.

Nếu bạn muốn sử dụng khuôn khổ này để triển khai ứng dụng của riêng mình, bạn chỉ cần tự động hóa tác vụ cài đặt ứng dụng của bạn trên server (thông qua tập lệnh hoặc với trạng thái Salt) và thay thế ví dụ ứng dụng tuyệt vời của ta bằng tự động hóa của bạn .

Cũng giống như Salt tự động hóa các quy trình trên Server, Salt Cloud tự động hóa các quy trình trên cloud của bạn. Thưởng thức!


Tags:

Các tin liên quan

Cách triển khai ứng dụng Rails với Passenger và Nginx trên Ubuntu 14.04
2014-10-09
Cách tạo profile AppArmor cho Nginx trên Ubuntu 14.04
2014-10-06
Cách cấu hình Nginx với SSL làm Reverse Proxy cho Jenkins
2014-09-23
Cách thiết lập nhiều trang web WordPress với Nginx trên Ubuntu 14.04
2014-08-21
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server Ubuntu 14.04
2014-08-06
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server CentOS 7
2014-08-06
Cách cài đặt Nginx trên CentOS 7
2014-07-22
Cách tạo chứng chỉ ECC trên Nginx cho Debian 7
2014-07-21
Cách thiết lập cân bằng tải Nginx với kết thúc SSL
2014-07-17
Cách cài đặt Laravel với web server Nginx trên Ubuntu 14.04
2014-06-24