web-dev-qa-db-ja.com

a2ensite 'サイト:___は存在しません'エラー、.confファイルを使用しても

システム:Parallelsで実行されているUbuntu 14.04 LAMP VM Vagrantでセットアップ

Macラップトップの開発者VM)に新しいWebプロジェクトを追加するための最初の重要なシェルスクリプトを書いています。

  1. / var/www /にデフォルトのフォルダ構造を作成します
  2. .confvhostファイルを/ etc/Apache2/sitesに追加します-sedを介してプレースホルダーを置き換える新しいドメインで利用可能
  3. 新しいサイトを有効にして、Apacheを再起動します

フォルダとファイルをコピーして、sedがindex.htmlと.conf vhostファイルをカスタマイズして満足しているようですが、a2ensiteが/ etc/Apache2/sites-available /に.confファイルを表示していないようです。

サイトを有効にする前に、その存在をテストし、デバッグリストls -al /etc/Apache2/sites-available/ | grep $CONFFILEを出力します。

非常に一般的な問題のように思われるUbuntu13(または14)以降、.conf拡張子を持つことの重要性についてここや他の場所で読みました。私の仮想ホストファイルの拡張子は.confなので、これは別の問題のようです。

誰かが私を正しい方向に向けることができますか?この特定の問題に関する他の投稿を見つけることができませんでした。

$CONFFILEコマンドのa2ensite変数展開でエラーが発生したように感じます。これは、ディレクトリリストに次のように表示されていても、エラーに.conf拡張子が表示されないためです。

ERROR: Site /etc/Apache2/sites-available/example-com-80 does not exist!

編集:

以下のMichealの提案に従って、コマンドラインからa2ensiteを実行した後、正常に解析されたように見えましたが、それでも拡張子は表示されません。

$ Sudo a2ensite example-com-80.conf
Enabling site example-com-80.
To activate the new configuration, you need to run:
  service Apache2 reload

編集の終了

編集:答えが見つかりました

より広い用語で検索した後、Ubuntu 14.04Vagrantなどの代わりにa2ensiteを見つけました 2年前の質問 ここで@ raina77owは、a2ensiteはサイト名だけを求めており、パス全体。 Sudo a2ensite /etc/Apache2/sites-available/$CONFFILESudo a2ensite $CONFFILEに変更すると、スクリプトが意図したとおりに機能します。これは、コマンドラインからa2ensiteを実行しようとした以前の試みが失敗した理由も説明しています。/var/www/templates /内から実行し、パス全体を.confファイルに渡していました。

さて、stackoverflowの質問ですが、これが私が持っている限られた評判のソリューションであることをどのように示すのが最善ですか?そして、適切にクレジットを与えますか?

解決策については上記の編集を参照してください

Example.comでのコンソール出力:

$ ./newvhost
New Server Name with Top Level Domain: example.com
Validating: example.com
New DocumentRoot created: /var/www/example
Copying template structure
Creating: example-com-80.conf
-rw-r--r--  1 root root  811 Feb 17 15:11 example-com-80.conf
Enabling site
ERROR: Site /etc/Apache2/sites-available/example-com-80 does not exist!

newvhostスクリプト:

OLDIFS=$IFS
IFS="."
printf "New Server Name with Top Level Domain: "
read NEW_SUBDOMAIN NEW_TLD
IFS=$OLDIFS

NEW_FULL_NAME="$NEW_SUBDOMAIN.$NEW_TLD"

echo "Validating: $NEW_FULL_NAME"

if [[ "$NEW_TLD" != "com" && "$NEW_TLD" != "dev" ]] ; then
  echo -e "\E[31;1mTLD must be com or dev! \033[0m" 
  exit 1
fi


if [ -d "/var/www/$NEW_SUBDOMAIN" ]; then
  echo -e "\E[31;1mRoot directory /var/www/$NEW_SUBDOMAIN already exists!\033[0m"
  exit 1
fi

mkdir /var/www/$NEW_SUBDOMAIN

if [ -d "/var/www/$NEW_SUBDOMAIN" ]; then
    echo "New DocumentRoot created: /var/www/$NEW_SUBDOMAIN"
else  
  echo -e "\E[31;1mUnable to make directory\033[0m"
  exit 1
fi

echo "Copying template structure"

cp /var/www/templates/structure/. /var/www/$NEW_SUBDOMAIN/ -R

sed -i "s/TEMPLATE/$NEW_FULL_NAME/g" /var/www/$NEW_SUBDOMAIN/index.html

CONFFILE="$NEW_SUBDOMAIN-$NEW_TLD-80.conf"

echo "Creating: $CONFFILE"

Sudo cp /var/www/templates/vhost_template.conf /etc/Apache2/sites-available/$CONFFILE

Sudo sed -i "s/FULLNAME/$NEW_FULL_NAME/g" /etc/Apache2/sites-available/$CONFFILE
Sudo sed -i "s/DOMAINNAME/$NEW_SUBDOMAIN/g" /etc/Apache2/sites-available/$CONFFILE

if [ -e "/etc/Apache2/sites-available/$CONFFILE" ]; then
  ls -al /etc/Apache2/sites-available/ | grep $CONFFILE # DEGBUG Listing to  doubly confirm $CONFFILE exists
  echo "Enabling site"
  Sudo a2ensite /etc/Apache2/sites-available/$CONFFILE
  Sudo Apache2ctl graceful
fi

ありがとう、

StackOverflowの条件に反しない限り、スクリプトを改善するための他の提案は大歓迎です。

11
jslanger

要するに、答えはa2ensiteは、ファイルへのパス全体ではなく、site.confの名前だけが必要です。

そう Sudo a2ensite example-com-80.conf

私はこれを 以前の回答 @ raina77owで見つけました。

21
jslanger