InfoboxCloudで公匏のNGINXドッカヌむメヌゞを䜿甚するパヌト1

過去1幎間で、Docker Hubで100,000を超える画像が利甚可胜になり、Docker Hubから3億回以䞊画像がダりンロヌドされたした。 これらのうち、2,000䞇件以䞊のダりンロヌドは、Oracle、CentOS、NGINXなどのDocker開発者の70の公匏むメヌゞからのものでした。

NGINXは、Webサヌバヌずしおだけでなく、リバヌスプロキシサヌバヌ、ロヌドバランサヌ、HTTPキャッシュずしおも、䞖界最倧のサむトの40以䞊で䜿甚されおいたす。 公匏のNGINXむメヌゞは340䞇回ダりンロヌドされおいたす。



この蚘事では、次のこずを孊習したす。

Dockerを䜿甚したこずがない堎合は、以䞋を読むこずをお勧めしたす。
Dockerを䜿甚しおおり、ベンダヌロックを心配したせん。
DockerぞのダむビングDockerfileずコンテナヌ通信
1.0から1.8たでのDocker Engineむノベヌションの抂芁。 Docker Composeの抂芁

蚘事の最埌に、 InfoboxCloudの詊甚版を無料で提䟛したす。

環境の準備


1. CentOS 7でサヌバヌを䜜成しお、 DocboxをInfoboxCloudにむンストヌルしたす 。 Dockerが機胜するためには、たさに今必芁な仮想マシンです。そのため、サヌバヌを䜜成するずきは、 「OSカヌネル制埡を蚱可する」ボックスを必ずチェックしおください。

InfoboxCloud for Dockerでサヌバヌを䜜成する方法
InfoboxCloudにただアクセスできない堎合は、 泚文しおください 。

登録埌、電子メヌルでコントロヌルパネルにアクセスするためのデヌタを受け取りたす。 https://panel.infobox.ruでコントロヌルパネルにログむンしたす。

サブスクリプションの[クラりドむンフラストラクチャ]セクションで、[新しいサヌバヌ]をクリックしたす必芁に応じお、ドロップダりンメニュヌの右䞊隅にあるサブスクリプションが倉曎されたす。



必芁なサヌバヌパラメヌタを蚭定したす。 䞋のスクリヌンショットに瀺すように、サヌバヌに1぀のパブリックIPアドレスを䞎え、 「OSカヌネル制埡を蚱可する」ボックスをチェックしおください。



䜿甚可胜なオペレヌティングシステムのリストで、CentOS 7を遞択し、サヌバヌの䜜成を完了したす。



その埌、サヌバヌにアクセスするためのデヌタが電子メヌルで送信されたす。

CentOS 7でサヌバヌを䜜成した埌、 SSHを介しおサヌバヌに接続したす。

このようなサヌバヌでDockerずDockerを操䜜するための䟿利なナヌティリティをむンストヌルできるスクリプトを準備したした。 必芁な蚭定は自動的に行われたす。

コマンドを実行しおDockerおよびComposeをむンストヌルしたす。
bash <(curl -s http://repository.sandbox.infoboxcloud.ru/scripts/docker/centos7/install.sh) 

その埌、dockerおよびcomposeがむンストヌルされたす。 サヌバヌをクリックしお「むメヌゞを䜜成」をクリックするず、コントロヌルパネルに dockerがむンストヌルされたむメヌゞを䜜成できたす。

その埌、Dockerを䜿甚しおむメヌゞから新しいサヌバヌを䜜成し、このステップを再床実行しないでください。

ポヌタブル環境の䜜成


私たちのポヌタブル環境は以䞋で構成されおいたす

サむトファむルたたは構成を曎新するずきにコンテナヌを再構築するには、ポヌタブル環境をgithubなどのリポゞトリに保持するこずをお勧めしたす。 これにより、必芁に応じお、カスタマむズしたサむトを数分で再展開できたす。 たた、開発甚に別のコンテナでサむトをすばやく䞊げるこずもできたす。

gitを䜿甚するには、サヌバヌにgitをむンストヌルしおください。
 yum install -y git 

次のコマンドを䜿甚しお、githubからシンプルなポヌタブル環境をコピヌしたす。
 git clone https://github.com/InfoboxHosting/DockerNginxSimpleStaticSite.git 

次のコマンドを䜿甚しお、環境ディレクトリに移動したす。
 cd DockerNginxSimpleStaticSite/ 

コマンドを䜿甚しおDockerむメヌゞを構築する
 docker-compose build 

コマンドで画像をコンテナに展開したす
 docker-compose up -d 

IPでサヌバヌにアクセスしおみおください。 事前構成された静的サむトが正垞にデプロむされたした。



実行する堎合
 docker ps 
コンテナのリストでサむトを確認できたす。



ポヌタブル環境の構成を芋おみたしょう。



conf / nginx.confファむルには、nginx蚭定が含たれおいたす。
nginx.conf
 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 4086; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; server { listen 80; server_name domain.tld www.domain.tld; location / { root /usr/share/nginx/html; } } } 


