Ubuntu sunucuda ngnix ve Apache kurarak php mysql site çalıştırma

Bu rehber, bir web sunucusu oluşturmak ve bu sunucuyu PHP, MySQL ve SSL sertifikası ile güvenli bir şekilde yapılandırmak isteyenler için adım adım bir kılavuz sunar.

Adım 1: Apache Web Sunucusu Kurulumu

İlk olarak, Apache web sunucusunu kurmalısınız. Ubuntu üzerinde bu işlem şu komutla yapılır:

sudo apt-get update
sudo apt-get install apache2

Adım 1: Nginx Kurulumu

Ubuntu üzerinde Nginx kurulumu şu komutlarla gerçekleştirilir:

sudo apt-get update
sudo apt-get install nginx

Kurulum tamamlandıktan sonra Nginx servisini başlatın ve otomatik olarak başlamasını sağlayın:

sudo systemctl start nginx
sudo systemctl enable nginx

Adım 2: Temel Yapılandırmalar

2.1. Temel Bir Site Yapılandırması

Önce, varsayılan Nginx yapılandırma dosyasını açın: Apache içinde kendi utc klasörü içndedi ben size Ngnix için paylasıyorum sudo nano /etc/nginx/sites-available/default bu asağıdaki ngnix ayayarı ile 80 ve 443 portunu dinleyip gelen siteyi apache üzerinden çalıştracğaız

server {
    listen 80;
    server_name hasanaylas.com www.hasanaylas.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect http://localhost:8080 https://$host;
    }

}

server {
    listen 443 ssl;
    server_name hasanaylas.com www.hasanaylas.com;

    ssl_certificate /etc/letsencrypt/live/duranagabey.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/duranagabey.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass https://localhost:8443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect https://localhost:8443 https://$host;
    }

  }

Şimdide Apache Klasörüne gidip conf dosyasını ayarlayalım unutmayın bazen ayrı bir dosya oluşturduğunuzda içine kendliğinden default dosyasına birseyler yazıyor ve diğer conf dosyası ayağa kalkmıyor. dolayısıyla yaptığınız değişiklik aktif olmuyorsa o conf dosyasında olan sitenin baska conf dosyasında olup olmaıdğını kontrol ediniz apache listen 80 i 8080 olarak yada kendiniz belirleyeceğiniz bir porttla dğeiştirin. 8080 yaptığınız varsayalım.




<VirtualHost *:8080>
    ServerAdmin webmaster@hasanaylas.com.tr
    ServerName hasanaylas.com
    ServerAlias www.hasanaylas.com

    DocumentRoot /var/www/html/hasanaylas.com.tr
    <Directory /var/www/html/hasanaylas.com.tr>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/hasanaylas.com.tr.log
    CustomLog ${APACHE_LOG_DIR}/hasanaylas.com.trlog combined
   
</VirtualHost>

<VirtualHost *:8443>
    ServerAdmin webmaster@hasanaylas.com
    ServerName hasanaylas.com
    ServerAlias www.hasanaylas.com

    DocumentRoot /var/www/html/hasanaylas.com.tr
    <Directory /var/www/html/hasanaylas.com.tr>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/hasanaylas.com.tr_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/hasanaylas.com.tr.log combined

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/duranagabey.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/duranagabey.com/privkey.pem
   
</VirtualHost>

Yapılandırmayı kaydedip çıkın.

2.2. Yapılandırmayı Kontrol Etme ve Nginx’i Yeniden Başlatma

Yapılandırmada hata olup olmadığını kontrol etmek için:

sudo nginx -t


Tabii ki, işte Nginx web sunucusunu kurmak ve yapılandırmak için bir rehber:

Nginx Web Sunucusu Kurulumu ve Yapılandırma Rehberi

Bu rehber, Nginx web sunucusunu kurmayı ve temel yapılandırmaları yapmayı amaçlamaktadır. Nginx, hafif, performanslı ve güvenilir bir web sunucusudur.

Adım 1: Nginx Kurulumu

Ubuntu üzerinde Nginx kurulumu şu komutlarla gerçekleştirilir:

