Django程序在Linux上的部署

1.服务器搭建Python环境

1.1 安装python3

1.2 创建虚拟环境

virtualenv envsname

1.3 代码传送到服务器

gitFZ

1.4 安装第三方包

requirement.txtrequirement.txt

1.5 迁移数据库

  • python manage.py makemigrations

  • python manage.py migrate

  • 本博客只是做简单发布的示例,因此暂时不做数据库的迁移工作。注:如果服务器的数据库支持远程连接,亦可使用Navicat进行数据库的迁移工作

1.6 测试

  • 查看一下django是否等够正常启动

  • image-20211221175227874

2.安装Nginx

3.发布

3.1 简单发布

nohup.out
nohup python manage.py runserver 127.0.0.1:8000 &
nohup command &
# 修改nginx.conf的配置文件,
server {
        listen       80;
        server_name  服务器IP;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass  http://127.0.0.1:8000/;#django服务启动的地址
        }
cd sbin
./nginx

3.2 上线发布

  • 补充:nginx uwsgi wsgi django 这些东西究竟是什么关系.参考文献

  • image-20211221183925202

1.安装uwsgi

pip install uwsgi

image-20211221182355407

2.配置nginx.conf文件

# 新增加一个server配置,此过程繁多建议将文件下载下来修改后在传到服务器上
server {
	listen 8000; #暴露给外部访问的端口
	server_name localhost;
	charset utf-8;
	location / {
		include uwsgi_params;
		uwsgi_pass 127.0.0.1:8997; #外部访问8996就转发到内部8997
	}
	location /static/ {
		alias /data/pythoncode/dejangoTest/web/static/; #项目静态路径设置
	}
}

image-20211221190936489

3.使用uwsgi启动django

django自带的wsgiref 在调试模式下使用的wsgi的文件,网关接口,协议
uwsgi:协议
uWSGI:具体实现方式

# uwsgi.ini file
[uwsgi]

# Django-related settings
socket = :8000

# the base directory (full path)
chdir = /root/data/pythoncode/testcode/mypro

# Django s wsgi file
module = mypro.wsgi

# process-related settings
master = true

# home = /root/data/envs/anydjango

# maximum number of worker processes
processes = 5

#maximum number of worker threads
threads = 5

virtualenv=/root/data/envs/anydjango

# try to remove all of the generated file/sockets
vacuum = true

# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize = /root/data/pythoncode/testcode/mypro/log/myuwsgi.log
uwsgi --http :8000 --module dejangoTest.wsgi
killall uwsgi

4.设置静态文件

SATAIC_ROOT=os.path.join(BASE_DIR,'web/static/')#由于我的静态文件是放在应用里面的,因此我要在路径前加上应用名

image-20211221192151565

# 执行命令
python manage.py collectstatic

image-20211221192827820

nginx
server {
        listen       80;
        server_name  127.0.0.1;
        # charset UTF-8;

        #access_log  logs/host.access.log  main;

        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8000;
       }
	
		location /static {
			alias /www/res/statics;
		}
}

image-20220401152250453

uwsgi --ini uwsgi.ini
./nginx -s reload