domain.tldをサむトのドメむンに眮き換える必芁がありたす。

サむトのWebサヌバヌ蚭定はポヌタブル環境に保存されるため、展開䞭に毎回Webサヌバヌを再蚭定する必芁はありたせん。

ポヌタブル環境のルヌトには、公匏のNGINXむメヌゞを䜿甚し、 htmlフォルダヌからWebサむトを远加し、 confフォルダヌからNGINX構成を远加するDockerfileがありたす。

 FROM nginx MAINTAINER Yuri Trukhin "trukhinyuri@infoboxcloud.com" COPY conf/nginx.conf /etc/nginx/nginx.conf COPY html/ /usr/share/nginx/html 


この蚘事で Dockerfileの詳现を孊んでください。

たた、ポヌタブル環境フォルダヌのルヌトで、次の内容のdocker-compose.ymlファむルを䜜成したす 。
 sitename: build: . ports: - 80:80 restart: always 

同じディレクトリにあるDockerfileから最初にサむト名環境を構築するこずにより、 サむト名環境を展開する必芁があるず曞かれおいたす。 コンテナのポヌト80は、ホストのポヌト80に転送する必芁がありたす。 NGINXがクラッシュした堎合は、再起動しおください。

この蚘事で Composeの詳现を孊んでください。
サむトたたはnginx蚭定ファむルを倉曎する堎合-コマンドでむメヌゞを再構築するだけです
 docker-compose build 

そしお、画像をコンテナに展開したす
 docker-compose up -d 


サヌバヌを毎回蚭定するこずを心配する必芁はありたせん。 か぀お開発されたDockerを䜿甚したポヌタブル環境により、迅速にデプロむできたす。

次のセクションの掚奚事項に埓うには、次のようにデプロむされたコンテナを停止しお削陀したす。 ホストのポヌト80を占有したす。これは必芁です。

これを行うには、次を実行したす。
 docker ps 

container_idをクリップボヌドにコピヌしたす。
次のコマンドでコンテナを停止したす
 docker stop bc88ee61a933 

bc88ee61a933の代わりにcontainer_idを挿入したす。
コンテナを削陀
 docker rm bc88ee61a933 

bc88ee61a933の代わりにcontainer_idを挿入したす。

リバヌスプロキシを䜿甚しお耇数のサむトを展開したす


このセクションでは、異なるドメむンずリバヌスプロキシを持぀いく぀かの静的サむトを展開したす。 蚘事のこの郚分を完了するには、ドメむンをDNSのサヌバヌのIPアドレスにリダむレクトする必芁がありたす。

必芁なIPアドレスは、 InfoboxCloud コントロヌルパネルにありたす。



ドメむンがない堎合の察凊方法
オプション1.ホストの構成

このオプションはテストに最適ですが、コンピュヌタヌからのみ機胜したす。

ドメむンレコヌドをコンピュヌタヌのホストファむルに远加したす 。
OS XおよびLinuxでは、゚ントリを/ etc / hostsファむルに远加できたす 。



Windowsでは、管理者ずしおメモ垳を実行する必芁がありたす。 これを行うには、怜玢フィヌルドにメモ垳たたはメモ垳ロシア語版のWindowsを入力し、管理者ずしお起動ポむントを遞択したす。



ファむルC\ Windows \ System32 \ drivers \ etc \ hostsを開きたす 。 ノヌトブックに衚瀺されない堎合は、「開く」ボタンの暪にある「すべおのファむル」ファむルタむプを遞択したす。



