-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlaravel_deploy.sh
More file actions
executable file
·134 lines (112 loc) · 5.22 KB
/
laravel_deploy.sh
File metadata and controls
executable file
·134 lines (112 loc) · 5.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
# Check for root privileges
if [ "$EUID" -ne 0 ]; then
echo "Please run this script with sudo or as root."
exit
fi
echo "=========================================================="
echo " Automated LEMP, Laravel, MySQL & SSL Installer "
echo "=========================================================="
# 1. Collect User Input
read -p "Enter Project Name (e.g., my-app): " PROJECT_NAME
read -p "Enter Domain Name (e.g., example.com): " DOMAIN_NAME
read -p "Enter Email for SSL (e.g., admin@example.com): " SSL_EMAIL
read -p "Enter PHP Version (e.g., 8.2, 8.3+): " PHP_VERSION
# Generate a random password for the new MySQL user
DB_PASSWORD=$(openssl rand -base64 12)
DB_NAME=$(echo $PROJECT_NAME | tr '-' '_')
DB_USER="${DB_NAME}_user"
echo "----------------------------------------------------------"
echo "Step 1: Adding PHP Repository and Updating System..."
echo "----------------------------------------------------------"
apt update && apt upgrade -y
apt install software-properties-common -y
add-apt-repository ppa:ondrej/php -y
apt update
echo "----------------------------------------------------------"
echo "Step 2: Installing Nginx, MySQL and PHP $PHP_VERSION..."
echo "----------------------------------------------------------"
apt install nginx mysql-server certbot python3-certbot-nginx unzip curl -y
apt install php$PHP_VERSION-fpm php$PHP_VERSION-mysql php$PHP_VERSION-mbstring \
php$PHP_VERSION-xml php$PHP_VERSION-bcmath php$PHP_VERSION-curl \
php$PHP_VERSION-zip php$PHP_VERSION-intl -y
echo "----------------------------------------------------------"
echo "Step 3: Installing Composer..."
echo "----------------------------------------------------------"
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php
echo "----------------------------------------------------------"
echo "Step 4: Creating Database and User..."
echo "----------------------------------------------------------"
mysql -e "CREATE DATABASE $DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASSWORD';"
mysql -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"
echo "----------------------------------------------------------"
echo "Step 5: Creating Laravel Project..."
echo "----------------------------------------------------------"
cd /var/www
COMPOSER_ALLOW_SUPERUSER=1 composer create-project --prefer-dist laravel/laravel $PROJECT_NAME
echo "----------------------------------------------------------"
echo "Step 6: Configuring Laravel .env File..."
echo "----------------------------------------------------------"
cd /var/www/$PROJECT_NAME
sed -i "s/DB_CONNECTION=sqlite/DB_CONNECTION=mysql/" .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_PASSWORD/" .env
echo "----------------------------------------------------------"
echo "Step 7: Setting Permissions..."
echo "----------------------------------------------------------"
chown -R www-data:www-data /var/www/$PROJECT_NAME
chmod -R 775 /var/www/$PROJECT_NAME/storage
chmod -R 775 /var/www/$PROJECT_NAME/bootstrap/cache
echo "----------------------------------------------------------"
echo "Step 8: Configuring Nginx..."
echo "----------------------------------------------------------"
cat <<EOF > /etc/nginx/sites-available/$PROJECT_NAME
server {
listen 80;
server_name $DOMAIN_NAME;
root /var/www/$PROJECT_NAME/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php$PHP_VERSION-fpm.sock;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
EOF
ln -s /etc/nginx/sites-available/$PROJECT_NAME /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl restart nginx
echo "----------------------------------------------------------"
echo "Step 9: Installing SSL Certificate (Certbot)..."
echo "----------------------------------------------------------"
# Note: Ensure DNS is pointed to this server before running
certbot --nginx -d $DOMAIN_NAME --non-interactive --agree-tos -m $SSL_EMAIL
echo "=========================================================="
echo " INSTALLATION COMPLETE! 🎉 "
echo "=========================================================="
echo "URL: https://$DOMAIN_NAME"
echo "Project Path: /var/www/$PROJECT_NAME"
echo "PHP Version: $PHP_VERSION"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Pass: $DB_PASSWORD"
echo "=========================================================="