初始化服务器 :
云服务器ESC - 进入实例化 - 选择实例ID/名称 -> 实例状态停止 - 重新初始化磁盘 - 输入root密码 - 初始化成功后自动启动成功后就可以在控制台直接进行测试环境部署了(CentOS7部署).
安装python3.6 :
在centos中,系统默认只提供python2.7的版本,但是项目我们使用的python3.6的版本。所有我们自己安装python3
安装Python3的方法
首先安装依赖包
1 2 3
| yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
|
然后根据自己需求下载不同版本的Python3,我下载的是Python3.6.2
1 2 3 4 5 6 7 8
| wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
然后解压压缩包,进入该目录,安装Python3
tar -xvJf Python-3.6.2.tar.xz cd Python-3.6.2 ./configure --prefix=/usr/local/python3 make && make install
|
最后创建软链接
1 2 3
| ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
|
安装MariaDB : – 数据库
安装命令
1
| yum -y install mariadb mariadb-server
|
安装完成MariaDB,首先启动MariaDB
设置开机启动
1
| systemctl enable mariadb
|
设置密码
命令: mysql_secure_installation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Enter current password for root:<–初次运行直接回车
设置密码
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车(一般输入y)
New password: <– 设置root用户的密码(输入个人数据库密码123456) Re-enter new password: <– 再输入一次你设置的密码(再一次输入个人数据库密码123456)
其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,j回车(一般选择Y)
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车(一般选择n)
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车(一般选n不删除)
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车(一般选y重写加载)
初始化MariaDB完成,接下来测试登录
mysql -u root -p(进入数据库)
|
连接本地数据库 :
1 2 3 4 5 6 7
| 在Navicat工具中新建连接 - 选择MariaDB 连接名 : 个人ip(120.79.135.242) 或者自定义名称 主机名或IP地址 : 个人ip(120.79.135.242) 端口 : 默认3306 用户名 : root 密码 : 输入刚刚新设置的个人数据库新密码(123456) 测试连接成功即可
|
开启远程连接
在mysql数据库中的user表中可以看到默认是只能本地连接的,所有可以添加一个新的用户,该用户可以远程访问
1. 创建用户
1 2 3 4 5 6 7 8
| # 先使用数据库 use mysql;(请先输入这个命令)
# 针对ip # create user 'root'@'192.168.10.10' identified by 'password';
# 全部 create user 'root'@'%' identified by 'password';(一般使用数据库后创建全部password改为个人密码123456)
|
2. 授权
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 给用户最大权限 grant all privileges on *.* to 'root'@'%' identified by 'password';(一般使用最大权限 - 个人数据库密码password改为个人密码123456)
# 给部分权限(test 数据库)
# grant all privileges on test.* to 'root'@'%' identified by 'password' with grant option;
# 刷新权限表 flush privileges;(接着使用这个)
# 查看 # show grants for 'root'@'localhost';
接下来就可以在远程的数据库可视化工具中直接访问该服务器中的mysql了。
# 访问数据库 mysql -u root -p(接着)
|
配置文件 :
1 2 3 4 5 6
| 此路径切换到home : root/python-3.6.2 # cd /home/ 此路径下创建四个文件 root/home : mkdir env logs src conf env : 放虚拟环境 logs : 放日志 src : 放项目(代码) conf : 放配置文件
|
安装环境 :
1 2 3 4 5 6 7 8 9 10
| 1. 安装virtualenv 此路径下root/home : yum install python-virtualenv is this ok[y/d/N] : y 2. 创建虚拟环境 此路径root/home/env : virtualenv --no-site-packages axfenv # 激活虚拟环境 进入此路径root/home/env/axfenv/bin : source activate # 退出虚拟环境 此路径root/home/env/axfenv/bin : deactivate
|
将代码传输到服务器 :
1 2 3
| 此路径root/home/src : 连接Xftp 6 : 服务器此路径/home/src : 找到自己项目代码本地所在路径(C:workspace/projects/axf) 点击右键传输
|
部署
该部署采用的是cenots7系统来部署
Django的项目中,在工程目录下settings.py文件中有一个DEBUG=True参数,如果DEBUG=False则会出现js,css,img无法加载的情况出现。
原因如下:
Django框架仅在开发模式下提供静态文件服务。当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。想一想这是符合Django的哲学的:这部分事情标准服务器都很擅长,就让服务器去做吧!
1. 测试环境中部署方式
urls.py中的修改
在测试环境中一般都直接使用python manage.py runserver的方式去运行项目。其中就涉及到DEBUG=False的修改,静态目录的修改等,具体修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 1.此路径root/home/src/axf : vim axf/settings.py
修改settings.py配置文件中的DEBUG=False模式 修改ALLOEWD_HOST=['*'] (允许访问的ip)
2.修改工程目录下的urls.py
此路径root/home/src/axf : vim axf/urls.py
from django.views.static import serve(需导包)
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^axf/', include('axf.urls', namespace='axf')),
# 增加以下的url路由 url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATICFILES_DIRS[0]}), url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
url(r'^$', views.home) ]
|
安装环境需要的包:
1 2 3 4 5 6 7 8 9
| 此路径创建文件root/home/src/axf : touch re_install.txt 此路径创建文件root/home/src/axf : vim re_install.txt django==1.11 pymysql pillow # 进入虚拟环境 此路径root/home/env : source axfenv/bin/activate # 找到代码 并指定文件 安装环境 此路径root/home/src/axf : pip3 install -r re_install.txt
|
创建数据库 : 本地数据库迁移 : 表/字段/数据同步到远程服务器
1 2 3 4 5 6 7 8 9 10 11
| 进入Navicat 在连接的Maria DB120.79.135.242中 : # 创建数据库 数据库名 : axf3 字符集 : utf8 排序规则 : utf8_general_ci # 数据传输 源 目标 本地服务器 同步到 远端服务器(120.79.135.242) 数据库 axf3 axf3 同步对象 表
|
启服务:
1 2 3 4 5 6 7 8
| (axfenv)root/home/src/axf : python3 manage.py runserver 0.0.0.0:80 网页中访问 : 120.79.135.242即可 服务器执行中会报302 : 权限问题 中间件 - 重定向问题 复制SSH渠道 : 查看中间件 # 添加static 此路径root/home/src/axf : vim utils/UserAuthMiddleware.py # 添加media 此路径root/home/src/axf : vim axf/urls.py
|
如果中间件是过滤哪些地址不需要登录验证的话, 就可以设置如下的static和media过滤地址的参数:

