Django打造大型企业官网-项目部署


一、准备工作

1、在开发机上的准备工作

 1)确认项目没有bug。
 2)打开终端,进入虚拟环境,再 cd 到项目根目录下,执行命令:pip freeze > requirements.txt,将当前环境的包导出到`requirements.txt`文件中,方便在部署的时候安装。

 

 3)将项目上传到服务器上的`/srv`目录下。这里以`git`的形式为例。

  我们使用第三方代码托管平台 -码云 Gitee

  

 选择码云作为代码托管平台的原因是因为在码云上传项目代码,即使是私有项目也不会被收费。

 码云官网:https://gitee.com/

 将项目上传到服务器上:

  3.1)在服务器中新建仓库/项目:

   

  3.2)将本地项目代码提交到服务器中:

   

  git 相关操作:

# 本地项目代码 → 本地 git 仓库 → 服务器仓库

git init    # 初始化本地仓库

git remote add origin xxx.git   # 关联远程仓库,xxx.git:分为两种:SSH跟HTTPS,建议使用第一种方式

git add .         # 将本地项目的所有文件都预集合在一起,类似于打包
git commit -m "first commit !"   # 将本地代码添加到仓库,与 "git add ." 结合执行

git pull origin master --allow-unrelated-histories   # 从远程(服务器)的 master 中拉取代码下来,如果不是第一次拉代码,可以不用加后面的参数

git push origin master   # 确定没问题后,将本地仓库代码上传到服务器项目仓库中

git status  # 查看状态

 如果在拉取远程代码或提交代码到远程时报错:

  

 在 git Bash 中执行下述命令:

1.输入命令:git fsck -.-lost-found,可以看到好多“dangling commit”
2.清空他们:git gc   # 可以直接执行这行代码


2、在服务器上的准备工作

 本文介绍的服务器为 Ubuntu

 2.1、 Ubuntu 开启 root 用户

# 如果是新装的机子,开启root用户采用下述指令
> sudo passwd root
> 然后输入root 用户密码# 如果已有 root 用户 ,直接进入
> su -  或 su root  都能进入root 用户

 2.2、为了方便Xshell 连接服务器,建议安装 OpenSSH(一般云服务器上都已经安装好的)

  xshell 连接服务器方式介绍:https://www.cnblogs.com/Eric15/articles/9459329.html

> sudo apt install openssh-server openssh-client    # 安装 openssh
> service ssh restart     # 重启 openssh

  2.2.1、安装 vim:

sudo apt install vim

 


2.3、安装`MySQL`服务器和客户端:

sudo apt install mysql-server mysql-client
sudo apt-get install libmysqld-dev

  MySQL 安装及相关操作参考链接:https://www.cnblogs.com/Eric15/articles/9198777.html

 MySQL简单操作指令:

#linux/ubuntu mysql的启动关闭# 一、 启动方式
1、使用 service 启动:service mysql start
2、使用 mysqld 脚本启动:/etc/inint.d/mysql start
3、使用 safe_mysqld 启动:safe_mysql&# 二、停止
1、使用 service 启动:service mysql stop
2、使用 mysqld 脚本启动:/etc/inint.d/mysql stop
3、mysqladmin shutdown# 三、重启
1、使用 service 启动:service mysql restart
2、使用 mysqld 脚本启动:/etc/inint.d/mysql restart# 客户端连接MySQL 服务端
# 1.远程连接:mysql -h host -u user -p
# 2.本地客户端连接:mysql -uroot -p# 回车后输入密码即可


 2.4、安装 memcached

> sudo apt install memcached

 操作 memcached :

telnet 127.0.0.1 11211


2.5、安装 python

# Linux/Ubuntu 默认装有 python2 python3# 安装python2 、pip:
> sudo apt install python
> sudo apt install python-pip# 安装python3 、pip3:
> sudo apt install python3
> sudo apt install python3-pip# 设定python默认执行版本为python3:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

# 如果提示 pip 版本过低,执行下述命令更新pip:

 pip install --upgrade pip

pip 与 pip3 区别:

pip和pip3的区别:pip是python的包管理工具,pip和pip3版本不同,都位于Scripts\目录下:
如果系统中只安装了Python2,那么就只能使用pip。
如果系统中只安装了Python3,那么既可以使用pip也可以使用pip3,二者是等价的。
如果系统中同时安装了Python2和Python3,则pip默认给Python2用,pip3指定给Python3用


