ડેપ્લોયમેન્ટ આર્કિટેક્ચર: શૂન્ય-ડાઉનટાઇમ પ્રોડક્શન સિસ્ટમ

આ લેખ સમજાવે છે કે આપણે વેબસાઇટને કેવી રીતે ઓટોમેટિક રીસ્ટાર્ટ અને શૂન્ય ડાઉનટાઇમ સાથે ડેપ્લોય અને ચલાવીએ છીએ.

સમસ્યા: મેન્યુઅલ ડેપ્લોયમેન્ટ જોખમી છે

પરંપરાગત ડેપ્લોયમેન્ટમાં નીચેની જરૂરિયાતો હોય છે:

  • મેન્યુઅલ સર્વર રીસ્ટાર્ટ: ડાઉનટાઇમનું કારણ બને છે

  • સર્વિસ મોનિટરિંગ: ક્રેશ થાય તેની કોઈને દેખરેખ રાખવી પડે છે

  • કોડ અપડેટ્સ: SSH એક્સેસ અને મેન્યુઅલ પગલાંની જરૂર પડે છે

  • રોલબેક: જો કંઈક તૂટી જાય તો મેન્યુઅલ પ્રક્રિયા

આ સ્કેલ થતું નથી અને અપડેટ્સ દરમિયાન ડાઉનટાઇમનું કારણ બને છે.

ઉકેલ: સિસ્ટમડી સાથે ઓટોમેટેડ ડેપ્લોયમેન્ટ

અમે એપ્લિકેશન મેનેજ કરવા માટે સિસ્ટમડીનો ઉપયોગ કરીએ છીએ (ઇન્ફ્રાસ્ટ્રક્ચર ઓવરવ્યુ જુઓ):

  • ઓટો-રીસ્ટાર્ટ: ક્રેશ અથવા કોડ ચેન્જ પર આપમેળે રીસ્ટાર્ટ થાય છે

  • શૂન્ય ડાઉનટાઇમ: ગ્રેસફુલ વર્કર રીસ્ટાર્ટ્સ

  • લોગિંગ: કેન્દ્રિત લોગ મેનેજમેન્ટ

  • પ્રોસેસ મેનેજમેન્ટ: વર્કર લાઇફસાઇકલ હેન્ડલ કરે છે

સર્વર ઇન્ફ્રાસ્ટ્રક્ચર

પ્રોડક્શન સર્વર

પ્રોડક્શન સર્વર જાહેર વેબસાઇટ હોસ્ટ કરે છે:

  • હેતુ: પ્રોડક્ટ કેટલોગ અને ઇ-કોમર્સ સર્વ કરતી જાહેર વેબસાઇટ

  • મોડ્યુલ: ફક્ત "વેબ"

  • એન્વાયર્નમેન્ટ: પ્રોડક્શન (Gunicorn + systemd)

  • ઍક્સેસ: જાહેર (લોગિન જરૂરી નથી)

એપ્લિકેશન સર્વર

Gunicorn

Gunicorn પ્રોડક્શન વેબ સર્વર છે:

  • મલ્ટી-વર્કર: બહુવિધ વર્કર પ્રોસેસ

Systemd ઇન્ટિગ્રેશન

Systemd એ Gunicorn મેનેજ કરે છે:

  • ઓટો-સ્ટાર્ટ: સર્વર બુટ પર

  • ઓટો-રીસ્ટાર્ટ: ક્રેશ અથવા કોડ ચેન્જ પર

  • લોગિંગ: Systemd જર્નલ ઇન્ટિગ્રેશન

  • પ્રોસેસ મેનેજમેન્ટ: વર્કર લાઇફસાઇકલ

કોન્ફિગરેશન

એન્વાયર્નમેન્ટ કોન્ફિગ

