Cách lưu trữ nhiều trang web với Nginx và HAProxy bằng LXD trên Ubuntu 16.04
Vùng chứa Linux là một group các quy trình được tách biệt với phần còn lại của hệ thống thông qua việc sử dụng các tính năng bảo mật của nhân Linux, chẳng hạn như không gian tên và group điều khiển. Nó là một cấu trúc tương tự như một máy ảo, nhưng nó nhẹ hơn nhiều; bạn không có chi phí để chạy một kernel bổ sung hoặc mô phỏng phần cứng. Điều này nghĩa là bạn có thể dễ dàng tạo nhiều containers trên cùng một server . Sử dụng containers Linux, bạn có thể chạy nhiều version của toàn bộ hệ điều hành, được giới hạn, trên cùng một server hoặc gói ứng dụng của bạn và các phần phụ thuộc của nó trong một containers mà không ảnh hưởng đến phần còn lại của hệ thống.Ví dụ: hãy tưởng tượng rằng bạn có một server và bạn đã cài đặt một số dịch vụ, bao gồm cả các trang web, cho khách hàng của bạn . Trong cài đặt truyền thống, mỗi trang web sẽ là một server ảo của cùng một version của web server Apache hoặc Nginx. Nhưng với containers Linux, mỗi trang web sẽ được cấu hình trong containers riêng, với web server riêng.
Ta có thể sử dụng LXD để tạo và quản lý các containers này. LXD cung cấp dịch vụ siêu giám sát để quản lý toàn bộ vòng đời của các container .
Trong hướng dẫn này, bạn sẽ sử dụng LXD để cài đặt hai trang web dựa trên Nginx trên cùng một server , mỗi trang được giới hạn trong containers riêng. Sau đó, bạn sẽ cài đặt HAProxy trong containers thứ ba sẽ hoạt động như một Reverse Proxy . Sau đó, bạn sẽ định tuyến lưu lượng truy cập đến containers HAProxy để làm cho cả hai trang web đều có thể truy cập được từ Internet.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần những thứ sau:
- Một server Ubuntu 16.04, được cấu hình theo hướng dẫn Cài đặt server ban đầu với Ubuntu 16.04 , với user không phải root có quyền sudo và firewall .
- Hai Tên domain Đủ Điều kiện (FQDN), với mỗi DNS Một bản ghi trỏ đến địa chỉ IP của server của bạn. Để cấu hình điều này, hãy làm theo hướng dẫn Cách cài đặt tên server lưu trữ với DigitalOcean .
- Theo tùy chọn, thêm 20GB bộ nhớ khối trở lên theo hướng dẫn Bắt đầu với bộ nhớ khối DigitalOcean . Bạn có thể sử dụng điều này để lưu trữ tất cả dữ liệu liên quan đến containers .
Bước 1 - Thêm user của bạn vào group lxd
Đăng nhập vào server bằng account user không phải root. Ta sẽ sử dụng account không phải user này để thực hiện tất cả các việc quản lý containers . Để điều này hoạt động, trước tiên bạn phải thêm user này vào group lxd
. Thực hiện việc này bằng lệnh sau:
- sudo usermod --append --groups lxd sammy
Đăng xuất khỏi server và đăng nhập lại để phiên SSH mới của bạn sẽ được cập nhật với quyền thành viên group mới. Sau khi đăng nhập, bạn có thể bắt đầu cấu hình LXD.
Bước 2 - Cấu hình LXD
LXD cần được cấu hình đúng cách trước khi bạn có thể sử dụng nó. Quyết cấu hình quan trọng nhất là loại backend lưu trữ để lưu trữ các containers . Phần backend lưu trữ được đề xuất cho LXD là hệ thống file ZFS, được lưu trữ trong một file được phân bổ trước hoặc bằng cách sử dụng Bộ nhớ khối . Để sử dụng hỗ trợ ZFS trong LXD, hãy cài đặt gói zfsutils-linux
:
- sudo apt-get update
- sudo apt-get install zfsutils-linux
Với cài đặt đó, bạn đã sẵn sàng khởi tạo LXD. Trong quá trình khởi tạo, bạn sẽ được yêu cầu chỉ định chi tiết cho phần backend lưu trữ ZFS. Có hai phần tiếp theo, tùy thuộc vào việc bạn muốn sử dụng file được phân bổ trước hay bộ nhớ khối. Làm theo bước thích hợp cho trường hợp của bạn. Khi bạn đã chỉ định cơ chế lưu trữ, bạn sẽ cấu hình các tùy chọn mạng cho containers của bạn .
Tùy chọn 1 - Sử dụng file được phân bổ trước
Làm theo các bước sau để cấu hình LXD để sử dụng file được phân bổ trước để lưu trữ các containers . Đầu tiên, hãy thực hiện lệnh sau để bắt đầu quá trình khởi tạo LXD:
- sudo lxd init
Bạn sẽ được yêu cầu cung cấp một số phần thông tin, như trong kết quả sau. Ta sẽ chọn tất cả các giá trị mặc định, bao gồm cả kích thước được đề xuất cho file được phân bổ trước, được gọi là thiết bị lặp :
OutputName of the storage backend to use (dir or zfs) [default=zfs]: zfs Create a new ZFS pool (yes/no) [default=yes]? yes Name of the new ZFS pool [default=lxd]: lxd Would you like to use an existing block device (yes/no) [default=no]? no Size in GB of the new loop device (1GB minimum) [default=15]: 15 Would you like LXD to be available over the network (yes/no) [default=no]? no Do you want to configure the LXD bridge (yes/no) [default=yes]? yes Warning: Stopping lxd.service, but it can still be activated by: lxd.socket LXD has been successfully configured.
Kích thước đề xuất được tính toán tự động từ không gian đĩa có sẵn của server của bạn.
Sau khi thiết bị được cấu hình , bạn sẽ cấu hình cài đặt mạng mà ta sẽ khám phá sau phần tùy chọn tiếp theo.
Tùy chọn 2 - Sử dụng Bộ nhớ khối
Nếu bạn định sử dụng Block Storage, bạn cần tìm thiết bị trỏ đến dung lượng lưu trữ khối mà bạn đã tạo để chỉ định nó trong cấu hình của LXD. Đi tới tab Volumes trong DigitalOcean kiểm soát ô l, xác định vị trí dung lượng của bạn, bấm vào More pop-up, và sau đó bấm vào hướng dẫn Config.
Định vị thiết bị bằng cách xem lệnh để định dạng âm lượng. Cụ thể, hãy tìm đường dẫn được chỉ định trong sudo mkfs.ext4 -F
. Hình sau đây cho thấy một ví dụ về dung lượng . Bạn chỉ cần phần được gạch chân:
Trong trường hợp này, tên /dev/disk/by-id/scsi-0D0_Volume_volume-fra1-01
là /dev/disk/by-id/scsi-0D0_Volume_volume-fra1-01
, mặc dù /dev/disk/by-id/scsi-0D0_Volume_volume-fra1-01
của bạn có thể khác.
Khi bạn xác định được dung lượng , hãy quay lại terminal của bạn và đưa ra lệnh sau để bắt đầu quá trình khởi tạo LXD.
- sudo lxd init
Bạn sẽ thấy với một loạt câu hỏi. Trả lời các câu hỏi như trong kết quả sau:
OutputName of the storage backend to use (dir or zfs) [default=zfs]: zfs Create a new ZFS pool (yes/no) [default=yes]? yes Name of the new ZFS pool [default=lxd]: lxd
Khi bạn được yêu cầu về việc sử dụng thiết bị chặn hiện có, hãy chọn yes
và cung cấp đường dẫn đến thiết bị của bạn:
Output of the "lxd init" commandWould you like to use an existing block device (yes/no) [default=no]? yes Path to the existing block device: /dev/disk/by-id/scsi-0DO_Volume_volume-fra1-01
Sau đó, sử dụng giá trị mặc định cho các câu hỏi còn lại:
Output of the "lxd init" commandWould you like LXD to be available over the network (yes/no) [default=no]? no Do you want to configure the LXD bridge (yes/no) [default=yes]? yes Warning: Stopping lxd.service, but it can still be activated by: lxd.socket LXD has been successfully configured.
Khi hoàn tất , bạn sẽ cấu hình mạng.
Cấu hình mạng
Quá trình khởi tạo sẽ hiển thị cho ta một loạt các màn hình như hình sau cho phép ta cấu hình cầu nối mạng cho các containers để chúng có thể lấy địa chỉ IP riêng, giao tiếp với nhau và có quyền truy cập Internet.
Sử dụng giá trị mặc định cho mỗi tùy chọn, nhưng khi được hỏi về mạng IPv6, hãy chọn Không , vì ta sẽ không sử dụng nó trong hướng dẫn này.
Khi bạn đã hoàn thành cấu hình mạng, bạn đã sẵn sàng tạo các containers của bạn .
Bước 3 - Tạo containers
Ta đã cấu hình thành công LXD. Ta đã chỉ định vị trí của phần backend lưu trữ và đã cấu hình mạng mặc định cho mọi containers mới được tạo. Ta đã sẵn sàng để tạo và quản lý một số containers , điều này ta sẽ thực hiện với lệnh lxc
.
Hãy thử lệnh đầu tiên của ta , lệnh này liệt kê các containers đã cài đặt sẵn:
- lxc list
Bạn sẽ thấy kết quả sau:
Output of the "lxd list" commandGenerating a client certificate. This may take a minute... If this is your first time using LXD, you should also run: sudo lxd init To start your first container, try: lxc launch ubuntu:16.04 +------+-------+------+------+------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+-------+------+------+------+-----------+
Vì đây là lần đầu tiên lệnh lxc
giao tiếp với trình siêu giám sát LXD, kết quả cho ta biết rằng lệnh đã tự động tạo certificate ứng dụng client để giao tiếp an toàn với LXD. Sau đó, nó hiển thị một số thông tin về cách chạy containers . Cuối cùng, lệnh hiển thị danh sách các containers trống, dự kiến vì ta chưa tạo bất kỳ containers nào.
Hãy tạo ba containers . Ta sẽ tạo một containers cho mỗi web server và containers thứ ba cho Reverse Proxy . Mục đích của Reverse Proxy là hướng các kết nối đến từ Internet đến đúng web server trong containers .
Ta sẽ sử dụng lệnh lxc launch
để tạo và khởi động containers Ubuntu 16.04 ( ubuntu:x
) có tên là web1
. Dấu x
trong ubuntu:x
là một phím tắt cho chữ cái đầu tiên của Xenial, tên mã của Ubuntu 16.04. ubuntu:
là định danh cho repository hình ảnh LXD được cấu hình sẵn.
Lưu ý : Bạn có thể tìm thấy danh sách đầy đủ của tất cả các hình ảnh Ubuntu có sẵn bằng cách chạy lxc image list ubuntu:
và các bản phân phối khác bằng cách chạy các lxc image list images:
Thực thi các lệnh sau để tạo containers :
- lxc launch ubuntu:x web1
- lxc launch ubuntu:x web2
- lxc launch ubuntu:x haproxy
Vì đây là lần đầu tiên ta tạo containers , lệnh đầu tiên tải containers images từ Internet và lưu vào bộ nhớ cache local . Hai containers tiếp theo sẽ được tạo nhanh hơn đáng kể.
Tại đây, bạn có thể xem kết quả mẫu từ việc tạo containers web1
.
OutputCreating web1 Retrieving image: 100% Starting web1
Bây giờ ta đã tạo ba container vani rỗng, hãy sử dụng lệnh lxc list
để hiển thị thông tin về chúng:
- lxc list
Đầu ra hiển thị một bảng với tên của mỗi containers , trạng thái hiện tại của nó, địa chỉ IP, loại của nó và liệu có ảnh chụp nhanh được chụp hay không.
+---------+---------+-----------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +---------+---------+-----------------------+------+------------+-----------+ | haproxy | RUNNING | 10.10.10.10 (eth0) | | PERSISTENT | 0 | +---------+---------+-----------------------+------+------------+-----------+ | web1 | RUNNING | 10.10.10.100 (eth0) | | PERSISTENT | 0 | +---------+---------+-----------------------+------+------------+-----------+ | web2 | RUNNING | 10.10.10.200 (eth0) | | PERSISTENT | 0 | +---------+---------+-----------------------+------+------------+-----------+
Lưu ý tên containers và địa chỉ IPv4 tương ứng của chúng. Bạn cần chúng để cấu hình các dịch vụ của bạn .
Bước 4 - Cấu hình Vùng chứa Nginx
Hãy kết nối với containers web1
và cấu hình web server đầu tiên.
Để kết nối, ta sử dụng lệnh lxc exec
, lấy tên của containers và các lệnh để thực thi. Thực thi lệnh sau để kết nối với containers :
- lxc exec web1 -- sudo --login --user ubuntu
Chuỗi --
biểu thị rằng các tham số lệnh cho lxc
sẽ dừng lại ở đó và phần còn lại của dòng sẽ được chuyển dưới dạng lệnh được thực thi bên trong containers . Lệnh này là sudo --login --user ubuntu
, cung cấp shell đăng nhập cho account ubuntu
được cấu hình sẵn bên trong containers .
Lưu ý: Nếu bạn cần kết nối với các containers dưới dạng root , bạn có thể sử dụng lệnh lxc exec web1 -- /bin/bash
để thay thế.
Khi bên trong containers , dấu nhắc shell của ta bây giờ trông giống như sau.
Outputubuntu@web1:~$
User ubuntu này trong containers có quyền truy cập sudo
được cấu hình trước và có thể chạy các lệnh sudo
mà không cần cung cấp password . Vỏ này được giới hạn bên trong giới hạn của vật chứa. Bất kỳ thứ gì ta chạy trong shell này sẽ nằm trong containers và không thể thoát đến server lưu trữ.
Hãy cập nhật danh sách gói của version Ubuntu bên trong containers và cài đặt Nginx:
- sudo apt-get update
- sudo apt-get install nginx
Hãy chỉnh sửa trang web mặc định cho trang web này và thêm một số văn bản làm rõ rằng trang web này được lưu trữ trong containers web1
. Mở file /var/www/html/index.nginx-debian.html
:
- sudo nano /var/www/html/index.nginx-debian.html
Thực hiện thay đổi sau đối với file :
<!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web1!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx on LXD container web1!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> ...
Ta đã chỉnh sửa file ở hai nơi và đặc biệt thêm văn bản on LXD container web1
. Lưu file và thoát khỏi editor .
Bây giờ đăng xuất khỏi containers và quay trở lại server lưu trữ:
- logout
Lặp lại quy trình này cho containers web2
. Đăng nhập, cài đặt Nginx, sau đó chỉnh sửa file /var/www/html/index.nginx-debian.html
đề cập đến web2
. Sau đó thoát khỏi containers web2
.
Hãy sử dụng curl
để kiểm tra xem các web server trong containers đang hoạt động. Ta cần địa chỉ IP của các containers web đã được hiển thị trước đó.
- curl http://10.10.10.100/
Đầu ra phải là:
Output of "curl http://10.10.10.100/" command<!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web1!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx on LXD container web1!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> ...
Kiểm tra containers thứ hai cũng bằng cách sử dụng lệnh curl
và địa chỉ IP của nó để xác minh nó cũng được cài đặt chính xác. Với cả hai containers được cấu hình , ta có thể chuyển sang cài đặt HAProxy.
Bước 5 - Cấu hình containers HAProxy
Ta sẽ cài đặt HAProxy làm proxy trước các containers này. Nếu bạn cần thêm thông tin cơ bản về cách thức hoạt động của tính năng này, hãy xem lại hướng dẫn Giới thiệu về HAProxy và các khái niệm cân bằng tải . Ta sẽ hướng lưu lượng truy cập đến từng containers dựa trên domain mà ta sử dụng. Ta sẽ sử dụng domain example.com
trong ví dụ cấu hình sau đây, là miền dành riêng đặc biệt cho tài liệu như hướng dẫn này. Ta sẽ cung cấp trang web đầu tiên tại tên server example.com
và www.example.com
. Trang web thứ hai sẽ có tại www2.example.com
. Thay thế các domain của bạn thay cho các domain này.
Đăng nhập vào containers haproxy
:
- lxc exec haproxy -- sudo --login --user ubuntu
Cập nhật danh sách các gói cài đặt và cài đặt HAProxy:
- sudo apt-get update
- sudo apt-get install haproxy
Sau khi cài đặt hoàn tất, ta có thể cấu hình HAProxy. Tệp cấu hình cho HAProxy có tại /etc/haproxy/haproxy.cfg
. Mở file bằng editor yêu thích của bạn.
- sudo nano /etc/haproxy/haproxy.cfg
Đầu tiên, ta sẽ thực hiện một số sửa đổi đối với phần defaults
. Ta sẽ thêm tùy chọn forwardfor
để ta giữ lại IP nguồn thực của client web và ta sẽ thêm tùy chọn http-server-close
, cho phép sử dụng lại phiên và giảm độ trễ.
global ... defaults log global mode http option httplog option dontlognull option forwardfor option http-server-close timeout connect 5000 timeout client 50000 timeout server 50000 ...
Tiếp theo, ta sẽ cấu hình giao diện user để trỏ đến hai containers backend của ta . Thêm phần frontend
mới được gọi là www_frontend
trông giống như sau:
frontend www_frontend bind *:80 # Bind to port 80 (www) on the container # It matches if the HTTP Host: field mentions any of the hostnames (after the '-i'). acl host_web1 hdr(host) -i example.com www.example.com acl host_web2 hdr(host) -i web2.example.com # Redirect the connection to the proper server cluster, depending on the match. use_backend web1_cluster if host_web1 use_backend web2_cluster if host_web2
Các lệnh acl
trùng với tên server của web server và chuyển hướng các yêu cầu đến phần backend
tương ứng.
Sau đó, ta định nghĩa hai mới backend
phần, một cho mỗi web server , và đặt tên cho chúng web1_cluster
và web2_cluster
tương ứng. Thêm mã sau vào file để xác định phần backend :
backend web1_cluster balance leastconn # We set the X-Client-IP HTTP header. This is useful if we want the web server to know the real client IP. http-request set-header X-Client-IP %[src] # This backend, named here "web1", directs to container "web1.lxd" (hostname). server web1 web1.lxd:80 check backend web2_cluster balance leastconn http-request set-header X-Client-IP %[src] server web2 web2.lxd:80 check
Tùy chọn balance
biểu thị chiến lược cân bằng tải. Trong trường hợp này, ta chọn số lượng kết nối ít nhất. Tùy chọn http-request
đặt tiêu đề HTTP với IP client web thực. Nếu ta không đặt tiêu đề này, web server sẽ ghi lại địa chỉ IP HAProxy làm IP nguồn cho tất cả các kết nối, khiến việc phân tích lưu lượng truy cập của bạn bắt nguồn từ đâu trở nên khó khăn hơn. Tùy chọn server
chỉ định một tên tùy ý cho server ( web1
), theo sau là tên server và cổng của server ..
LXD cung cấp một server DNS cho các containers , do đó web1.lxd
giải thành IP được liên kết với containers web1
. Các containers khác có tên server riêng của chúng, chẳng hạn như web2.lxd
và haproxy.lxd
.
Tham số check
yêu cầu HAPRoxy thực hiện kiểm tra tình trạng trên web server đảm bảo rằng nó có sẵn.
Để kiểm tra xem cấu hình có hợp lệ không, hãy chạy lệnh sau:
- /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c
Đầu ra phải là
Configuration file is valid
Hãy reload HAProxy để nó đọc cấu hình mới.
- sudo systemctl reload haproxy
Bây giờ đăng xuất khỏi containers để quay lại server .
- logout
Ta đã cấu hình HAProxy để hoạt động như một Reverse Proxy để chuyển tiếp bất kỳ kết nối nào mà nó nhận được trên cổng 80
tới web server thích hợp trong hai containers còn lại. Hãy kiểm tra xem haproxy
thực sự quản lý để chuyển tiếp các yêu cầu đến đúng containers web hay không. Thực hiện lệnh này:
- curl --verbose --header 'Host: web2.example.com' http://10.10.10.10
Thao tác này thực hiện một yêu cầu tới HAProxy và đặt tiêu đề host
HTTP, HAProxy sẽ sử dụng để chuyển hướng kết nối đến web server thích hợp.
Đầu ra phải là
Output of "curl --verbose --header 'Host: web2.example.com' http://10.10.10.10" command... > GET / HTTP/1.1 > Host: web2.example.com > User-Agent: curl/7.47.0 > Accept: */* > ... < <!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web2!</title> <style> ...
HAProxy đã hiểu chính xác yêu cầu và chuyển tiếp nó đến containers web2
. Ở đó, web server phục vụ trang index mặc định mà ta đã chỉnh sửa trước đó và hiển thị văn bản on LXD container web2
. Bây giờ, hãy định tuyến các yêu cầu bên ngoài tới HAProxy để mọi người có thể truy cập các trang web của ta .
Bước 6 - Chuyển tiếp các kết nối đến đến containers HAProxy
Phần cuối cùng của câu đố là kết nối Reverse Proxy với Internet. Ta cần cài đặt server của bạn để chuyển tiếp bất kỳ kết nối nào mà nó có thể nhận được từ Internet trên cổng 80
tới containers haproxy
.
HAProxy được cài đặt trong một containers và theo mặc định, không thể truy cập được từ Internet. Để giải quyết vấn đề này, ta sẽ tạo một luật iptables
để chuyển tiếp các kết nối.
Các iptables
lệnh yêu cầu hai địa chỉ IP: địa chỉ IP công cộng của server ( your_server_ip
) và địa chỉ IP riêng của haproxy
container ( your_haproxy_ip
), mà bạn có thể có được với lxc list
lệnh.
Thực thi lệnh này để tạo luật :
- sudo iptables -t nat -I PREROUTING -i eth0 -p TCP -d your_server_ip/32 --dport 80 -j DNAT --to-destination your_haproxy_ip:80
Đây là cách lệnh được chia nhỏ:
-
-t nat
chỉ định rằng ta đang sử dụng bảngnat
. -
-I PREROUTING
chỉ định rằng ta đang thêm luật vào chuỗi PREROUTING. -
-i eth0
chỉ định giao diện eth0 , là giao diện công khai mặc định trên Server. -
-p TCP
cho biết ta đang sử dụng giao thức TCP. -
-d your_server_ip /32
chỉ định địa chỉ IP đích cho luật . -
--dport 80
: chỉ định cổng đích. -
-j DNAT
nói rằng ta muốn thực hiện một bước chuyển đến NAT đích (DNAT). -
--to-destination your_haproxy_ip :80
cho biết rằng ta muốn yêu cầu chuyển đến địa chỉ IP của containers có HAProxy.
Tìm hiểu thêm về IPTables trong Cách hoạt động của firewall Iptables và Thông tin cơ bản về IPtables: Các luật và lệnh firewall phổ biến .
Cuối cùng, để lưu lệnh iptables
này để nó được áp dụng lại sau khi khởi động lại, ta cài đặt gói iptables-persistent
:
- sudo apt-get install iptables-persistent
Khi cài đặt gói, bạn sẽ được yêu cầu lưu các luật iptables hiện tại. Chấp nhận và lưu tất cả các luật iptables
hiện tại.
Nếu bạn đã cài đặt hai FQDN, thì bạn có thể kết nối với từng trang web bằng trình duyệt web của bạn . Hãy thử nó ra.
Để kiểm tra xem hai server Web có có thể truy cập được từ Internet hay không, hãy truy cập từng server từ máy tính local của bạn bằng lệnh curl
như sau:
- curl --verbose --header 'Host: example.com' 'http://your_server_ip'
- curl --verbose --header 'Host: web2.example.com' 'http://your_server_ip'
Các lệnh này tạo kết nối HTTP đến địa chỉ IP công cộng của server và thêm trường tiêu đề HTTP với tùy chọn --header
mà HAProxy sẽ sử dụng để xử lý yêu cầu, giống như bạn đã làm trong Bước 5.
Đây là kết quả của lệnh curl
đầu tiên:
Output* Trying your_server_ip... * Connected to your_server_ip (your_server_ip) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.0 (Ubuntu) ... <!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web1!</title> <style> body { ...
Đây là kết quả của lệnh curl
thứ hai:
Output* Trying your_server_ip... * Connected to your_server_ip (your_server_ip) port 80 (#0) > GET / HTTP/1.1 > Host: web2.example.com > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.0 (Ubuntu) ... <!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web2!</title> <style> body { ...
Trong cả hai trường hợp, trang web chính xác được hiển thị.
Kết luận
Bạn đã cài đặt hai trang web, mỗi trang trong containers riêng, với lưu lượng truy cập trực tiếp HAProxy. Bạn có thể sao chép quá trình này để cấu hình nhiều trang web khác, mỗi trang web được giới hạn trong containers riêng.
Bạn cũng có thể thêm MySQL vào một containers mới và sau đó cài đặt CMS như WordPress để chạy từng trang web. Bạn cũng có thể sử dụng quy trình này để hỗ trợ các version phần mềm cũ hơn. Ví dụ: nếu cài đặt CMS yêu cầu version phần mềm cũ hơn như PHP5, thì bạn có thể cài đặt Ubuntu 14.04 trong containers ( lxc launch ubuntu:t
), thay vì cố gắng hạ cấp version trình quản lý gói có sẵn trên Ubuntu 16.04.
Cuối cùng, LXD cung cấp khả năng chụp nhanh trạng thái đầy đủ của các containers , giúp dễ dàng tạo bản backup và cuộn các containers trở lại sau đó. Ngoài ra, nếu ta cài đặt LXD trên hai server khác nhau, thì có thể kết nối chúng và di chuyển containers giữa các server qua Internet.
Các tin liên quan
Cách bảo mật ứng dụng web nông dân của bạn bằng Let's Encrypt trên Ubuntu 16.042017-03-29
Xây dựng các thành phần web gốc với Vue.js
2017-03-16
Cách sử dụng OpenResty Web Framework cho Nginx trên Ubuntu 16.04
2017-02-28
Roundup: Thư viện thành phần ứng dụng web trên máy tính để bàn Vue.js - Cập nhật Q4 2017
2017-02-23
Cách cài đặt Django Web Framework trên Debian 8
2016-12-21
Cách triển khai ứng dụng web Falcon với Gunicorn và Nginx trên Ubuntu 16.04
2016-11-16
Giới thiệu về Ứng dụng web tiến bộ (PWA): Service Worker & Manifest
2016-11-10
Cách cài đặt Django Web Framework trên Ubuntu 16.04
2016-05-16
Cách triển khai ứng dụng web Clojure trên FreeBSD 10.2
2015-12-22
Cách triển khai ứng dụng web Clojure trên Ubuntu 14.04
2015-11-20