جدول المحتويات

وصل Apache CloudStack 4.21، مُقدمًا واجهة مستخدم أكثر وضوحًا ومجموعة من الميزات الجديدة - لا يوجد وقت أفضل للترقية أو إطلاق تثبيت جديد. في هذا الدليل، سنشرح خطوة بخطوة تثبيت أحدث إصدار 4.21 مع TLS من البداية إلى النهاية، بالإضافة إلى الأدوات المطلوبة والموصى بها بشدة لتشغيله بثقة في بيئة الإنتاج. سبق أن شرحتُ CloudStack في الدليل السابق. بريدلا تتردد في القراءة قبل المتابعة. لنبدأ الآن.

سوف نفعل كل شيء يدويًا وسنستخدم MariaDB لتحسين الأداء، حتى تتمكن من فهم كيفية القيام بكل شيء بنفسك.

متطلبات:

  • نظام التشغيل الداعم: Ubuntu 24.04
  • الهندسة المعمارية: amd64، aarch64
  • كتلة الشبكة العامة – الحد الأدنى /28 (مهم للوصول العام فقط)
  • تم تثبيت حزمة Timeshift أو بديل احتياطي (ضروري)

ابدء

ملاحظة: سيؤدي تثبيت iptables-save وnetfilter-persistent إلى حدوث فوضى في اتصال CloudStack Agent بالمضيف، وسأشرح في منشور آخر كيفية تأمين الإعداد باستخدام iptables

النسخ الاحتياطي: Timeshift

أولاً، دعونا ندخل إلى خادمنا عبر SSH ونحتاج إلى تثبيت Timeshift.

سحق
sudo su
passwd root # Change root password if you haven't already
apt update && apt upgrade -y
apt install -y timeshift
timeshift --rsync --create --comments "Initial snapshot" --tags D

رائع، الآن يمكننا دائمًا الرجوع إلى النسخة الاحتياطية لدينا في حالة حدوث خطأ كبير دون الحاجة إلى إعادة تحميل النظام.

تعطيل النوم

لا ينبغي وضع الخادم في وضع السكون لضمان التوافر المستمر، ومنع أوقات بدء التشغيل البطيئة، والحفاظ على الأداء، وتجنب مشكلات الأجهزة المحتملة الناجمة عن دورات الطاقة المتكررة.

سحق
systemctl status suspend.target

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