urls.py配置文件修改如图 :

以上启动服务是在虚拟环境中的启动的 : python3 manage.py runserver 0.0.0.0:80
将启动服务的命令写入一个文件在后端启动 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 此路径root/home/env/axfenv : netstat -lntp # 查看启动的端口
此路径启服务(axfenv)root/env/axf : /home/env/axfenv/python3 manage.py runserver 0.0.0.0:80
此路径后台启服务(axfenv)root/env/axf : python3 manage.py runserver 0.0.0.0:80 &
杀进程 : kill -9 80端口进程号28491
# 创建一个start.sh文件 此路径root/home/src/axf : vim start.sh 此文件中输入执行的命令 : python3 manage.py runserver 0.0.0.0:80 保存
此路径root/home/env : rm -rf axfenv/ 删除虚拟环境
重新创建虚拟环境 : 此路径root/home/env : virtualenv --no-site-packages -p /usr/local/python3/bin/python3 axfenv
激活虚拟环境 : root/home/env : source axfenv/bin/activate 查看python3的路径 : pwd
启动服务 : 直接启动文件root/home/src/axf: ./start.sh # 权限限制
授权 : root/home/src/axf : chmod -R 777 start.sh
查看长格式 : ls -l
虚拟环境中创建包(axfenv)root/home/src/axf : pip3 install -r re_install.txt
安装包成功后可直接启动文件root/home/src/axf : ./start.sh
挂载起来可直接访问页面启动命令(关闭服务器窗口后也可访问页面) root/home/src/axf : nohup ./start/sh
查看控制台打印的内容(会输出到nuhup.out的文件中 - 此文件自动生成) : root/home/src/axf : tail -f nohup.out (f表示展示的行数)
|
中间件配置 加入首页:
1 2 3
| root/home/src/axf : vim utils/UserAuthMiddleware.py 加入首页后重启服务 : root/home/src/axf : tail -f nohup.out 302 : 重定向
|

安装虚拟环境后 - 创建文件 - 自动启服务 - 三点左右
正式环境中部署 :
正式环境中部署由nginx + uwsgi来部署django项目
安装nginx
添加nginx存储库 - root/home/src/axf :
1
| yum install epel-release
|
Is this ok [y/d/N] : y
安装nginx - root/home/src/axf :
Is this ok [y/d/N] : y
运行nginx
nginx不会自行启动, 要运行Nginx

django常见的部署方式 : nginx + uwsgi / Apache(阿帕奇)等不是固定的组合
root/home/src/axf查看进程 : netstat -lntp
杀掉80端口进程关掉测试环境项目
nginx的运行命令 :
1 2
| systemctl status nginx 查看nginx的状态 systemctl start/stop/enable/disable nginx 启动/关闭/设置开机启动/禁止开机启动
|
浏览器端直接访问IP : 120.79.135.242 显示如图页面nginx方可安装成功 :
配置uwsgi :
安装uwsgi: - (axfenv) root/home/src/bin :
配置项目代码,配置项目nginx,配置uwsgi.ini等
本案例的配置文件,都习惯将每一个项目的配置文件,日志文件,虚拟环境放在一起,这样开发方便,运维也方便维护
项目的目录结构如下:

其中:
conf是配置文件,用于存放项目的nginx.conf文件,uwsgi.ini文件
logs是日志文件,用于存放nginx的启动成功和失败文件,以及uwsgi的运行日志文件
env是用于存放虚拟环境
src是项目文件,该目录下上传的是目录代码
4.1 配置nginx.conf文件
首先:编写自己项目的nginx.conf文件如下:
每一个项目对应有一个自己定义的nginx的配置文件,比如爱鲜蜂项目,我定义为axfnginx.conf文件 :
1
| (axfenv)root/home/conf : vim axfnginx.conf
|

配置uwsgi文件 :
在conf文件夹下除了包含自定义的axfnginx.conf文件,还有我们定义的uwsgi.ini文件 :

1
| (axfenv)root/home/conf : vim /etc/nginx/nginx.conf
|
第二个include处添加 : 
此操作完成后查看nginx状态 :
1
| (axfenv)root/home/conf : systemctl status nginx
|
接着重新启动nginx :
1
| (axfenv)root/home/conf : systemctl restart nginx
|

启动uwsgi :
1
| (axfenv)root/home/conf : uwsgi --ini uwsgi.ini
|