【网站搭建】完整部署django+uwsgi+nginx

上次记录了云服务器上运行django的过程,成功打开HelloWorld界面,但是这样每次运行都需要使用python3 manage.py runserver命令,不能在后台运行,而且加载页面速度较慢。因此本次记录新增两个服务的部署,即nginx + uwsgi
前两次记录:
【网站搭建】用阿里云服务器搭建个人网站
【网站搭建】云服务器上运行django




本次记录对nginx 和 uwsgi没有过多介绍,想要了解其概念的可阅读另一个博友的文章 nginx与uwsgi,uwsgi的应用

部署过程如下 :

1 准备工作:

注意:上次已经部署的django【网站搭建】云服务器上运行django

(1) 启动阿里云 “轻量应用服务器”
(2) 打开阿里云控制台开启远程连接
(3) 打开宝塔面板


2 详细过程:

(1)uwsgi配置

  • 安装uwsgi
pip3 install uwsgi
  • 创建软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

如果提示链接存在,可跳过,或者改变链接名称,比如改为myuwsgi。相应的后面调用命令时也要用myuwsgi。

  • 配置xml文件
    在项目文件夹下新建一个socket.xml文件,输入以下代码:
<uwsgi>
    <socket>:9090</socket>
    <chdir>/www/myweb/HelloWorld</chdir>
    <module>HelloWorld.wsgi</module><!--项目中的wsgi文件-->
    <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize>
</uwsgi>

(2)nginx的配置

打开nginx.conf文件(路径为/www/server/nginx/conf/nginx.conf)

注释掉server里面的内容,加入以下代码(需要提前新建一个static文件夹):


        listen       80;
        server_name 115.16.72.213; #IP地址
        charset utf-8;
        access_log off;
        
        location /static {
        	'''要与之前django的setting.py中添加的static静态文件转移目录一致'''
            alias /www/HelloWorld/static/; 
        }
        
        location / {
        	'''端口与原来的uwsgi中设置的端口一致'''
            uwsgi_pass  115.16.72.213:9090; 
            include     /www/server/nginx/conf/uwsgi_params;
        }

(3)启动

命令行中依次输入以下命令:

    killall -9 uwsgi #结束所有uwsgi
    uwsgi -x socket.xml #启动uwsgi
    service nginx reload #重启nginx
  • 浏览器中输入IP地址,不需要加端口,比如直接输入101.16.94.224,启动成功:
    在这里插入图片描述

(4)实例

进入项目文件夹cd HelloWorld

  • 新建django app
django-admin startapp myapp
  • 新建templates文件夹
  • 向templates文件夹中上传用于测试的html文件 test.html
  • 配置setting.py文件
    ①添加app
    找到INSTALLED_APPS,在后面加入’myapp’,
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

②设置templates
注意’DIRS’

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,"templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  • 配置myapp中的views.py文件
def test(request):
	return render(request, "test.html")
  • 配置HelloWorld中的urls.py文件
from django.contrib import admin
from django.urls import path
from myapp import views #导入views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.test, name='test'),
]
  • 保存,然后重启uwsgi和nginx
    killall -9 uwsgi #结束
    uwsgi -x socket.xml #启动
    service nginx reload #重启
  • 在浏览器中输入 “IP地址/test" 即可打开test.html文件
    如 102.19.42.221/test

(5) 显示静态文件的方式

将静态文件(图片、视频等)放在static文件夹下面,html文件中显示图片的路径需要“…/static/"
比如要显示图片
(pictures为static下新建的文件夹,plan.jpg是其中的一张图片)

<img ALT="Altium" src="../static/pictures/plan.jpg">

在这里插入图片描述

3 总结

python web运行环境的部署并不复杂,重点注意nginx.confsetting.py文件的配置,大部分错误都是因为这两个文件配置错误。错误原因一般是文件路径错误,所以在配置环境时,一定要时刻关注项目文件结构。
后续会记录一些关于数据库配置的实例,比如 “用户登录注册”、“留言板”、“数据可视化”、“信息管理” 等等。用python实现这些demo,将会十分简单。

以上就是部署django环境的全部记录了。喜欢搞事情、DIY、学技术的同学可以关注下面这个的公众号,了解更多有更趣的项目。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章