This project aims to broaden your knowledge of system administration by using Docker.
Docker, yazılım uygulamalarını konteyner adı verilen hafif, taşınabilir ve ölçeklenebilir bir birim içinde paketlemeye, dağıtmaya ve çalıştırmaya yönelik bir platformdur. Docker, uygulamaların bağımlılıklarını ve çevrelerini bir konteyner içinde izole etmeyi sağlar. Bu, uygulamaların farklı ortamlarda sorunsuz bir şekilde çalışmasını ve taşınmasını kolaylaştırır.
Docker Compose, Docker konteyner uygulamalarını yönetmek ve çoklu konteyner yapılarını tanımlamak için kullanılan bir araçtır. Docker Compose, bir YAML dosyası aracılığıyla uygulamanızın servislerini, ağlarını ve depolama birimlerini tanımlamanıza olanak tanır. Bu, uygulamanızın farklı bileşenlerini kolayca yapılandırmanızı ve başlatmanızı sağlar.
Docker Compose'un temel amacı, birden çok konteyneri tek bir yapı içinde tanımlayarak ve yöneterek, bu konteynerler arasında iletişim kurmayı ve uygulamanın farklı bileşenlerini bir araya getirmeyi kolaylaştırmaktır.
Docker Compose kullanılmadığında:
- Her bir Docker konteyneri için ayrı ayrı docker run komutu ile başlatma yapmanız gerekir.
- Konteynerlar arasında bağlantıları ve iletişimi yönetmek, ağları oluşturmak, ortam değişkenlerini belirlemek gibi detayları elle yapmanız gerekir.
- Örneğin, bir veritabanı ve bir web sunucusu aynı anda çalıştırılacaksa, her birini ayrı komutlarla başlatmanız gerekebilir.
Docker Compose kullanıldığında:
- Bir YAML dosyasında servisleri, ağları, ortam değişkenlerini ve diğer konfigürasyon detaylarını tanımlayabilirsiniz.
- docker-compose up komutu ile tüm bu servisleri tek bir komutla başlatabilirsiniz.
- Docker Compose, farklı servisler arasında iletişimi ve bağlantıları otomatik olarak yönetir. Örneğin, bir web uygulaması ve bir veritabanı, Docker Compose ile aynı anda başlatılabilir ve aralarındaki bağlantılar otomatik olarak sağlanabilir.
Hafif ve Hızlı Başlatma:
- Docker: Docker konteynerleri, işletim sistemini paylaşan ve üzerine sadece uygulama ve bağımlılıkları ekleyen hafif sanal ortamlardır. Bu, konteynerlerin çok hızlı başlatılmasını sağlar.
- VMs: Sanal makineler, tam bir işletim sistemini ve uygulama yığınını içerir, bu nedenle başlatma süreleri genellikle Docker konteynerlerinden daha uzundur.
Daha Az Kaynak Kullanımı:
- Docker: Docker konteynerleri, host işletim sistemi kaynaklarını daha etkili bir şekilde kullanır çünkü birçok konteyner aynı çekirdeği ve işletim sistemini paylaşabilir.
- VMs: Sanal makineler, her biri kendi işletim sistemini çalıştırdığı için daha fazla kaynak tüketebilir.
Taşınabilirlik ve Çalışabilirlik:
- Docker: Docker konteynerleri, herhangi bir ortamda (geliştirme makineleri, test sunucuları) tutarlı bir şekilde çalışabilir. Docker'ın taşınabilirliği, yazılımın sorunsuz bir şekilde çalışmasını ve dağıtılmasını sağlar.
- VMs: Sanal makineler, taşınabilirliği sağlamak için daha fazla yapılandırma ve uyarlama gerektirebilir.
Hızlı Dağıtım ve İterasyon:
- Docker: Docker, konteynerlerin hızlı bir şekilde oluşturulmasını, dağıtılmasını ve güncellenmesini sağlar. Bu, hızlı iterasyon ve sürekli teslim süreçlerini destekler.
- VMs: VM'lerin oluşturulması ve dağıtılması genellikle daha uzun sürebilir.
Daha İyi Kaynak Verimliliği:
- Docker: Docker, uygulama ve bağımlılıkların sadece gerekli olan kısımlarını içerdiği için daha verimli kaynak kullanımı sağlar.
- VMs: VM'ler genellikle daha fazla kaynak tüketir çünkü her biri kendi işletim sistemini içerir.
SSL (Secure Sockets Layer) ve TLS (Transport Layer Security), internet üzerindeki veri iletimini güvenli hale getirmek için kullanılan şifreleme protokolleridir. SSL'nin yerini zamanla TLS almıştır, ancak terimler genellikle birbirinin yerine kullanılmaktadır.
SSL/TLS sertifikası, bir web sitesinin veya bir sunucunun kimlik doğrulamasını ve internet trafiğini şifrelemesini sağlayan dijital bir belgedir. Bu sertifikalar, genellikle bir web tarayıcısı ve web sunucusu arasındaki iletişimi güvence altına alarak kullanıcıların verilerini koruma amacı taşırlar.
SSL/TLS sertifikalarının temel bileşenleri:
-
Anahtar Çifti (Public Key ve Private Key): Her sertifika bir anahtar çifti içerir. Public key (genel anahtar) ile şifrelenmiş verileri çözebilmek için kullanılır. Private key (özel anahtar) ise sadece sunucu tarafında saklanan ve verileri şifrelemek ve çözmek için kullanılan bir anahtardır.
-
Dijital Sertifika (Digital Certificate): Bir üçüncü taraf sertifikasyon otoritesi (Certificate Authority - CA) tarafından sağlanan dijital bir belgedir. Bu sertifika, bir sunucunun genel anahtarını onaylar ve kullanıcılara bu anahtarı güvenilir bir şekilde kullanma izni verir.
-
Sertifika Sahibi Bilgileri: Sertifika üzerinde, genellikle şirket adı, domain adı ve coğrafi konum gibi bilgileri içeren sertifika sahibinin bilgileri bulunur.
-
Sertifika İmzası (Signature): CA tarafından yapılan dijital bir imzadır. Bu, sertifikanın gerçekten de belirli bir sertifika otoritesi tarafından sağlandığını doğrular.
SSL/TLS sertifikaları, kullanıcıların ve sunucuların kimlik doğrulamasını sağlayarak veri iletimini şifreleyen ve güvenli bir bağlantı kurmalarına olanak tanıyan kritik bileşenlerdir. Çoğu modern web tarayıcısı, kullanıcılarına bir web sitesinin güvenli olup olmadığını göstermek için bir kilit simgesi veya "HTTPS" ifadesi gibi görsel ipuçları sağlar. Bu, web siteleri arasında güvenli bir veri iletimi sağlamak için kullanılan SSL/TLS sertifikalarının yaygın olarak kullanılmasının bir sonucudur.
Sanal makine kurulumunu yaptıktan sonra terminali açıp aşağıdaki kodu girerek gerekli programların kurulumunu sağlıyoruz.
apt-get install docker docker-compose make vim openssh-server
yaktas.42.fr adresini /etc/hosts dosyasına eklememiz gerekiyor. Bunun için hosts dosyasını açmamız gerekiyor.
vim /etc/hosts
Açılan dosyaya aşağıdaki satırı ekliyoruz.
127.0.0.1 yaktas.42.fr
🛠️ SSH ile VScode üzerinden sanal makineye bağlanma ayarları
Sanal makinenin ağ ayarlarını açıp B.Noktası Yönlendirme kısmına aşağıdaki ayarları yapıyoruz.![VM 1](https://raw.githubusercontent.com/yeaktas/Inception/main/img/vm_settings_1.png)
![VM 2](https://raw.githubusercontent.com/yeaktas/Inception/main/img/vm_settings_2.png)
[Şuradaki bağlantıdan] Makefile dosyasını sanal makinemize indirip terminale make setup_ssh
yazıyoruz. Böylelikle gerekli port ayarları yapılacak.
Ana makinemizde VScode üzerinden SSH bağlantısı yapabilmek için uzak gezgini açıp, yeni bağlantı eklememiz gerekiyor, çıkan pencereye ssh root@localhost -p 4242
yazarak bağlanabilirsiniz.
Eğer eskiden yaptığınız bağlantılar var ise ve bunları silmek istiyorsanız .ssh/
dizinine gidip, config
ve known_host
dizinlerini silebilirsiniz.
Veritabanındaki kullanıcıları listelemek ve yeni kullanıcı oluşturmak için aşağıdaki adımları tekip etmemiz gerekiyor.
MariaDB konteynerine gidip, içinde etkileşimli bir Bash kabuğu başlatıyoruz
docker exec -it mariadb ddfeab4f1008 /bin/bash
Mariadb'ye bağlanıyoruz
mysql -u yaktas -p
Veritabanlarını listeliyoruz
show databases;
Veritabanı seçiyoruz
use wordpress;
Veritabanındaki tabloları gösteriyoruz
show tables;
Veritabınındaki verileri listeliyoruz
select * from wp_users;
Yeni kullanıcı oluşturuyoruz
INSERT INTO wp_users (ID, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) values (4, 'yeaktas', MD5('123456'), 'yeaktas', '[email protected]', '', '2024-01-01 01:58:00', '', '0', 'yeaktas');
#WordPress dizinine geçiş yapılır.
cd /var/www/html/wordpress
#WordPress çekirdek dosyalarını indirme
wp core download --path=/var/www/html/wordpress --allow-root
#WordPress yapılandırma dosyasını oluşturma
wp config create --path=/var/www/html/wordpress --allow-root --dbname=$DB_DATABASE --dbhost=$DB_HOST --dbprefix=wp_ --dbuser=$DB_USER_NAME --dbpass=$DB_USER_PASSWORD
#WordPress çekirdek kurulumu
wp core install --path=/var/www/html/wordpress --allow-root --url=$DOMAIN_NAME --title="$WP_SITE_TITLE" --admin_user=$WP_ADMIN_NAME --admin_password=$WP_ADMIN_PASSWORD --admin_email=$WP_ADMIN_EMAIL
#Tüm eklentileri güncelleme
wp plugin update --path=/var/www/html/wordpress --allow-root --all
#Veritabanını oluşturma
wp db create --allow-root
#Yeni bir kullanıcı oluşturma
wp user create --path=/var/www/html/wordpress --allow-root $WP_USER_NAME $WP_USER_EMAIL --user_pass=$WP_USER_PASSWORD
#İzinleri düzenleme
chown www-data:www-data /var/www/html/wordpress/wp-content/uploads --recursive
#Gerekli dizini oluşturma
mkdir -p /run/php/
#PHP-FPM'yi başlatma
php-fpm8.2 -F
🚩 setup.sh flaglar
--allow-root:
Bu, WP-CLI komutlarını root (kök) kullanıcı olarak çalıştırmak için kullanılır. WP-CLI, genellikle web sunucu kullanıcısı tarafından çalıştırılmalıdır, ancak bazen root yetkileri gerekebilir.
--path=/var/www/html/wordpress:
Bu, WordPress dosyalarının bulunduğu dizini belirtir. Örneğin, /var/www/html/wordpress dizinindeki WordPress kurulumu için.
--dbname, --dbhost, --dbprefix, --dbuser, --dbpass:
Bu, WordPress veritabanı yapılandırma bilgilerini belirtir.
--url:
WordPress sitesinin temel URL'sini belirtir.
--title:
WordPress sitesinin başlığını belirtir.
--admin_user, --admin_password, --admin_email:
WordPress yönetici kullanıcısının adını, şifresini ve e-posta adresini belirtir.
--all:
Bu, tüm eklentileri güncellemek için kullanılır.
--user_pass:
Yeni kullanıcı oluşturulurken belirtilen kullanıcının şifresini belirtir.
--recursive:
Dosya ve dizin işlemlerinde alt dizinlere de uygulanacak demektir.
php-fpm8.2 -F:
PHP-FPM'yi başlatma işlemidir. -F bayrak, arka planda değil, ön planda çalışmasını sağlar.
php-fpm8.2, PHP-FPM'nin (PHP FastCGI Process Manager) 8.2 sürümünü temsil eder. PHP-FPM, PHP uygulamalarını çalıştırmak için bir FastCGI (Common Gateway Interface) süreç yöneticisidir. Bu, web sunucuları ile PHP uygulamaları arasında etkili bir iletişim kurmak için kullanılır.
Açılımı "PHP FastCGI Process Manager" olan PHP-FPM, web sunucularıyla (örneğin, Nginx veya Apache) PHP uygulamaları arasında bir köprü görevi görür. PHP-FPM, her bir kullanıcı talebini işlemek için ayrı süreçler oluşturur ve yönetir. Bu, performans ve ölçeklenebilirlik açısından önemlidir, çünkü her bir kullanıcı talebini karşılamak için ayrı bir işlem kullanmak, çoklu kullanıcı taleplerine daha etkili bir şekilde yanıt verilmesini sağlar.
www.conf konfigürasyon dosyasının açıklamaları
Bu, bir PHP-FPM (FastCGI Process Manager) konfigürasyon dosyasıdır ve genellikle Nginx veya Apache gibi web sunucuları ile birlikte kullanılır. Bu dosya, PHP işlem yöneticisinin çalışma parametrelerini belirtir.
[www]:
Bu, bir PHP-FPM havuzunun konfigürasyonunu belirtir. Birden çok havuzun yapılandırılabileceği durumlarda, her biri farklı bir bölümle tanımlanır.
user = www-data ve group = www-data:
Bu, PHP-FPM işlemlerinin hangi kullanıcı ve grup altında çalışacağını belirtir. Genellikle web sunucunuzun kullanıcı ve grubunu temsil eder.
listen = wordpress:9000:
Bu, PHP-FPM'nin hangi IP adresi ve port numarası üzerinden bağlantıları dinleyeceğini belirtir. Bu örnekte, "wordpress" adlı bir ağ hizmeti ve 9000 portu kullanılmaktadır.
listen.owner = www-data ve listen.group = www-data:
Bu, PHP-FPM'nin dinleme soketinin sahibini belirtir. Genellikle web sunucusu kullanıcısı ve grubu ile aynıdır.
pm = dynamic:
Bu, PHP işlem yöneticisinin dinamik modda çalışacağını belirtir. Bu modda, işlem sayısı dinamik olarak ayarlanabilir.
pm.max_children = 5:
Bu, aynı anda çalıştırılacak maksimum PHP işlem sayısını belirtir.
pm.start_servers = 2:
Bu, PHP-FPM'nin başlangıçta kaç adet işlem başlatacağını belirtir.
pm.min_spare_servers = 1 ve pm.max_spare_servers = 3:
Bu, PHP-FPM'nin minimum ve maksimum boşta bekleyen işlem sayısını belirtir. Boşta bekleyen işlemler, gelen taleplere hızlı yanıt vermek için hazır bekleyen işlemlerdir.
https://gokhansengun.com/docker-nedir-nasil-calisir-nerede-kullanilir/
https://www.php.net/manual/en/features.commandline.webserver.php
https://github.com/php/php-src/blob/master/sapi/fpm/www.conf.in
https://docs.docker.com/compose/compose-file/compose-file-v3/
https://github.com/temasictfic/Inception
https://github.com/Improvenss/inception/blob/main/Makefile