ubuntu服务器部署uwsgi+Django项目详细步骤

ubuntu服务器部署uwsgi+Django项目详细步骤

本文使用的宝塔面板,部分操作宝塔操作更方便,但不是必须。

0. 宝塔新建一个站点,同时建立数据库

1.安装Django,

导入包 xlrd xlwt attr redis environs attrs attr loguru retrying pyquery aiohttp……缺什么导什么

(这里用sudo导入,否则普通用户导入的包其他用户无法使用)

导入包发生错误或超时参考https://blog.csdn.net/xbean1028/article/details/104885299第四条

2.上传代码

Xftp或者宝塔都可以

3. Django 收集静态文件

python manage.py collectstatic

报错1:

ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

解决办法:https://blog.csdn.net/xbean1028/article/details/102762001

报错2:STATIC_ROOT,修改

STATIC_ROOT = os.path.join(BASE_DIR, "/static/")
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

4.数据库,数据库创建,添加管理员

python manage.py makemigrations
python manage.py migrate
#管理员
python manage.py createsuperuser

5.Django单独运行测试

python manage.py runserver

:XXXX设置端口

可以在本地访问服务器相应端口,注意以下问题

  1. 修改setting
DEBUG = True

ALLOWED_HOSTS = ['*']
  1. 服务器(如我的阿里云)和宝塔都放行相应端口

6.uwsgi安装与测试运行

  1. 通过pip3安装uwsgi (同样建议sudo安装)

  2. 编辑uwsgi.ini文件

    [uwsgi]
    #使用nginx连接时使用
    socket=127.0.0.1:8001
    #直接做web服务器使用 python manage.py runserver ip:port
    #http= :8001
    #项目目录
    chdir=/www/wwwroot/test.xubean.top
    #项目中wsgi.py文件的目录,相对于项目目录
    wsgi-file=WebWorm/wsgi.py
    #指定启动的工作进程数
    processes=4
    #指定工作进程中的线程数
    threads=2
    #指定在这些进程里有一个主进程
    master=True
    #保存启动之后主进程的pid
    pidfile=uwsgi.pid
    module=WebWorm.wsgi:application
    #设置uwsgi后台运行,uwsgi.log保存日志信息
    #daemonize=uwsgi.log #使用supervisor时把此行注释
    
  3. 在该文件目录下运行(此时Django是关闭的)

    uwsgi --ini uwsgi.ini
    # 注意命令路径,例如我的目录/www/wwwroot/test.xubean.top$ uwsgi --ini uwsgi.ini
    

    此时若正常,则本地可以访问端口

  4. 若显示找不到uwsgi命令,需要先查找位置

whereis uwsgi
# 运行命令时,使用 位置/uwsgi --ini uwsgi.ini

7.Neinx设置

location / {
                include uwsgi_params;
                #同uwsgi内容
                uwsgi_pass 127.0.0.1:8001;
                #链接超时时间
                uwsgi_read_timeout 30;
        }

8.supervisor 一定要用sudo启动

https://blog.csdn.net/gaifuxi9518/article/details/89952899

我没有用宝塔的supervisor,我用pip3安装,现在supervisor4已经支持Python3了,不需要虚拟环境

  1. 安装:
pip install supervisor
  1. 配置Supervisor
# 安装完成之后我们可以使用下面的命令来查看supervisor的一个默认配置模板:
echo_supervisord_conf

# 然而上面命令输出的结果仅是一个模板,我们需要使用下面的命令在/etc目录下生成配置文件:
echo_supervisord_conf > /etc/supervisord.conf

