🏗️

البنية التحتية كـ Code (IaC)

وفّر وأدِر البنية التحتية برمجياً. لا مزيد من إعداد الخوادم اليدوي — كل شيء كود قابل للتكرار.

متقدم Terraform Ansible

📖 ما هو IaC؟

Infrastructure as Code

بدلاً من إعداد الخوادم يدوياً عبر واجهات، تعرّف كل شيء (خوادم، شبكات، قواعد بيانات) في ملفات كود. يمكنك مراجعتها، نسخها، وإعادة بناء البنية بالكامل بأمر واحد.

🏗️

Terraform (توفير)

يُنشئ البنية التحتية من الصفر: خوادم، شبكات، قواعد بيانات عبر APIs.

⚙️

Ansible (إعداد)

يُعدّ الخوادم بعد إنشائها: تثبيت برامج، إعدادات، نشر تطبيقات.

🏗️ Terraform — الأساسيات

main.tf — AWS EC2 Instance
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-east-1" } resource "aws_instance" "web" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t3.micro" tags = { Name = "web-server" Env = "production" } } output "public_ip" { value = aws_instance.web.public_ip }
Terminal — Terraform Workflow
# تهيئة Terraform terraform init # معاينة التغييرات terraform plan # تطبيق التغييرات terraform apply -auto-approve # عرض الموارد terraform show # حذف كل شيء terraform destroy
⚠️ ملف terraform.tfstate يحتوي معلومات حساسة. احفظه في remote backend (S3 + DynamoDB) وليس محلياً.

📋 Terraform — بنية متقدمة

variables.tf
variable "instance_type" { description = "EC2 instance type" type = string default = "t3.micro" } variable "env" { description = "Environment name" type = string default = "production" }
terraform.tfvars
instance_type = "t3.medium" env = "staging"

⚙️ Ansible — الأساسيات

إعداد الخوادم بدون Agent

Ansible يتصل بالخوادم عبر SSH وينفّذ المهام. لا يحتاج تثبيت عميل على الخوادم المستهدفة.

inventory.ini
[webservers] web1 ansible_host=10.0.1.10 web2 ansible_host=10.0.1.11 [dbservers] db1 ansible_host=10.0.2.10 [all:vars] ansible_user=devops ansible_ssh_private_key_file=~/.ssh/id_ed25519
playbook.yml — Web Server Setup
--- - name: Setup Web Servers hosts: webservers become: yes tasks: - name: Update apt cache apt: update_cache: yes cache_valid_time: 3600 - name: Install Nginx apt: name: nginx state: present - name: Start Nginx service: name: nginx state: started enabled: yes - name: Deploy app config template: src: templates/nginx.conf.j2 dest: /etc/nginx/sites-available/default notify: restart nginx handlers: - name: restart nginx service: name: nginx state: restarted
Terminal — Ansible Commands
# فحص الاتصال ansible all -m ping # تشغيل playbook ansible-playbook playbook.yml # تشغيل مع تحديد hosts ansible-playbook playbook.yml --limit webservers # فحص syntax ansible-playbook playbook.yml --syntax-check # Dry run (معاينة بدون تنفيذ) ansible-playbook playbook.yml --check

أفضل الممارسات

🎯 1. استخدم remote backend لـ Terraform state
2. لا تضع Secrets في الكود — استخدم Vault أو Variables
3. نفّذ terraform plan قبل apply
4. استخدم modules لإعادة الاستخدام
5. اجعل Ansible playbooks idempotent (قابلة للتكرار بأمان)
6. استخدم Git لتتبع تغييرات البنية التحتية
السابق: Kubernetes التالي: المراقبة والسجلات