必芁な゚ントリを远加しお、倉曎を保存したす。 コントロヌルパネルからサヌバヌのアドレスをIPアドレスずしお䜿甚するこずを忘れないでください。



テスト埌、これらの゚ントリをホストファむルから削陀しおください。

オプション2.必芁なドメむンを賌入する

たずえば、 ここで実行できたす 。


次に、InfoboxCloudでDockerを䜿甚しおSSH経由でサヌバヌに接続したす。
ロヌドバランサヌを䜿甚しお、2぀のサむトの準備枈みリポゞトリを耇補したす。
 cd ~ 

 git clone https://github.com/InfoboxHosting/DockerNginxSimpleBalancer.git 




バランサヌのポヌタブル環境のディレクトリに移動したす。
 cd ~/DockerNginxSimpleBalancer/balancer 

1぀のコマンドでバランサヌず䟝存むメヌゞの構築を開始したす。
 docker-compose build 

バランサヌず䟝存画像を展開したす。
 docker-compose up -d 

泚この䟋では、各フロント゚ンドのフォルダヌ内のdocker-compose.ymlファむルは䜿甚されたせん。

ブラりザで最初のサむトのドメむンを開きたす。



次に、2番目のサむトが正しく開くこずを確認したす。



/ etc / hostsの所定のdomain1.comおよびdomain2.comでサむトが開かないようにするには、ファむル〜/ DockerNginxSimpleBalancer / balancer / conf / nginx.confを修正する必芁がありたす。

nginx.conf
 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 4086; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; server { listen 80; server_name domain1.com www.domain1.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend1:80; } } server { listen 80; server_name domain2.com www.domain2.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend2:80; } } } 


domain1.comずdomain2.comをサむトのアドレスに眮き換え、むメヌゞを再構築しお、コンテナヌを再デプロむしたす。
 cd ~/DockerNginxSimpleBalancer/balancer 

 docker-compose build 

 docker-compose up -d 


耇数の地理的に分散したサむトを展開したす


「環境の準備」セクションに瀺すように、モスクワ、サンクトペテルブルク、アムステルダムの各InfoboxCloudリヌゞョンにdockerを䜿甚しおサヌバヌを䜜成し、次のコマンドでgitをむンストヌルしたす。
 yum install -y git 

远加のクラりドリヌゞョンを接続する方法
コントロヌルパネルで 、メむンペヌゞに移動し、[新しいサヌビスを泚文]をクリックしたす。



Cloud Serversサヌビスを遞択したす。



目的の地域を遞択し、泚文プロセスを最埌たで完了したす。



远加の地域の接続は無料ですが、アカりントには500ルヌブル以䞊が必芁です。

ドロップダりンメニュヌのコントロヌルパネルの右䞊隅でリヌゞョンを切り替えるこずができたす。



蚘事のこの郚分を完了するには、ドメむンをDNSのサヌバヌのIPアドレスにリダむレクトする必芁がありたす。



必芁なIPアドレスは、 InfoboxCloud コントロヌルパネルにありたす。

準備されたポヌタブル環境を各サヌバヌに保存したす。
 git clone https://github.com/InfoboxHosting/DockerNginxGeoRedundantBalancer.git 


各サヌバヌで、ファむル〜/ DockerNginxGeoRedundantBalancer / balancer / conf / nginx.confを線集し、 domain1.comを最初のサむトのドメむン名に、 domain2.comを2番目のサむトのドメむン名に、 domain.comをサヌビスドメむンの名前に眮き換えたす。

手動で名前を倉曎する代わりに、 各サヌバヌでコマンドを実行できたす 。
 bash ~/DockerNginxGeoRedundantBalancer/rename.sh domain.com domain1.com domain2.com 

ここで、domain.comの代わりにdomain1.com-最初のサむトの名前、domain2.com-2番目のサむトの名前の代わりにサヌビスドメむンの名前を指定したす。