# 之后我们可以使用vim查看该文件的内容
vim /etc/supervisord.conf
  1. 修改配置文件

    我们可以看到,该配置文件内容一大堆,但是我们目前仅需要知道并改文件末尾的这个部分就可以了,这是默认写法

    ;[include]
    ;files = relative/directory/*.ini
    

    分号;后面的是注释内容,我们首先把它去掉,然后将files的值改为:

    分号;后面的是注释内容,我们首先把它去掉,然后将files的值改为:

    [include]
    files = /etc/supervisor/*.conf
    

    include可以理解为包含,它的意思是将/etc/supervisor/目录下的,所有以.conf结尾的文件包含进来,/etc/下的supervisor/文件夹默认是不存在的,我们需要手动创建:

    include可以理解为包含,它的意思是将/etc/supervisor/目录下的,所有以.conf结尾的文件包含进来,/etc/下的supervisor/文件夹默认是不存在的,我们需要手动创建:

    cd /etc
    mkdir supervisor
    

    以.conf结尾的文件文件也是默认不存的,也需要我们根据需求自己创建,一个conf文件代表的是一个程序,假如我需要supervisor管理uwsgi程序,那么就在/etc/supervisor/目录下创建一个uwsgi.conf文件,在里面写入配置信息,如果需要管理其他的xx程序,就重新创建一个xx.conf文件。

    以.conf结尾的文件文件也是默认不存的,也需要我们根据需求自己创建,一个conf文件代表的是一个程序,假如我需要supervisor管理uwsgi程序,那么就在/etc/supervisor/目录下创建一个uwsgi.conf文件,在里面写入配置信息,如果需要管理其他的xx程序,就重新创建一个xx.conf文件。

    好,现在我们就创建一个uwsgi.conf文件:

    vim /etc/supervisor/uwsgi.conf
    

    将下面内容复制到文件中

    将下面内容复制到文件中

    [program:uwsgi]
    command=/usr/local/bin/uwsgi --ini /home/mysite_uwsgi/mysite.ini
    user=root
    autorestart=true
    autostart=true
    startretries=3
    redirect_stderr=true
    startsecs=5
    stdout_logfile=/var/log/django/supervisor.log
    stopasgroup=true
    killasgroup=true
    priority=999
    

    参数介绍:

    command:需要托管给supervisor执行的命令,这里是uwsgi的启动命令,这里需要按自己的情况更改
    user:执行命令的用户,这里填root,你可以填其他的,只要有权限即可
    autorestart:uwsgi关闭后是否自动重启
    autostart:是否随supervisor启动而启动
    startretries:启动失败自动重试次数,默认是 3
    redirect_stderr:把 stderr 重定向到 stdout,默认 false
    startsecs:启动 5 秒后没有异常退出,就当作已经正常启动了
    stdout_logfile:日志文件存放目录
    stopasgroup:是否干掉程序的所有进程(包括子进程)
    killasgroup:作用同上
    priority:程序启动优先级,若有多个进程管理时使用,默认-1
    
  2. 启动Supervisor

    4.1 修改uwsgi配置
    之前我们在uwsgi的配置文件中设置了一个日志文件保存位置的参数:

    daemonize = /home/mysite_uwsgi/mysite.log
    

    但是这个参数的配置与Supervisor的日志输出配置是有冲突的,需要注释掉它,因为在前面加个#:

    #daemonize = /home/mysite_uwsgi/mysite.log
    

    4.2 干掉uwsgi进程
    在使用Supervisor启动uwsgi之前,我们需要先把uwsgi正在运行的进程都干掉,如果你之前没有运行uwsgi,这一步可以跳过:

    ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9
    

    4.3 启动Supervisor

    4.3查看运行状态
    上一步执行成功之后,如果没有报错那么就是启动成功了,然后我们执行下面的命令查看uwsgi启动状态

    sudo supervisord -c /etc/supervisord.conf
    # 强烈建议sudo,因为没有sudo出现权限问题
    

    4.3查看运行状态
    上一步执行成功之后,如果没有报错那么就是启动成功了,然后我们执行下面的命令查看uwsgi启动状态

    supervisorctl status
    

    如果显示:

    uwsgi RUNNING pid 20986, uptime 0:31:33
    那么代表的就是启动成功,可以看到这个结果有四列,uwsgi代表的是进程名称,RUNNING代表的进程启动状态,pid代表的是进程id,uptime代表的是进程运行时间。

    4.5 管理Supervisor

    #查看所有进程的运行状态
    supervisorctl status
    
    #查看某一进程的运行状态
    supervisorctl status 进程名
    
    #启动某一进程
    supervisorctl start 进程名
    
    #启动所有进程
    supervisorctl start all
    
    #停止某一进程
    supervisorctl stop 进程名
    
    #停止所有进程
    supervisorctl stop all
    
    #重启某一进程
    supervisorctl restart 进程名
    
    #重启所有进程
    supervisorctl restart all
    
    #新增进程后,更新进程(不影响其他进程运行)
    supervisorctl update
    
    #新增进程后,重启所有进程
    supervisorctl reload
    
    

    4.6 常见问题

    如果你遇到了下面的错误

    ERROR (no such process)
    

    那就是进程名称写错了。

    其他问题详见https://blog.csdn.net/gaifuxi9518/article/details/89952899

9.proxy &运行 ,exit退出

因为我使用了爬虫伪装代理IP,需要后台运行ProxyPool

安装见https://blog.csdn.net/xbean1028/article/details/104885239

python3 run.py & #后台运行

& 表示在后台执行脚本,这样可以到达目的,但是,我们退出shell窗口的时候,必须用exit命令来退出,
否则,退出之后,该进程也会随着shell的消失而消失(退出、关闭)

10 定时爬取,宝塔定时任务

我使用到了定时爬虫,直接用的宝塔定时任务,方便快捷

发布了83 篇原创文章 · 获赞 37 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xbean1028/article/details/104886904