Ansible, kod olarak altyapıya olanak tanıyan açık kaynaklı bir yazılım sağlama, yapılandırma yönetimi ve uygulama dağıtım aracıdır.MySQL, açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir. Mysql genellikle popüler LAMP veya LEMP (Linux, Apache/Nginx, MySQL/MariaDB, PHP/Python/Perl) yığınının bir parçası olarak kurulur.
Bu kılavuzda, Ubuntu 22.04’te Mysql’i kullanacağız, kuracağız ve kuracağız. Bu kılavuz, Debian ve diğer Ubunti sürümleri gibi diğer Debian türevleri üzerinde de çalışır
Ansible playbook’u oluşturma
Görevlerimizi tanımlamadan önce, ansible’a birkaç şey söylemeliyiz:
1
2
3
4
5
6
7
| ---
- name: Install and configure mariadb server on Ubuntu 22.04
hosts: db-srv
gather_facts: false
become: true
vars:
mysql_root_password: 'superSecretPassword'
|
Açıklama:
name
Playbook’u ne yaptığına dair açıklayıcı bir isim tanımlar, buna sahip olmak zorunlu değildir.hosts
Yukarıda tanımlanan hosts veya hosts.yaml dosyasında tanımlandığı gibi hedeflenecek konakları tanımlar.gather_facts
Görevleri işlemeden önce Ansible’ın işletim sistemi gerçeklerini toplamasını isteyip istemediğimizi tanımlar. Bizim durumumuzda istemiyoruzbecome
Görevlerimizi kök olarak yürütmek istediğimizi tanımlarvars
Görevlerimizde yeniden kullanmak istediğimiz değişkenleri tanımlar. Bizim durumumuzda mysql_root_password tanımladık
Ansible görevleri
Yukarıdaki bölümden sonra artık görevlerimizi tanımlamamız gerekiyor. Bu görevler bir role eklenebilir veya görev olarak belirtilebilir. Bizim durumumuzda bunları görev olarak kullanacağız (tam oyun kitabı için bu gude’un sonunu kontrol edin).
Gerekli yazılımın kurulu olduğundan emin olun
Devam etmeden önce, ihtiyacımız olan tüm yazılımları yüklemek istiyoruz. Bunlar, mysql’e özgü yazılım mysql-server ve ansible tarafından mysql server örneğine bağlanmak ve kurmak için kullanılacak python ile ilgili yazılım gibi destekleyici yazılımları içerir. Bunu yapmak için ansible apt modülünü kullanıyoruz.
Sistemimizdeki en son paketleri kullandığımızdan emin olmak için devam etmeden önce bir işletim sistemi güncellemesi ve yükseltmesi de yaptığımızı lütfen unutmayın.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| - name: Update apt repositories and cache on server
apt:
update_cache: yes
force_apt_get: yes
cache_valid_time: 3600
- name: Upgrade all packages on server
apt:
upgrade: dist
force_apt_get: yes
- name: Check if a reboot is needed on all servers
register: reboot_required_file
stat:
path: /var/run/reboot-required
get_checksum: false
- name: Reboot the server if kernel updated
reboot:
msg: "Reboot initiated by Ansible for kernel updates"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: uptime
when: reboot_required_file.stat.exists
- name: Install Nginx, MySQL, PHP, and related packages
apt:
name:
- mysql-server
- unzip
- python3-mysqldb
- vim
- git
state: present
|
MySQL sunucusunu başlatın
Çünkü sunucuya bağlanmak ve sunucuda işlemler gerçekleştirmek istiyoruz, bu görevle başlayalım. Ubuntu 22.04, uzun süre çalışan işlemleri yönetmek için systemd kullandığından, ansible systemd modülünü kullanarak mysqld’yi başlatalım ve etkinleştirelim:
1
2
3
4
5
| - name: Start and enable MySQL
systemd:
name: mysql
state: started
enabled: yes
|
MySQL kurulumunu başlatın
Kök uzaktan oturum açmayı devre dışı bırak
MySQL kök kullanıcısı, sunucudaki tüm kaynaklar için izinleri olan varsayılan yönetici kullanıcıdır. En iyi uygulama, yönetici görevleri yaparken yalnızca yerel sistemde bu kullanıcı kökü üzerinden erişimi etkinleştirmek olacaktır, aksi takdirde her bağlantı için özel bir kullanıcı oluşturun, yani her uygulama için, yalnızca o veritabanına erişimi olan bir kullanıcıya sahip olun.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| - name: Ensure root user can only login from localhost
mysql_user:
login_password: "{{ mysql_root_password }}"
check_implicit_admin: yes
name: root
host: "{{ item }}"
password: "{{ mysql_root_password }}"
state: present
with_items:
- localhost
- 127.0.0.1
- ::1
- name: Secure root account
mysql_user:
login_user: root
login_password: "{{ mysql_root_password }}"
name: root
host: "{{ item }}"
state: absent
with_items:
- "%"
- "::1"
when: item != 'localhost' and item != '127.0.0.1'
|
Yukarıdaki görev tanımında:
- mysql_root_password değişkeni, daha önce tanımlanan VAR’lardan seçilecektir
- Öğe, with_items bölümünde tanımlanan değerlerin bir döngüsüdür.
- check_implicit_admin, ansible’a parola olmadan oturum açmayı denemesini söyler, bu yeni bir yükleme olduğu için çalışması gerekir. Bunun bir parçası olarak, sağlanan şifre kök kullanıcı için ayarlanacaktır
my.cnf’yi home dizinine ekleyin
Artık yukarıdaki görevde parolayı ayarladığımıza göre, kök kullanıcı olarak daha fazla görev yaparken parolayı sağlamak isteriz. Bunu, mysql komutlarını her çalıştırdığımızda kimlik bilgileri için kontrol edilen bir dosya olan ~/.my.cnf’de sağlayabiliriz. Satır içi içeriği kopyalayarak bir /root/.my.cnf dosyası oluşturun
1
2
3
4
5
6
7
8
| - name: Add .my.cnf to user home
copy:
content: |
[client]
user=root
password={{ mysql_root_password }}
dest: /root/.my.cnf
mode: 0600
|
Anonim kullanıcıları kaldırma
Anonim kullanıcıları kaldırmak iyi bir uygulamadır. Bu görevi kullanarak yapalım:
1
2
3
4
5
6
7
| - name: Remove anonymous users
mysql_user:
login_user: root
login_password: "{{ mysql_root_password }}"
name: ''
host_all: yes
state: absent
|
Dissalow kökü uzaktan oturum açmaktan alıkoy
mysql.user tablosundaki girdileri kaldırmak için aşağıdakileri çalıştırın. Bu, kök kullanıcının yalnızca yerel olarak oturum açabildiğinden emin olun:
1
2
3
4
| - name: Disallow root login remotely
mysql_query:
login_password: "{{ mysql_root_password }}"
query: "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
|
Test veritabanını kaldırın ve ona erişin
Test veritabanına ihtiyacımız olmadığı için bu görevle kaldırabiliriz:
1
2
3
4
5
6
7
8
9
10
11
12
| - name: Remove test database
mysql_db:
login_user: root
login_password: "{{ mysql_root_password }}"
name: test
state: absent
- name: Remove privileges on test database
mysql_query:
login_user: root
login_password: "{{ mysql_root_password }}"
query: "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
|
Değişiklikleri uygulamak için ayrıcalıkları yeniden yükleyin
Yukarıda yaptığımız değişiklikleri uygulamak için, bu görevle ayrıcalıkları yeniden yükleyin:
1
2
3
4
5
| - name: Reload privileges
mysql_query:
login_user: root
login_password: "{{ mysql_root_password }}"
query: "FLUSH PRIVILEGES"
|
Kopyaladığımız .my.cnf dosyasını silin
Güvenlik için, kök erişimi içerdiğinden /root/.my.cnf dosyasını kaldıralım:
1
2
3
4
| - name: Delete .my.conf
file:
path: /root/.my.cnf
state: absent
|
Playbook ‘un Tamamı
Bu, tüm görevleri içeren tüm oyun kitabıdır:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
| ---
- name: Install and configure mariadb server on Ubuntu 22.04
hosts: db-srv
gather_facts: false
become: true
vars:
mysql_root_password: 'superSecretPassword'
tasks:
- name: Update apt repositories and cache on server
apt:
update_cache: yes
force_apt_get: yes
cache_valid_time: 3600
- name: Upgrade all packages on server
apt:
upgrade: dist
force_apt_get: yes
- name: Check if a reboot is needed on all servers
register: reboot_required_file
stat:
path: /var/run/reboot-required
get_checksum: false
- name: Reboot the server if kernel updated
reboot:
msg: "Reboot initiated by Ansible for kernel updates"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: uptime
when: reboot_required_file.stat.exists
- name: Install Nginx, MySQL, PHP, and related packages
apt:
name:
- mysql-server
- unzip
- python3-mysqldb
- vim
- git
state: present
- name: Start and enable MySQL
systemd:
name: mysql
state: started
enabled: yes
- name: Ensure root user can only login from localhost
mysql_user:
login_password: "{{ mysql_root_password }}"
check_implicit_admin: yes
name: root
host: "{{ item }}"
password: "{{ mysql_root_password }}"
state: present
with_items:
- localhost
- 127.0.0.1
- ::1
- name: Add .my.cnf to user home
copy:
content: |
[client]
user=root
password={{ mysql_root_password }}
dest: /root/.my.cnf
mode: 0600
- name: Remove anonymous users
mysql_user:
login_user: root
login_password: "{{ mysql_root_password }}"
name: ''
host_all: yes
state: absent
- name: Disallow root login remotely
mysql_query:
login_password: "{{ mysql_root_password }}"
query: "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
- name: Remove test database
mysql_db:
login_user: root
login_password: "{{ mysql_root_password }}"
name: test
state: absent
- name: Remove privileges on test database
mysql_query:
login_user: root
login_password: "{{ mysql_root_password }}"
query: "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
- name: Reload privileges
mysql_query:
login_user: root
login_password: "{{ mysql_root_password }}"
query: "FLUSH PRIVILEGES"
- name: Secure root account
mysql_user:
login_user: root
login_password: "{{ mysql_root_password }}"
name: root
host: "{{ item }}"
state: absent
with_items:
- "%"
- "::1"
when: item != 'localhost' and item != '127.0.0.1'
- name: Delete .my.conf
file:
path: /root/.my.cnf
state: absent
|
Playbook’u çalıştırmak için yukarıdaki içerikle setup-mysql.yaml dosyasını ve hosts dosya içeriğiyle hosts.yaml oluşturmanız ve ardından yürütmek için aşağıdaki komutu kullanmanız gerekir:
1
| ansible-playbook -i hosts.yaml setup-mysql.yaml -vv
|
Yazının orijinalini buradna okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.
Görüntüleme: 18