システム:Parallelsで実行されているUbuntu 14.04 LAMP VM Vagrantでセットアップ
Macラップトップの開発者VM)に新しいWebプロジェクトを追加するための最初の重要なシェルスクリプトを書いています。
フォルダとファイルをコピーして、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/$CONFFILE
をSudo 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の条件に反しない限り、スクリプトを改善するための他の提案は大歓迎です。
要するに、答えはa2ensite
は、ファイルへのパス全体ではなく、site.confの名前だけが必要です。
そう Sudo a2ensite example-com-80.conf
私はこれを 以前の回答 @ raina77owで見つけました。