37、部署准备(三):服务器
我们网站放到哪里,怎么让别人去访问,这个实际上我们会放到一个叫做服务器的东西
1、什么是服务器
- 流通信息,存储数据
- 服务器是为我们提供服务的计算机
- 访问某个网站实际上是访问某个服务器给我们提供的信息
要了解到什么是服务器的话,这里就要提到一个概念:互联网。
假如我们有多台电脑,在某个地方或者某个区里面,这些电脑相互连接,组成一个局部的网络。世界上存在很多局部网络,这些网络再以某种形式把它连到一起,就形成一个互联网,互联网实际上是这些网络的一个连接。
只要大家能连上互联网的话,或是通过局部的网络再连到互联网,那么大家就可以访问到互联网上提供的一些信息或者网站或者服务之类的。在互联网上面,我们看到的这些东西都是一些信息,这些信息我们可能会以数据的形式存储到某个互联网上面的电脑,这就构成了互联网两大基本的操作:流通信息和存储数据
为了让别人通过互联网访问到我们的网站,需要在互联网的服务器上部署我们的网站
- 1、租用或购买别人的服务器
- 传统服务器 ——> 虚拟化 ——> 云服务器 ——> 购买/租用服务器
- 2、把自己电脑弄成服务器并接入互联网
这里我们选择第一种,选用阿里云的服务器做演示
百度“阿里云 优惠活动”——注册登录——点击“控制台”——“云服务器ECS”——点击“创建实例”——“自定义购买”或者“一键购买”
“地域”:可以就近选择。一般这里还可以区分一个国内和国外的,一般在大陆里面的是需要备案,如果有域名之类的都需要备案,而大陆之外的这些服务器是不用备案。
“实例”:选择配置,CPU、内存、系统盘大小。一开始使用的话,我们可以选择最基本的最小的一个;
“镜像”:操作系统类别。这里就需要稍微的讲一下选择哪个系统会比较好一点
2、常见的服务器操作系统
-
Windows:
- Asp/Asp.net/…
- 安全性:不足
- 易用性:易用
- 性能:弱
-
Linux:
- PHP/Java/Python/Go/…
- 安全性:强
- 易用性:有难度
- 性能:强
-
部署Django:建议使用Linux
一般的服务器操作系统分为四类,这里挑两类来讲:Windows和Linux
Windows操作系统,一般用的比较多的主要是用Asp、Asp.net等编程语言做的网站,因为这些都是属于微软这一系列的。对比Linux,Windows安全性没有Linux好。
Linux主要是有一个开源的特性,所以它可以支持PHP、Java、Python等语言做的网站,安全性比较强。
所以部署django,我们建议使用Linux比较好
3、常用的Linux发行版
- Ubuntu:
- 更多支持
- apt-get
- CentOS:
- 更稳定
- yum
我们做服务器的话,这两类发行版用的比较多。他们两个很多命令都差不多,主要是有个安装软件库用到的命令不一样。
我们回到阿里云购买服务器这里。这里我们就选择Ubuntu,版本选择最新的
“公网带宽”:选择“按流量带宽”比较便宜一点,“带宽”我们可以选择10M
我的:
购买完成之后,我们可以看到云服务器是关闭的状态,可以点击“管理”,启动一下
接下来我们还要做一个事情,重密码:点击“更多”——“重置密码”。重置完之后,点击“重启”
重启完之后我们就可以远程连接到我们的实例。这里我们用ssh命令行去连接
打开git,输入ssh root@服务器的公网地址
,输入密码,回车,我们就登录进去了,登录完成之后我们就要开始一系列的准备工作。
4、安装网站运行的基础
- 代码:
- 代码运行基础:Python及相关库(Django)
- 传输代码:Git、scp、ftp
- 数据库:MySQL
安装Python:
我们在ssh命令行输入python
可以看到这里已经安装了python2.7和python3.5。这里我们最好用我们开发时候一直用的python版本(我用的是Python3.7)。
安装python之前我们还需要做一些处理:
# 安装python3.6
apt-get install software-properties-common # 安装软件库的来源
add-apt-repository ppa:jonathonf/python-3.7 # 增加ppa仓库
apt-get update # 更新软件源
apt-get install python3.7 # 安装python3.7
# 创建软链接
cd /usr/bin
# rm python
# ln -s python3.7 python
rm python3
ln -s python3.7 python3
# 安装pip3.6
apt-get install python3-pip
pip3 install --upgrate pip
# 安装虚拟环境
pip3 install virtualenv
# 创建虚拟环境
virtualenv mysite_env
source mysite_env/bin/activate
deactivate
# 安装git
apt-get install git
# clone代码
git clone
# 安装mysql
wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
dpkg -i mysql-apt-config_0.8.10-1_all.deb
apt-get update
apt-get install mysql-server
同步数据
上传settings.py用于测试
安装mysqlclient
wget libmysqlclient-dev_8.0.11-lubuntu16.04_amd64.deb
dpkg -i libmysqlclient-dev_8.0.11-lubuntu16.04_amd64.deb
apt-get update
apt-get install libmysqlclient-dev python3.8-dev libssl-dev
测试启动
(1)安装python3.7:
在ssh命令行输入命令:
apt-get install software-properties-common # 安装软件库的来源
add-apt-repository ppa:jonathonf/python-3.7 # 加入python3.7
apt-get update # 更新软件源
apt-get install python3.7 # 安装python3.7
完成之后我们输入python
,然后按两下Tab键,可以看到有python3.7这个版本。
【遇到的问题】(输入安装的这三行命令都出现错误,不想解决了,因为本身我输入python3已经是python3.8版本了)
1)输入安装软件库来源命令时,提示“E: Unable to locate package software-properties-common
”。解决办法:输入sudo apt-get update
,
2)输入命令add-apt-repository ppa:jonathonf/python-3.7
出现错误:
解决方法:
(2)创建软链接
不过我们要注意下,这里有个python3是3这个版本的快捷命令,我们可以先查一下它是什么版本,输入python3 -V
,发现是python3.5,这里我们可以python3换成3.7。这里的python3是一个软链接,我们可以理解为一个快捷方式,我们可以输入which python3
查看这个软链接在哪里(which
是一个找到文件来源的命令),然后我们cd到这个目录cd /usr/bin
,删除这个python3 rm python3
,然后用ln
创建这个软链接ln -s python3.7 python3
把3.7这个软链接给到python3,完成之后我们输入python3 -V
,可以看到变成了python3.7(同理,python这个也可以同样进行指定)
然后退出该目录cd /
(3)安装pip3.7(这里我已经是python3.8对应的pip3了)
升级pip:python3.8 -m pip --upgrade pip
或pip3 install --upgrate pip
(4)安装虚拟环境
(5)创建虚拟环境
我们可以在根目录或者root用户下创建都可以,比如我们选择home目录下创建虚拟环境
输入cd home/
进入到home目录,
输入virtualenv mysite_env
创建虚拟环境,输入ls
可查看,
输入cd mysite_env
进入到这个目录,输入ls
可以看到虚拟环境下有哪些文件,
输入source mysite_env/bin/activate
激活虚拟环境
激活之后我们可以查看一下Python版本,(这里我们可以指定Python版本:可以在创建虚拟环境的时候就指定virtualenv mysite_env python3=python3.7
)。接着我们用pip查看一下安装有哪些库pip -V
,pip list
,这里只有三个基本库而已
(6)安装git
那我们现在虚拟环境有了,接下来一步我们就要把代码拿过来,那么我们就需要git,之前我们用git把代码放到github上面,让我们可以随时push和pull。这里我们可以先安装git(这里默认是没有安装的)
输入apt-get install git
安装完git之后,我们要把这个项目克隆下来。打开github,找到我们之前的项目,复制链接url:https://github.com/zf0912/mysite.git,然后回到git,我们退回到home目录cd ..
,然后输入git clone https://github.com/zf0912/mysite.git
,这样就把github上面的代码克隆到了我们服务器上面。
这里我们就需要执行一个命令,安装我们项目相关的库,之前我们需要的库都放到requirements.txt文件里了,可以输入vim requirements.txt
查看一下。这里我们输入pip install -r requirements.txt
回车, 就能把这个文件里面相关的库一键安装了。安装完成后,我们可以输入pip list
进行查看。
这里我们还少了数据库,我们使用的是MySQL,这里默认是没有的,所以我们需要安装下MySQL。
安装MySQL需要一个文件,这里一种方法是我们可以下载到本地,再传给服务器;还有一种方法是服务器上直接下载,我们复制这个链接https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb。
cd到home目录cd home/
,然后输入wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
,下载这个文件到home这个目录,
再输入命令dpkg -i mysql-apt-config_0.8.15-1_all.deb
,然后选择第一个 mysql-8.0,选择ok(按Tab键简写选择)。那现在8.0这个版本我们已经选择进去了,
我们更新一下软件源apt-get update
,
接着安装mysql-server apt-get install mysql-server
,输入两次密码(自己定义),点击“ok”,然后是选择默认加密插件,我们可以选择第二个 5.7这个版本,安装。
安装完成之后,我们可以登录mysql看看
输入mysql -u root -p
,输入密码。然后输入show databases;
,成功。
另外我们发现我们不用像上次课对mysql进行一系列的配置,它已经配置好了。
这里我们可以根据还是上节课的内容,给它创建一个新用户、创建一个专属于这个项目的数据库之类的
输入CREATE DATABASE mysite_db DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;
,创建数据库,输入show databases;
可查看
然后输入create user 'zzzf'@'localhost' identified by 'abc123456';
创建用户;
然后输入grant all privileges on mysite_db.* to 'zzzf'@'localhost';
给这个数据库设置权限,数据库权限给到zzzf这个用户,
输入命令flush privileges;
刷新权限。
这样,zzzf这个用户就拥有这个数据库的全部权限了。
我们可以输入exit
退出来,然后用zzzf这个用户登录mysql -u zzzf -p
,输入密码,然后show databases;
查看数据库,就可以看到有了mysite_db这个数据库(也可以直接登录时指定数据库mysql -u zzzf -p mysite_db
)
数据库我们创建了一个专门的用户去管理这个数据,而我们的服务器最好也能创建一个用户专门管理这个项目,创建用户的方法参考
这里我们要把数据导入进去,导入数据有点麻烦,我们可以先在本地把数据给导出,然后再导入。
在本机电脑上,cmd进入mysite_env,输入mysqldump -u zzzf -p mysite_db > data.sql
,将数据导出到指定自定义文件data.sql,我们再把这个文件放到服务器,再在服务器上执行一个导入的操作就可以。
这里就有一个问题,我们怎么把一些额外的文件传给服务器,我们可以用命令scp
,它需要两个参数:源文件位置、要传到哪个地方。然后冒号,后接指定保存的路径
新开一个git窗口,在本地mysite_env目录下,打开git,输入scp data.sql root@47.113.107.189:/home/data.sql
,回车,输入服务器密码。
上传成功之后,我们登陆云服务器,cd到home文件夹,输入ls
查看,可以看到有data.sql这个文件。
那现在我们要把这个文件导入到数据库:
我们输入mysql -u root -p mysite_db
,输入数据库密码admin,进入到数据库。然后输入source data.sql;
,将数据导入数据库。
可以输入show tables;
查看全部的表,可以看到全部表已经导入进来了。输入exit
退出数据库
这里我们还少了一个settings.py文件,因为为了保密措施,我们没有把settings.py放到github上面。现在我们可以把这个文件传给服务器
实际上到这里,我们相关的操作已经都完成了。
这里,还有一个跟python相关的库mysqlclient没有安装,我们可以安装一下
输入source ../mysite_env/bin/activate
激活虚拟环境,输入pip install mysqlclient
进行安装。出现一个错误“ OSError: mysql_config not found”,这是因为还有安装另外两个东西,
第一个 libmysqlclient:
在mysql下载页面,得到复制的链接地址 https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient21_8.0.21-1ubuntu20.04_amd64.deb
我们输入wget https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient21_8.0.21-1ubuntu20.04_amd64.deb
,下载放到home这个目录下,
再输入dpkg -i libmysqlclient21_8.0.21-1ubuntu20.04_amd64.deb
,把它加载到源文件库里
再输入apt-get update
更新一下
再输入apt-get install libmysqlclient-dev
进行安装
第二个 我们要安装python3.8-dev(上面最后一步我们已经安装了python3.8-dev)
输入apt-get install python3.8-dev
安装完成之后,我们就可以输入pip install mysqlclient
进行安装
(可能会出现如下错误信息:)
我们一个个来
输入apt-get install openssl
安装openssl,和openssl的开发包 apt-get install libssl-dev
,
至此,我们所需要的库都安装完毕。我们可以进入到mysite,输入python manage.py runserver 0.0.0.0:8000
启动服务(其中0.0.0.0表示可以通过任意ip地址访问到)
我们通过购买的这个服务器的公网ip进行访问,访问47.113.107.189:8000
这里访问不了,可能是端口号的问题,因为阿里云有个安全组,安全组默认是没有8000这个端口。
我们可以换成80这个端口号,可以看到能访问得到,不过会抛出一个错误“You may need to add’’ to ALLOWED_HOSTS.”
这个我们只需要设置一下就行,输入vim settings.py
进入编辑,修改settings.py:ALLOWED_HOSTS = ['*']
(*就代表全部ip地址它都允许),按ESC,输入:wq
保存并退出。
【注意】这里如果url无法访问,是因为阿里云那里也要设置安全组才行,要设置80,43,21,20000/30000这些端口才能满足要求。做法如下:
然后重新启动服务,访问47.113.107.189:80。就能通过ip地址访问得到我们部署到服务器的网站了
下节课内容:
5、部署网站
- 使用web服务器软件完成部署
- web服务器软件:可以向浏览器等web客户端提供文档
- Apache、Nginx、IIS