2.6、安装虚拟环境 :virtualenv  、virutalenvwrapper

 虚拟环境参考博文:https://www.cnblogs.com/Eric15/articles/9517232.html

# 安装 virtualenv
> pip install virtualenv      # python2版本的virtualenv
> pip3 install virtualenv    # python3版本# 使用指定 python 版本创建 virtualenv 虚拟环境
> virtualenv -p C:\Python36\python.exe virtualenv-name# 安装 virtualenvwrapper
> pip install virtualenvwrapper      # python2版本
> pip3 install virtualenvwrapper    # python3版本# 使用指定 python 版本创建 virtualenvwrapper虚拟环境 ,如python2 、python3均存在,创建虚拟环境时默认使用的解释器是python2版本,如果要使用python3版本,则需指定python版本
> mkvirtualenv --python==C:\Python36\python.exe virtualenv-name     # Windows> mkvirtualenv --python=/usr/bin/python3 py3scrapy                  # linux/Ubuntu
# 注意点: # 1. 直接安装 virtualenvwrapper 时,会一同安装 virtualenv  # 2.当只安装python2版本 或 python3版本的 virtualenvwrapper时,创建 virtualenvwrapper虚拟环境 使用的就是对应的python版本  

 配置文件配置:

# 使用 vim 进入 /.bashrc 文件中做以下改动:

export WORKON_HOME=$HOME/.envs  #虚拟环境都保存到 .envs文件夹中

VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'  #指定创建 virtualenvwrapper 虚拟环境时默认采用 python3版本的解释器 ,针对使用 pip3 安装的virtualenvwrapper ,如是pip(python2)安装的virtualenvwrapper,默认是python2解释器,不需要添加此行代码   

source /usr/local/bin/virtualenvwrapper.sh  #启动文件路径  使用pip/pip3 安装 virtrualenvwrapper虚拟环境时,会生成virtualenvwrapper.sh并放置到python的bin目录下,找到该路径下的bin/virtualenvwrapper.sh文件并指定为默认的启动文件   # 然后重启 /.bashrc 文件:
> source ~/.bashrc

 如果安装过慢,可以采用豆瓣源安装的方式:

sudo pip install -i http://pypi.douban.com/simple/ virtualenvwrapper


2.7、安装 git :

sudo apt install git

拉取远程代码到本地:

# Linux/Ubuntu
# 目录:/home/nan/pro_python/xfz

> git init   # git 初始化xfz文件夹为git仓库

> git remote add origin https://gitee.com/chenjiongnan/xfz.git     # 与远程仓库关联

> git pull origin master      # 将远程仓库的代码拉取到本地,回车后需要输入账号密码# 验证通过后,等待系统将项目代码拉取到本地就可以了

 如果以后开发机上有修改/更改项目代码,直接将代码 push 到远程仓库,再在服务器上 pull 远程代码下来即可:

git push origin master
git pull origin master 


3、数据迁移等准备

 3.1、安装 requirements.txt 中的所有包

 进入虚拟环境中,然后进入到项目所在目录,执行命令:`pip install -r requirements.txt`,安装好相应的包

pip install -r requirements.txt


3.2、在 MySQL 数据库创建相应的数据库

> mysql -uroot -p       # 进入数据库
> 输入密码# 进入数据库后 ,创建我们需要的数据库:
create database xfz charset utf8;# 退出 数据库
> exit;

关于数据库数据迁移,可参考博文:https://www.cnblogs.com/Eric15/articles/9704522.html


3.3、django 表数据 文件迁移

进入项目主目录下(有 manage.py文件的目录下),执行`python manage.py migrate`命令,将迁移文件,映射到数据库中,创建相应的表

python manage.py migrate

注意:由于项目部署前,在开发机上工作时我们已经生成了迁移脚本,因此不需要先运行 'python manage.py makemigrations' ,直接运行 'python manage.py migrate' 即可


3.4、设置`ALLOW_HOST`为你的域名(服务器域名),以及ip地址 ,同时设置`DEBUG=False`,避免如果你的网站产生错误,而将错误信息暴漏给用户