オリゞナルのnginx.conf
 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 4086; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; upstream frontend1 { #!!!replace domain.com #!!!remove backup word in your location server spb.domain.com:8000 backup; server msk.domain.com:8000 backup; server ams.domain.com:8000 backup; } upstream frontend2 { #!!!replace domain.com #!!!remove backup word in your location server spb.domain.com:8001 backup; server msk.domain.com:8001 backup; server ams.domain.com:8001 backup; } server { listen 80; #!!!replace domain1.com server_name domain1.com www.domain1.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend1; } } server { listen 80; #!!!replace domain2.com server_name domain2.com www.domain2.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend2; } } } 


アムステルダムに倉曎を加えた埌のnginx.conf
 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 4086; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; upstream frontend1 { #!!!replace domain.com server spb.plugndo.com:8000 backup; server msk.plugndo.com:8000 backup; server ams.plugndo.com:8000; } upstream frontend2 { #!!!replace domain.com server spb.plugndo.com:8001 backup; server msk.plugndo.com:8001 backup; server ams.plugndo.com:8001; } server { listen 80; #!!!replace domain1.com server_name site1.plugndo.com www.site1.plugndo.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend1; } } server { listen 80; #!!!replace domain1.com server_name site2.plugndo.com www.site2.plugndo.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend2; } } } 



サンクトペテルブルクの倉曎を行った埌のnginx.conf
 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 4086; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; upstream frontend1 { #!!!replace domain.com server spb.plugndo.com:8000; server msk.plugndo.com:8000 backup; server ams.plugndo.com:8000 backup; } upstream frontend2 { #!!!replace domain.com server spb.plugndo.com:8001; server msk.plugndo.com:8001 backup; server ams.plugndo.com:8001 backup; } server { listen 80; #!!!replace domain1.com server_name site1.plugndo.com www.site1.plugndo.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend1; } } server { listen 80; #!!!replace domain1.com server_name site2.plugndo.com www.site2.plugndo.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend2; } } } 



モスクワに倉曎を加えた埌のnginx.conf
 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 4086; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; upstream frontend1 { #!!!replace domain.com server spb.plugndo.com:8000 backup; server msk.plugndo.com:8000; server ams.plugndo.com:8000 backup; } upstream frontend2 { #!!!replace domain.com server spb.plugndo.com:8001 backup; server msk.plugndo.com:8001; server ams.plugndo.com:8001 backup; } server { listen 80; #!!!replace domain1.com server_name site1.plugndo.com www.site1.plugndo.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend1; } } server { listen 80; #!!!replace domain1.com server_name site2.plugndo.com www.site2.plugndo.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://frontend2; } } } 


モスクワの堎合、適切なフォルダヌに転送したす。
 cd DockerNginxGeoRedundantBalancer/balancerMSK/ 

アムステルダムの堎合、適切なフォルダヌに転送したす。
 cd DockerNginxGeoRedundantBalancer/balancerAMS/ 

サンクトペテルブルクの堎合
 cd DockerNginxGeoRedundantBalancer/balancerSPB/ 


各サヌバヌでコマンドを実行する
 docker-compose build 

そしお
 docker-compose up -d 


これで、各サむトにアクセスしお、その可甚性を確認できたす。





次に、コントロヌルパネルから、いずれかの地域でサヌバヌの電源を切りたす。 サむトは匕き続き利甚可胜です。
2番目の地域のサヌバヌの電源を切りたす。 サむトは匕き続き利甚可胜です。

少なくずも1぀のサヌバヌが利甚可胜ですが、サむトは機胜したす。 オフになっおいるサヌバヌに芁求が届いた堎合、最新のブラりザヌはすべおDNSから別のサヌバヌに芁求を送信しようずしたす。 その結果、数秒埌にサむトが開きたす。

耇数の地域でサヌバヌずサむトを展開するプロセスを完党に自動化するには、Ansibleを䜿甚できたす。
パヌト1
パヌト2
パヌト3
パヌト4
パヌト5

InfoboxCloudの詊甚版を無料で入手する方法は


trukhinyuri@infoboxcloud.comにメヌルアドレスず氏名をお送りください。コントロヌルパネルにアクセスするためのデヌタを受け取りたす。 新しいクラりドリヌゞョンを15日間テストしおから、フルバヌゞョンのクラりドに移動できたす。 2015幎9月5日たでに無料詊甚版をリク゚ストできたす。

質問やコメントがありたしたら、 私たちに曞いおください。私たちは喜んで答えたす。

Habréにコメントを残すこずができない堎合は、 コミュニティで私たちに手玙を曞いおください。

InfoboxCloudでのNGINXずDockerの䜿甚の成功

Source: https://habr.com/ru/post/J265231/


All Articles