Bash를 사용하여 Apache 가상 호스트를 자동으로 생성하는 방법은 무엇입니까?

Bash를 사용하여 Apache 가상 호스트를 자동으로 생성하는 방법은 무엇입니까?

약 5년 전에 저는 Apache 가상 호스트를 자동으로 생성하기 위해 다음 Bash 스크립트를 만들었습니다.

#!/bin/bash

read -p "Have you created db credentials already?" yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) echo "Please create db credentials and then comeback;";;
esac

function read_and_verify  {
read -p "$1:" tmp1
read -p "$2:" tmp2
if [ "$tmp1" != "$tmp2" ]; then
    echo "Values unmatched. Please try again."; return 2
else
    read "$1" <<< "$tmp1"
fi
}

read_and_verify domain "Please enter the domain of your web application twice" 
read_and_verify dbrootp "Please enter the app DB root password twice" 
read_and_verify dbuserp "Please enter the app DB user password twice"

cat <<-EOF > /etc/apache2/sites-available/$domain_2.conf
<VirtualHost *:80>
    ServerAdmin admin@"$domain_2"
    ServerName ${domain_2}
    ServerAlias www.${domain_2}
    DocumentRoot $war/${domain_2}
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF

ln -sf /etc/apache2/sites-available/"$domain_2".conf /etc/apache2/sites-enabled/

나는 이것이 최선의 접근 방식이라고 생각하지 않습니다. 첫째, Apache가 그 이후로 업데이트되었을 수 있고 현재 구문이 다를 수 있고, 둘째, 코드의 일부가 직관적이지 않고(가독성이 낮음) 내가 뭔가가 있는지 궁금하기 때문입니다. 어떤 프로그램이든 사용하여 보다 표준적이고 효율적인 방식으로 Apache 가상 호스트 생성을 자동화할 수 있지만 여전히 Bash를 사용합니다(저는 Ansible 또는 유사한 도구를 사용하지 않습니다).

Bash를 사용하여 Apache 가상 호스트를 자동으로 생성하는 방법은 무엇입니까?

답변1

예, 스크립트가 정상적으로 보입니다. 여전히 작동해야 합니다 – apache2는극도로해당 구성 파일은 비교적 보수적입니다.

그러나 귀하의 구성을 살펴보면 귀하가필요다음과 같이 도메인별로 구성이 있습니다.mod_vhost_alias이 모듈을 사용하면 서비스하려는 각 도메인에 대한 하위 디렉터리를 만들고 작업을 완료할 수 있습니다. 이 모든 항목은 기본적으로 동일한 구성을 갖는 것으로 보입니다. 가상 호스트 구성, 스크립트 및 로깅 설정을 구성 파일 대신 데이터베이스에 저장할 수 있는 여러 타사 Apache 모듈도 있습니다.

코드의 일부가 직관적이지 않고(가독성이 낮음) 더 표준적이고 효율적인 방식으로 Apache 가상 호스트를 자동으로 생성하는 데 사용할 수 있지만 여전히 Bash를 사용하는 데 사용할 수 있는 프로그램이 있는지 궁금하기 때문입니다(저는 Ansible 또는 이와 유사한 것을 사용하지 않습니다) 도구) .

음, 외부 도구를 호출하는 경우 (원하는 경우) bash를 "떠날" 수 있습니다. 기본적으로 ansible 및 잘 입증된 apache2 역할 중 하나와 같이 다른 사람들이 서버 관리 자동화에 사용하는 도구를 사용할 수도 있습니다. bash 스크립트에 모든 것을 직접 작성하지 않아도 문제가 없습니다!

당신이 선택한 방법은 말씀하신 대로 꽤 타당합니다. 템플릿 파일에 템플릿을 작성하고 해당 파일을 스트리밍하여 sed새 프로필을 얻거나 jinja2더 복잡한 교체를 수행할 수 있습니다.

개인적으로 여기에서 몇 가지 애플리케이션 보안 안티 패턴을 볼 수 있습니다. 도메인 이름과 비밀번호를 수동으로 두 번 입력하라는 메시지가 표시됩니다. 누가 이런 일을 하나요? 나는 이러한 데이터베이스 비밀번호가 사람들이 즉석에서 생각하는 단어가 아니라 무작위로 생성된 긴 문자열이기를 원합니다.

관련 정보