Apache + Nginxに基づいたWeb開発用の仮想ホスト作成の自動化

ターミナルで1行で仮想ホストとフォルダー構造をすばやく作成する方法



たまたま、Web開発のために、Debianベースの別のサーバーを使用しています。 これは、主に私が家の外で働くことが多いという事実によるものであり、同僚と一緒にプロジェクトに協力することもできます。

以前は、サイトのディレクトリを手動で作成し、構成をコピーして編集する必要がありました。 私はこれに多くの時間を費やし、時には間違いを犯し、それから必死にどこで何を逃したかを探しました。



少し前まで、仮想ホストの作成プロセスを自動化することを考えました。 インターネットを少し駆け巡り、同時にbashを思い出して、スクリプトを作成しました。これにより、日常業務とエラーを同時に回避できました。



私の構成は次のとおりです。





ファイルを作成します。

cd ~ touch addvhost.sh chmod +x addvhost.sh
      
      







そして、それに以下を書きます



 #!/bin/sh hostmaster="hostmaster@test.ru" #    www_path="/var/www/hosting/" #       wwwuser="www-data" wwwgroup="www-data" case "$@" in "") echo "   (as root)." ;; *) clear echo "  " mkdir -p $www_path$1/www/ mkdir -p $www_path$1/cgi-bin/ mkdir -p $www_path$1/log/ echo "$www_path$1/www/" echo "$www_path$1/cgi-bin/" echo "$www_path$1/log/" echo "\n  index.html " echo " " > $www_path$1/www/index.html chown -R $wwwuser:$wwwgroup /$www_path$1 chmod -R 0755 /$www_path$1 echo "\n  : /etc/apache2/sites-enabled/$1" exec 3>&1 1>/etc/apache2/sites-enabled/$1 echo "<virtualhost \${HOSTING_HOST}:$2>" echo " ServerName $1" echo " ServerAdmin $hostmaster" echo " " echo " DocumentRoot \${HOSTING_ROOT}/$1/www/" echo " <Directory />" echo " Options Indexes Includes FollowSymLinks MultiViews" echo " Order allow,deny" echo " AllowOverride All" echo " Allow from All" echo " </Directory>" echo " " echo " <Directory \${HOSTING_ROOT}$1/www/>" echo " Options Indexes Includes FollowSymLinks MultiViews" echo " Order allow,deny" echo " AllowOverride All" echo " Allow from All" echo " </Directory>" echo " " echo " ScriptAlias /cgi-bin/ \${HOSTING_ROOT}/$1/cgi-bin/" echo " <Directory \${HOSTING_ROOT}/$1/cgi-bin/>" echo " AllowOverride None" echo " Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch" echo " Order allow,deny" echo " Allow from all" echo " </Directory>" echo " " echo " ErrorLog \${HOSTING_ROOT}/$1/log/error.log" echo " LogLevel warn" echo " CustomLog \${HOSTING_ROOT}/$1/log/access.log combined" echo " ServerSignature On" echo " " echo "</virtualhost>" exec 1>&3 echo "\n  : /etc/nginx/sites-enabled/$1" exec 3>&1 1>/etc/nginx/sites-enabled/$1 echo "server {" echo " listen 80;" echo " server_name $1;" echo " " echo " #charset koi8-r;" echo " " echo " access_log $www_path$1/log/$1-nginx.access.log main;" echo " " echo " location / {" echo " proxy_pass http://127.0.0.1:$2/;" echo " proxy_redirect off;" echo " proxy_set_header Host \$host;" echo " proxy_set_header X-Real-IP \$remote_addr;" echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;" echo " client_max_body_size 40m;" echo " client_body_buffer_size 256k;" echo " " echo " proxy_connect_timeout 120;" echo " proxy_send_timeout 120;" echo " proxy_read_timeout 120;" echo " proxy_buffer_size 64k;" echo " proxy_buffers 4 64k;" echo " proxy_busy_buffers_size 64k;" echo " proxy_temp_file_write_size 64k;" echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;" echo " }" echo " #Static files location" echo " location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|html|flv|mp3)$ " echo " {" echo " root $www_path$1/www/;" echo "}" echo "}" exec 1>&3 sleep 1 echo " " sudo /etc/init.d/apache2 restart sudo /etc/init.d/nginx restart echo " ;)" echo "      http://$1" ;; esac
      
      





コードを少し理解しましょう:


  1. スクリプトを「コピー」することにした場合は、「<\ / Directory>」のバックスラッシュを削除します。 編集者が行を食べないように、バックスラッシュを追加しました。
  2. フロントエンド/バックエンドテクノロジーを使用しているため、各ホストは個別のApacheポート上にあり、NGINXでプロキシします。
ポートは/etc/apache2/ports.conf configにリストされている必要があります



 Listen 8080 Listen 8081 Listen 8082 Listen 8083 #__
      
      







$ {HOSTING_HOST}および$ {HOSTING_ROOT}はApache2変数です。 それらが必要です。

代わりに、変数を使用するか、アドレス/パスを明示的に指定できます。

また、$ {HOSTING_ROOT}は$ www_pathと同じ意味を持つため、使用できます。



わかったので、起動します


 sudo ./addvhost.sh test.ru 8080
      
      





ここで、「test.ru」はドメインの名前($ 1が割り当てられています)、「8080」はこのテストドメインが置かれるポート($ 2が割り当てられています)です。



その結果 、仮想ホスト用のディレクトリが自動的に作成されます。 必要なパラメーターを持つApacheおよびNginxの仮想ホスト構成も自動的に生成され、必要に応じて追加され、サービスが再起動されます。 利益。



PS。 もちろん、このスクリプトは非常に原始的であり、オリジナルのふりをしていませんが、初心者の開発者や管理者の生活を大幅に簡素化することができます。

ローカル開発では、MAMP Proを使用します。 上記のすべての機能、およびそれ以上の機能は、美しく便利なGUIを介して利用できますが、すべてがMacで動作するわけではなく、常に動作するわけではありませんが、どうにかして生きる必要があります。

PPS または、「すべての行」をエコーする代わりに、構成ファイルのテンプレートを使用できます。 しかし、今のところ、それは私にとってとても普通です。

時間があるでしょう-私は最終決定し、レイアウトします。



UPD-構成テンプレートを使用したスクリプトの新しいバージョンは、 ここから入手できます。

エコーの「タオル」は通常のsed -eに置き換えられました。 スクリプトはより柔軟でシンプルになりました。



UPD II-スクリプトと記事を更新しました。 この記事では、コードのハイライトを考慮し、スクリプトではいくつかのバグを台無しにしました。



All Articles