Varnish에 사이트를 추가할 때 sed 명령 반복을 방지하는 방법은 무엇입니까?

Varnish에 사이트를 추가할 때 sed 명령 반복을 방지하는 방법은 무엇입니까?

이것은 Varnish를 설치하기 위한 스크립트입니다. VPS에 새로운 서버 환경을 설정할 때마다 실행합니다.

cd ~
apt-get update
apt-get install varnish -y
sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/000-default.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain1.tld.conf && a2ensite domain1.tld.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain2.tld.conf && a2ensite domain2.tld.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain3.tld.conf && a2ensite domain3.tld.conf
sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/domain4.tld.conf && a2ensite domain4.tld.conf
mkdir -p /etc/systemd/system/varnish.service.d # Be aware! You might not need this in the future.
cat <<-'VARNISH' > /etc/systemd/system/varnish.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
VARNISH
systemctl restart apache2.service && systemctl daemon-reload && systemctl restart varnish.service

이 코드는 특히 domain.tld의 sed 작업의 반복적 특성과 관련하여 상당히 "무거워" 보입니다.

필요한 경우 바니시를 제거하고 모든 변경 사항을 되돌리는 데 사용하는 비슷한 길이의 코드 조각이 있기 때문에 이것은 "더 무거워집니다".

내 질문:

설치 스크립트를 전체적으로 더 짧게 만들고(적어도 더 적은 수의 행, 아마도 더 적은 명령), 특히 sed 작업 수를 줄이기 위해 어떤 전략을 채택하시겠습니까?

노트:

  • 가장 먼저 해야 할 일은 ports.conf, 000-default.conf 및 각 사이트의 모든 .conf 파일을 하나의 작업으로 통합하는 것이라고 가정합니다. 어쩌면 for 루프를 통해서일 수도 있습니다 /etc/apache2/ports.conf/ && /etc/apache2/sites-available/*/.

답변1

함수와 GNU Parallel을 사용하여 중복 항목을 교체합니다.

cd ~
apt-get update
apt-get install varnish -y
sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf

myfunc() {
    sed -i 's/\*\:80/\*\:8080/g' /etc/apache2/sites-available/$1 && 
      a2ensite $1
}
export -f myfunc

parallel myfunc  {/} ::: /etc/apache2/sites-available/*

mkdir -p /etc/systemd/system/varnish.service.d # Be aware! You might not need this in the future.
cat <<-'VARNISH' > /etc/systemd/system/varnish.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
VARNISH
systemctl restart apache2.service && systemctl daemon-reload && systemctl restart varnish.service

관련 정보