DEBUG = FalseALLOWED_HOSTS = ["192.168.*.*",]    # ALLOWED_HOSTS 填的是服务器的域名或ip


3.5、试启动项目

# 执行启动项目命令:
python manage.py runserver 0.0.0.0:8000# 在网页中输入 http://服务器的ip地址:8000/ ,访问该网站
> http://192.168.1.145:8000


3.6、静态文件收集

 收集静态文件是为了将静态文件提供给 Nginx ,这样用户如果只是请求静态文件,就可以从Nginx中获取,而不需要进入服务端获取了

 在settings.py 中设置 STATIC_ROOT:

# settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "static_dist")   # static_dist:新建的文件夹,用于收集静态文件# 然后将代码推到远程仓库,再在服务器中将远程代码拉取下来
# 在服务端执行以下命名,收集所有静态文件,也可以在处理Nginx 时再收集静态文件:python manage.py collectstatic


四、Nginx + uwsgi + Django 项目部署

 Nginx + uwsgi + Django 生产部署环境参考博文:https://www.cnblogs.com/Eric15/articles/9484762.html

1、Nginx

 1.1 Nginx 安装

  nginx是一个web服务器,用来加载静态文件和接收http请求的。通过命令`sudo apt install nginx`即可安装。

sudo apt install nginx

 1.2 Nginx 常用命令

service nginx start     # 启动nginx
service nginx stop     #  关闭nginx
service nginx restart  # 重启nginx

 在网页访问服务器ip + 80端口 (http://192.168.1.101:80) , 如果能成功访问则表示Nginx 安装成功且已启动

 1.3 编写 Nginx 配置文件

  在`/etc/nginx/conf.d`目录下,新建一个文件,叫做`xfz.conf`,文件名可以任意取,建议以项目名命名,然后将以下代码粘贴进去保存:

upstream xfz {      # 项目名server unix:///home/nan/pro_python/xfz/xfz.sock;    # Nginx配置的server路径要与uwsgi 的server路径保持一致(位置:项目xfz目录下的xfz.sock),xfz.sock不需要手动创建,但Nginx与uwsgi 通信时会自动创建
}# 配置服务器
server {# 监听的端口号listen      80;# 域名server_name 192.168.0.101;    # 服务器ip 、域名等charset     utf-8;# 最大的文件上传尺寸
    client_max_body_size 75M;  # 静态文件访问的urllocation /static {# 静态文件地址alias /home/nan/pro_python/xfz/static_dist;           # STATIC_ROOT 静态文件的路径
    }# 最后,发送所有非静态文件请求到django服务器location / {uwsgi_pass  xfz;    # 与上面upstream对应# uwsgi_params文件地址include     /etc/nginx/uwsgi_params; }
}

 写完配置文件后,为了测试配置文件是否设置成功,运行命令:`service nginx configtest`,如果不报错,说明成功

service nginx configtest

 每次修改完了配置文件,都要记得运行`service nginx restart`。

service nginx restart


2、uwsgi

 2.1 概述

 uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过`pip install uwsgi`就可以了。(uwsgi建议安装在系统级别的Python环境中,不要安装到虚拟环境中) ,如果安装在虚拟环境中,则每次启动uwsgi ,必须先要进入虚拟环境,再进入项目目录下,才能启动。

 2.2 安装

# 安装
pip install uwsgi pip3 install uwsgi

 2.3 启动 django 项目

# 启动 uwsgi
> uwsgi --http :8000 --module xfz.wsgi --vritualenv=/home/.envs/xfz# 服务器网址为 :http://[服务器ip]:8000
# xfz.wsgi :前缀为项目名称
# virtualenv : 后面为项目所在的虚拟环境文件夹地址

 输入网址: http://服务器地址/news:8000  :访问本项目新闻首页,如果能访问成功,说明uwsgi启动成功

 2.4 编写 uwsgi 配置文件

  在项目的根目录下面,创建一个文件叫做`xfz_uwsgi.ini`的文件,然后填写以下代码:

[uwsgi]# Django相关的配置
# 必须全部为绝对路径
# 项目的路径
chdir           = /home/nan/pro_python/xfz
# Django的wsgi文件
module          = xfz.wsgi      # 项目xfz 下的wsgi.py文件
# Python虚拟环境的路径
home            = /home/nan/.envs/xfz# 进程相关的设置
# 主进程
master          = true
# 最大数量的工作进程
processes       = 10
# socket文件路径,绝对路径
socket          = /home/nan/pro_python/xfz/xfz.sock      # 与 Nginx server 对应
# 设置socket的权限
chmod-socket    = 666
# 退出的时候是否清理环境
vacuum          = true

 写完 uwsgi 的配置文件,以后通过uwsgi 启动 Django项目时,就可以通过启动uwsgi 配置文件的方式启动:

# 进入项目根目录下:/home/nan/pro_python/xfz(根目录下有xfz_uwsgi.ini 文件),然后执行下行命令:

uwsgi --ini xfz_uwsgi.ini


3、supervisor

 3.1 概述

  supervisor 可以用来管理 uwsgi ,在uwsgi发生意外的情况下,可以自动让其重启。除了重启,也可以执行其他操作,如关闭、启动、重新启动 uwsgi 等。

 3.2 安装

  在系统级别的python环境下进行安装:

pip install supervisorpip3 install supervisor

 3.3 编写 supervisor 配置文件

  在项目的根目录下创建一个文件叫做`xfz_supervisor.conf` ,将下述代码粘贴到里面:

# supervisor的程序名字 ,可任取
[program:xfz]
# supervisor执行的命令:启动uwsgi
command=uwsgi --ini zlkt_uwsgi.ini
# 项目的目录
directory = /home/nan/pro_python/xfz
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件 , 需要提前先到项目根目录下新建log 文件夹 ,否则运行时会报错
stdout_logfile=/home/nan/pro_python/xfz/log/supervisord.log
# 输出的错误文件
stderr_logfile=/home/nan/pro_python/xfz/log/supervisord.err[supervisord]
# log的级别
loglevel=info[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = admin
password = 123# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001
# 登录supervisorctl的用户名和密码
username = admin
password = 123[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

 然后使用命令`supervisord -c xfz_supervisor.conf`运行就可以了:

# 在项目根目录下运行
supervisord -c xfz_supervisor.conf

 使用supervisord 成功运行后,以后如果想要启动或关闭`uwsgi`,就可以通过命令`supervisorctl -c xfz_supervisor.conf`进入到管理控制台,然后可以执行相关的命令进行管理:

# 客户端操作 supervisor  ,相当于mysql客户端操作服务端一样
supervisorctl -c xfz_supervisor.conf    # 从客户端启动supervisor ,前提需开启supervisord ,且进入项目根目录下执行# 可执行的相关命令:* status                # 查看状态* start program_name    #启动程序 ,即启动uwsgi ,因supervisor 中command配置的就是启动uwsgi 的命令,所以启动supervisor的同时就是启动uwsgi* restart program_name  #重新启动程序* stop program_name     # 关闭程序* reload                # 重新加载配置文件,即xfz_supervisor.conf* quit                  # 退出控制台,即退出 supervisorctl

  注:program_name:为 supervisor 的程序名:

  

 进入到 supervisorctl 时,输入 'help' ,可查看 supervisor 相关的一些操作:

  

 3.4 关系图

  使用 supervisor 管理 uwsgi ,而不管理 Nginx 的原因是:Nginx 自身是守护进程,当程序挂了会自动重启 ,而 uwsgi 自身不是守护进程 ,程序挂了就挂了。使用 supervisor 来管理 uwsgi ,相当于给uwsgi 起了个守护进去,当 uwsgi 程序挂了会自动给重启。

  


* Nginx 与 uwsgi 都安装及配置好配置文件后,启动项目:

# 1. 没有 [supervisor] ,启动步骤 ↓:# 1)启动 Nginx
service nginx start/restart# 2)启动 uwsgi ,项目根目录下启动
uwsgi --ini xfz_uwsgi.ini# =============================================# 2. [supervisor]管理 uwsgi ,启动步骤 ↓:# 1)启动 Nginx
service nginx start/restart# 2)由 supervisor 启动 uwsgi ,项目根目录下启动
supervisord -c xfz_supervisor.conf


 温馨提醒:

 1、在 copy 或编写 Nginx 、uwsgi 、supervisor 配置文件时 ,记得把注释都删掉

 2、放在服务器上的开发项目,建议放置在/srv 目录下(在根目录'/' 下新建 srv 目录)


转载于:https://www.cnblogs.com/Eric15/articles/11141987.html

Django打造大型企业官网-项目部署相关推荐

  1. Django打造大型企业官网-项目实战(三)

    Django打造大型企业官网-项目实战(三) 一.CRM 后台管理系统 前面我们使用的是 xadmin 后台管理系统,在使用中发现,在权限限制中,我们能实现不同等级的用户/管理(超级管理员/管理员/用 ...

  2. Django打造大型企业官网-项目实战(四)

    Django打造大型企业官网-项目实战(四) 一.新闻相关功能 在项目实战三中,我们完成了新闻分类相关的一些功能,现在我们来完成新闻列表.发布新闻.编辑新闻.删除新闻的功能 1.发布新闻/编辑新闻 功 ...

  3. Django打造大型企业官网(五)

    4.6.切换轮播图的箭头样式以及显示和隐藏 templates/news/index.html <span class="arrow left-arrow">‹< ...

  4. Ubuntu16.04下Mongodb官网卸载部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 前期博客 Ubuntu16.04下Mongodb官网安装部署步骤(图文详解)(博主推荐) https://docs.mongodb.com/manual/tutorial/ins ...

  5. Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 14.04.4 LTS ...

  6. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 16.04.1 LTS ...

  7. 仿照小米官网项目具体操作与细节

    本项目已上传github 有需要的可以下载 点这里前往下载 小米官网项目具体操作 1.gulp的搭建 一 , 打开node控制台 命令行输入 cd 加文件夹路径 进入当前文件夹 命令行输入 cnpm ...

  8. 学院官网项目三级页面总结

    学院官网项目三级页面总结 (撰写时间:2019年7月6作者:李梦熙) 这个六月我来到了这个项目班,在这一个多月的时间里,虽然有时候还是不知道去做些什么,但是我在这里也学习到了很多项目管理和分配工作之类 ...

  9. 如何用Nuxt.js构建项目,SSR官网项目搭建流程

    SSR渲染 现在Vue,React,angular等三大框架引领的单页面应用大行其道,使用这单页面技术构建的项目比比皆是.这些流行的框架给我们带来的好处显而易见,不仅是开发,维护成本都大大地获得了优化 ...

最新文章

  1. shiro 文档_spring---Shiro拦截器
  2. 干净架构在 Web 服务开发中的实践
  3. a标签代替input[button]
  4. 升腾联手VMware 发布首款本土化桌面虚拟化
  5. Quartus II12.0安装教程
  6. MapReduce 论文翻译
  7. 解决:elasticsearch 更新报错:The number of object passed must be even but was [1]
  8. myeclipse怎么运行c语言,windows下MyEclipse安装配置C/C++开发环境
  9. 假如苹果构建了一个搜索引擎
  10. 《HTML5游戏编程核心技术与实战》一2.3 图像API
  11. 2006无法登录mysql_错误2006(HY000):MySQL服务器消失了
  12. arcgis构建金字塔失败什么原因_新西兰创业移民转永居失败!原因是什么?
  13. python 爬虫 客户端_python爬虫
  14. STM32入门:STM32F401CDU6库函数工程文件搭建
  15. Hive split()、explode()和lateral view 应用单列,多列炸裂
  16. 第一季 停课模拟考试整理(完结)
  17. 【创业感悟】企业生存法则
  18. 第九章 数据库其他对象
  19. 如何安装KEIL MDK5开发软件
  20. netty解决TCP粘包/拆包导致的半包读写问题的三种方案

热门文章

  1. Linux xargs命令
  2. 【目标检测】ICCV21_TOOD: Task-aligned One-stage Object Detection
  3. 工业机器人入门实用教程_机器学习实用入门
  4. 了解回归:迈向机器学习的第一步
  5. profiler分析器——R语言
  6. 信用非常良好,为何银行不给你批信用卡?
  7. FIR基本型仿真_03
  8. 在FSM模型中使用两态数据类型
  9. 日语过级 JLPT简介
  10. linux weblogic启动目录,Linux下WebLogic开机启动设置