Epey uzun bir başlık oldu. Konu aslında buralara nasıl gedi bende bilmiyorum. Kısıtlı bilgi ile uzak bir sql serverdan bilgiler çekip işlemem gerekiyordu. Local bilgisayarda sorun yok.
Ama bunu web ortamında yapmaya geldi mi iş cloud bir sunucu vps yada vds gibi sistemler zorunlu oluyor. Şayet reseller hosting kullanıyorum çokta memnunum ama uzak sql e bağlanmak için bazı driverlar kurulmalı ve php.ini dosyasına erişim şart. böylede olunca hosting firması ile bu işi çözemedim. Baktım olacak gibi değil neden ben yapmayım derken olanlar oldu. Hadi sırasıyla başlayalım.
Daha önceden sunucu tarafı ile ilgili kısıtlı bilgim vardı biraz araştırma yaptım ve Amazon Aws, digitalocean mu derken yerli malı yurdum malı herkes onu kullanmalı diyerek ilkbyte üzerinden bu işlemi yapmaya karar verdim. ta 5-6 yıl öncesine dayanan ilk çıktığında üye olduğum bir platform ama aktif olarak kullanmamıştım. Oraya girerek
- 2 Core CPU, 2 GB Bellek, 20 GB SSD Disk ,1000 GB Aylık Trafik
minumum özelliklerde sunucu seçtim. İşletim sistemi olarak Ubuntu 20.04 seçtim. çok fark ediyor mu bilmem ama benim için bir şey fark etmiyor.
Evet artık bir sunucumuz var kurulum işlemleri bitti ve sunucuya ip ve root bilgileri ile bağlandık.
1. Sunucuyu Güncelleme
sudo apt update && sudo apt upgrade -y
2. Apache Kurulumu ve Ayarlamaları
apache kurulumunu gerçekleştirelim.
sudo apt install apache2 -y
apachenin çalışup çalışmadığını öğrenme
sudo systemctl status apache2
apacheyi yeniden başlatmak
sudo systemctl restart apache2
Not: eğer
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
bu tarz bir hata alırsanız.
sudo nano /etc/apache2/apache2.conf ServerName localhost sudo systemctl restart apache2
bu komutlar ile ServerName ayarlaması yapabilirsiniz.
3. PHP 8.1 Kurulumu
PHP 8.1 ve gerekli modülleri kuralım. Burada önce PHP 8.1 PPA deposunu ekleyelim
sudo add-apt-repository ppa:ondrej/php -y sudo apt update
Daha sonra, PHP 8.1 ve gerekli uzantıları kurun:
sudo apt install php8.1 php8.1-cli php8.1-common php8.1-dev php8.1-xml php8.1-zip php8.1-mbstring libapache2-mod-php8.1 -y
php-v komutu ile kurulumu ve versiyonu kontrol edelim. Tamam artık ip ile de girdiğimizde apache sayfası ile karşılaşacağız. şimdi domainimizi yönlendirmek için dns kayıtlarını ip mize yönlendirelim. daha sonra
4. Domain Yönlendirme İçin dizin Oluşturma
domainimizi ip adresimize yönlendirdikten sonra sunucumuzda
sudo mkdir -p /var/www/sahin.tc sudo chown -R $USER:$USER /var/www/sahin.tc sudo chmod -R 755 /var/www/sahin.tc
evet klasörümüzü oluşturduk ve gerekli izinlerini ayarladık. artık bizim yönlendirme yaptığımız sahin.tc domainimiz için /var/www/sahin.tc klasörü geçerli olacak bunun için sanal host dosyası oluşturmamız gerekiyor.
sudo nano /etc/apache2/sites-available/sahin.tc.conf
içeriğinide aşağıdaki gibi düzenleyelim.
<VirtualHost *:80>
ServerAdmin webmaster@sahin.tc
ServerName sahin.tc
ServerAlias www.sahin.tc
DocumentRoot /var/www/sahin.tc
<Directory /var/www/sahin.tc>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/sahin.tc_error.log
CustomLog ${APACHE_LOG_DIR}/sahin.tc_access.log combined
</VirtualHost>
host dosyasını etkinleştirelim ve apache yi yeniden başlatalım.
sudo a2ensite sahin.tc.conf sudo systemctl restart apache2
eğer domain üzerinden sunucuya erişim sorunu yaşarsanız HTTP ve HTTPS trafiğine gerekli izinlerin verildiğinden emin olmak için aşağıdaki komutu uygulayalım. 80 ve 443 portları içinde güvenlik duvarı ayarlamalarını yapalım.
sudo ufw allow 'Apache Full'
diğer güvenlik duvarı ayarları da aşağıda
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw reload
yine sorun yaşarsanı hosts dosyasına sunucu ip adresi ile beraber domainimiz ekleyelim.
sudo nano /etc/hosts
aşağıdaki örnek şekildeki gibi kodları düzenleyin.
127.0.0.1 localhost 127.0.1.1 ubuntu20 111.111.111.111 sahin.tc www.sahin.tc // ip adresi sizin sunucu ip adresiniz olacak.
5. SSL Sertifikası Kurulumu
SSL sertifikasını kurmak için Certbot ve Let’s Encrypt kullanıyoruz.
Certbot’u ve Apache modülünü kuralım.
sudo apt install certbot python3-certbot-apache -y
SSL sertifikasını oluşturun
sudo certbot --apache
Ssl ile ilgili
[Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]
bu hatayı almıştım. bunun içinde ayrıca openssl conf dosyasını açıp dosyanın başına ve sonuna aşağıdaki kodları ekledim ve sorun çözdüm teşekkürler github.
sudo nano /etc/ssl/openssl.cnf
dosyanın başına
openssl_conf = default_conf
dosyanın sonuna
[ default_conf ] ssl_conf = ssl_sect [ssl_sect] system_default = system_default_sect [system_default_sect] MinProtocol = TLSv1 CipherString = DEFAULT:@SECLEVEL=1
bu işlemden sonra apacheyi yeniden başlatın.
6. SFTP Kullanıcısı Oluşturma
sudo adduser sftpuser sudo usermod -aG www-data sftpuser sudo mkdir -p /home/sftpuser/.ssh sudo chmod 700 /home/sftpuser/.ssh sudo touch /home/sftpuser/.ssh/authorized_keys sudo chmod 600 /home/sftpuser/.ssh/authorized_keys sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh
ben sftpuser adında bir ftp kullanıcısı oluşturdum. bu kullanıyı ile /var/www altındaki tüm domainlerimde kullanacağım. ama bunun dışına çıkmasını da istemiyorum. o yüzden izinlerini buna göre ayarlayacağım. Bunun için SSH konfigürasyon dosyasını düzenliyorum.
sudo nano /etc/ssh/sshd_config
dosyanın sonuna aşağıdaki kodları ekliyorum.
Match User sftpuser
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
işlemlerin geçerli olması için shh hizmetini yeniden başlatıyorum.
sudo systemctl restart ssh
Evet artık ftp kullanıcı ile sunucuya local bilgisayarımdan dosyalarımı yükleyebilirim.
Şimdi bana mysql lazım. çünkü database ile çalışan küçük bir sistem çalıştıracağım. Bu kadar uğraşın amacı var.
7. MySQL Kurulumu
Mysql kurulunu gerçekleştiriyoruz.
sudo apt install mysql-server -y
EVet şimdide mysql güvenlik kurulumunu yapalım ve kurulum esnasında karşılaşılan alanlara verdiğim cevaplarıda yazacağım.
sudo mysql_secure_installation
Yukarıdaki komutu uyguladığınızda
Parola Doğrulama Eklentisi (Validate Password Plugin)
Bu eklenti, yeni oluşturulan parolaların güvenlik seviyesini kontrol eder. Yes diyoruz.
Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y
Parola Güç Seviyesi Seçimi
Parola doğrulama eklentisini etkinleştirdiyseniz, aşağıdaki seçeneklerle karşılaşacaksınız. Ben 2 yi seçtim gayet yeterli diye düşündüm tercih sizin.
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Root Kullanıcısı İçin Yeni Parola Ayarlama
burada oluşturduğunuz parolayı not etmeyi ve güçlü bir paralo oluşturmayı unutmayın.
New password: ********** Re-enter new password: **********
Anonim Kullanıcıları Kaldırma
ben yes diyerek kaldırdım.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Root Uzaktan Girişini Devre Dışı Bırakma
ben yes diyerek devre dışı bıraktım. ama bu biraz ihtiyaca göre ayarlanacak bir seçenek. sonradan da ayarlanır zaten.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Test Veritabanını Kaldırma
Yes diyerek kaldırdım.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Ayrıcalık Tablolarını Yeniden Yükleme
Yes diyerek devam ettim.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
8. Microsoft ODBC 17 Kurulumu ve PHP SQLSRV Sürücülerinin Kurulumu
En çok deneme yaptığımız yere geldim. Herhalde en az 10 defa sunucuyu sıfırlayıp farklı sürümlerde işletim sistemi ve farklı sürümlerde microsoft ODBC driver denediğim bölüm. Zaten ilk defa bir işe giriştim. Ama tabi bu sırada iyi kötü bir sunucu kurulumu tekrarlayarak pekiştirdim : )
en son başarılı kurulumu microsoft un dökümantasyonu ile yaptım.
Aşağıdaki komutları sırasıyla çalıştırın:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 sudo ACCEPT_EULA=Y apt-get install -y mssql-tools echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc sudo apt-get install -y unixodbc-dev
PHP SQLSRV ve PDO_SQLSRV uzantılarını yükleyelim
sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv sudo su printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.1/mods-available/sqlsrv.ini printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.1/mods-available/pdo_sqlsrv.ini exit sudo phpenmod -v 8.1 sqlsrv pdo_sqlsrv
Apacheyi tekrar başlatarak değişiklikleri geçerli kılalım.
sudo systemctl restart apache2
Ve mutlu son. Bir çok deneme ve araştırma sonucunda sistem çalışıyor. Hiç bir sorun yok. Burada yazdığım kodları ve anlatımları bir çok internet sitesi, chatgpt ve monica gibi bir çok yapay zeka ile beraber haşır neşir olarak buldum. Yapay zeka bir çok konuda iyiydi ama bazen çok fazla saçma yönlendirmeler yapıp tekrara düşebiliyor.