记录一下个人网站的搭建上线过程

1,946 阅读3分钟

参考 我如何使用 Django + Vue.js 快速构建项目 - 知乎

技术选型

由于个人技术栈里面有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端口。这样就完美了。