2016-10-10 17 views
5

Tôi đã xem xét Docker và cách tôi có thể lưu trữ nhiều trang web trên một máy chủ "cách Docker". Theo tôi hiểu, lý tưởng là mọi thứ nên chạy các thùng chứa riêng và không nên chia sẻ các thùng chứa này.Kiến trúc Docker để lưu trữ một trang web PHP

Câu hỏi của tôi là liệu tổng quan bên dưới có phải là thiết lập vùng chứa hợp lệ với các yêu cầu đến một proxy đảo ngược duy nhất chuyển tiếp các yêu cầu đến máy chủ web underlaying để xử lý các yêu cầu thực tế hay không.

Ngoài ra, trong ba trường hợp bên dưới, tôi đã nêu chi tiết các cách khác nhau bao gồm tệp nguồn cho ứng dụng và muốn biết cái nào trong số ba là phổ biến nhất/tốt nhất để sử dụng.

Mong muốn của tôi là có thể chạy các trang web khác nhau trên một máy chủ duy nhất trong Docker. Các trang web có thể có các yêu cầu khác nhau như được minh họa bằng các phiên bản PHP-FPM khác nhau trong biểu đồ. Việc triển khai các trang web chính nó là một chút không rõ ràng với tôi như tôi không chắc chắn liệu tôi nên bao gồm các tập tin nguồn với nginx/PHP-FPM hoặc triển khai nó một cách riêng biệt.

Docker architecture overview

thiết lập hiện tại của tôi là như sau:

Docker-compose.yml

version: '2' 
services: 
    nginx: 
     image: nginx:alpine 
     restart: always 
     ports: 
      - '80:80' 
     links: 
      - example_com 
      - example_org 
      - example_net 
     volumes: 
      - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro 

    example_com: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_com:/var/www/example_com:ro 

    example_org: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_org:/var/www/example_org:ro 

    example_net: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_net:/var/www/example_net 

nginx/conf.d/default.conf

server { 
    listen  80; 
    server_name www.example.com example.com; 

    location ~ \.php$ { 
     fastcgi_pass example_com:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_com$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

server { 
    listen  80; 
    server_name www.example.org example.org; 

    location ~ \.php$ { 
     fastcgi_pass example_org:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_org$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

server { 
    listen  80; 
    server_name www.example.net example.net; 

    location ~ \.php$ { 
     fastcgi_pass example_net:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_net$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

Điều này không được minh họa bằng tổng quan ở trên, nhưng tình hình trong tổng quan là tình huống có vẻ là tình huống lý tưởng đối với tôi.

Tôi làm cách nào để thiết lập điều này với proxy ngược và các vùng chứa PHP-FPM khác nhau, và làm cách nào để triển khai các trang web của tôi và các cập nhật tiếp theo?

Bất kỳ đầu vào nào về điều này sẽ được đánh giá rất nhiều!

+0

Tôi nghĩ rằng "dinghy" là proxy ngược có thể hữu ích cho điều này –

Trả lời

0

Tôi nghĩ rằng ba máy chủ nginx kết nối với máy chủ nginx chính là không cần thiết. Quá trình php-fpm lắng nghe một ổ cắm để bạn có thể kết nối trực tiếp tới mỗi quá trình php-fpm từ máy chủ nginx chính

+0

Vì vậy, tôi muốn có proxy ngược trực tiếp giao tiếp với các gói PHP-FPM khác nhau, nơi nào tôi đặt các tệp nguồn của mình? – Revell

+0

Bạn có thể đặt chúng theo một khối lượng riêng biệt và cung cấp bất kỳ vùng chứa nào bạn muốn truy cập. –

+0

@ChrisTanner Vì vậy, điều đó sẽ được mô tả trong trường hợp 1? – Revell

0

Tôi có một kịch bản gần giống tương tự chỉ chạy một máy chủ web. Trước hết, tôi nghĩ rằng bạn đang thiết lập là tốt theo cách này bằng cách sử dụng một container duy nhất như proxy ngược và khác cho mỗi máy chủ web.

Tôi không yên tâm nếu cần thiết chạy PHP trong vùng chứa của chính nó. Tôi đang sử dụng Apache thay vì nginx (haters gonna ghét) và tạo ra một hình ảnh riêng cho cả hai đem lại cho tôi sau Docker-compose.yml

version: '2' 

services: 
    webproxy: 
    image: myown/webproxy:x.y 
    [...] 

    webserver: 
    image: myown/webserver:x.y 
    [...] 

Về câu hỏi thứ hai của bạn: Tôi đã đến câu hỏi này bản thân mình và tôi không bao giờ thấy một điểm trong việc sử dụng các thùng chứa dữ liệu. Dữ liệu sử dụng cùng một không gian đĩa nhưng bạn không biết nơi lưu trữ. Một chút khôn lanh để sao lưu trong quan điểm của tôi. Đó là lý do tôi sử dụng phương pháp tiếp cận đầu tiên của bạn gắn khối lượng dữ liệu vào đĩa của máy chủ.

Các vấn đề liên quan