#!/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 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 "Choose database (mysql/sqlite): " DB_TYPE if [[ "$DB_TYPE" == "mysql" ]]; then 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 Laravel database name (example: laravel_db): " DB_NAME fi echo "Updating package lists and installing dependencies..." apt update && apt upgrade -y echo "Installing common packages..." apt install -y apache2 php php-curl php-bcmath php-json php-mbstring php-xml php-tokenizer php-zip unzip git curl if [[ "$DB_TYPE" == "mysql" ]]; then echo "Installing MariaDB and PHP MySQL extensions..." apt install -y mariadb-server php-mysql elif [[ "$DB_TYPE" == "sqlite" ]]; then echo "Installing PHP SQLite extension..." apt install -y php-sqlite3 else echo "Unsupported database type: $DB_TYPE" exit 1 fi echo "Installing Composer..." curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer echo "Setting up the database..." if [[ "$DB_TYPE" == "mysql" ]]; then 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;" fi 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 if [[ "$DB_TYPE" == "sqlite" ]]; then echo "Creating SQLite database file..." touch database/database.sqlite fi 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 < ServerAdmin webmaster@localhost DocumentRoot /var/www/$APP_NAME/public AllowOverride All Require all granted ErrorLog \${APACHE_LOG_DIR}/$APP_NAME-error.log CustomLog \${APACHE_LOG_DIR}/$APP_NAME-access.log combined 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_CONNECTION=.*/DB_CONNECTION=$DB_TYPE/" .env if [[ "$DB_TYPE" == "mysql" ]]; then sed -i "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" .env sed -i "s/DB_USERNAME=.*/DB_USERNAME=$DB_USER/" .env sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" .env elif [[ "$DB_TYPE" == "sqlite" ]]; then sed -i "s|DB_DATABASE=.*|DB_DATABASE=$(pwd)/database/database.sqlite|" .env sed -i "s/DB_USERNAME=.*/DB_USERNAME=/" .env sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=/" .env fi 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