Django项目部署上线

  • Post author:
  • Post category:其他


对于纯净的服务器布局

CentOS

安装MariaDB

安装命令
yum -y install mariadb mariadb-server
首先启动MariaDB
systemctl start mariadb
设置开机启动
systemctl enable mariadb
设置密码:
命令: mysql_secure_installation
Enter current password for root:<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码

其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,

Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

初始化MariaDB完成,接下来测试登录

mysql -u root -p

Navticat连接云服务器

首先开启远程连接
在mysql数据库中的user表中可以看到默认只能本地连接,所有可以添加一个新的用户,该用户可以远程访问
开启防火墙
打开3306端口

1、创建用户
# 先使用数据库
use mysql;
# 针对ip
create user 'root'@'192.168.10.10' identified by '密码';
#全部
 create user 'root'@'%' identified by '密码';
 
2. 授权
# 给用户最大权限
grant all privileges on *.* to 'root'@'%' identified by '密码';

# 给部分权限(test 数据库)

grant all privileges on test.* to 'root'@'%' identified by '密码' with grant option;

# 刷新权限表
flush privileges;

# 查看
show grants for 'root'@'localhost';

接下来就可以在远程的数据库可视化工具(例如Navticat)中直接访问该服务器中的mysql了。
# 访问数据库
mysql -u root -p

安装python3

在centos中,系统默认只提供python2.7的版本,但是项目我们使用的python3.6的版本。所有我们自己安装python3
python3.6安装方法:
首先安装依赖库:
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
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

最后创建软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

安装环境

可以在根目录的/home/文件中创建项目文件。
cd /home/
mkdir env src logs conf ---- 为不同的分类创建不同的文件,src是代码位置,logs是日志,env是虚拟环境,conf放配置文件
1. 安装virtualenv
yum install python-virtualenv

2. 创建虚拟环境
cd进入/home/env创建虚拟环境
virtualenv --no-site-packages -p python版本 env --- 如果有多个python版本则需要在-p后跟上版本可执行文件地址
例如:virtualenv --no-site-packages -p /usr/local/python36/bin/python3 axfh

cd axfh

# 激活虚拟环境
进入虚拟环境中的/bin,然后source activate
source bin/activate

退出 --- deactivate

3. 安装环境需要的包
pip3 install -r re_install.txt
注意:直接输入pip3是系统环境的pip3,如果想在虚拟环境中使用pip来安装包则需要指定pip的路径,例如
/home/env/axfh/bin/pip3 install -r requeirement.txt 


其中re_install.txt文件中记录的是需要安装包的名称以及对应的版本

部署

1、创建好虚拟环境并且安装包以后,需要将自己的项目代码拷贝到服务器中自己建好的src文件中
(通过Xftp来将本地的文件上传至服务器)
2、修改项目中settings中的数据库配置,切换成服务器的数据库对应的配置。
如果想要别人访问自己的网址,需要设置settings中的ALLOWD_HOSTS = ['*'] --- 允许所有人访问
3、此时可以通过/home/env/axfh/bin/python3 manage.py runserver 0.0.0.0:80&启动服务,通过自己的公网ip可以访问
其中/home/env/axfh/bin/python3为虚拟环境的python3的路径
4、考虑一个问题,settings中的DEBUG=True,为的是方便让我们调试程序,但是程序上线以后应该不能让用户看到错误提示,所以需要设置DEBUG=False
5、这同时会带来一个问题,如果DEBUG=False则会出现js,css,img无法加载的情况,并且djang将不在提供自带的静态服务。
此时需要进行配置。
6、修改工程目录下的urls.py
url中加入以下配置:
from django.views.static import serve
url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATICFILES_DIRS[0]}),
url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),

settings中:
STATIC_ROOT = os.path.join(BASE_DIR,'static')

例子:
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中修改首页访问的地址
    url(r'^$', views.home)
]

7、此时还存在一个问题,当加载js和css时,会发生重定向,所以需要在中间件中将其放过。
'/static(.*)' 和 '/media(.*)'

8、要让服务器一直运行就需要将程序放到后台运行,可以通过程序后加&符号让程序到后台运行,但是此时当有用户访问网站时,访问信息就会在前台刷新,影响正常使用。