bashCopy codesudo apt-get update
sudo apt-get install nginx

Kurulum tamamlandıktan sonra Nginx servisini başlatın ve otomatik olarak başlamasını sağlayın:

bashCopy codesudo systemctl start nginx
sudo systemctl enable nginx

Adım 2: Temel Yapılandırmalar

2.1. Temel Bir Site Yapılandırması

Önce, varsayılan Nginx yapılandırma dosyasını açın:

bashCopy codesudo nano /etc/nginx/sites-available/default

Ardından, aşağıdaki gibi temel bir site yapılandırması ekleyin:

nginxCopy codeserver {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

Yapılandırmayı kaydedip çıkın.

2.2. Yapılandırmayı Kontrol Etme ve Nginx’i Yeniden Başlatma

Yapılandırmada hata olup olmadığını kontrol etmek için:

bashCopy codesudo nginx -t

Eğer her şey doğruysa, Nginx’i yeniden başlatın: aynı işlemleri apache içinde yapabilirsiniz

sudo systemctl restart nginx

Sunucuyu kurduk simdi mysql ve php kurulumu

MySQL Kurulumu ve Ayarları

Adım 1: MySQL Kurulumu

Ubuntu üzerinde MySQL kurulumu için terminali açın ve şu komutları sırasıyla çalıştırın:

sudo apt-get update
sudo apt-get install mysql-server

Kurulum sırasında sizden bir şifre seçmeniz istenecektir. Güvenli bir şifre belirleyip kaydedin.

Adım 2: MySQL Güvenlik Ayarları

MySQL güvenliği için birkaç önerilen adımı gerçekleştirelim:

sudo mysql_secure_installation

Bu komut sizi bir dizi soru ile karşılayacak. Önerilen ayarlar genellikle şunlardır:

  • MySQL kök kullanıcısı için bir şifre belirleyin.
  • Güvenlik duvarı kurulumunu isteğe bağlı olarak yapabilirsiniz. (Önerilir)

Mysql veritabanına dışarıdan bağlanmak için aşağıdaki kodu yazabilirsin

CREATE USER 'root'@'ipadresiniz' IDENTIFIED BY 'şifre';
 
GRANT ALL PRIVILEGES ON . TO 'root'@'ipadresiniz' WITH GRANT OPTION; 

FLUSH PRIVILEGES;

Adım 3: Yeni Kullanıcı Oluşturma ve İzinlerin Verilmesi

MySQL’e giriş yapmak için şu komutu kullanın:

mysql -u root -p

Sonra aşağıdaki SQL komutlarını kullanarak yeni bir kullanıcı oluşturun ve gerekli izinleri verin:

CREATE USER 'yeni_kullanici'@'localhost' IDENTIFIED BY 'yeni_sifre';
GRANT ALL PRIVILEGES ON *.* TO 'yeni_kullanici'@'localhost';
FLUSH PRIVILEGES;

Bu komutlar şu işlevlere sahiptir:

  • CREATE USER: Yeni bir kullanıcı oluşturur.
  • GRANT ALL PRIVILEGES: Kullanıcıya tüm veritabanları ve tablolar üzerinde tüm izinleri verir.
  • FLUSH PRIVILEGES: Değişikliklerin hemen etkili olmasını sağlar.

Artık yeni kullanıcı oluşturuldu ve gerekli izinler verildi.

Adım 4: Uzaktan Erişime İzin Verme (Opsiyonel)

Eğer MySQL’e uzaktan erişime izin vermek istiyorsanız, aşağıdaki SQL komutunu kullanarak yapabilirsiniz:

GRANT ALL PRIVILEGES ON veritabani_adi.* TO 'yeni_kullanici'@'localhost';
#Değişikliklerin etkili olması için aşağıdaki komutu kullanarak güncelleyin:


FLUSH PRIVILEGES;
#yeniden baslat mysqli
sudo service mysql restart

Apache Modülü ve PHP Kurulumu

1. Apache Modülü Etkinleştirme

Apache’nin mod_rewrite modülünü etkinleştirmek için terminali açın ve şu komutu çalıştırın:

sudo a2enmod rewrite

Bu komut, mod_rewrite modülünü etkinleştirip Apache’yi yeniden başlatır.

sudo service apache2 restart

2. PHP-FPM’yi Yükleme ve Ayarları

Önce PHP-FPM’yi yükleyin

sudo apt-get install php-fpm

Ardından PHP-FPM servisini başlatın ve otomatik olarak başlatılmasını sağlayın:





sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm

3. Apache’de mod_headers ve mod_rewrite Modüllerini Etkinleştirme

Apache web sunucusunda mod_headers ve mod_rewrite modüllerini etkinleştirmek için şu komutları kullanabilirsiniz:

sudo a2enmod headers
sudo a2enmod rewrite
sudo service apache2 restart


Apache Modülü ve PHP Kurulumu

1. Apache Modülü Etkinleştirme

Apache’nin mod_rewrite modülünü etkinleştirmek için terminali açın ve şu komutu çalıştırın:

bashCopy codesudo a2enmod rewrite

Bu komut, mod_rewrite modülünü etkinleştirip Apache’yi yeniden başlatır.

bashCopy codesudo service apache2 restart

2. PHP-FPM’yi Yükleme ve Ayarları

Önce PHP-FPM’yi yükleyin:

bashCopy codesudo apt-get install php-fpm

Ardından PHP-FPM servisini başlatın ve otomatik olarak başlatılmasını sağlayın:

bashCopy codesudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm

3. Apache’de mod_headers ve mod_rewrite Modüllerini Etkinleştirme

Apache web sunucusunda mod_headers ve mod_rewrite modüllerini etkinleştirmek için şu komutları kullanabilirsiniz:

bashCopy codesudo a2enmod headers
sudo a2enmod rewrite
sudo service apache2 restart

Bu komutlar, modülleri etkinleştirip Apache’yi yeniden başlatır.

4. .htaccess Dosyasını Güncelleme

.htaccess dosyanızı güncelleyerek gerekli ayarları yapabilirsiniz. Örneğin:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Headers "origin, x-requested-with, content-type"
    Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Bu düzenlemelerle, CORS başlıklarınızı mod_headers modülü altında kullanabilir ve URL yeniden yazma kurallarınızı mod_rewrite modülü ile ayarlayabilirsiniz.

Bu adımları takip ederek Apache modülünü etkinleştirebilir, PHP-FPM’i yükleyebilir ve Apache ayarlarınızı güncelleyebilirsiniz.

MySQL’de GROUP BY Hatası ve Çözümü

MySQL’de GROUP BY hatası alıyorsanız, bu genellikle ONLY_FULL_GROUP_BY modu ile ilgili bir sorundur. Bu hatayı çözmek için aşağıdaki adımları takip edebilirsiniz.

Adım 1: Yapılandırma Dosyasını Açma

Yapılandırma dosyanızı bir metin düzenleyici ile açın. Örneğin, nano kullanabilirsiniz:

nano /etc/mysql/my.cnf

Adım 2: sql_mode Ayarını Kontrol Etme ve Düzenleme

Dosyada sql_mode ayarı varsa, bu ayarı düzenleyin. Eğer ayar yoksa, dosyaya ekleyin. Örnek bir ayar şu şekilde olabilir:

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

Sunucuda Dosya Taşıma İşlemi

Sunucuda dosya taşıma işlemi genellikle bir sunucuyla uzaktan bağlantı kurularak veya dosyaların doğrudan sunucuya kopyalanarak gerçekleştirilir. İşte bu işlemi yapmak için kullanabileceğiniz adımlar:

Adım 1: Dosyayı İndirme veya Kopyalama

Sunucu ile bağlantı kurduktan sonra, dosyayı indirmek veya kopyalamak için çeşitli yöntemler vardır. Örneğin, wget veya curl komutları kullanılabilir.

Örnek: wget Komutu Kullanarak İndirme

wget siteismi.com/yedekler2023.zip

#dosyayı acmak için unzip yedekler2023.zip
 kurlu değilse zip kurun

Bu adımları takip ederek, sunucuda dosya indirme ve çıkartma işlemlerini gerçekleştirebilirsiniz.


Dosya İzinleri ve Sahiplik Ayarları Nasıl Değiştirilir?

Web sunucularında dosya izinleri ve sahiplik ayarları önemlidir, çünkü bu ayarlar dosya güvenliği ve çalışma düzeni açısından kritiktir. Eğer dosya izinleri ve sahiplik ayarları ile ilgili bir sorun yaşıyorsanız, aşağıdaki adımları takip ederek bu sorunu çözebilirsiniz.

Adım 1: Dosyanın Sahipliğini Değiştirme

Belirtilen dizin ve altındaki dosyaların sahipliğini root kullanıcısından www-data kullanıcısına ve grubuna çevirelim. Bu adım, web sunucu kullanıcısına dosya erişim yetkisi sağlamak için gereklidir

sudo chown -R www-data:www-data /var/www/html/hasanaylas.com/wp-content/uploads

Bu komut, belirtilen dizin ve altındaki dosyaların sahipliğini www-data kullanıcısı ve grubuna çevirir.

Adım 2: Sadece Dizinlerin Sahipliğini Değiştirme

Eğer sadece dizinlere ait sahiplikleri değiştirmek istiyorsanız ve dosyalara dokunmak istemiyorsanız, aşağıdaki komutu kullanabilirsiniz:

sudo find /var/www/html -type d -exec chown www-data:www-data {} \;

Let’s Encrypt Ücretsiz SSL Sertifikası Kurulumu

Web sitenize Let’s Encrypt tarafından sağlanan ücretsiz bir SSL sertifikası eklemek için aşağıdaki adımları takip edebilirsiniz. Bu örnekte, Certbot kullanarak Nginx web sunucusu üzerinde SSL sertifikası kurulumu gösterilmektedir.

Adım 1: Certbot’ı Yükleyin

Certbot, Let’s Encrypt sertifikalarını yönetmek için kullanılan bir araçtır. Aşağıdaki komutla Certbot’u yükleyin:

sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

Adım 2: SSL Sertifikasını Kurun

Certbot’u kullanarak SSL sertifikasını kurmak için aşağıdaki komutu kullanın. Sitenizin alan adını doğru bir şekilde değiştirin: burada unutmayın conf dosyasında kactane site varsa hepsini ekeyeceksiniz yada ayrı ayrı conf dosyası oluştuıracaksınız eklemezseniz sadece eklediklerinize yeniden ssl ekler diğerleri kalkar örnek isteler paylasıyorum bazıları ile alakam yoktur


sudo certbot --nginx -d www.duranagabey.com -d yonetim.duranagabey.com -d api.duranagabey.com -d mysadmin.duranagabey.com -d mysapi.duranagabey.com -d mystracking.duranagabey.com -d hakianapi.duranagabey.com -d hakianadmin.duranagabey.com -d serviskonum.com -d yonetim.serviskonum.com -d api.serviskonum.com -d www.serviskonum.com -d socket.serviskonum.com -d hasanaylas.com -d www.hasanaylas.com -d memurlarburada.com -d www.memurlarburada.com -d kalemeli.com -d www.kalemeli.com -d hasanaylas.com -d www.hasanaylas.com -d okulservisi.com.tr -d www.okulservisi.com.tr -d tasimaliegitim.com -d www.tasimaliegitim.com -d raysam.com -d www.raysam.com -d minibuspazari.com -d www.minibuspazari.com

Adım 3: Certbot’un Otomatik Yenileme Ayarını Yapın

Let’s Encrypt sertifikaları genellikle 90 gün geçerlidir. Certbot’u kullanarak otomatik yenileme işlemini yapılandırmak için aşağıdaki adımları izleyin:

sudo crontab -e

Bu komutla crontab dosyasını açtıktan sonra, aşağıdaki satırı ekleyin:

0 0 * * * certbot renew

Umarım faydalı bir makale olmuştur

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir