说明: 本站使用的环境是Python3.6.3、Django3.0.7、MySQL5.7.2、Ubuntu16.04、Nginx,有关Python3.6,MySQL,Nginx的安装,本站其他文章中都有介绍。本站域名是bgods.cn,后面只要是有bgods.cn的地方都换成你自己的域名。如果以上环境都已经准备好了,就可以开始以下内容了....
一、部署代码
1、部署前的项目配置
Django项目中会有一些CSS,JavaScript等静态文件,为了能够方便地让Nginx处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于Django项目的根目录,并且命名为static。为了完成这些任务,需要在项目的配置文件settings.py里做一些必要的配置:
# 加入下面的配置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_ROOT指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的静文件夹。
为了安全起见,在生产环境下需要关闭 DEBUG 。以及选项对话设置网求允许访问的域名打开的settings.py文件,找到 DEBUG 状语从句: ALLOWED_HOSTS 这两个选项对话,将它们设置成如下的值:
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', 'bgods.cn']
2、设置服务器目录结构
- 上传项目代码之前,先设置一下服务器的文件结构:
/home/bg/
sites/
bgods.cn/
env/
www/
一台服务器可能部署多个网站,所有网站代码都放在sites /目录下.bgods.cn /这个文件夹以网站的域名命名,便于区分.env /是python虚拟环境目录.www /是Django博客项目目录。
注意:目录名替换为你自己的域名,涉及以后到 bgods.cn的地方通常都要替换你自己的域名
- 创建目录
bg@localhost:~$ mkdir -p ~/sites/bgods.cn
bg@localhost:~$ mkdir -p ~/sites/bgods.cn/www
- 创建虚拟环境
bg@localhost:~$ cd ~/sites/bgods.cn
bg@localhost:~/sites/bgods.cn$ virtualenv --python=python3.6 env
- 上传Django的项目代码到服务器 方法有多种,我这里使用的是XFTP5上传,方便简单,不懂的自行百度
3、安装项目依赖
在之前先激活虚拟环境,安装项目的全部依赖。
- 激活虚拟环境
bg@localhost:~/sites/bgods.cn$ source env/bin/activate
(env) bg@localhost:~/sites/bgods.cn$ cd www/
- 进入项目路径,并使用PIP安装项目全部依赖
(env) bg@localhost:~/sites/bgods.cn/www$ pip3 install -r requirements.txt
关于以上命令,请查看 requirements.txt
4、收集静态文件
虚拟环境下继续运行python manage.py collectstatic命令收集静态文件到静目录下:
(env) bg@localhost:~/sites/bgods.cn/www$ python manage.py collectstatic
5、生成数据库
虚拟环境下继续运行python manage.py migrate命令创建数据库文件:
(env) bg@localhost:~/sites/bgods.cn/www$ python manage.py makemigrations
(env) bg@localhost:~/sites/bgods.cn/www$ python manage.py migrate
- 创建超级用户
虚拟环境下继续运行python manage.py createsuperuser命令创建一个超级用户,方便我们进入Django管理后台。这和本地开发时是一样的,具体请参照:在Django Admin后台文章。
(env) bg@localhost:~/sites/bgods.cn/www$ python manage.py createsuperuser
二、配置Nginx
接下来配置Nginx来处理用户请求。先在服务器的/ etc / nginx / sites-available /目录下新建一个配置文件,文件名设置为我的域名:
# /etc/nginx/sites-available/bgods.cn
server {
charset utf-8;
listen 80;
server_name bgods.cn;
location /static {
alias /home/bg/sites/bgods.cn/www/static;
}
location /media {
alias /home/bg/sites/bgods.cn/www/media;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/bgods.cn.socket;
}
}
我们在 /etc/nginx/sites-available/ 放置了配置文件,接下来需要创建一个符号链接,把这个配置文件加入到启用的网站列表中去,被启用网站的目录在 /etc/nginx/sites-enabled/,你可以理解为从 sites-available/ 目录下发送了一个配置文件的快捷方式到 sites-enabled/ 目录。具体命令如下:
(env) bg@localhost:~/sites/bgods.cn/www$ sudo ln -s /etc/nginx/sites-available/bgods.cn /etc/nginx/sites-enabled/bgods.cn
三、安装 Gunicorn
Gunicorn 一般用来管理多个进程,有进程挂了Gunicorn 可以把它拉起来,防止服务器长时间停止服务,还可以动态调整 worker 的数量,请求多的时候增加 worker 的数量,请求少的时候减少。
- 在虚拟环境下,安装 Gunicorn:
(env) bg@localhost:~/sites/bgods.cn/www$ pip3 install gunicorn
- 在 settings.py 文件中添加 gunicorn 应用
# /home/bg/sites/bgods.cn/www/www/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'ckeditor',
'ckeditor_uploader',
'gunicorn', #添加 gunicorn 应用
]
- 用 Gunicorn 启动服务器进程:
(env) bg@localhost:~/sites/bgods.cn/wwwl$ gunicorn --bind unix:/tmp/bgods.cn.socket www.wsgi:application
注意:www.wsgi:application这里的www对应的是/home/bg/sites/bgods.cn/www/www,根据自己的修改,在浏览器输入域名,可以看到访问成功了!
四、Ubuntu16.04 自动启动 Gunicorn
现在 Gunicorn 是我们手工启动的,万一哪天服务器崩溃重启了又得重新手工启动。为此我们写一个自动启动脚本,这样当服务器重新启动后,脚本会帮我们重启 Gunicorn。先按 Ctrl + c 停止刚才启动的服务器进程。
这里以Ubuntu16.04为例:
1、创建脚本
首先在/lib/systemd/system/目录下,创建一个脚本 bg.service(后缀是service)
# /lib/systemd/system/bg.service
[Unit]
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
# 你的用户
User=bg
# 你的目录
WorkingDirectory=/home/bg/sites/bgods.cn/www
# gunicorn启动命令
ExecStart=/home/bg/sites/bgods.cn/env/bin/gunicorn --bind unix:/tmp/bgods.cn.socket www.wsgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target
2、启动脚本
(env) bg@localhost:~/sites/bgods.cn/wwwl$ sudo systemctl start bg.service # 执行脚本
(env) bg@localhost:~/sites/bgods.cn/wwwl$ sudo systemctl enable bg.service # 设置开机自启动脚本
以后如果更新了代码,只要运行下面的命令重启一下 Nginx 和 Gunicorn 就可以使新的代码生效了:
sudo systemctl restart bg.service nginx.service
3、systemctl常用命令
以下是systemctl的一些命令,以上面创建的bg.service为例(如果是普通用户需要在前面加须藤再执行)
- 重新加载服务文件:systemctl daemon-reload
- 启动一个服务:systemctl start bg.service
- 关闭一个服务:systemctl stop bg.service
- 重启一个服务:systemctl restart bg.service
- 显示一个服务的状态:systemctl status bg.service
- 在开机时启用一个服务:systemctl enable bg.service
- 在开机时禁用一个服务:systemctl disable bg.service
- 查看服务是否开机启动:systemctl is-enabled bg.service
- 查看已启动的服务列表:systemctl list-unit-files | grep enabled
- 查看启动失败的服务列表:systemctl --failed
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
(select 198766*667891 from DUAL)
(select 198766*667891)
@@Jal7k
555����%2527%2522\'\"
555'"
555
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
555CWzN6q43')) OR 730=(SELECT 730 FROM PG_SLEEP(15))--
555BhbQ1sIm') OR 470=(SELECT 470 FROM PG_SLEEP(15))--
555iNlYDU8k' OR 48=(SELECT 48 FROM PG_SLEEP(15))--
555-1)) OR 330=(SELECT 330 FROM PG_SLEEP(15))--
555-1) OR 513=(SELECT 513 FROM PG_SLEEP(15))--
555-1 OR 297=(SELECT 297 FROM PG_SLEEP(15))--
555w0yZ0vH7'
555-1 waitfor delay '0:0:15' --
555-1)
555-1
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
555*if(now()=sysdate(),sleep(15),0)
-1" OR 5*5=25 or "aSebmlhl"="
-1' OR 5*5=25 or 'H4e82ble'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555
当我修改setting文件里的
然后boom
google 浏览器报错是访问不了VUE,edge浏览器则是报
@erou , 这里看看:https://blog.csdn.net/zlk4524718/article/details/100577924