templave v1
This commit is contained in:
202
deploy/scripts/server-setup.sh
Normal file
202
deploy/scripts/server-setup.sh
Normal file
@@ -0,0 +1,202 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Laravel Server Setup Script for Ubuntu 24.04
|
||||
# Run as root or with sudo
|
||||
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "Laravel Server Setup for Ubuntu 24.04"
|
||||
echo "=========================================="
|
||||
|
||||
# Update system
|
||||
echo "[1/8] Updating system packages..."
|
||||
apt update && apt upgrade -y
|
||||
|
||||
# Install essential packages
|
||||
echo "[2/8] Installing essential packages..."
|
||||
apt install -y \
|
||||
software-properties-common \
|
||||
curl \
|
||||
git \
|
||||
unzip \
|
||||
supervisor \
|
||||
acl
|
||||
|
||||
# Add PHP repository and install PHP 8.3
|
||||
echo "[3/8] Installing PHP 8.3 and extensions..."
|
||||
add-apt-repository -y ppa:ondrej/php
|
||||
apt update
|
||||
apt install -y \
|
||||
php8.3-fpm \
|
||||
php8.3-cli \
|
||||
php8.3-mysql \
|
||||
php8.3-pgsql \
|
||||
php8.3-sqlite3 \
|
||||
php8.3-redis \
|
||||
php8.3-mbstring \
|
||||
php8.3-xml \
|
||||
php8.3-curl \
|
||||
php8.3-zip \
|
||||
php8.3-bcmath \
|
||||
php8.3-intl \
|
||||
php8.3-gd \
|
||||
php8.3-imagick \
|
||||
php8.3-opcache
|
||||
|
||||
# Install Composer
|
||||
echo "[4/8] Installing Composer..."
|
||||
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
# Install Node.js 20.x
|
||||
echo "[5/8] Installing Node.js 20.x..."
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||||
apt install -y nodejs
|
||||
|
||||
# Database selection
|
||||
echo "[6/8] Database Installation..."
|
||||
echo ""
|
||||
echo "Select database server to install:"
|
||||
echo "1) MySQL 8.0"
|
||||
echo "2) PostgreSQL 16"
|
||||
echo "3) SQLite only (no server needed)"
|
||||
echo "4) Both MySQL and PostgreSQL"
|
||||
read -p "Enter choice [1-4]: " DB_CHOICE
|
||||
|
||||
case $DB_CHOICE in
|
||||
1)
|
||||
apt install -y mysql-server
|
||||
systemctl enable mysql
|
||||
systemctl start mysql
|
||||
echo "MySQL 8.0 installed."
|
||||
echo ""
|
||||
echo "To secure MySQL, run: sudo mysql_secure_installation"
|
||||
echo "To create database:"
|
||||
echo " sudo mysql"
|
||||
echo " CREATE DATABASE your_app;"
|
||||
echo " CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'password';"
|
||||
echo " GRANT ALL PRIVILEGES ON your_app.* TO 'your_user'@'localhost';"
|
||||
echo " FLUSH PRIVILEGES;"
|
||||
;;
|
||||
2)
|
||||
apt install -y postgresql postgresql-contrib
|
||||
systemctl enable postgresql
|
||||
systemctl start postgresql
|
||||
echo "PostgreSQL 16 installed."
|
||||
echo ""
|
||||
echo "To create database:"
|
||||
echo " sudo -u postgres psql"
|
||||
echo " CREATE DATABASE your_app;"
|
||||
echo " CREATE USER your_user WITH ENCRYPTED PASSWORD 'password';"
|
||||
echo " GRANT ALL PRIVILEGES ON DATABASE your_app TO your_user;"
|
||||
;;
|
||||
3)
|
||||
echo "SQLite selected - no server installation needed."
|
||||
echo "SQLite is included with PHP (php8.3-sqlite3 already installed)."
|
||||
;;
|
||||
4)
|
||||
apt install -y mysql-server postgresql postgresql-contrib
|
||||
systemctl enable mysql postgresql
|
||||
systemctl start mysql postgresql
|
||||
echo "Both MySQL and PostgreSQL installed."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Install Redis
|
||||
echo "[7/8] Installing Redis..."
|
||||
apt install -y redis-server
|
||||
systemctl enable redis-server
|
||||
systemctl start redis-server
|
||||
|
||||
# Web server selection
|
||||
echo "[8/8] Web Server Installation..."
|
||||
echo ""
|
||||
echo "Select web server to install:"
|
||||
echo "1) Nginx (recommended for Nginx Proxy Manager setup)"
|
||||
echo "2) Apache"
|
||||
echo "3) Both"
|
||||
echo "4) Skip (install manually later)"
|
||||
read -p "Enter choice [1-4]: " WEB_SERVER_CHOICE
|
||||
|
||||
case $WEB_SERVER_CHOICE in
|
||||
1)
|
||||
apt install -y nginx
|
||||
systemctl enable nginx
|
||||
systemctl start nginx
|
||||
echo "Nginx installed."
|
||||
;;
|
||||
2)
|
||||
apt install -y apache2 libapache2-mod-fcgid
|
||||
a2enmod rewrite headers ssl proxy_fcgi deflate expires setenvif
|
||||
systemctl enable apache2
|
||||
systemctl start apache2
|
||||
echo "Apache installed with required modules."
|
||||
;;
|
||||
3)
|
||||
apt install -y nginx apache2 libapache2-mod-fcgid
|
||||
a2enmod rewrite headers ssl proxy_fcgi deflate expires setenvif
|
||||
systemctl enable nginx apache2
|
||||
# Stop Apache by default to avoid port conflict
|
||||
systemctl stop apache2
|
||||
systemctl start nginx
|
||||
echo "Both installed. Nginx is running. Apache is stopped (start manually when needed)."
|
||||
;;
|
||||
4)
|
||||
echo "Skipping web server installation."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Configure PHP-FPM
|
||||
echo ""
|
||||
echo "Configuring PHP-FPM..."
|
||||
cat > /etc/php/8.3/fpm/conf.d/99-laravel.ini << 'EOF'
|
||||
upload_max_filesize = 100M
|
||||
post_max_size = 100M
|
||||
max_execution_time = 300
|
||||
memory_limit = 512M
|
||||
opcache.enable = 1
|
||||
opcache.memory_consumption = 256
|
||||
opcache.interned_strings_buffer = 16
|
||||
opcache.max_accelerated_files = 10000
|
||||
opcache.validate_timestamps = 0
|
||||
EOF
|
||||
|
||||
systemctl restart php8.3-fpm
|
||||
|
||||
# Create web directory
|
||||
echo ""
|
||||
echo "Creating web directory structure..."
|
||||
mkdir -p /var/www
|
||||
chown -R www-data:www-data /var/www
|
||||
|
||||
# Setup firewall
|
||||
echo ""
|
||||
echo "Configuring UFW firewall..."
|
||||
ufw allow OpenSSH
|
||||
ufw allow 'Nginx Full' 2>/dev/null || true
|
||||
ufw allow 'Apache Full' 2>/dev/null || true
|
||||
ufw --force enable
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Server setup complete!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Installed:"
|
||||
echo " - PHP 8.3 with FPM and extensions (MySQL, PostgreSQL, SQLite drivers)"
|
||||
echo " - Composer"
|
||||
echo " - Node.js 20.x"
|
||||
echo " - Database server (based on selection)"
|
||||
echo " - Redis"
|
||||
echo " - Web server (based on selection)"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Create database and user for your selected database"
|
||||
echo " 2. Clone your Laravel app to /var/www/your-app"
|
||||
echo " 3. Copy appropriate .env file from deploy/production/"
|
||||
echo " - .env.mysql.production"
|
||||
echo " - .env.pgsql.production"
|
||||
echo " - .env.sqlite.production"
|
||||
echo " 4. Configure web server (use configs from deploy/nginx or deploy/apache)"
|
||||
echo " 5. Set permissions: deploy/scripts/fix-permissions.sh"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user