Автор Гілка: Автоматизація створення сайтів на хостингу  (Прочитано 8816 раз)

Відсутній Sandr

  • Графоман
  • ****
  • дописів: 461
  • Карма: +0/-0
  • Мій вибір — Лінукс!
    • ФОП Осипенко
Зібрав команди по створенню нового сайту на хостингу в такий скрипт:
#!/bin/bash
# Скрипт створення сайту eurohost.ovh на сервері EuroHost 01 - Debian 10 - Poland

# Створення теки eurohost.ovh для розміщення файлів системи керування контентом
echo "Створення теки eurohost.ovh для розміщення файлів системи керування контентом..."
mkdir -p /var/www/eurohost.ovh
chown www-data:www-data /var/www/eurohost.ovh
echo "Теку eurohost.ovh створено!"
ls -l /var/www/ | grep eurohost

# Звантаження архіву з системою керування контентом на сервер
echo "Звантаження архіву з системою керування контентом на сервер..."
wget -P /root/setup/joomla https://downloads.joomla.org/cms/joomla3/3-9-27/Joomla_3-9-27-Stable-Full_Package.zip
echo "Архів з системою керування контентом звантажено!"
ls -l /root/setup/joomla/

# Розпакування архіву з системою керування контентом в теку сайту
echo "Розпакування архіву з системою керування контентом в теку сайту..."
unzip -q /root/setup/joomla/Joomla_3-9-27-Stable-Full_Package.zip -d /var/www/eurohost.ovh/
chown -R www-data:www-data /var/www/eurohost.ovh
echo "Розпакування архіву в теку сайту завершено!"
ls -l /var/www/eurohost.ovh/

# Видалення архіву з системою керування контентом з серверу
echo "Видалення архіву з системою керування контентом з серверу..."
rm /root/setup/joomla/Joomla_3-9-27-Stable-Full_Package.zip
echo "Видалення архіву завершено!"
ls -l /root/setup/joomla/

# Створення нового конфігураційного файлу віртуального хосту для apache2
echo "Створення нового конфігураційного файлу віртуального хосту для apache2..."
echo "# Віртуальний хост для сайту eurohost.ovh" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "<VirtualHost *:80>" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "  ServerAdmin admin@eurohost.ovh" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "  ServerName eurohost.ovh" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "  ServerAlias www.eurohost.ovh" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "  DocumentRoot /var/www/eurohost.ovh" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "  ErrorLog \${APACHE_LOG_DIR}/eurohost.ovh_error.log" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "  CustomLog \${APACHE_LOG_DIR}/eurohost.ovh_access.log combined" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "</VirtualHost>" >> /etc/apache2/sites-available/eurohost.ovh.conf
echo "Конфігураційний файл віртуального хосту створено!"
ls -l /etc/apache2/sites-available/eurohost.ovh.conf

# Увімкнення сайту (створюється посилання в теці /etc/apache2/sites-enabled/)
echo "Увімкнення сайту eurohost.ovh..."
a2ensite eurohost.ovh
systemctl reload apache2
echo "Сайт eurohost.ovh увімкнено!"
ls -l /etc/apache2/sites-enabled/eurohost.ovh.conf

# Створення бази даних, користувача і надання прав йому на базу даних
echo "Створення бази даних eurohost і користувача eurohost..."
mysql -e "CREATE DATABASE eurohost;"
echo "Базу даних eurohost створено!"
mysql -N -e "SHOW DATABASES;" | grep eurohost
mysql -e "CREATE USER eurohost@localhost;"
mysql -e "ALTER USER eurohost@localhost IDENTIFIED BY \"password\";"
echo "Користувача eurohost створено!"
mysql -N -e "SELECT user FROM mysql.user;" | grep eurohost
mysql -e "GRANT ALL PRIVILEGES ON eurohost.* TO eurohost@localhost;"
mysql -e "FLUSH PRIVILEGES;"
echo "Створення сайту завершено успішно."

Тепер хотілося б ще вдосконалити цей скрипт, щоб він при запуску запитував інформацію і підставляв дані в змінні.

Щоб був запит на введення наступних даних: домену, версії Joomla, назви та пароля бази даних.

Підкажіть, як практично реалізувати такий запит на введення даних та внести ці дані в змінні?
openSUSE + KDE

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
echo "Ведіть назву домену: "
read domain_name

if [[ ! -z "$domain_name" ]]; then
    echo "Назва домену: $domain_name"
else
    echo "Ведіть будь ласка назву домену: "
    read domain_name
fi

Перевірка правильності вводу може бути, звичайно, більш строгою і знаходитись в циклі, який переривається тільки за умови правильного вводу, якщо цей скрипт для когось іншого.
« Змінено: 2021-06-18 12:59:09 від tech »

Axmed

  • Гість
read -p 'домен> ' DOMAIN
read -s -p 'пароль> ' PASSWORD

Блок зі створення конфігурації зручніше записувати через конструкцію doc-here:
cat <<EOF >>/etc/apache2/sites-available/eurohost.ovh.conf
# Віртуальний хост для сайту eurohost.ovh
<VirtualHost *:80>
  ServerAdmin admin@eurohost.ovh
  ServerName eurohost.ovh
  ServerAlias www.eurohost.ovh
  DocumentRoot /var/www/eurohost.ovh
  ErrorLog ${APACHE_LOG_DIR}/eurohost.ovh_error.log
  CustomLog ${APACHE_LOG_DIR}/eurohost.ovh_access.log combined
</VirtualHost>
EOF

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Рекомендую другим рядком поставити "set -ue -o pipefail", який ввімкне неофіційний строгий режим для bash.

Це означатиме, що якщо будь-яка змінна не матиме значення, коли її підставлятимуть, завершить роботу скрипта з помилкою, що дозволить не боятися помилок в іменах змінних. Але тоді доведеться всім змінним присвоїти початкове значення, або підставляти змінні як "${FOO:-default value}"
Також, будь-яка команда, яка поверне ненульовий код завершення, припинить виконання скрипта без виводу повідомлення про помилку. Це дозволить не боятися, що скрипт продовжить виконання з неправильними даними після помилки. Але тоді до кожної команди, яка може потенційно зазбоїти, потрібно буде додавати обробник помилок, напр. foo --bar || { echo "ERROR: can't do foo --bar" >&2; exit 1; }або
error() {
  echo "ERROR: $*"
  exit 1
}

foo --bar || error "Can't do foo --bar"

Я написав цілу систему скриптів https://github.com/vlisivka/bash-modules для роботи в такому стилі.
[Fedora Linux]