laravel-project/install-laravel.sh

93 lines
2.8 KiB
Bash

#!/bin/bash
# Update & Upgrade & Install Sudo
apt-get update && apt-get upgrade && apt-get install sudo -y
# Make Sure SSH Is Installed And Enabled
#apt install openssh-server -y
#systemctl enable ssh
#systemctl start ssh
# Installation script for Laravel web app on Debian 12 LXC container
echo "=== Laravel LXC Setup Script ==="
read -p "Enter your Laravel project name (directory name): " APP_NAME
read -p "Enter your Laravel project Git repository URL (leave blank to create a new project): " GIT_REPO
read -p "Enter database username for MariaDB (example: laravel_user): " DB_USER
read -s -p "Enter password for database user: " DB_PASS
echo ""
read -p "Enter Larvel database name (example: laravel_db): " DB_NAME
echo "Updating package lists and installing dependencies..."
apt update && apt upgrade -y
apt install -y apache2 mariadb-server php php-mysql php-curl php-bcmath php-json php-mbstring php-xml php-tokenizer php-zip php-sqlite3 unzip git curl
echo "Installing Composer..."
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
echo "Setting up the database..."
mysql -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;"
mysql -e "CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
mysql -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"
cd /var/www/
if [ -z "$GIT_REPO" ]; then
echo "Creating new Laravel project called $APP_NAME"
composer create-project --prefer-dist laravel/laravel $APP_NAME
else
echo "Cloning Laravel app from $GIT_REPO into $APP_NAME"
git clone $GIT_REPO $APP_NAME
cd $APP_NAME
composer install
fi
cd /var/www/$APP_NAME
echo "Setting permissions..."
chown -R www-data:www-data /var/www/$APP_NAME
chmod -R 775 storage bootstrap/cache
echo "Configuring Apache for Laravel..."
a2enmod rewrite
cat > /etc/apache2/sites-available/$APP_NAME.conf <<EOF
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/$APP_NAME/public
<Directory /var/www/$APP_NAME>
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/$APP_NAME-error.log
CustomLog \${APACHE_LOG_DIR}/$APP_NAME-access.log combined
</VirtualHost>
EOF
a2dissite 000-default.conf
a2ensite $APP_NAME.conf
systemctl reload apache2
systemctl restart apache2
echo "Creating Laravel environment file..."
cp .env.example .env
sed -i "s/DB_DATABASE=laravel/DB_DATABASE=$DB_NAME/" .env
sed -i "s/DB_USERNAME=root/DB_USERNAME=$DB_USER/" .env
sed -i "s/DB_PASSWORD=/DB_PASSWORD=$DB_PASS/" .env
sed -i "s/DB_CONNECTION=mysql/DB_CONNECTION=mysql/" .env
echo "Generating application key and running migrations..."
php artisan key:generate
php artisan migrate --force
echo "Setup complete! Your Laravel application '$APP_NAME' is hosted and running."
echo "Access it via the container's IP address in a browser."
exit 0