- Aşağıdaki bağlantıdan WebKur.sh Scripts dosyalarını indirin veya 2.Seçenekte verilen kodu webkur.sh olarak kendiniz kayıt edebilirsiniz!
-
#!/usr/bin/env bash
# Ubuntu 22.04 LAMP (Apache + PHP 7.4 + MySQL 8) + phpMyAdmin + php-ssh2 Kurulum Scripti
# CSArea.org - Onur MASALCI (MrStipFan)
# Test edilen: Ubuntu 22.04 Jammy (amd64)
# Tekrar çalıştırılabilir, güvenli varsayılanlar içerir.
set -euo pipefail
### ====== Kullanıcıya özel AYARLAR (ENV ile override edilebilir) ======
SERVER_NAME="${SERVER_NAME:-localhost}"
TIMEZONE="${TIMEZONE:-Europe/Istanbul}"
WEB_ROOT="${WEB_ROOT:-/var/www/html}"
PHPMYADMIN_DIR="${PHPMYADMIN_DIR:-$WEB_ROOT/phpmyadmin}"
# Parolaları otomatik üret (ENV ile verilen varsa onları kullan)
MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$(openssl rand -base64 18 | tr -d '=+/.' | cut -c1-20)}"
PHPMYADMIN_BLOWFISH_SECRET="${PHPMYADMIN_BLOWFISH_SECRET:-$(openssl rand -base64 32 | tr -d '=+/' | cut -c1-32)}"
### ====== Ön kontroller ======
if [[ $EUID -ne 0 ]]; then
echo "CSArea.org - Bu script root olarak çalıştırılmalıdır. (sudo bash ...)" >&2
exit 1
fi
if ! grep -qi "22.04" /etc/os-release; then
echo "CSArea.org Uyarı: Bu script Ubuntu 22.04 için hazırlandı. Devam ediliyor..." >&2
fi
export DEBIAN_FRONTEND=noninteractive
### ====== Paket listesi güncelle ======
apt-get update -y
apt-get install -y software-properties-common curl ca-certificates lsb-release apt-transport-https gnupg
### ====== Apache kurulum ======
apt-get install -y apache2
a2enmod rewrite headers ssl
# ServerName uyarısını sustur
echo "ServerName ${SERVER_NAME}" >/etc/apache2/conf-available/servername.conf || true
a2enconf servername
### ====== PHP 7.4 (Ondrej PPA) ======
# PPA yoksa ekle
if ! apt-cache policy | grep -q "ppa.launchpadcontent.net/ondrej/php"; then
add-apt-repository -y ppa:ondrej/php
apt-get update -y
fi
# PHP 7.4 ve yaygın eklentiler
apt-get install -y \
libapache2-mod-php7.4 php7.4 php7.4-cli php7.4-common \
php7.4-mysql php7.4-xml php7.4-curl php7.4-zip php7.4-gd php7.4-mbstring \
php7.4-bcmath php7.4-intl php7.4-readline
# SSH2 eklentisi (önce paket)
apt-get install -y php-ssh2 || true
# Paket bulunmazsa PECL fallback
if ! php -m | grep -qi '^ssh2$'; then
echo "php-ssh2 paketi bulunamadı, PECL ile kuruluyor..."
apt-get install -y php7.4-dev php-pear libssh2-1-dev build-essential
yes '' | pecl install ssh2-1.4.1
echo "extension=ssh2.so" > /etc/php/7.4/mods-available/ssh2.ini
phpenmod -v 7.4 ssh2
fi
# PHP ini ayarları (CLI ve Apache SAPI)
for ini in /etc/php/7.4/apache2/php.ini /etc/php/7.4/cli/php.ini; do
[[ -f "$ini" ]] || continue
sed -i "s@^;*date.timezone =.*@date.timezone = ${TIMEZONE}@g" "$ini"
sed -i "s@^;*memory_limit =.*@memory_limit = 512M@g" "$ini"
sed -i "s@^;*upload_max_filesize =.*@upload_max_filesize = 128M@g" "$ini"
sed -i "s@^;*post_max_size =.*@post_max_size = 128M@g" "$ini"
sed -i "s@^;*max_execution_time =.*@max_execution_time = 120@g" "$ini"
done
### ====== MySQL Server (8.x) ======
if ! dpkg -s mysql-server >/dev/null 2>&1; then
apt-get install -y mysql-server
fi
systemctl enable --now mysql
# Root erişimini parola ile ayarla (idempotent)
# Ubuntu varsayılanı 'auth_socket' olabilir, aşağıdaki komutlar bunu düzeltiyor.
MYSQL_TMP_SQL=$(mktemp)
cat >"$MYSQL_TMP_SQL" <<SQL
-- Root kullanıcıyı parola ile erişecek şekilde ayarla
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';
FLUSH PRIVILEGES;
SQL
# Root soket ile giriş çoğunlukla parola istemez; hata alırsa yoksay.
mysql --protocol=socket -u root < "$MYSQL_TMP_SQL" || true
rm -f "$MYSQL_TMP_SQL"
### ====== phpMyAdmin (latest tarball) ======
# Paket sürümleri sık sık dependency problemi çıkardığı için resmi tarball kullanıyoruz.
if [[ ! -d "$PHPMYADMIN_DIR" ]]; then
TMPDIR=$(mktemp -d)
cd "$TMPDIR"
# Resmi "latest" arşiv (all-languages)
curl -fsSL -o pma.tar.gz https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
tar -xzf pma.tar.gz
PMA_SRC_DIR=$(find . -maxdepth 1 -type d -name "phpMyAdmin-*" | head -n1)
mkdir -p "$(dirname "$PHPMYADMIN_DIR")"
mv "$PMA_SRC_DIR" "$PHPMYADMIN_DIR"
cd "$PHPMYADMIN_DIR"
# config.inc.php oluştur
cat > "$PHPMYADMIN_DIR/config.inc.php" <<'CFG'
<?php
/* phpMyAdmin basic config (auto-generated by CSArea.org installer script) */
declare(strict_types=1);
$cfg = [];
$cfg['blowfish_secret'] = '__BLOWFISH_SECRET__';
$cfg['TempDir'] = __DIR__ . '/tmp';
$cfg['UploadDir'] = __DIR__ . '/upload';
$cfg['SaveDir'] = __DIR__ . '/save';
$cfg['Servers'] = [
1 => [
'auth_type' => 'cookie',
'host' => 'localhost',
'compress' => false,
'AllowNoPassword' => false,
'port' => 3306,
'ssl' => false,
],
];
CFG
mkdir -p "$PHPMYADMIN_DIR/tmp" "$PHPMYADMIN_DIR/upload" "$PHPMYADMIN_DIR/save"
chown -R www-data:www-data "$PHPMYADMIN_DIR"
find "$PHPMYADMIN_DIR" -type d -exec chmod 755 {} \;
find "$PHPMYADMIN_DIR" -type f -exec chmod 644 {} \;
# Blowfish secret yerleştir
sed -i "s@__BLOWFISH_SECRET__@${PHPMYADMIN_BLOWFISH_SECRET}@g" "$PHPMYADMIN_DIR/config.inc.php"
fi
### ====== Apache vhost ve izinler ======
# Varsayılan site klasörü hazırlanır
mkdir -p "$WEB_ROOT"
cat > "$WEB_ROOT/index.php" <<'PHP'
<?php
echo "<h2>CSArea.org - Apache + PHP 7.4</h2>";
echo "<p>PHP Version: " . phpversion() . "</p>";
echo "<p>Server: " . htmlspecialchars($_SERVER['SERVER_SOFTWARE'] ?? '') . "</p>";
echo "<p><a href='phpinfo.php'>phpinfo()</a></p>";
PHP
cat > "$WEB_ROOT/phpinfo.php" <<'PHP'
<?php phpinfo();
PHP
# Apache DocumentRoot zaten /var/www/html ise vhost'u küçük dokunuşlarla güncelle
VHOST="/etc/apache2/sites-available/000-default.conf"
if ! grep -q "ServerName ${SERVER_NAME}" "$VHOST"; then
sed -i "1i ServerName ${SERVER_NAME}" "$VHOST"
fi
# .htaccess için AllowOverride ayarı
APACHE_DIRCONF="/etc/apache2/apache2.conf"
if ! grep -q "^<Directory ${WEB_ROOT}>" "$APACHE_DIRCONF"; then
cat >> "$APACHE_DIRCONF" <<DIR
<Directory ${WEB_ROOT}>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
DIR
fi
# phpMyAdmin'e kolay erişim linki
if [[ -d "$PHPMYADMIN_DIR" && ! -e "$WEB_ROOT/phpmyadmin" ]]; then
ln -s "$PHPMYADMIN_DIR" "$WEB_ROOT/phpmyadmin"
fi
### ====== UFW (isteğe bağlı güvenlik duvarı) ======
if command -v ufw >/dev/null 2>&1; then
ufw allow OpenSSH || true
ufw allow 'Apache Full' || true
else
apt-get install -y ufw
ufw allow OpenSSH || true
ufw allow 'Apache Full' || true
# Otomatik enable etmek istemezsen yoruma al
echo "y" | ufw enable || true
fi
### ====== Servisleri yeniden başlat ======
systemctl reload apache2 || systemctl restart apache2
systemctl restart mysql
php -v
apache2 -v || true
mysql --version || true
### ====== Özet ======
cat <<INFO
==========================================================
KURULUM TAMAMLANDI
==========================================================
Sunucu Adı (ServerName): ${SERVER_NAME}
Web Kök Dizini (WEB_ROOT): ${WEB_ROOT}
phpMyAdmin Dizini: ${PHPMYADMIN_DIR} (Ayrıca: ${WEB_ROOT}/phpmyadmin)
PHP Sürümü: $(php -r 'echo PHP_VERSION;')
MySQL Sürümü: $(mysql --version 2>/dev/null | awk '{print $5}' | tr -d ',')
Saat Dilimi: ${TIMEZONE}
Coder by: CSArea.org - Onur MASALCI (MrStipFan)
www.CSArea.org - info@csarea.org
MySQL root parolası: ${MYSQL_ROOT_PASSWORD}
Önemli dosyalar:
- ${WEB_ROOT}/index.php
- ${WEB_ROOT}/phpinfo.php
- ${PHPMYADMIN_DIR}/config.inc.php
Notlar:
• phpMyAdmin -> ${WEB_ROOT}/phpmyadmin (symlink)
• PHP-SSH2 eklentisi yüklendi: $(php -m | grep -qi '^ssh2$' && echo "EVET" || echo "HAYIR")
• .htaccess için AllowOverride aktif.
• UFW: OpenSSH ve Apache Full açık.
Güvenlik İpuçları:
• phpMyAdmin yolunu gizlemek için ${WEB_ROOT}/phpmyadmin symlink'ini farklı bir adda oluşturabilirsiniz.
• MySQL'de ilave kullanıcılar oluşturun ve root ile uygulama bağlatmayın.
==========================================================
INFO
- Eğer PHP Sürüm Güncellemesi Yapmak isterseniz Script içindeki bu alanları değiştirmeniz gerekiyor:
### ====== PHP 7.4 (Ondrej PPA) ======
# PPA yoksa ekle
if ! apt-cache policy | grep -q "ppa.launchpadcontent.net/ondrej/php"; then
add-apt-repository -y ppa:ondrej/php
apt-get update -y
fi
# PHP 7.4 ve yaygın eklentiler
apt-get install -y \
libapache2-mod-php7.4 php7.4 php7.4-cli php7.4-common \
php7.4-mysql php7.4-xml php7.4-curl php7.4-zip php7.4-gd php7.4-mbstring \
php7.4-bcmath php7.4-intl php7.4-readline
# SSH2 eklentisi (önce paket)
apt-get install -y php-ssh2 || true
# Paket bulunmazsa PECL fallback
if ! php -m | grep -qi '^ssh2$'; then
echo "php-ssh2 paketi bulunamadı, PECL ile kuruluyor..."
apt-get install -y php7.4-dev php-pear libssh2-1-dev build-essential
yes '' | pecl install ssh2-1.4.1
echo "extension=ssh2.so" > /etc/php/7.4/mods-available/ssh2.ini
phpenmod -v 7.4 ssh2
fi
bu alanları bu örnekteki gibi değiştirmeniz gerek!
### ====== PHP 8.4 (Ondrej PPA) ======
# PPA yoksa ekle
if ! apt-cache policy | grep -q "ppa.launchpadcontent.net/ondrej/php"; then
add-apt-repository -y ppa:ondrej/php
apt-get update -y
fi
# PHP 8.4 ve yaygın eklentiler
apt-get install -y \
libapache2-mod-php8.4 php8.4 php8.4-cli php8.4-common \
php8.4-mysql php8.4-xml php8.4-curl php8.4-zip php8.4-gd php8.4-mbstring \
php8.4-bcmath php8.4-intl php8.4-readline
# SSH2 eklentisi (önce paket)
apt-get install -y php-ssh2 || true
# Paket bulunmazsa PECL fallback
if ! php -m | grep -qi '^ssh2$'; then
echo "php-ssh2 paketi bulunamadı, PECL ile kuruluyor..."
apt-get install -y php8.4-dev php-pear libssh2-1-dev build-essential
yes '' | pecl install ssh2-1.4.1
echo "extension=ssh2.so" > /etc/php/8.4/mods-available/ssh2.ini
phpenmod -v 8.4 ssh2
fi
|