说明: 本站使用的环境是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
当我修改setting文件里的
然后boom
google 浏览器报错是访问不了VUE,edge浏览器则是报
@erou , 这里看看:https://blog.csdn.net/zlk4524718/article/details/100577924