nginx + gunicorn + fastapi 배치 자동 배경 시작

3142 단어 nginxsystemd
프로젝트 배경
시스템 버 전: debian9 환경 조합: python3 가상 환경 + fastapi + uvicorn + gunicorn 프로젝트 루트 디 렉 터 리: /data/wwwroot/domian.com공식 문서 에 서 는 IP:PORT 형식 으로 시작 fastapi 되 지만 매번 가상 환경 에 들 어가 명령 을 통 해 시작 gunicorn 해 야 하기 때문에 매우 번거롭다.나중에 systemd + gunicorn 방식 으로 바 꾼 후에 켜 지면 자동 으로 작 동 gunicorn 되 고 포트 를 차지 하지 않 습 니 다.
구체 적 배치 fastapi 는 별도로 글 을 써 서 설명 하 는데 본 글 은 nginx + systemd + gunicorn 의 배치 방식 만 말한다.
대략적인 방안
다음 파일 새로 만 들 기:
/etc/systemd/system/gunicorn.service
/etc/systemd/system/gunicorn.socket
nginxconf 파일 에는 대리 ip:prot 형식 이 아니 라 대리 sock 파일 이 들 어 있다.
구체 적 절차/etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
Type=notify
# the specific user that our service will run as
User=gunicorn
Group=www
# another option for an even more restricted service is
# DynamicUser=yes
# see http://0pointer.net/blog/dynamic-users-with-systemd.html
RuntimeDirectory=gunicorn

# WorkingDirectory        
WorkingDirectory=/data/wwwroot/domian.com
#          ,
#              gunicorn -c gconfig.py main:app -k uvicorn.workers.UvicornWorker
#    gunicorn   gconfig.py          
ExecStart=/data/wwwroot/luejiao.com/venv/bin/gunicorn -c /data/wwwroot/luejiao.com/gconfig.py main:app -k uvicorn.workers.UvicornWorker
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target
/etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket

[Socket]
# ListenStream       sock     ,      。           。
ListenStream=/data/wwwroot/domian.com/domian.com_gunicorn.sock
# Our service won't need permissions for the socket, since it
# inherits the file descriptor by socket activation
# only the nginx daemon will need access to the socket
User=www-data
# Optionally restrict the socket permissions even more.
# Mode=600

[Install]
WantedBy=sockets.target
nginxdomian.conf 다른 설정 은 쓰 지 않 습 니 다. 주로 / 대리 부분 입 니 다.
location / {
    #      ip     ,      sock   
    # proxy_pass http://127.0.0.1:3002; 
    # unix               sock        ,    。
      proxy_pass http://unix:/data/wwwroot/domian.com/domian.com_gunicorn.sock;
    }

조작 명령
다시 시작 nginx 하면 자동 으로 생 성 domian_gunicorn.sock 되 고 도 메 인 이름 을 열 어 fastapi 응용 프로그램 이 정상적으로 시작 되 었 는 지 확인 합 니 다.
systemctl reload nginx.service
systemctl restart nginx.service

시동 걸 고 바로 시작 gonicorn.socket:
systemctl enable gunicorn.socket --now

다른 작업 명령:
  : systemctl start gunicorn.service
  :systemctl status gunicorn.service
  :systemctl stop gunicorn.service
  :systemctl restart gunicorn.service

좋은 웹페이지 즐겨찾기