ડેપ્લોયમેન્ટ આર્કિટેક્ચર: શૂન્ય-ડાઉનટાઇમ પ્રોડક્શન સિસ્ટમ
આ લેખ સમજાવે છે કે આપણે વેબસાઇટને કેવી રીતે ઓટોમેટિક રીસ્ટાર્ટ અને શૂન્ય ડાઉનટાઇમ સાથે ડેપ્લોય અને ચલાવીએ છીએ.
સમસ્યા: મેન્યુઅલ ડેપ્લોયમેન્ટ જોખમી છે
પરંપરાગત ડેપ્લોયમેન્ટમાં નીચેની જરૂરિયાતો હોય છે:
-
મેન્યુઅલ સર્વર રીસ્ટાર્ટ: ડાઉનટાઇમનું કારણ બને છે
-
સર્વિસ મોનિટરિંગ: ક્રેશ થાય તેની કોઈને દેખરેખ રાખવી પડે છે
-
કોડ અપડેટ્સ: SSH એક્સેસ અને મેન્યુઅલ પગલાંની જરૂર પડે છે
-
રોલબેક: જો કંઈક તૂટી જાય તો મેન્યુઅલ પ્રક્રિયા
આ સ્કેલ થતું નથી અને અપડેટ્સ દરમિયાન ડાઉનટાઇમનું કારણ બને છે.
ઉકેલ: સિસ્ટમડી સાથે ઓટોમેટેડ ડેપ્લોયમેન્ટ
અમે એપ્લિકેશન મેનેજ કરવા માટે સિસ્ટમડીનો ઉપયોગ કરીએ છીએ (ઇન્ફ્રાસ્ટ્રક્ચર ઓવરવ્યુ જુઓ):
-
ઓટો-રીસ્ટાર્ટ: ક્રેશ અથવા કોડ ચેન્જ પર આપમેળે રીસ્ટાર્ટ થાય છે
-
શૂન્ય ડાઉનટાઇમ: ગ્રેસફુલ વર્કર રીસ્ટાર્ટ્સ
-
લોગિંગ: કેન્દ્રિત લોગ મેનેજમેન્ટ
-
પ્રોસેસ મેનેજમેન્ટ: વર્કર લાઇફસાઇકલ હેન્ડલ કરે છે
સર્વર ઇન્ફ્રાસ્ટ્રક્ચર
પ્રોડક્શન સર્વર
પ્રોડક્શન સર્વર જાહેર વેબસાઇટ હોસ્ટ કરે છે:
-
હેતુ: પ્રોડક્ટ કેટલોગ અને ઇ-કોમર્સ સર્વ કરતી જાહેર વેબસાઇટ
-
મોડ્યુલ: ફક્ત "વેબ"
-
એન્વાયર્નમેન્ટ: પ્રોડક્શન (Gunicorn + systemd)
-
ઍક્સેસ: જાહેર (લોગિન જરૂરી નથી)
એપ્લિકેશન સર્વર
Gunicorn
Gunicorn પ્રોડક્શન વેબ સર્વર છે:
- મલ્ટી-વર્કર: બહુવિધ વર્કર પ્રોસેસ
Systemd ઇન્ટિગ્રેશન
Systemd એ Gunicorn મેનેજ કરે છે:
-
ઓટો-સ્ટાર્ટ: સર્વર બુટ પર
-
ઓટો-રીસ્ટાર્ટ: ક્રેશ અથવા કોડ ચેન્જ પર
-
લોગિંગ: Systemd જર્નલ ઇન્ટિગ્રેશન
-
પ્રોસેસ મેનેજમેન્ટ: વર્કર લાઇફસાઇકલ
કોન્ફિગરેશન
એન્વાયર્નમેન્ટ કોન્ફિગ
કોન્ફિગરેશન એન્વાયર્નમેન્ટ-સ્પેસિફિક છે:
-
કોન્ફિગ ફાઇલ્સ: એન્વાયર્નમેન્ટ-સ્પેસિફિક સેટિંગ્સ
-
JSON ફોર્મેટ: કી-વેલ્યુ જોડીઓ
-
એન્વાયર્નમેન્ટ વેરિયેબલ્સ: સિક્રેટ્સ અને API કીઓ
-
મોડ્યુલ એનેબલમેન્ટ: કઈ ફીચર્સ લોડ થાય તે નિયંત્રિત કરે છે
સ્ટેટિક એસેટ્સ
સ્ટેટિક એસેટ્સ એ S3 માંથી CloudFront CDN સાથે સર્વ કરવામાં આવે છે:
-
S3 બકેટ: સ્ટેટિક ફાઇલ્સ માટે ઑબ્જેક્ટ સ્ટોરેજ
-
CloudFront: ગ્લોબલ એસેટ ડિલિવરી માટે CDN
-
કેશિંગ: સ્ટેટિક કન્ટેન્ટ માટે લાંબી TTL
-
વર્ઝનિંગ: વર્ઝન નંબરો સાથે કેશ-બસ્ટિંગ
ડેપ્લોયમેન્ટ પ્રોસેસ
કોડ ડેપ્લોયમેન્ટ
કોડ એ Git દ્વારા ડેપ્લોય થાય છે જ્યાં સિસ્ટમડી એ એપ્લિકેશન સર્વિસ મેનેજ કરે છે:
- કમિટ અને પુશ: ફેરફારો Git રિપોઝિટરીમાં પુશ થાય છે
- સર્વર પર પુલ: કોડ પ્રોડક્શન સર્વર પર પુલ થાય છે
- Systemd રીસ્ટાર્ટ: સર્વિસ ક્રેશ પર આપમેળે રીસ્ટાર્ટ થાય છે
કોન્ફિગરેશન ડેપ્લોયમેન્ટ
કોન્ફિગરેશન કોડથી અલગ મેનેજ થાય છે:
- કોન્ફિગ ફાઇલ્સ: Git માં JSON કોન્ફિગરેશન ફાઇલ્સ
- એન્વાયર્નમેન્ટ વેરિયેબલ્સ: એન્વાયર્નમેન્ટમાંથી લોડ થતા સિક્રેટ્સ
- મોડ્યુલ એનેબલમેન્ટ: કઈ ફીચર્સ લોડ થાય તે નિયંત્રિત કરે છે
મોનિટરિંગ
હેલ્થ ચેક્સ
હેલ્થ એન્ડપોઇન્ટ્સ સર્વર સ્ટેટસ મોનિટર કરે છે:
-
હેલ્થ એન્ડપોઇન્ટ: બેઝિક હેલ્થ ચેક
-
ડેટાબેઝ ચેક: ડેટાબેઝ કનેક્ટિવિટી
-
કેશ ચેક: કેશ કનેક્ટિવિટી
લોગિંગ
લોગ્સ બહુવિધ સ્થાનો પર સ્ટોર કરવામાં આવે છે:
-
Gunicorn એરર લોગ્સ: એપ્લિકેશન એરર્સ
-
Gunicorn ઍક્સેસ લોગ્સ: HTTP રિક્વેસ્ટ્સ
-
સર્વિસ લોગ્સ: Systemd જર્નલ
સારાંશ
ડેપ્લોયમેન્ટ આર્કિટેક્ચર પ્રદાન કરે છે:
-
Gunicorn: પ્રોડક્શન WSGI સર્વર
-
Systemd: ઓટો-રીસ્ટાર્ટ અને પ્રોસેસ મેનેજમેન્ટ
-
Git ડેપ્લોયમેન્ટ: કોડ અને કોન્ફિગ મેનેજમેન્ટ
-
S3 + CloudFront: સ્ટેટિક એસેટ ડિલિવરી
-
હેલ્થ મોનિટરિંગ: હેલ્થ ચેક એન્ડપોઇન્ટ્સ
-
લોગિંગ: એરર અને ઍક્સેસ લોગ્સ