કોન્ફિગરેશન એન્વાયર્નમેન્ટ-સ્પેસિફિક છે:

  • કોન્ફિગ ફાઇલ્સ: એન્વાયર્નમેન્ટ-સ્પેસિફિક સેટિંગ્સ

  • JSON ફોર્મેટ: કી-વેલ્યુ જોડીઓ

  • એન્વાયર્નમેન્ટ વેરિયેબલ્સ: સિક્રેટ્સ અને API કીઓ

  • મોડ્યુલ એનેબલમેન્ટ: કઈ ફીચર્સ લોડ થાય તે નિયંત્રિત કરે છે

સ્ટેટિક એસેટ્સ

સ્ટેટિક એસેટ્સ એ S3 માંથી CloudFront CDN સાથે સર્વ કરવામાં આવે છે:

  • S3 બકેટ: સ્ટેટિક ફાઇલ્સ માટે ઑબ્જેક્ટ સ્ટોરેજ

  • CloudFront: ગ્લોબલ એસેટ ડિલિવરી માટે CDN

  • કેશિંગ: સ્ટેટિક કન્ટેન્ટ માટે લાંબી TTL

  • વર્ઝનિંગ: વર્ઝન નંબરો સાથે કેશ-બસ્ટિંગ

ડેપ્લોયમેન્ટ પ્રોસેસ

કોડ ડેપ્લોયમેન્ટ

કોડ એ Git દ્વારા ડેપ્લોય થાય છે જ્યાં સિસ્ટમડી એ એપ્લિકેશન સર્વિસ મેનેજ કરે છે:

  1. કમિટ અને પુશ: ફેરફારો Git રિપોઝિટરીમાં પુશ થાય છે
  2. સર્વર પર પુલ: કોડ પ્રોડક્શન સર્વર પર પુલ થાય છે
  3. Systemd રીસ્ટાર્ટ: સર્વિસ ક્રેશ પર આપમેળે રીસ્ટાર્ટ થાય છે

કોન્ફિગરેશન ડેપ્લોયમેન્ટ

કોન્ફિગરેશન કોડથી અલગ મેનેજ થાય છે:

  1. કોન્ફિગ ફાઇલ્સ: Git માં JSON કોન્ફિગરેશન ફાઇલ્સ
  2. એન્વાયર્નમેન્ટ વેરિયેબલ્સ: એન્વાયર્નમેન્ટમાંથી લોડ થતા સિક્રેટ્સ
  3. મોડ્યુલ એનેબલમેન્ટ: કઈ ફીચર્સ લોડ થાય તે નિયંત્રિત કરે છે

મોનિટરિંગ

હેલ્થ ચેક્સ

હેલ્થ એન્ડપોઇન્ટ્સ સર્વર સ્ટેટસ મોનિટર કરે છે:

  • હેલ્થ એન્ડપોઇન્ટ: બેઝિક હેલ્થ ચેક

  • ડેટાબેઝ ચેક: ડેટાબેઝ કનેક્ટિવિટી

  • કેશ ચેક: કેશ કનેક્ટિવિટી

લોગિંગ

લોગ્સ બહુવિધ સ્થાનો પર સ્ટોર કરવામાં આવે છે:

  • Gunicorn એરર લોગ્સ: એપ્લિકેશન એરર્સ

  • Gunicorn ઍક્સેસ લોગ્સ: HTTP રિક્વેસ્ટ્સ

  • સર્વિસ લોગ્સ: Systemd જર્નલ

સારાંશ

ડેપ્લોયમેન્ટ આર્કિટેક્ચર પ્રદાન કરે છે:

  • Gunicorn: પ્રોડક્શન WSGI સર્વર

  • Systemd: ઓટો-રીસ્ટાર્ટ અને પ્રોસેસ મેનેજમેન્ટ

  • Git ડેપ્લોયમેન્ટ: કોડ અને કોન્ફિગ મેનેજમેન્ટ

  • S3 + CloudFront: સ્ટેટિક એસેટ ડિલિવરી

  • હેલ્થ મોનિટરિંગ: હેલ્થ ચેક એન્ડપોઇન્ટ્સ

  • લોગિંગ: એરર અને ઍક્સેસ લોગ્સ