一、基础说明
1、项目启动的基本流程
本web项目,后端均使用Python+Django进行开发,所需的Python版本≥3.6,本地启动项目的基本流程如下:
(PS:由于本目均是在macOS系统下完成,在压缩文件时会默认生成一个__MACOSX文件夹,为macOS的配置文件,对win系统没有影响,项目解压后删除即可)
2、关于项目根目录
项目文件解压后,含有manage.py文件的目录即是项目根目录,例如:
在路径C:\Users\Administrator\Desktop\myproject\blog下有manage.py文件,那么该路径即是项目的根目录。
在根目录下有一个文件夹(唯一),里面有settings.py文件,那么该文件夹的名称就是项目名称or工程名称。
在根目录下有的文件夹,里面有app.py文件,那么该文件夹的名称就是创建的app名称。
3、如何在当前目录下打开命令行工具——命令提示符或称cmd
方式一
在文件夹上面的地址栏直接输入cmd,回车即可
方式二
在当前目录的空白处,按住键盘Shift后,右击鼠标——选择“在此处打开命令窗口”即可
4、关于编辑器
强烈推荐使用pycharm,官网,可以说pycharm是专为Python而生,需要注册,请自行搜索注册码
如果购买的是前后端分离的项目,前端建议使用微软的VSC,后端使用pycharm
5、啥是虚拟环境?
二、安装Python3
1、验证电脑是否已安装python
在终端输入python -V:
如果显示python的版本号,说明已安装python,否则未安装。
2、安装Python3+
(PS:这是一个非常好的Python入门网站,建议新手收藏)
首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.7对应的64位安装程序或32位安装程序,然后,运行下载的EXE安装包:
特别要注意勾上Add Python 3.7 to PATH
,然后点“Install Now”即可完成安装。
三、创建虚拟环境
创建虚拟环境的常规方式有三种:
1️⃣使用Python3自带venv模块,下面有详细介绍(推荐)
Python3以后,新增venv模块,使得创建虚拟环境更加便捷化,详细描述如下:
(这是个栗子) 假如 项目的根目录是:C:\Users\Administrator\Desktop\myproject\blog;
首先进入项目根目录的上层目录,也就是C:\Users\Administrator\Desktop\myproject,在终端输入:
cd ..
创建虚拟环境,在终端输入:
python -m venv venv
创建完成后,发现在C:\Users\Administrator\Desktop\myproject文件夹下,新增了一个名为 venv 的文件,没错,这就是新创建的虚拟环境文件夹
进入虚拟环境,在终端输入以下命令,回车:
venv\Scripts\activate
进入项目根目录:
四、安装依赖包
项目所需的第三方依赖包,均已在根目录中的 requirements.txt 文件中一一列出。
1、升级 pip
python -m pip install --upgrade pip
(PS:从此步开始所有的命令均是在虚拟环境中进行,新创建的虚拟环境自带的pip通常不是最新的版本,在运行pip命令时,会有警告)
使用pip安装或升级依赖包,运行成功后,都会有Successfully提示。
2、批量安装依赖包
在终端运行:
pip install -r requirements.txt
依赖包安装成功:
【问题处理】
ERROR:Courld not open requirements file: [Errono 2] No such file or directory: 'requirements.txt'
ERROR: Complete output from command 'c:\users\administrator\.............
ERROR: Single threaded build for windows
running install
running build...........
五、启动项目
(PS:如使用pycharm启动项目,需要在pycharm中配置虚拟环境,并且,如果项目目录中有extra_apps文件夹,需要右击该文件夹Mark Directory as 为 Sources Root)
在终端运行:
python manage.py runserver
仔细看终端提示信息,默认是在8000的端口启动服务,点击 http://127.0.0.1:8000/ 直达项目首页,在终端使用键盘 control+c 可退出服务。
(PS:有时候使用control+c,发现没有反应,没关系,按住control后,多按两下c就行了)
点击 http://127.0.0.1:8000/admin/ 进入后台管理系统,默认用户名、密码分别为:admin、admin123,在后台可修改密码。
(PS:登录后台时,个别系统在极少数情况下会出现禁止访问403错误,点击地址栏后,回车即可)
至此,已完成了项目的本地启动,后面的章节作为拓展内容,请按需自行学习(如有云评论、地图插件等,需要继续阅读以下内容进行配置)。
六、配置留言系统
对于部分带留言/评论功能的项目(在项目功能描述中体现:云评论,如无请自动忽略本章),需要对留言插件进行配置,所售项目均采用第三的留言系统——畅言。
1、登录畅言官网,注册开发者账号
2、登录云评论后台管理,添加站点
(PS:添加的域名必须是已经备案的)
3、在通用代码安装,获取appid和conf参数
4、在需要留言/评论的页面(通常在博客详情页),查找并替换代码
(PS:有的项目中,为了体现留言样式,使用静态的数据,并将畅言的代码注释,请自行注释静态留言数据,并取消畅言的注释)
<div id="SOHUCS" sid={{ article.id }}></div>
<script charset="utf-8" type="text/javascript" src="https://changyan.sohu.com/upload/changyan.js"></script>
<script type="text/javascript">
window.changyan.api.config({
appid: '******',
conf: '*******'
});
</script>
将其中的appid和conf替换成自己的,官网文档。
5、接收畅言回推设置
如果需要管理评论用户,就需要畅言平台再接收到用户的评论后,畅言后台主动将内容推送给我们的后台,我们的后台接收到数据后,再进行保存处理。填写的回推地址各项目参考自己的url.py文件,该文件在项目名称的文件夹下或者各app的文件夹下,回推路由在文件中有备注。
(PS:没有找到回推路由的备注,说明该项目未做评论管理呗,可以在畅言后台进行评论管理)
七、配置地图插件
对于部分带地图功能的项目(在项目功能描述中体现:地图插件,如无请自动忽略本章),需要对地图插件进行配置,所售项目均采用高德地图插件。
1、登录高德开放平台,注册开发者账号
2、获取开发者key参数
3、在含有地图插件的页面(通常在联系我们页面),查找并替换代码
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.14&key="******"></script>
将代码中的key 替换成自己的key
八、使用MySQL数据库
在创建Django项目时,会默认生成db.sqlite3文件,这是一个轻量级的数据库文件,具有写独占、读共享的特性,并发支持不友好(写入操作有锁),适用于开发使用,项目完成后,上线部署到服务器时,通常使用关系型的MySQL数据库。
1、检测是否已安装MySQL
终端输入 mysql --version 显示如下图,即是已安装
(PS:建议新开一个终端窗口,这样一个窗口始终是在创建的虚拟环境中运行,一个窗口用于MySQL操作)
2、安装MySQL
在官网下载页面,选择适合自己系统选项,下载安装包:
后续操作可参考:
3、创建项目数据库
终端进入MySQL后,MySQL中输入命令,创建名为 myproject 的数据库:
(PS:数据库名称可自定义;在命令行创建时默认utf-8编码;也可使用Navicat软件对数据库操作,创建数据库时,必须指定字符集为utf8,排序规则为utf8_bin)
CREATE DATABASE `myproject` CHARACTER SET utf8 COLLATE utf8_general_ci;
4、修改项目配置
在工程名称的文件夹下,将settings.py文件中的DATABASES参数,修改为:
(PS:工程名称/项目名称的文件夹,在第一章有介绍)
DATABASES = {
'default': {
# 使用Django自带的sqlite3
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# 使用MySQL数据库配置
'ENGINE': 'django.db.backends.mysql',
'NAME': '*****', # 填写新创建的数据库名称
'USER': 'root',
'PASSWORD': '*****', # 请换成自己的密码
'HOST': 'localhost',
'POST': '3306',
}
}
5、删除之前的数据迁移记录
删除所有创建的app目录下、migrations文件夹内,除了 __init__.py以外的,所有文件(通常是以数字开头的py文件);
删除extra_app文件夹内,所有自定义的第三方app目录下、migrations文件夹内,除了 __init__.py以外的,所有文件(通常是以数字开头的py文件);
6、创建并执行数据迁移
在虚拟环境中的终端,依次运行:
python manage.py makemigrations
python manage.py migrate
在MySQL中查看新建的数据表
7、创建超级用户
在虚拟环境中的终端,运行以下命令,根据提示创建超级用户(用户登录后台管理系统)
python manage.py createsuperuser
至此可以启动项目
(PS:由于新创建的数据表,里面没有数据,对于个别项目打开首页会out_of_range的错误,请先在后台多添加一些数据,再看首页)
python manage.py runserver
另外,有时候我们在开发模式下,输入了好多的数据,结果发现都放在了db.sqlite3数据库中,如何实现db.sqlite3与MySQL之间的数据迁移,请自行阅读:自强学堂
(PS:自强学堂是一个风评很好的自学网站,建议收藏)
一、基础说明
1、郑重说明
由于服务器系统版本、环境等多种因素,都会导致部署过程中出现不同情况的报错,需自行根据报错信息进行调试,本文档为常规部署流程(以Ubuntu / 18.04 LTS amd64系统作为举例说明),并非适用于所有的服务器、系统,请谅解。
个人实践说明,一次性部署成功的情况极少,整个部署过程可能会遇到各样的问题,绝大部分通过Google都可直接解决,只有少数的问题,需要静下心来仔细研究,预祝成功!
其他相关部署的博客:
使用宝塔面板进行部署,请自行阅读以下博客,不做详细介绍:
(PS:本店不做 PHP 和 宝塔面板 相关的问题解答,免开尊口,请自行Google)
宝塔面板+Python项目管理器+Django部署+nginx+gunicorn
宝塔面板+djiango+mod wsgi +apache 配置多项目站点
2、项目部署的架构及基本流程
3、为什么不建议用自己的电脑做服务器?
请自行阅读。
二、获取云服务器
中小型企业以及个人在部署web项目时,首选云服务器作为项目服务器,本人常用云服务器如下:
1️⃣亚马逊云:官网,如果你有一张VISA的信用卡,可以申请一台免费的、一年期限的AWS-EC2云服务器,优点是:属于域外服务器,域名不需要备案,当然还有其他的好处,不可明言;缺点是:网速延迟高
2️⃣阿里云:官网,可以免费试用一个月,优点是:稳定、网速快,缺点:真心贵
3️⃣百度云:官网,性价比很高,优惠力度大
想要了解更多信息:点击这里,本文档以百度云服务器为例
创建云服务器密码,快速入口
三、域名的购买、备案、解析
1、购买域名
进入控制台-域名服务-注册新域名,快速入口
2、域名备案
3、域名解析
首先获取公网IP,快速入口
进行域名解析,点击解析-添加解析,快速入口
四、配置实例的安全组
安全组决定着云服务的准入规则,如果配置异常,会导致无法访问云服务的情况,百度云默认安全组配置为:全部协议、所有端口均可入站,所有端口可出站,无需修改。其他供应商的云服务需要查看一下,按需修改。
五、上传项目文件及启动测试
1、安装Python3、MySQL
(PS:可使用cmd或终端ssh连接云服务器。win使用cmd连接云服务时,注意路径符号的区别)
2、创建虚拟环境、数据库(请参考macOS的启动文档)
3、上传项目文件
上传项目文件到云服务的方式有很多:
1️⃣使用xftp:如何将本地项目上传到云服务器上(用Xftp上传)
2️⃣使用scp:如何将本地文件通过终端上传到linux服务器 /服务器/阿里云
3️⃣使用pycharm:利用pycharm的Deployment功能映射本地和远程代码(同步开发),下面会详细介绍
4️⃣使用GitHub:使用git上传项目到码云服务器
依次点击pycharm菜单Tools-Deployment-Configuration
上传完成后会有相应的提示。
4、启动测试
输入以下命令测试启动:
python manage.py runserver 0.0.0.0:8000 # 注意不能使用默认的127地址
打开本地电脑的浏览器,地址栏上输入云服务的IP和端口号,例如: 105.6.7.8:8000 ,如果可以打开网页表示启动成功。启动测试完成后,记得关闭服务: control+c
六、安装及配置uWSGI
uWSGI和Nginx的作用是什么?请自行阅读:
1、安装及配置uWSGI
使用pip安装(需要在虚拟环境中),依次运行:
apt-get install python3-dev # 安装python的开发包
pip install uwsgi # 安装uwsgi
在项目的根目录下,创建uwsgi.ini,这是uwsgi的配置文件:
(PS:假如项目根目录为/var/www/blog;可在pycharm中使用鼠标操作)
文件新建后,在pycharm会自动打开,输入以下内容:
(PS:以下为uwsgi-2.0.18版本的配置,其他版本使用如有报错,请参考官方文档进行配置)
[uwsgi]
# 项目根目录,绝对路径,根据实际情况填写
chdir = /var/www/blog04/
# 指定项目的application,根据实际情况填写
module = blog.wsgi:application
# 进程个数
workers = 5
# 绝对路径,根据实际情况填写
pidfile = /var/www/blog04/uwsgi.pid
# 指定IP端口
http = 0.0.0.0:8000
# 启用主进程
master = true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum = true
# 序列化接受的内容,如果可能的话
thunder-lock = true
# 启用线程
enable-threads = true
# 设置自中断时间
harakiri = 30
# 设置缓冲
post-buffering = 4096
# 设置日志目录,绝对路径,根据实际情况填写
daemonize = /var/www/blog04/uwsgi.log
# 指定sock的文件路径,绝对路径,根据实际情况填写
socket = /var/www/blog04/uwsgi.sock
编辑完成后,点击上传,如下图:
2、使用uwsgi进行启动测试
在终端输入以下命令进行项目启动,可以使用ps查看uwsgi进程:
uwsgi --ini uwsgi.ini
打开本地电脑的浏览器,地址栏上输入云服务的IP和端口号,例如: 105.6.7.8:8000 ,如果可以打开网页表示启动成功。测试启动完成后记得结束uwsgi:
uwsgi --stop uwsgi.pid
七、安装及配置Nginx
1、安装Nginx
终端输入以下命令:
(PS:无需重新开终端窗口,以下命令在虚拟环境中照常执行)
apt-get install nginx
输入以下命令,如显示版本号,则Nginx安装成功:
nginx -v
2、修改Nginx配置
查找配置文件:
find / -name nginx.conf
修改配置文件,建议使用pycharm进行修改:
(PS:以下配置内容适用于nginx/1.17.1版本,其他版本使用如有报错,请参考官方文档进行配置)
worker_processes auto;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /usr/local/nginx/conf/mime.types; # 根据自己的实际情况填写路径
default_type application/octet-stream;
index index.html index.htm;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.codestore.top; # 填写自己已备案的域名
root /var/www/blog04/templates;
location / {
include /usr/local/nginx/conf/uwsgi_params; # 将所有参数转到uwsgi中,根据自己的实际情况填写路径
uwsgi_pass 127.0.0.1:8000; # 将用户的请求转向的地址
}
location /static { # 配置静态文件路径,根据自己的实际情况填写路径
alias /var/www/blog04/static/; # 此目录必须有用户的读写权限
}
location /media { # 配置静态文件路径,根据自己的实际情况填写路径
alias /var/www/blog04/media/; # 此目录必须有用户的读写权限
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
启动Nginx,终端输入命令: nginx ,这时候使用本地浏览器,地址栏输入已备案的域名,会提示404错误,但是可以发现是Nginx提示的,说明Nginx已经启动成功了,之所以是404错误,是因为我们还没有启动服务,所以找不到页面,
使用uwsgi启动项目之前,需要对配置文件进行修改,在uwsgi.ini中:
# 指定IP端口 使用Nginx时用socket
# http = 0.0.0.0:8000
socket = 0.0.0.0:8000
启动uwsgi,输入命令: uwsgi --ini uwsgi.ini ,这时候使用本地浏览器,刷新页面,发现可以浏览网站(但是所有的静态文件都没有加载)。
八、处理静态文件加载
修改项目的配置文件,在项目名称文件夹下的settings.py文件中,修改以下内容:
......
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False # 关闭debug模式
......
STATIC_URL = '/static/' # 用于收集静态文件
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
......
收集静态文件,在终端运行:
python manage.py collectstatic
(PS:如收集静态文件出现报错,可手动将所有依赖包里的静态文件复制到static文件夹中,也可参考官方解答)
重新启动uwsgi,本地电脑浏览器强制刷新页面,即可看到已经部署上线的网站喽。
如需配置MySQL,请参考启动文档中MySQL相关的内容。