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