Centos下Django虚拟环境+uwsgi+nginx

先说一下安装遇到的问题,安装uwsgi的时候报错:

ImportError: No module named _ssl

一开始以为是版本问题,因为最开始是用的python3.6,网上能搜到大把同类问题,给出的解决方法是修改源码包Modules/Setup文件,其原理其实就是指明python安装的时候去哪里找到openssl。

修改SSL=/usr/local/ssl这一句为你系统openssl所在的位置,去除对应的注释,网上有详细的说明,这里就不赘述,因为我发现我遇到的问题是安装了pcre-devel产生冲突导致的,卸载即可。

一、安装python 

由于需要安装uwsgi,所以需要先安装openssl,python3.7之后的版本要求openssl1.0.2以上。我安装的是openssl 1.1.1f。

下载:wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz

解压:tar -xzf openssl-1.1.1f.tar.gz 

编译:/openssl-1.1.1f/config --prefix=/usr/local/openssl

安装:make && make install

中间如果有报错,按提示安装缺少的依赖就可以了。

然后是python3

下载:wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz

解压:tar -xzf Python-3.7.7.tar.xz

编译:/Python-3.7.7/configure prefix=/usr/local/python3

安装:make && make install

创建软链接:ln -s /usr/local/python3/bin/python3 /usr/bin/python3

                      ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

二、安装virtualenv

安装:pip install virtualenv -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

后面标红色的是使用了国内的下载源并标记为信任,这样下载安装快一些。

创建软链接:ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

新建一个空文件夹专门存放虚拟环境:mkdir -p /mypro/env

进入文件夹下创建指定版本的虚拟环境:cd /mypro/env

                                                        virtualenv --python=/usr/bin/python3 你的虚拟环境名称py3env

进入虚拟环境:source /mypro/env/py3env/bin/activate

然后开始安装Django等项目需要的各种依赖。到这里相信看出来虚拟环境的好处了,虚拟环境是相互独立的,但又共用python下的库,所以你可以把各个项目都会用到的诸如框架之类的直接通过pip3安装,而一些具体到项目下需要使用到的第三方库,进入虚拟环境后再安装,这样使得你的项目依赖的列表不会显得太驳杂,避免引用依赖之间如同名的冲突。

将本地项目迁移,先导出项目环境依赖:pip3 freeze > requirements.txt

然后在服务器上的虚拟环境下执行命令:pip3 install -r requirements.txt

三、安装uwsgi

安装:pip install uwsgi -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

创建软链接:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

uwsgi安装好后可以先简单测试一下是否能正常运行

创建并编辑vim /test.py

def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b"Hello World"] 

启动uwsgi命令:uwsgi --http-socket:8080 --plugin python --wsgi-file /test.py

然后访问:wget http://127.0.0.1:8080/看是否能访问到

四、安装Nginx

下载:wget http://nginx.org/download/nginx-1.20.2.tar.gz

解压:tar -zxvf nginx-1.20.2.tar.gz

编译:./configure --prefix=/usr/local/nginx --add-module=/root/nginx-rtmp-module-master --with-http_ssl_module --with-http_stub_status_module

我这里后面加了--add-module是因为要支持视频直播流rtmp协议,如果不需要可以不加,需要的话要先下载nginx-rtmp-module,然后把路径给到这里。

安装:make && make install

五、配置uwsgi.ini和nginx.conf文件

uwsgi.ini

[uwsgi]
http=:8997

chdir=/mypro/wwwroot/Django项目名
# 虚拟环境
home=/mypro/env/py3env
PYTHONHOME=/mypro/env/py3env/bin/
wsgi-file=Django项目名/wsgi.py
module=Django项目名.wsgi

workers=5
# socket=127.0.0.1:8997
socket = /mypro/wwwroot/Django项目名/uwsgi.sock
static-map=/static=/mypro/wwwroot/Django项目名/static
uid=root
gid=root

# 启动一个master进程
master=true
attach-daemon=memcached
processes=4
threads=2
pidfile=/opt/script/uwsgi.pid
# 服务停止移除socket和pid
vacuum=true
enable-threads=true
# chmod-socket=664
thunder-lock=true
# post-buffering=4096
# 每个进程的处理上限
max-requests=1000
daemonize=/opt/script/uwsgi.log

nginx.conf

worker_processes    1;

events {
    worker_connections    1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'; #日志的格式
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
    server {
        listen       8080;

        server_name  127.0.0.1:8080; #服务的名称,不加的话默认是80端口
 
        charset utf-8; #编码格式
 
        access_log  logs/host.access.log  main; #访问日志
 
        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;  #访问内容的类型
 
        error_log /mypro/wwwroot/log/nginx/error.log error; # 错误日志,默认没有,需要手动创建
        client_max_body_size   5M;
 
        location / {
             include uwsgi_params; # 加载uwsgi_params
             # uwsgi_pass  127.0.0.1:8997;   # 端口和uwsgi里的配置一样
             uwsgi_param UWSGI_SCRIPT  GCEV.wsgi;
             uwsgi_param UWSGI_CHDIR  /mypro/wwwroot/Django项目名/;
             uwsgi_connect_timeout 30; # 连接的超时时间 
             uwsgi_pass unix:/mypro/wwwroot/Django项目名/uwsgi.sock; #uwsgi.sock通讯的文件地址
             uwsgi_read_timeout 1800;
             uwsgi_send_timeout 300;
             proxy_read_timeout 300;
        }
 
        location /static{
            alias /mypro/wwwroot/Django项目名/static/; # 静态文件的目录
            index index.html index.htm;
        }
        location /media{
            alias /mypro/wwwroot/Django项目名/media/; #媒体文件的目录,如图片
        }

    }
}

启动项目

先启动uwsgi:uwsgi --ini /opt/script/uwsgi.ini

再启动nginx:nginx -c /opt/nginx.conf

后面发现nginx启动这个指定配置文件的服务会在每天凌晨三点关掉,可能是nginx服务被定时重启了,通过命令crontab -e查看执行定时任务,修改了nginx-restart.sh文件,服务就正常了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值