9、可以通过nohup将输出重定向
无论是否将nohup命令的输出重定向到终端,输出都会附加到当前目录的nohup.out文件中
如果当前目录的nohup.out文件不可写,输出重定向到$HOME/notup.oyut文件中
如果没有文件能创建或者打开以用户追加,那么Command参数的指令不可调用
可以和&一起使用 --- nohup Command &
nohup /home/env/axfh/bin/python3 manage.py runserver 0.0.0.0:80 &

tail -f nohup.out --- 将指定的文件一直挂载在最后一行,可以看到最新的一行,如果是vim打开这是看待最开始的
tail -n 查询最新的10行

10、启动的代码太长,可以考虑将启动代码写入一个文件中,例如创建一个start.sh文件,将
/home/env/axfh/bin/python3 manage.py runserver 0.0.0.0:80代码写入其中,
修改start.sh的文件权限(chmod -R 777 start.sh),此时可以通过nohup ./start.sh &执行程序。

也可以使用screen执行---


netstat -lntp --- 查看进程

该部署采用的是cenots7系统来部署

在可视化工具汇总客户已通过工具选项的

数据传输将指定的连接的数据库拷贝到指定的连接的数据库中

正式环境汇总部署环境

可以使用
nginx uwsgi部署Django
nginx gunicorn部署Django

此时使用nginx uwsgi部署Django

安装nginx

a)添加nginx存储库
yum install epel-release

b) 安装nginx
yum install nginx

c) 运行nginx
Nginx不会自行启动。要运行Nginx
systemctl start nginx

nginx的运行命令:
systemctl status nginx 查看nginx的状态
systemctl start/stop/enable/disable nginx 启动/关闭/设置开机启动/禁止开机启动

d)系统启动时启用Nginx
systemctl enable nginx

e)如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:
sudo firewall-cmd --permanent --zone=public --add-service=http 
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

在虚拟环境中安装uwsgi--------
/home/env/axfh/bin/pip3 install uwsgi


每一个项目对应的有一个自己定义的nginx的配置文件,比如我定义了一个axfnginx.conf文件

配置nginx,如果已经使用了nginx,这它会提供静态文件的使用,也就是说urls中添加的静态url和中间件不需要再放过'/static(.*)和'/media(.*)'

在axfnginx.conf中配置:
server {
    listen      80;
    server_name ip地址 localhost;
    access_log /home/logs/access.log;
    error_log /home/logs/error/log;
    
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8890;
    }
    location /static/ {
        alias /home/src/axf/static/;
        expires 30d;
    }
    
}

然后,修改总得nginx的配置文件,让总得nginx文件包含自定义项目的axfnginx.conf文件

总的nginx的配置文件在:/etc/nginx/nginx.conf中
执行vim /etc/nginx/nginx.conf
在代码的37行添加:include /home/conf/*.conf;

操作完成后需要重启nginx;
systemctl restart nginx

可以使用systemctl status nginx查看nginx状态,如果有active(running)则代表没有错误

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

[uwsgi]
projectname = axf
base = /home/src

# 守护进程
master = true

# 进程个数
processes = 4

# 虚拟环境
pythonhome = /home/env/axfenv

# 项目地址
chdir = %(base)/%(projectname)

# 指定python版本
pythonpath = /usr/local/python3/bin/python3

# 指定uwsgi文件
module = %(projectname).wsgi

# 和nginx通信地址:端口
socket = 127.0.0.1:8890

# 日志文件地址
logto = /home/logs/uwsgi.log


在有axfuwsgi的运行项目:
/home/env/axfh/bin/uwsgi --ini axfuwsgi.ini



nginx --- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
阿里云中用yum install nginx 安装ngxin
阿里云的默认防火墙端口22,(阿里云用Nginx创建的web的服务器想要访问需要添加80端口,用阿里云公网ip访问,默认web页面是nginx页面,需要使用xfpt上传自己的web页面)
在Lunix中点击新建文件传输打开xftp,进行文件传输设置web界面
/usr/share/nginx/html/index.html(传输的时候,将图片和js、css都要按照原本的路径传输)
nginx -s reload --- 重启服务器
nginx -s stop --- 停止服务器



版权声明:本文为weixin_42750983原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。