لقد أثر الوباء العالمي CoronaVirus COVID-19 المعروف أيضًا باسم SARS-CoV-2 بالفعل على ملايين الأشخاص في جميع أنحاء العالم. يعد تطبيق الويب الخاص بـCOVID-19 نموذجًا أوليًا لتطبيق سحابي تم تطويره بلغة Python وFlask والذي يوفر إحصائيات عالمية للحالات المصابة بـCOVID-19. يستخدم هذا التطبيق خدمة REST API للحصول على الإحصائيات اليومية لـCOVID-19 ويتم نشر التطبيق في مثيل AWS EC2.
احصل على ملخص لجميع البلدان والإحصائيات العالمية.
احصل على قائمة بجميع البلدان بالإضافة إلى تفاصيل رمز البلد ورمزه.
يؤدي هذا إلى تحميل قاعدة البيانات بإحصائيات الدولة الخاصة بكوفيد 19 باستخدام واجهة برمجة التطبيقات الخارجية "https://api.covid19api.com/summary"
تعرض الصفحة الرئيسية الإحصائيات العالمية لـCOVID 19 إلى جانب روابط لعرض إحصائيات الدولة والتفاعل مع REST API الخارجية. يمكن للمرء استخدام الأمر الضفيرة:
احصل على إحصائيات جميع البلدان من قاعدة البيانات. يمكن تنفيذها باستخدام أمر الضفيرة التالي:
curl -i -k https://0.0.0.0/summary/country
احصل على الإحصائيات العالمية من قاعدة البيانات. يمكن تنفيذه باستخدام أمر الضفيرة التالي:
curl -i -k https://0.0.0.0/summary/global
احصل على الإحصائيات الخاصة بكل بلد من قاعدة البيانات. يمكن تنفيذه باستخدام الأمر التالي:
curl -i -k https://0.0.0.0/summary/country/TestCountry
إضافة دولة جديدة إلى قاعدة البيانات. يجب على المستخدم تقديم ما يلي:
هذا طلب POST ويمكن تنفيذه باستخدام أمر الضفيرة التالي:
curl -i -k -H "Content-Type: application/json" -X POST -d '{"NewConfirmed":2,"TotalConfirmed":3,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Country":"TestCountry"}' https://0.0.0.0/summary/country
تحديث دولة موجودة إلى قاعدة البيانات. يجب على المستخدم تقديم ما يلي:
هذا طلب PUT ويمكن تنفيذه باستخدام أمر الضفيرة التالي:
curl -i -k -H "Content-Type: application/json" -X PUT -d '{"NewConfirmed":999,"TotalConfirmed":3,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Country":"TestCountry"}' https://0.0.0.0/summary/country
حذف سجل الدولة من قاعدة البيانات. يجب على المستخدم تقديم ما يلي:
هذا طلب حذف ويمكن تنفيذه باستخدام أمر الضفيرة التالي:
curl -i -k -H "Content-Type: application/json" -X DELETE -d '{"Country":"TestCountry"}' https://0.0.0.0/summary/country
أضف الإحصائيات العالمية إلى قاعدة البيانات. يجب على المستخدم تقديم ما يلي:
يشير "المفتاح" هنا إلى القيمة "العالمية". هذا طلب POST ويمكن تنفيذه باستخدام الأمر التالي:
curl -i -k -H "Content-Type: application/json" -X POST -d '{"NewConfirmed":9,"TotalConfirmed":3,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Key":"TestGlobal"}' https://0.0.0.0/summary/global
تحديث الإحصائيات العالمية لقاعدة البيانات. يجب على المستخدم تقديم ما يلي:
يشير "المفتاح" هنا إلى القيمة "العالمية". هذا طلب PUT ويمكن تنفيذه باستخدام الأمر التالي:
curl -i -k -H "Content-Type: application/json" -X PUT -d '{"NewConfirmed":1,"TotalConfirmed":10,"NewDeaths":3,"TotalDeaths":3,"NewRecovered":3,"TotalRecovered":3,"Key":"TestGlobal"}' https://0.0.0.0/summary/global
حذف سجل الإحصائيات العالمية من قاعدة البيانات. يجب على المستخدم تقديم ما يلي:
*مفتاح
يشير "المفتاح" هنا إلى القيمة "العالمية". هذا طلب حذف ويمكن تنفيذه باستخدام الأمر التالي:
curl -i -k -H "Content-Type: application/json" -X DELETE -d '{"Key":"TestGlobal"}' https://0.0.0.0/summary/global
sudo apt update
sudo apt install docker.io
sudo docker pull cassandra:latest
sudo docker run --name cassandra-test -p 9042:9042 -d cassandra:latest
wget https://raw.githubusercontent.com/niranjanganesan/ECS781P_Cloud_Computing_Mini_Project/master/country.csv
wget https://raw.githubusercontent.com/niranjanganesan/ECS781P_Cloud_Computing_Mini_Project/master/global.csv
sudo docker cp country.csv cassandra-test:/home/country.csv
sudo docker cp global.csv cassandra-test:/home/global.csv
sudo docker exec -it cassandra-test cqlsh
cqlsh> CREATE KEYSPACE COVID19 WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': '1'};
cqlsh> CREATE TABLE COVID19.summary (Country text PRIMARY KEY,NewConfirmed int,
TotalConfirmed int, NewDeaths int, TotalDeaths int, NewRecovered int,
TotalRecovered int);
cqlsh> CREATE TABLE COVID19.global (Key text PRIMARY KEY,NewConfirmed int,
TotalConfirmed int, NewDeaths int, TotalDeaths int, NewRecovered int,
TotalRecovered int, TimeStamp text);
cqlsh> COPY COVID19.summary(Country, NewConfirmed, TotalConfirmed, NewDeaths, TotalDeaths, NewRecovered, TotalRecovered)
FROM '/home/country.csv' WITH HEADER=TRUE;
cqlsh> COPY COVID19.global(Key, NewConfirmed, TotalConfirmed, NewDeaths, TotalDeaths, NewRecovered, TotalRecovered)
FROM '/home/global.csv' WITH HEADER=TRUE;
يتم تقديم التطبيق عبر https من خلال إعداد الشهادات الموقعة ذاتيًا كما هو موضح أدناه:
$ openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
Generating a RSA private key
.....................................++++
....................................................................................++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:England
Locality Name (eg, city) []:London
Organization Name (eg, company) [Internet Widgits Pty Ltd]:QMUL
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:[email protected]
if __name__ == "__main__":
context = ('cert.pem','key.pem')
app.run(host='0.0.0.0',port=443,ssl_context=context)
فيما يلي خطوات إنشاء صورة عامل الإرساء ونشر التطبيق في kubernetes
sudo snap install microk8s --classic
sudo microk8s enable registry
apiVersion: apps/v1
kind: Deployment
metadata:
name: covidapp-deployment
labels:
app: covidapp
spec:
selector:
matchLabels:
app: covidapp
replicas: 3
template:
metadata:
labels:
app: covidapp
spec:
containers:
- name: covidapp
image: localhost:32000/covidapp:registry
ports:
- containerPort: 443
sudo docker build . -t localhost:32000/covidapp:registry
sudo docker push localhost:32000/covidapp:registry
{
"insecure-registries" : ["localhost:32000"]
}
ملاحظة: هذه الخطوة اختيارية ويجب تنفيذها فقط في حالة فشل دفع عامل الإرساء.
sudo systemectl restart docker
sudo docker start cassandra-test
sudo microk8s.kubectl apply -f ./deployment.yaml
يتم الآن نشر تطبيق we في kubernetes
sudo microk8s.kubectl get deployment
sudo microk8s.kubectl get pods
sudo microk8s.kubectl expose deployment covidapp-deployment --port=443 --type=LoadBalancer
sudo microk8s.kubectl get services
فيما يلي نموذج لحالة الخدمة:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/covidappv3-deployment LoadBalancer 10.152.183.77 <pending> 443:30873/TCP 17h
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 9d
هنا يمكننا أن نرى أن تطبيق الويب المنشور يتعرض لـ Nodeport '30873'. افتراضيًا، تقوم خدمة kubernetes بتخصيص منفذ ضمن النطاق "30000-32767".
أخيرًا، قم بعرض تطبيق الويب في المتصفح باستخدام DNS العام لحساب AWS EC2 بالإضافة إلى Nodeport الذي يبدأ بـ "30xxx".
sudo microk8s.kubectl delete deployment covidapp-deployment
sudo microk8s.kubectl delete service covidapp-deployment
sudo docker rm cassandra-test