sudo mkdir -p /etc/systemd/sleep.conf.d
sudo tee /etc/systemd/sleep.conf.d/no-sleep.conf >/dev/null <<'EOF'
[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowHybridSleep=no
AllowSuspendThenHibernate=no
EOF
سحق
sudo mkdir -p /etc/systemd/logind.conf.d
sudo tee /etc/systemd/logind.conf.d/no-sleep.conf >/dev/null <<'EOF'
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
IdleAction=ignore
EOF

sudo systemctl restart systemd-logind

التواصل

1: دعنا نقوم بتكوين اسم المضيف
سحق
hostname --fqdn
hostnamectl set-hostname node1.example.com
2: قم بتثبيت الأدوات المهمة قبل البدء
سحق
apt install -y vim nano wget curl openssh-server sudo htop tar iotop \
  bridge-utils net-tools ipset python3-pip software-properties-common net-tools \
  gnupg2 lsb-release openntpd cpu-checker openjdk-17-jre
3: تكوين ssh ليكون صديقًا لـ CloudStack
سحق
nano /etc/ssh/sshd_config
# Uncomment and Tweak these lines
PermitRootLogin prohibit-password
StrictModes yes
MaxAuthTries 3
PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
# Do not disable PasswordAuthentication before adding SSH Keys
PasswordAuthentication no
PermitEmptyPasswords no

X11Forwarding no
UsePAM yes
سحق
# Add at the end of the file
KexAlgorithms=+diffie-hellman-group-exchange-sha1
PubkeyAcceptedKeyTypes=+ssh-dss
HostKeyAlgorithms=+ssh-dss
KexAlgorithms=+diffie-hellman-group1-sha1
4: إنشاء جسر لـ CloudStack

يعد هذا جزءًا صعبًا ويتطلب بعض المعرفة الأساسية بالشبكات.
ما نحتاج إلى فهمه:
ج: إذا كان لديك شبكات فرعية متعددة: هل شبكتك الفرعية موجهة أم مُنَشَّطة؟ معظمها موجهة.
ب: هل منفذ الشبكة الخاص بك مترابط أم لا؟
من المهم أن يسمح المحول/الموجه بالتجميع (802.1Q) حتى نتمكن من إعداد شبكات VLAN، إذا كنت تخطط لاستخدام شبكات فرعية متعددة مع عناوين IP عامة.
يمكننا التغلب على هذا عن طريق:
4.1: (لوصول IP العام) إعداد منفذي Ethernet، لأنه لا يمكننا ربط سوى جسر نشط واحد بمنفذ في كل مرة والحفاظ على الجسر غير مميز.
4.2: (للوصول إلى IP العام) اجعل كل حركة المرور الموجودة تحت جسر واحد (للاستخدام الشخصي) غير مميزة.
سيكون كلا الخيارين غير مميزين، مما يعني أننا لا نستطيع استخدام شبكات VLAN ولكن يمكننا استخدام مجموعات الأمان للعزل.

الآن دعونا نقوم بتكوين netplan:

نانو
ifconfig
cd /etc/netplan
# Now rename all the files and add .bak to th end of the file names.
# Disable netplan regeneartion.
sudo mkdir -p /etc/cloud/cloud.cfg.d
echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# Create a new neplan conf
nano /etc/netplan/01-network-manager-all.yaml

الآن يمكنك نسخ ولصق أحد هذه التكوينات من ملفي جيثب في الملف وحفظه.

سحق
netplan try
# if everything is good, apply
netplan generate && netplan apply 
sudo update-initramfs -u && sudo reboot

وحدات جسر التحميل

سحق
sudo modprobe bridge 
# Load netfilter modules 
sudo modprobe br_netfilter 
sudo modprobe nf_conntrack 
# Load required modules 
modprobe br_netfilter 2>/dev/null 
modprobe nf_conntrack 2>/dev/null echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf 
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf 
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf 
echo "vm.swappiness=10" >> /etc/sysctl.conf sysctl -p modprobe kvm modprobe kvm-intel 
# or kvm-amd for AMD processors 
echo "kvm" >> /etc/modules 
echo "kvm-intel" >> /etc/modules # or kvm-amd

تكوين خادم NFS للتخزين

سحق
apt install nfs-kernel-server nfs-common -y

mkdir /export
mkdir -m 755 /export/primary
mkdir -m 755 /export/secondary
mkdir -m 755 /mnt/primary # If you have a secondary storage device you wanna use.
mkdir -m 755 /mnt/secondary # If you have a secondary storage device you wanna use.
سحق
# Configure exports
cat > /etc/exports << EOF
/export/primary  10.7.0.0/24(rw,async,no_root_squash,no_subtree_check) 127.0.0.1/24(rw,async,no_root_squash,no_subtree_check)
/export/secondary  10.7.0.0/24(rw,async,no_root_squash,no_subtree_check) 127.0.0.1(rw,async,no_root_squash,no_subtree_check)
EOF

# Now lets modify fstab
nano /etc/fstab 
# Add the following and save for permanent mount.
10.7.0.0:/export/primary    /mnt/primary   nfs defaults,noauto 0 0
10.7.0.0:/export/secondary    /mnt/secondary   nfs defaults,noauto 0 0

قم بتكوين إعدادات خادم نواة NFS عن طريق تحرير ملف التكوين باستخدام الأمر التالي:

سحق
nano /etc/default/nfs-kernel-server
# Add the following and save.
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

احفظ وأخرج. ثم فعّل وأعد تشغيل خادم NFS.

سحق
systemctl enable nfs-kernel-server
systemctl restart nfs-kernel-server
# Mount NFS shares and Fstab
systemctl daemon-reload
exportfs -a
mount -a

تثبيت قاعدة بيانات MariaDB

يستخدم CloudStack عادةً MySQL ولكن MariaDB هو الأفضل للإنتاج بسبب الأمان والأداء.

سحق
sudo apt install -y mariadb-server
سحق
cat | sudo tee /etc/mysql/conf.d/cloudstack.cnf >/dev/null <<'CFG'
[mysqld]
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log_bin=mysql-bin
binlog_format=ROW
bind-address=0.0.0.0 
# I would recommend binding it to 127.0.0.1
# If you plan replication, set a unique server_id
server_id=1
character-set-server = utf8mb4
collation-server     = utf8mb4_unicode_ci
CFG

sudo systemctl restart mariadb
mysql_secure_installation
  • التبديل إلى مصادقة unix_socket ن
  • هل ترغب في إعداد مكون التحقق من كلمة المرور؟ ن
  • تغيير كلمة المرور للجذر؟ ن # اختيارك
  • إزالة المستخدمين المجهولين؟ ي
  • منع تسجيل الدخول الجذر عن بعد؟ ي
  • إزالة قاعدة بيانات الاختبار والوصول إليها؟ ي
  • هل تريد إعادة تحميل جداول الامتيازات الآن؟ ي

تغيير كلمة مرور MySQL

سحق
mysql -u root
CREATE USER IF NOT EXISTS 'root'@'localhost'   IDENTIFIED BY '$mysqlRootPassword';
CREATE USER IF NOT EXISTS 'root'@'127.0.0.1'   IDENTIFIED BY '$mysqlRootPassword';
CREATE USER IF NOT EXISTS 'root'@'%'           IDENTIFIED BY '$mysqlRootPassword';
# Explicitly use mysql_native_password for each
ALTER USER 'root'@'localhost'  IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
ALTER USER 'root'@'127.0.0.1'  IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
ALTER USER 'root'@'%'          IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
FLUSH PRIVILEGES;
EXIT;
سحق
# Create DB/User for CloudStack
mysql -u root -p << EOF
CREATE USER 'cloud'@'localhost' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'cloud'@'localhost' WITH GRANT OPTION;
CREATE USER 'cloud'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'cloud'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

إضافة مستودع Apt & تثبيت CloudStack

سحق
mkdir -p /etc/apt/keyrings
wget -O- http://packages.shapeblue.com/release.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/cloudstack.gpg > /dev/null

echo deb [signed-by=/etc/apt/keyrings/cloudstack.gpg] http://packages.shapeblue.com/cloudstack/upstream/debian/4.21 / > /etc/apt/sources.list.d/cloudstack.list
سحق
apt update
apt install -y cloudstack-management cloudstack-usage

apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
qemu-utils genisoimage iproute2 uuid-runtime virtinst cloudstack-agent

usermod -aG libvirt,libvirt-qemu,kvm "$USER"
newgrp libvirt

الخطوة التالية هي إعداد قاعدة البيانات لـ CloudStack

سحق
cloudstack-setup-databases cloud:'StrongPassword!'@localhost \
  --deploy-as=root:'$mysqlRootPassword' \
  -e file \
  -m 'Fill_In_Random_MGMT_SERVER_KEY' \
  -k 'Fill_In_Random_DB_KEY' \
  -i "127.0.0.1"

cloudstack-setup-management

تنزيل قوالب System VM لـ CloudStack (مهم)

سحق
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
  -m /export/secondary \
  -u https://download.cloudstack.org/systemvm/4.20/systemvmtemplate-4.20.2-x86_64-kvm.qcow2.bz2 \
  -h kvm -F

قم بتعيين sudoers للتأكد من أن كل شيء يعمل

سحق
nano /etc/sudoers
# Append the following line to the end of the file
Defaults:cloud !requiretty

الآن، يجب أن تكون واجهة المستخدم متاحة على http://public_ip:8080/client، بيانات الاعتماد: (admin:password). لكننا لم ننتهِ بعد.

تكوين وكيل CloudStack، كيمو والخدمات

سحق
systemctl enable cloudstack-agent.service
سحق
nano /etc/libvirt/libvirtd.conf
# Find the identifier and uncomment, change or append
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0
سحق
nano /etc/default/libvirtd
# Find the identifier and uncomment, change or append
LIBVIRTD_ARGS="--listen"
سحق
# Mask libvirt for listening
systemctl mask libvirtd.socket libvirtd-ro.socket \
libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socketd
systemctl restart libvirtd

تعطيل AppArmor

سحق
ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper

الآن تم الانتهاء من الإعداد الأساسي وأنت جاهز لتشغيل واجهة المستخدم على http://public_ip:8080/client، بيانات الاعتماد: (admin:password).

الخطوات التالية:

لتجنب جعل المنشور أطول مما ينبغي، يرجى الاطلاع على التالي بريد لمعرفة الخطوات التالية وكيفية تأمين إعداداتك.

مصنفة في:

سحاب, أدلة,