Pandabot/prepare_server/Prepare_RHEL-Debian.sh
2024-12-15 23:45:12 +00:00

94 lines
3.4 KiB
Bash

#!/bin/bash
# Ensure the script is run as root
[ "$(id -u)" -ne 0 ] && echo "ERR: must be run as: root" && exit 1
# Detect the operating system
OS=$(cat /etc/*release | grep -i "centos\|debian" | head -n 1 | awk -F= '{print $2}' | tr -d '[:space:]')
if [[ "$OS" =~ "CentOS" ]]; then
PACKAGE_MANAGER="dnf"
REPO_INSTALL_CMD="dnf install"
PHP_INSTALL_CMD="dnf module install php:remi-8.3 -y"
elif [[ "$OS" =~ "Debian" ]]; then
PACKAGE_MANAGER="apt"
REPO_INSTALL_CMD="apt-get install"
PHP_INSTALL_CMD="apt-get install php php-cli php-fpm php-pgsql php-yaml php-pdo -y"
else
echo "ERR: Unsupported OS, must be CentOS or Debian."
exit 1
fi
# Install necessary repositories for CentOS or Debian
if [[ "$OS" =~ "CentOS" ]]; then
$REPO_INSTALL_CMD https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y
$REPO_INSTALL_CMD https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
$PHP_INSTALL_CMD
elif [[ "$OS" =~ "Debian" ]]; then
$REPO_INSTALL_CMD lsb-release wget curl -y
# PHP installation is already included in the above command
fi
# Install required packages (PostgreSQL, Apache, PHP, and utilities)
$REPO_INSTALL_CMD net-tools postgresql postgresql-server httpd php-fpm -y
$REPO_INSTALL_CMD php-pecl-yaml php-pgsql php-pdo -y
# Setup PostgreSQL
if [[ "$OS" =~ "CentOS" ]]; then
/usr/bin/postgresql-setup --initdb
systemctl enable postgresql
systemctl start postgresql
elif [[ "$OS" =~ "Debian" ]]; then
service postgresql start
fi
# Configure PostgreSQL to allow external connections securely
cd /var/lib/pgsql/data || exit
cp pg_hba.conf pg_hba.conf.backup
# Allow connections from any IP (recommended to restrict IP range later)
sed -i 's|host all all 127.0.0.1/32 ident|host all all 0.0.0.0/0 md5|g' pg_hba.conf
# Restart PostgreSQL to apply changes
systemctl restart postgresql
# Create the Pandabot database
su - postgres -c 'psql -c "CREATE DATABASE pandabot;"'
# Display configuration instructions
echo -e "\n------------------------- --- -- - -"
echo "Edit conf/pandabot.conf and conf/channels.conf"
echo "Database settings:"
echo "dbname: pandabot"
echo "dbhost: $(hostname -I | awk '{print $1}')"
echo "dbport: 5432"
echo "dbuser: postgres"
echo "dbpass: <set_your_password_here>"
echo -e "\nTo setup the Telegram session, run: ./bot.sh setuptg"
echo "To start the bot, run: ./bot.sh start"
echo "To stop the bot, run: ./bot.sh stop"
echo -e "------------------------- --- -- - -\n"
# Check if firewall is enabled and add necessary rules for PostgreSQL and Apache
if systemctl is-active --quiet firewalld; then
echo "Configuring firewall for PostgreSQL (5432) and HTTP (80/443)"
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
elif ufw status | grep -q "active"; then
echo "Configuring UFW for PostgreSQL (5432) and HTTP (80/443)"
ufw allow 5432/tcp
ufw allow http
ufw allow https
ufw reload
fi
# SELinux setup for CentOS (optional step, recommended to allow postgresql and httpd)
if [[ "$OS" =~ "CentOS" ]]; then
echo "Setting up SELinux to allow PostgreSQL and Apache to work together"
setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1
fi
echo "Installation and setup complete."