django项目部署发布阿里云服务器(ubuntu16.04)

文章目录

  • django项目部署发布阿里云服务器(ubuntu16.04)
    • 1. 用xshell连接服务器终端
    • 2. 用filezilla连接服务器用来传文件
    • 3. 更换ubuntu源为阿里源
    • 4. 更新源
    • 5. 安装Python3.6
    • 6. 装好后将3.6设置为默认环境
    • 7. 添加安全组规则进行端口添加,只需要填端口范围和授权对象
    • 8. 本地Django项目工程文件拷贝到阿里云上,
    • 9. 虚拟环境(virtualenv)的安装
        • 什么是虚拟环境?
        • 9.1 安装virtualenv
        • 9.2 在www下创建虚拟环境安装目录
        • 9.3 为virtualenv配置环境变量,打开.bashrc文件,在末尾加上两行代码
        • 9.4 创建虚拟环境
    • 10. 在虚拟环境中安装相应的工具包
    • 11. Mysql数据库的安装和数据的迁移
    • 12. 修改django的setting文件:
    • 13. nginx、uWSGI的安装
        • 13.1 nginx安装:
        • 13.2 nginx配置
        • 13.3 uWSGI安装:
        • 13.4 配置uWSGI
    • 14. 运行django项目

django项目部署发布阿里云服务器(ubuntu16.04)

1. 用xshell连接服务器终端

2. 用filezilla连接服务器用来传文件

3. 更换ubuntu源为阿里源

# 拷贝sources.list:
sudo cp /etc/apt/sources.list /etc/apt/sources1.list 
# 删除配置文件:
sudo rm /etc/apt/sources.list 

# 打开配置文件:
sudo vi /etc/apt/sources.list 

# 按i进入插入模式
# 然后粘贴aliyun的源
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
# 然后按esc退出插入模式
# 按住shift+zz退出+保存

4. 更新源

# 更新源:
sudo apt-get update

5. 安装Python3.6

sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:jonathonf/python-3.6 
sudo apt-get update 
sudo apt-get install -y python3.6

# 这个时候使用pip -V查询,会发现pip还是python3.5的pip,如何指向python3.6呢,首先是删除pip
apt-get remove python3-pip
apt-get -y autoremove 自动删除多余文件

6. 装好后将3.6设置为默认环境

# 删除原始pip,重装pip
# 然后再安装pip
apt-get install -y python3-pip

# 发现pip还是指向 python3.5的,这个时候再用python3.6指定升级一下pip:
python3.6 -m pip install --upgrade pip
# 就指向python3.6了。

#设置Python3.6的优先级:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 200

7. 添加安全组规则进行端口添加,只需要填端口范围和授权对象

django项目部署发布阿里云服务器(ubuntu16.04)_第1张图片

8. 本地Django项目工程文件拷贝到阿里云上,

通过filezilla软件直接拖拽,在根目录下创建新目录www

9. 虚拟环境(virtualenv)的安装

什么是虚拟环境?

  • Python虚拟环境的主要目的是为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个工程都有自己的依赖包,而与其它的工程无关。不同的虚拟环境中同一个包可以有不同的版本。并且,虚拟环境的数量没有限制,我们可以轻松地用virtualenv或者pyenv等工具来创建多个虚拟环境。

本地项目是建在python虚拟环境下的,所以在阿里云上也要先建下虚拟环境。安装如下步骤如下:

9.1 安装virtualenv

sudo pip install virtualenv
sudo pip install virtualenvwrapper #安装虚拟环境管理工具

9.2 在www下创建虚拟环境安装目录

mkdir .virtualenvs

9.3 为virtualenv配置环境变量,打开.bashrc文件,在末尾加上两行代码

# 用vi打开.bashrc ,一般就在www文件夹下
sudo vi /.bashrc

# 在末尾添加两行代码

export WORKON_HOME=$HOME/.virtualenvs  # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh

# 使配置文件生效
source /www/.bashrc
# 注意:开启虚拟环境时,一定要使配置文件生效

9.4 创建虚拟环境

  • 默认命令创建的是python2的虚拟环境,指定创建python3.6的虚拟环境可以使用以下命令
mkvirtualenv -p /usr/bin/python3.6  XX  #XX是虚拟环境的名字,创建python3.6的虚拟环境
 
# 其他命令:
workon xx    #进入虚拟环境XX
deactivate   #退出虚拟环境

10. 在虚拟环境中安装相应的工具包

  • 我们在本地写django项目肯定是安装了一堆相应的包,需要把他们移植到阿里云上。首先在本地ubuntu进入虚拟环境,在项目根目录下,执行以下命令收集安装的包,就是生成一个包的清单文件plist.txt。
pip freeze > plist.txt
  • 然后用filezilla把这个plist.txt文件上传到阿里云项目的根目录www/myweb,然后进入虚拟环境test(test是我新建的虚拟环境的名字)。
workon test    #进入虚拟环境test
# cd到plist.txt所在目录
pip install -r plist.txt  #安装txt文件上的包
  • 第十步可以省略,到后面运行django程序时需要什么包,就安装什么包。

11. Mysql数据库的安装和数据的迁移

# 安装Mysql:输入以下命令,安装过程会设置密码,设置成和原来本地一样的,就不用在setting中修改了。

​sudo apt-get update
sudo apt-get install mysql-server 
sudo apt-get install mysql-client

# 创建数据库:先登录数据库, 然后创建数据库v1,数据库名字也创建成和原来本地一样的,我的叫v1。
create database v1;
 
# 数据的迁移:把本地数据库中的数据复制到阿里云上的数据库中。先在本地生成备份文件,v1是要备份的数据库,v1.sql是生成的备份文件。然后用filezilla把v1.sql文件上传到阿里云。
mysqldump -u root -p v1 >v1.sql 
 
# 数据还原:阿里云终端 cd到v1.sql所在目录,输入以下命令
mysql -u root -p v1.sql
 
mysql配置:找到mysqld.cnf文件注释掉bind-address这一行

/etc/mysql/mysql.conf.d/mysqld.cnf   #配置文件路径
 

#bind-address		= 127.0.0.1   #注释掉这一行

12. 修改django的setting文件:

DEBUG = False
ALLOW_HOSTS=["115.29.150.206", "0.0.0.0:8001", "127.0.0.1"] #115.29.150.206为阿里云的公网IP
# 0.0.0.0:8001 表示运行django程序的IP、端口,端口可以使任意,只要端口没有被占用
# DEBUG 为False 静态文件不加载,应该为True

13. nginx、uWSGI的安装

在安装前先了解下这几个是什么东西:WSGI、uWSGI、nginx。

  • WSGI:PythonWeb服务器网关接口(Python Web Server Gateway Interface),这是一种协议规范,用于规范web server(比如uWSGI)和web application(Flask、Django等)之间的通信方式。这种协议其实是将我们和更加底层的HTTP、TCP等协议分隔开来,使我们在开发的时候可以不用自己去实现这些协议的处理,只关注于更高层次的逻辑处理,实现面向对象的编程。

  • uWSGI:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。它本身可以作为一个服务器单独使用,但是也可以和nginx组合使用。一般Django部署都是用的nginx+uWSGI,可以理解为这种组合性能更优。

  • nginx:这是一个高性能的web服务器/反向代理,类似Apache。什么叫反向代理,客户端通过一个代理去访问服务器,这样的代理叫正向代理;同样的服务器前加一个代理和客户端通信,这样的代理叫反向代理。nginx就是用来放在uWSGI前做反向代理。

  • 注意:我们在本地开发的时候没有安装过以上服务器,但是也可以python manage.py runserver运行项目,那是因为Django等框架自带了WSGI服务器,性能不强,可以用于调试。

