技术选型
由于个人技术栈里面有Python和Vue,现在正好前后端分离是趋势,所以就选用了Django+Vue,部署用到了nginx和uwsgi
项目结构
用django-admin创建项目后,新建frontend文件夹放前端打包的文件
total 280
-rw-r--r-- 1 lijun staff 31B 4 16 14:54 README.md
drwxr-xr-x 10 lijun staff 320B 4 16 15:20 blog
-rw-r--r-- 1 lijun staff 128K 4 16 15:20 db.sqlite3
drwxr-xr-x 3 lijun staff 96B 4 16 15:18 frontend
drwxr-xr-x 3 lijun staff 96B 4 17 09:48 log
-rwxr-xr-x 1 lijun staff 626B 4 16 14:05 manage.py
drwxr-xr-x 9 lijun staff 288B 4 17 09:48 mysite
-rw-r--r-- 1 lijun staff 329B 4 17 09:48 mysite.ini
drwxr-xr-x 6 lijun staff 192B 4 17 09:48 static
frontend
└── dist
├── favicon.ico
├── index.html
└── static
├── css
│ └── app.fb0c6e1c.css
├── img
│ └── logo.82b9c7a5.png
└── js
├── app.7cc09bbb.js
├── app.7cc09bbb.js.map
├── chunk-vendors.61405a0c.js
└── chunk-vendors.61405a0c.js.map
Django接入Vue
要配置Django的templates
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['frontend/dist'], // 这里加入目录路径
'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',
],
},
},
]
urls用TemplateView接入
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView
urlpatterns = [
path('', TemplateView.as_view(template_name='index.html')),
path('admin/', admin.site.urls),
]
配置静态文件搜索路径
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "frontend/dist/static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_ROOT设置的作用是让nginx那里找到静态文件用
服务器部分
nginx的配置文件
server {
listen 8888;
server_name localhost; // 这里后续等域名审核通过了换上域名应该就可以了。
root /root/mysite;
access_log /var/log/nginx/access_mysite.log;
error_log /var/log/nginx/error_mysite.log;
location / {
uwsgi_pass 127.0.0.1:9292;
include /etc/nginx/uwsgi_params;
}
location /static/ {
root /root/mysite;
access_log off;
}
location ^~ /admin/ {
uwsgi_pass 127.0.0.1:9292;
include /etc/nginx/uwsgi_params;
}
}
uwsgi的配置文件
[uwsgi]
socket = 127.0.0.1:9292
chdir = /root/mysite
module = mysite.wsgi
master = true
processes = 1
threads = 2
max-requests = 6000
touch-reload = /root/mysite
py-auto-reload = 1
pidfile = /var/run/mysite.pid
daemonize = /root/mysite/log/run.log
socket:指定uwsgi的通信端口 chdir:服务器上项目所在的目录 module:项目目录下的wsgi文件(即mysite/wsgi.py)
运行
配置全都配好之后,浏览器打开域名发现nginx可以同,但是转到对应端口,发现出现 403(forbidden)的问题,路径都找对了,但是没有权限读到文件。 最后发现是nginx.conf设置的问题
user root; // 这里原来是www-data,因为我项目是放在/root/下的,所以得改成root
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
…
搭建完成
耗费了一些时间,本来就对nginx和uwsgi这些概念不了解,没有配置的经验,照着网上的教程来做。主要还是怎么快速的定位问题,这样就能分析、寻找解决方案,而不是一头雾水的把错误信息放到搜索框里直接谷歌。
问题解决,那么接下里就可以愉快的写个人网站了😋
—————————————————————————————————————————————————————————————————--
昨天域名审核通过了,但我发现做好域名解析,浏览器输入www.xxx.com或者xxx.com如果是http走的就是80端口,但是我后台服务的端口在nginx那边是8888,理想的效果应该是,输入域名直接跳转到指定的服务,那么nginx那边就要做端口转发了。 在nginx.conf里面监听80端口
server {
listen 80;
server_name isave.fun www.isave.fun;
location / {
proxy_pass http://localhost:8888;
}
}
如果检测到是这两个域名,就通过proxy_pass转发到8888端口。这样就完美了。