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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

17 | 如何正确地显示随机消息?

我在上一篇文章,为你讲解完order by语句的几种执行模式后,就想到了之前一个做英语学习App的朋友碰到过的一个性能问题。今天这篇文章,我就从这个性能问题说起,和你说说MySQL中的另外一种排序需求,希望能够加深你对MySQ…

QT+VS中使用qDebbug()打印调试信息无法显示

首先右键点击项目名称,找到最后一项属性 然后依次设置为如图所示即可 再次编译后,会弹出CMD窗口,出现qDebug的调试信息。 转载于:https://www.cnblogs.com/WindSun/p/10328404.html

WebAPIs移动端特效——不看你就亏大了

Web APIs 本篇学习目标: ✨能够写出移动端触屏事件 ✨能够写出常见的移动端特效 ✨能够使用移动端开发插件开发移动端特效 ✨能够使用移动端开发框架开发移动端特效 ✨能够写出 sessionStorage 数据的存储以及获取 ✨能够写出 localStorage 数据的存储以及获取 ✨能够说出它们两…

MVC是一种用于表示层设计的复合设计模式

它们之间的交互有以下几种:1.当用户在视图上做任何需要调用模型的操作时,它的请求将被控制器截获。2.控制器按照自身指定的策略,将用户行为翻译成模型操作,调用模型相应逻辑实现。3.控制器可能会在接到视图操作时,指定…

Centos7.2源码安装redis

1、下载redis包(此处可到官网查看,有相应的命令) wget http://download.redis.io/releases/redis-5.0.3.tar.gz 2、解压之后,并进行make编译 tar xzf redis-5.0.3.tar.gz -C /usr/local/cd /usr/local/redis-5.0.3/make如果出现如…

手撸移动端轮播图(内含源码)

移动轮播图 移动端轮播图与PC段轮播图,在技术选择上是有区别的,因为移动端的浏览器版本非常好,对于H5和CSS3的支持非常完美,所以很多效果可以CSS3的方式实现,比如可以使用 Transorm 属性替代原来的动画函数 可以自动…

原创jquery插件treeTable(转)

由于工作需要,要直观的看到某个业务是由那些子业务引起的异常,所以我需要用树表的方式来展现各个层次的数据。 需求: 1、数据层次分明; 2、数据读取慢、需要动态加载孩子节点; 3、支持默认展开多少层。 在网上找到了很…

初探Vue3

🌜本篇文章目录\textcolor{green}{本篇文章目录}本篇文章目录 🌛 🐵 新构建工具Vite\textcolor{blue}{新构建工具Vite}新构建工具Vite 🐵 CompositionAPI火爆来袭\textcolor{blue}{Composition API火爆来袭}CompositionAPI火爆来…

linux执行python命令后permission denied

linux下执行python后显示被拒绝问题定位: 1、检查下要执行的文件的权限是否存在执行权限,否则执行chmod命令赋予权限; 2、若赋予权限后仍然显示没有权限,检查下执行的python文件是否有权限,否则执行chmod赋予执行权限。…

mysql zip 安装

第一步下载mysql.zip https://dev.mysql.com/downloads/mysql/5.7.html#downloads 第二步:解压文件后在其目录下, 新建 my.ini 注意编码为ansi,新建 data 空文件夹 my.ini内容为: [mysql]# 设置mysql客户端默认字符集default…

react Native 环境安装配置——图解版一目了然

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下 🔥 Flutter和reactNative的区别\textcolor{green}{Flutter和react Native的区别}Flutter和reactNative的…

第七章 字典和集合[DDT书本学习 小甲鱼]【2】

7.1.2 字典的各种内置方法在序列里为不存在位置赋值,会出现错误;而在字典不存在得位置赋值,会创建。工厂函数(类型)以前学过 str(),int(),list(),tuple()....... 1.fromkeys() 用于创建和返回一个新的字典 不是修改 2…

Installing Node.js and Express on Ubuntu

Installing Node.js and Express on Ubuntu 1. 在nodejs官网上下载Linux Binaries(已经包含了npm):2. 安装Node.js下载后解压,并在解压的文件夹中启动Terminal后,输入命令: sudo cp * /usr/local/ -r再输入命令: node -v …

Chrome插件我只服你——10w人都在使用的浏览器插件

✨文章摘要导读\textcolor{blue}{文章摘要导读}文章摘要导读 🔥 为什么选择Chrome插件\textcolor{green}{为什么选择Chrome插件}为什么选择Chrome插件 🔥 插件具备的强大优势\textcolor{green}{插件具备的强大优势}插件具备的强大优势 🔥 …

H3C通过端口ID决定端口角色

转载于:https://www.cnblogs.com/fanweisheng/p/11153312.html

特殊属性

转载于:https://www.cnblogs.com/mengbin0546/p/10338371.html

一款超强的手机屏幕投影工具

✨文章摘要导读\textcolor{blue}{文章摘要导读}文章摘要导读 🔥 前言\textcolor{green}{前言}前言 🔥 准备工作\textcolor{green}{准备工作}准备工作 🔥 Scrcpy安装\textcolor{green}{Scrcpy安装}Scrcpy安装 🔥 工具调试\text…

JS一维数组转化为三维数组有这个方法就够了

今天在CSDN上问答区看到一个提问的小伙伴,是想要将一维数组转化为三位数组的需求,正好不是很忙,乐于助人的我立马给这位同学安排上 下面是后端同学返给我们的一维数组数据格式 [{品牌: xiaomi, 机型: 10, 配置: 512},{品牌: xiaomi, 机型: 10…

Day 21 20190205 老男孩python学习第21天 内容整理

今天写作业,明天后天要在外旅游 写作业写了7个小时。 1 def read_file_as_dict(where):2 staff_dict {}3 f open(%s % where, mode"r", encodingutf-8)4 data f.read()5 f.close()6 row data.strip().split(\n)7 for staff i…

SCOM 简单界面操作指南 [SCOM中文系列之三]

今天大概介绍下SCOM的管理界面,大概分三个重要的功能版块 Monitoring 监控版面 Authoring (中文版不知道翻译成什么,主要编辑MP) Administration 管理操作 首先说一下管理操作区,开始装好的SCOM都需要来这里配置一下的…