zoukankan      html  css  js  c++  java
  • 给我一台全新的服务器,使用nginx+gunicorn+supervisor部署django

    0.准备工作

    在一台全新的服务器中新建用户以及用户的工作目录,之后的操作都以这个用户的身份进行,而不是直接用root。

    举个栗子:

    在服务器下新建用户rinka并赋予sudo权限

    1) root登陆,sudo useradd rinka  新建用户rinka

    2) sudo passwd rinka  给用户rinka设置密码

    3) adduser rinka sudo  将用户rinka加入sudo组

    4) cd /home  进入home目录

    5) mkdir rinka  在home下新建目录rinka

    6) chown rinka rinka  将/home/rinka目录的所有者改为rinka

    7) su - rinka 切换到用户rinka登录

    1.安装python

    我使用的是anaconda来管理python包

    1) 从anaconda官网下载Anaconda3-4.11-Linux-x86.64.sh,放到/home/rinka目录下

    2) 安装anaconda3,运行bash /home/rinka/Anaconda3-4.11-Linux-x86.64.sh 

    3) 安装过程中可以选yes,自动在~/.bashrc中添加~/.anaconda3/bin

    4) 运行source ~/.bashrc

    注意:

    如果定义的.bashrc不工作,原因是shell指向的是dash而不是bash。
    要知道自己的/bin/sh指向何种解释器,可以用 ls /bin/sh -al 命令查看:
    $ ls /bin/sh -al
     
    lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> dash
    以上结果就表示当前系统用的是dash解释器。
     
    切换dash到bash很简单,运行 dpkg-reconfigure dash,然后选择 "No"。

     

    2.安装mysql

    1) 下载mysql-apt-config_0.7.3-1_all.deb,放到/home/rinka目录下

    2) sudo dpkg -i mysql-apt-config_0.7.3-1_all.deb

    3) sudo apt-get update

    4) sudo apt-get install mysql-server

    5)初始mysql密码为空,mysqladmin -u root password 设置密码

    3.安装nginx、gunicorn、supervisor

    1)sudo apt-get install nginx

    2)pip install gunicorn

    3)sudo apt-get install supervisor

    4.安装django相关包

    1)conda install django

    2)conda install pymysql

    5.配置gunicorn

    1)将django项目star放到/home/rinka目录下,在django项目star的根目录下创建gunicorn.conf

    # 指定workers的数目,使用多少个进程来处理请求(workers数量=CPU*2+1)
    workers = 3
    # 绑定本地端口
    bind = '127.0.0.1:8000’
     
    2)使用gunicorn.conf中的配置运行gunicorn,进入django项目start的根目录,运行以下命令来检验配置是否正确
    gunicorn star.wsgi:application -c gunicorn.conf
     
    3)我们可以使用nohup来使gunicorn一直运行django项目(不推荐)
    nohup gunicorn star.wsgi:application -b 127.0.0.1:8000 --reload&
    但这样做很繁琐,每次重新部署项目都要kill原来的进程,然后再起一个新的进程。推荐使用下面的supervisor来管理gunicorn
     
     
    6.配置supervisor来管理gunicorn进程
    1)superviosr通过配置文件来设置被监管的程序,一般配置文件都放置在/etc/supervisor/conf.d路径下面。
    此处我们创建一个名为star.conf的配置文件:
    [program:star]
    command=/home/rinka/anaconda3/bin/gunicorn star.wsgi:application -c /home/rinka/star/gunicorn.conf  
    directory=/home/rinka/star
    user = rinka
    stdout_logfile = /var/log/supervisor/star.log
    redirect_stderr = true
    environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

    2)日志文件需要我们手动创建一下:

    cd /var/log/supervisor
    touch star.log
     
    3)设置好上面的文件以后,我们可以通过supervisorctl工具来启用这些设置了:
    $ sudo supervisorctl reread
    star: available
    $ sudo supervisorctl update
    star: added process group
     
    4)现在你可以start,stop或者restart你的进程了
    $ sudo supervisorctl status star
    star RUNNING pid 18020, uptime 0:00:50
    $ sudo supervisorctl stop star
    star: stopped
    $ sudo supervisorctl start star
    star: started
    $ sudo supervisorctl restart star
    star: stopped
    star: started

    5)当supervisorctl启动app失败,显示ERROR (abnormal termination),使用以下命令查看错误信息

    $ sudo supervisorctl tail <APP_NAME>
     
     
    7.配置nginx的80端口
    1)编辑/etc/nginx/sites-enabled/default
    注意:/etc/nginx/sites-enabled/目录下只保留一个配置文件
     
    server {
           listen 80;
           server_name  www.rinka.site;
     
           location / {
               add_header Access-Control-Allow-Origin "*";
               include proxy_params;
               proxy_pass http://127.0.0.1:8000;
           }
     
           location /static/{
               root /var/www;
           }
     
           location /media/{
               root /var/www;
           }
    }

    2)检查nginx配置文件是否正确:sudo nginx -t

    3)开启nginx:sudo service nginx start
  • 相关阅读:
    topcoder SRM 592 DIV2 LittleElephantAndBooks
    codeforces round #201 Div2 A. Difference Row
    Codeforces Round #199 (Div. 2) A Xenia and Divisors
    objective-c "performSelector may cause a leak because its selector is unknown".
    ccrendertexture to uiimage
    TopCoder SRM 588 DIV2 KeyDungeonDiv2
    ios clang: error: linker command failed with exit code 1 (use -v to see invocation)解决方法
    c++ for_each()与仿函数
    c++ map删除元素
    c++ map和mutimaps 插入值
  • 原文地址:https://www.cnblogs.com/rinka/p/deploy_django_use_nginx_gunicorn_supervisor.html
Copyright © 2011-2022 走看看