13.1 nginx安装:

  • 直接在终端安装,不用装在虚拟环境中,输入以下命令:
sudo apt-get update
sudo apt-get install nginx

安装成功后,用浏览器访问你的阿里云IP地址,可以看到以下提示 :
django项目部署发布阿里云服务器(ubuntu16.04)_第2张图片

  • nginx常用命令:
service nginx start   #启动
service nginx stop    #停止
service nginx reload  #重启

13.2 nginx配置

打开配置文件default,路径/etc/nginx/sites-available/default,设置以下内容。一个是server_name后面换成你的阿里云公网IP,有的文章说不换也行。关键是下面2个location,第一个location是设置的和uWSGI的关联。第二个location /static是设置的静态文件的路径。如果你的项目还有media文件夹,那还要加一个location /media,把路径设置上。注意:location 和alias后面有空格。

	server_name 115.29.150.206;
        
        
	location / {
        
		# First attempt to serve request as file, then
        
		# as directory, then fall back to displaying a 404.
        
		# try_files $uri $uri/ =404;
        
		include  uwsgi_params;
                
		uwsgi_pass  127.0.0.1:8000;  
    
	}
        
	location /static {
		alias /www/myweb/static;
	}
  • 上面nginx配置静态文件有一个问题,就是上面的目录/www/myweb/static只是我们自己的静态文件的目录,你登录admin后发现admin页面的样式都丢失了。因为django自带的admin的静态文件路径没有导入。所以就需要新建一个文件夹,我的是/www/myweb/static,然后执行命令把整个项目的所有静态文件都收集到这个目录下,再修改下上面的配置。

  • 第一步:新建文件夹 /www/myweb/static(可以省略不写)

  • 第二步:修改setting.py文件,增加STATIC_ROOT

STATIC_ROOT='os.path.join(BASE_DIR,'static')'    #添加收集静态文件的目录
STATIC_URL = '/static/'
STATICFILES_DIRS=(
	os.path.join(BASE_DIR,'static'),   
)
  • 第三步:执行以下代码收集静态文件

python manage.py collectstatic

  • 第四步:修改nginx的配置
 location /static {
               alias /www/myweb/static;
}
  • 第五步:注释STATIC_ROOT,否则运行django程序报错。

13.3 uWSGI安装:

  • 这个是安装在虚拟环境中,先workon test进入虚拟环境,安装uWSGI前需要先安装依赖,输入以下命令完成安装。
apt-get install build-essential python

apt-get install python3.6-dev

pip install uwsgi

13.4 配置uWSGI

  • 在django项目的根目录下,新建两个文件,uwsgi.ini和run.log 。第一个是uWSGI的配置文件,第二个是日志记录文件。设置uwsgi.ini文件如下:
[uwsgi]
chdir = /www/myweb                
module = myweb.wsgi:application 
socket = 127.0.0.1:8000            
master = true         
daemonize = /www/myweb/run.log
disable-logging = true
wsgi-file = /www/myweb/myweb/wsgi.py
pidfile=/www/myweb/uwsgi.pid
  • chdir是django项目所在目录,socket后面的地址是和上面nginx配置文件中的地址uwsgi_pass 127.0.0.1:8000对应的,规定nginx和uWSGI之间的通信端口。daemonize就是日志文件的路径。disable-logging = true 表示不记录正常信息,只记录错误信息。wsgi-file是你django项目根目录下项目同名目录中有一个wsgi.py文件的路径。pidfile是uwsgi.pid文件的路径,这个文件是uWSGI运行后自动生成的,里面记录了uWSGI的进程号,可以用来重启uWSGI。但是我的uwsgi.pid文件记录的进程号老是不对,用不了。

  • uWSGI基本命令:

启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid

14. 运行django项目

python manage.py runserver 0.0.0.0:8001
  • 注意:一定将目录切换到django项目下,在执行命令。

你可能感兴趣的:(服务器,django)