Nginx, gunicorn рдФрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рдирд╛

рдЫрд╡рд┐ рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреА рд░рдЪрдирд╛ рдХреА:
  1. nginx: рдереЛрдбрд╝рд╛ рдЦрд╛рддрд╛ рд╣реИ, рддреЗрдЬ рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  2. рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреБрдЫ рднреА - рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛
  3. gunicorn: wsgi, рдорд╣рд╛рди рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк - рджрдХреНрд╖рддрд╛
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдореИрдВ django рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдПрдХ рд╣реА рдмрдВрдбрд▓ рдХреЗ рддрд╣рдд рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдПрдХ рдЪреМрдерд╛ рдХрд╛рд░рдг рд╣реИ - рдПрдХреАрдХрд░рдг, рдФрд░ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИред

рдпрджрд┐ рдЖрдк рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдЯ рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред

рдпрд╣ рдЖрдЧреЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓, рдирдЧрдиреЗрдХреНрд╕, рдЧреЙрдирд┐рдХреЙрд░реНрди рдФрд░ рд╕реБрдкрд░рд╡рд╛рдЗрдЬрд╝рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ Ubuntu 10.04 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓, рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдФрд░ рд╕реБрдкрд░рд╡рд╛рдЗрдЬрд╝рд░ рдорд╛рдирдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ gunicorn рдХреЗ рд▓рд┐рдП ppa рд╣реИред

рднрд╛рдбрд╝реЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА hgweb рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕рд╕реЗ рдиреГрддреНрдп рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рд╣реЛрдо / hgdata рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реВрдВред рдХрд╛рд░рдг рдмреИрдХрдЕрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рд╣реИред рд╕рднреА / рдШрд░ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рд╕рднреА рд╡рд░реНрдгрд┐рдд рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХреЛ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ , / рд╣реЛрдо / hgdata рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ hgweb.config рд╣реИ, hgweb рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реА, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ:
Copy Source | Copy HTML<br/>[collections]<br/>/ = /home/hgdata <br/>
рд╡рд╣ hgweb рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА / рд╣реЛрдо / hgdata рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдЙрдирдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рд╣рдо wsgi рд╕рд░реНрд╡рд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкрд╛рд░рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ hgweb рдХреЛ wsgi рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, hgwebapp.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
Copy Source | Copy HTML<br/> #!/usr/bin/env python <br/> import os<br/> import sys<br/> from mercurial.hgweb.hgwebdir_mod import hgwebdir<br/> from mercurial.hgweb.request import wsgiapplication<br/> os .environ[ "HGENCODING" ] = "UTF-8" <br/> def make_web_app ():<br/> return hgwebdir( "/home/hgdata/hgweb.config" )<br/> def application (environ, start_response):<br/> environ[ 'wsgi.url_scheme' ] = environ.get( 'HTTP_X_URL_SCHEME' , 'http' )<br/> # nginx wrap proxy headers with HTTP <br/> environ[ 'REMOTE_USER' ] = environ.get( 'HTTP_REMOTE_USER' , '' )<br/> app = wsgiapplication( make_web_app )<br/> return app(environ, start_response) <br/>
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ gunicorn рдХреЗ рддрд╣рдд рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Gunicorn рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ hgweb.conf рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
Copy Source | Copy HTML<br/>[program:hgweb]<br/>command=/usr/bin/gunicorn -b 127.0.0.1:8080 hgwebapp:application<br/>environment=PYTHONPATH= '/home/hgdata' <br/>directory=/home/hgdata<br/> user =www- data <br/>autostart= true <br/>autorestart= true <br/>startsecs=10<br/>redirect_stderr= true <br/>stdout_logfile=/ var /log/supervisor/hgweb.gunicorn.log<br/>
/etc/supervisor/conf.d рдореЗрдВ рдЗрд╕ рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░ рдХреЛ рдПрдХ рд╕рд┐рдорд┐рд▓рд┐рдВрдХ рдбрд╛рд▓реЗрдВ рдФрд░ рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо "рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓" рд╕реБрдкрд░рд╡рд╛рдЗрдЬрд╝рд░: рд╕реБрдбреЛ рд╕реБрдкрд░рд╡рд╛рдЗрдЬрд╝рд░рдЯреНрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрдорд╛рдВрдб рджреЗрддреЗ рд╣реИрдВред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛, рдПрдХ рдирдИ рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ рдФрд░ hgwebapp рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде gunicorn рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рд╕рд░реНрд╡рд░ рдкрддреЗ рдХреЗ 8080 рдкреЛрд░реНрдЯ 127.0.0.1 рдкрд░ рд▓рдЯрдХрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдирдЧреАрдиреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред

Nginx config рдлрд╛рдЗрд▓ рдореЗрдВ, рдореИрдВрдиреЗ рдкреВрд░реЗ рдХрд╛рдо рдХреЛ рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдбреЛрдореЗрди рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рд╣реИ: hg.somewebsite.com
Copy Source | Copy HTML<br/>upstream app_server_hgweb {<br/> server 127.0.0.1:8080 fail_timeout=0;<br/>}<br/>server {<br/> listen XXXX:80;<br/> server_name hg.somewebsite.com;<br/> location / {<br/> auth_basic "Mercurial repository";<br/> auth_basic_user_file /home/hgdata/auth;<br/> proxy_set_header X-Forwarded- For $proxy_add_x_forwarded_for;<br/> proxy_set_header Host $http_host;<br/> proxy_set_header remote_addr $remote_addr;<br/> proxy_set_header remote_user $remote_user;<br/> proxy_redirect off ;<br/> if (!-f $request_filename) {<br/> proxy_pass app_server_hgweb;<br/> break ;<br/> }<br/> }<br/>}<br/>
рдЬреИрд╕рд╛ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ / рд╣реЛрдо / hgdata / рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╣реИрд╢ рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЛ wsgi рд╕рд░реНрд╡рд░ рд╕реЗ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ hgweb рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреНрдпрд╛ рджреЗрдирд╛ рд╣реИред

рдЗрд╕реЗ рд╡реЗрдм рдЕрдиреБрднрд╛рдЧ рдореЗрдВ hgrc рдлрд╝рд╛рдЗрд▓ (рдЬреЛ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ .hg рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ) рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ:
Copy Source | Copy HTML<br/>[web]<br/>contact = Organization name<br/>description = Repository description<br/>style = gitweb<br/>allow_read = user1 user2 user3<br/>allow_push = user1<br/>push_ssl = false <br/>allow_archive = bz2 gz zip <br/>
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 1 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рддреАрди рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднрдВрдбрд╛рд░ рдЕрдирд╛рдо рд╕реЗ рдмрдВрдж рд╣реИред рдпрд╣рд╛рдВ рдПрдХреНрд╕реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЕрдзрд┐рдХ ред

рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ /home/hgdata/hg.somewebsite.com рд╕реЗ / etc / nginx / рд╕рд╛рдЗрдЯреНрд╕-рд╕рдХреНрд╖рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдПрдХ рд╕рд┐рдорд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдФрд░ nginx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрдм рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ nginx config www-data рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рддреЛ www-data рдХреЗ рдкрд╛рд╕ / рд╣реЛрдо / hgdata рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╡рд╣рд╛рдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╕рдм рд╣реИ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In136431/


All Articles