Django 项目线上部署 一、安装环境 1. yum 安装可能需要的依赖包 1 yum install zlib-devel bzip2-devel epel-release nginx libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y
2. 升级Sqlte3
因为Django需要更高版本的Sqlite,而系统自带的不满足条件,报错如下
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
1 2 3 # 创建一个download文件夹,后续的文件都放在这里,为了方便管理 mkdir /root/download cd /root/download
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cd /root/download # 下载源码 wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz # 编译 tar zxvf sqlite-autoconf-3290000.tar.gz cd sqlite-autoconf-3290000/ ./configure --prefix=/usr/local make && make install # 替换系统低版本 sqlite3 mv /usr/bin/sqlite3 /usr/bin/sqlite3_old ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf ldconfig sqlite3 -version
3. 安装Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cd /root/download # 下载python3.7 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz # 解压 tar xvf Python-3.7.0.tar.xz # 进入 cd Python-3.7.0 # 编译 ./configure --with-ssl --prefix=/usr/local/python3 make && make install # 其中--prefix是Python的安装目录 # 加上–with-ssl参数,默认安装的软件涉及到ssl的功能才可用,比如pip的更新 # 安装完成之后 建立软链接 添加变量 方便在终端中直接使用python3 ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 #Python3安装完成之后pip3也一块安装完成,不需要再单独安装 #同样给pip3建立软链接 ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
4. 安装virtualenv
这一步是为了创建python的虚拟环境,方面管理python环境
1 2 3 4 5 6 7 8 9 10 # 因为需要经常使用虚拟环境,所以放在一个简单的地方 cd /root # 安装 pip3 install virtualenv # 创建虚拟环境 virtualenv -p python3 py37env # 启动环境 source py37env/bin/activate # 停止环境 deactivate
5. 安装 uwsgi 1 2 3 pip3 install uwsgi # 给uwsgi建立软链接,方便使用 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
uwsgi需要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。
6. 安装 Django项目依赖包
部署到线上环境,需提前在开发环境执行 pip freeze > requirements.txt 命令
1 2 cd 你的项目requirements.txt所在目录 pip install -r requirements.txt
二、配置一下uwsgi
先确保项目能跑起来,下面的配置方式任选一种
第一种:XML格式的配置文件
我们网站项目路径是 /data/wwwroot/mysite/,在项目根目录下创建 mysite.xml文件,输入如下内容:
1 2 3 4 5 6 7 <uwsgi> <socket>127.0.0.1:8000</socket> <!-- 内部端口,自定义 --> <chdir>/data/wwwroot/mysite/</chdir> <!-- 项目路径 --> <module>mysite.wsgi</module> <!-- mysite为wsgi.py所在目录名--> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize> <!-- 日志文件 --> </uwsgi>
保存 注意里的mysite,为wsgi.py所在的目录名。
这种方式的配置,可以用下面的命令启动.
1 2 3 4 5 6 #启动uwsgi uwsgi -x mysite.xml #uwsgi有没有启动成功,可以用下面的命令查看 ps -ef|grep uwsgi #如果想重启uwsgi,先使用下面的命令杀掉进程,再启动uwsgi killall -9 uwsgi
第二种:ini格式的配置文件
在项目文件里创建 uwsgi.ini 文件,编辑文件 ,设置uwsgi属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #添加配置选择 [uwsgi] #配置和nginx连接的socket连接 socket=127.0.0.1:8000 #配置项目路径,项目的所在目录 chdir=/data/wwwroot/mysite/ #配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名 wsgi-file=mysite/wsgi.py #配置启动的进程数 processes=4 #配置每个进程的线程数 threads=2 #配置启动管理主进程 master=True #配置存放主进程的进程号文件 pidfile=uwsgi.pid #配置dump日志记录 daemonize=uwsgi.log`
通过下面的命令启动运行uwsgi
显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功
可能通过ps -ef|grep uwsgi 查看确认是否uwsgi启动.
ini配置文件其它相关命令:
1 2 3 4 #停止运行uwsgi,通过包含主进程编号的文件设置停止项目 uwsgi --stop uwsgi.pid #重启uwsgi uwsgi --reload uwsgi.pid
三、配置 nginx nginx一般默认安装好的路径为/usr/local/nginx 在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。
1 cp nginx.conf nginx.conf.bak
然后打开nginx.conf,将文件内容替换为以下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { 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 /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; ################################ server{ listen 80; server_name 127.0.0.1:80; charset utf-8; access_log off; location /static { alias /root/test_django/mysite/static/; #要与之前django的setting.py中添加的static静态文件转移目录一致 } location / { uwsgi_pass 127.0.0.1:8000; #端口与原来的uwsgi中设置的端口一致,在第5步设置 include /etc/nginx/uwsgi_params; } } ################################
要留意备注的地方,要和UWSGI配置文件mysite.xml,还有项目路径对应上。 执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:
四、测试Django程序 1 2 3 4 5 6 7 8 9 # 启动nginx /usr/sbin/nginx # 启动uwsgi uwsgi -x /home/python_project/DjangoFan/socket.xml # 强制关闭 sudo pkill -f uwsgi -9 sudo pkill -f nginx -9 # 重启nginx nginx -s reload
访问网站地址:ip:80
,访问成功: