从零部署 Django 项目至云服务器

过去半个月,成功实现了将 Python Django 搭建的 API 本地项目部署到阿里云服务器。因为是初次尝试部署服务器、注册域名等,甚至也是自己独立去使用 Linux 系统,在整个部署过程中没来得及做整理。

现在功能基本实现,为了还原从零部署项目到云服务器的全过程,刚新下单了腾讯云服务器和新的域名用于演示整个部署流程。

环境:电脑是 macOS 系统,云服务器选用 CentOS 7 系统

云服务器

首先云服务器选择,已完成部署的是双11时选择阿里云最便宜的一年服务器(最低配置89元);本文用于演示的是腾讯云 0元试用15天(加1元续15天)的固定配置的腾讯云 CVM 1核1G1M服务器, CentOS 7 系统,配置如下:

服务器详情
在选购配置完合适的服务器后,可以在控制台中找到服务器相关的信息:
服务器信息
注意左上角选到你购置的实例区域,服务器信息中最重要的是红框圈出的服务器 ip,(公)表示是公网对外 ip。此处可以在微信端腾讯云助手中查到服务器默认账号、初始密码的登陆信息。为了方便,我们可以先把初始密码改掉,改密码需要将实例关机、改完记得服务器开机:
修改初始密码
记好自己的服务器 ip 和登陆密码,在 mac 上打开终端:

sudo ssh 175.24.134.227

输入后,会先提示输入 Password,这个是因为命令中使用了 sudo,密码是电脑用户的开机密码,这样才有权限执行该命令。
之后是提示 [email protected]’s password 密码,即刚我们改过的服务器实例密码。
成功登陆后终端用户会变成该服务器相关的 root 用户:
终端截图
输入下 python,可以看到直接进入了 python 2.7.5 环境,系统是自带着 Python2.7.5 。

CentOS 7 上安装 Python 3.7.5

因为 Django 项目需要以及个人习惯用 Python 3,首先给 CentOS 7 环境中装上 Python 3.7.5。

但是有一点要注意!CentOS 很多环境自带的软件及相关命令都是依赖其自身配备的 Python 2 的,也就是说,我们下载了 Python 3 之后,能正常使用就好,不要贸然修改软连接(也就是window系统中的环境变量或路径),修改之后我们确实可以直接通过 Python 进入 Python 3 环境了,但是其它依赖 Python 2 的命令都会导致报错等,所以这里建议安装完 Python 3 后,不要贸然修改软连接将 Python 命令绑定到 Python 3 上去。

刚我们已经通过 sudo ssh 服务器 ip + 输入密码连上了服务器,保持登陆继续安装 Python 3.7.5:

  1. 安装依赖包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

  1. 安装与 pip 相关的依赖包
yum install libffi-devel -y
  1. 输入以下命令在服务器上下载 Python3.7.5 压缩包
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

如果想下载其它版本,可以先在 https://www.python.org/ftp/python 地址中去定位到目标版本,将其后的版本号与文件名称对应上,再通过 wget 链接下载即可。

  1. 现在安装压缩包已经下好,依次执行如下命令:
tar -zxvf Python-3.7.5.tgz
cd Python-3.7.5
./configure
make&&make install

这时在命令行中输入 python3 如果看到进入的确实是新安装的 Python 3.7.5 环境,说明安装成功。按 ctrl+d 或者输入 exit() 退出 python 环境。
python3
输入 pip3 list 也可以看到 pip 是正常的。

返回上层目录,将安装 Python 下载的压缩包和文件删掉

cd ..
rm -rf Python-3.7.5.tgz
rm -rf Python-3.7.5/

再提醒一遍,如果不熟悉,别跟着安装帖子一股脑把 python 软连接改掉,之后会导致报错的!!!

将本地 Django 项目代码上传至服务器

接着我们上一篇在电脑本地实现的 Django 项目演示,项目名及所在文件夹是 tedxapi,在 Finder 中找到该文件夹。

项目代码上传服务器流程

接下来我们需要做的流程是:

  1. 将必要的项目代码上传至 GitHub
  2. 将 GitHub 上的代码拉取到云服务器上
  3. 将项目中涉及隐私设置的代码文件单独上传到服务器中

编辑.gitignore文件

首先,在 tedxapi 项目文件夹中新建 .gitignore 文件(可以用任意编辑器比如 pycharm)在其内编辑如下代码并保存:

*.pyc
__pycache__
myvenv
db.sqlite3
.DS_Store
myapi/myapi/settings.py

这段代码的意思是上传 git 时,忽略编辑的这些文件。本项目中 tedxapi/myapi/myapi/settings.py 涉及到密码等,就忽略上传 GitHub,之后自己再单独上传到服务器。

安装 git 工具

首先是本地电脑系统,根据 https://git-scm.com/ 指引,下载与系统对应的 git 工具。

然后在云服务器终端中通过 yum install 命令安装 git:

yum install git

注意,在 yum install 很多包时,中途会出现 “Is this ok [y/d/N]” 的提示信息,此时输入 y 敲回车键继续下载即可。

GitHub 准备

首先是准备好你的 GitHub 账号,新建一个 repository 仓库,其实新建完之后 GitHub 页面是有相关的命令指引的,可以参考:

github 指引
注意记下自己新建的仓库地址,例如我的是 https://github.com/pengfexue2/tedxmy.git
当然更省事的是需要时直接复制页面中的命令~

本地代码上传 GitHub

在 Finder 中找到本地项目文件夹,“右键-服务-新建位于文件夹位置的终端窗口”:
打开终端
在该文件夹位置打开终端(注意:不要与服务器的终端窗口弄混),依次执行如下命令初始化配置:

git init
git config --global user.name ted(这里输入自己的名字)
git config --global user.email [email protected](自己的邮箱)

之后可以通过 git status 查看状态:

git status

git add 命令将文件添加到暂存区:

git add --all .

*注意最后有个 “.”

git commit 命令将暂存区文件提交到本地到版本库:

git commit -m "My Django API, first commit"

git remote add 命令添加远程仓库:

git remote add origin https://github.com/pengfexue2/tedxmy.git

这里 origin 之后的即刚刚 GitHub 新建仓库后地址。

另如果之前将该项目推送到别的仓库,那么执行此命令会报错 “fatal: remote origin already exists.”,解决方法是先执行 “git remote rm origin”,再执行此命令添加仓库。

git push 命令将本地版本库推送到远程版本库中:

git push -u origin master

等待上传进度完成,此时去 GitHub 新建的仓库查看,代码已经被传过去了。此时可以选到 GitHub 上的 clone or download 拿到该项目的地址链接。

GitHub 代码拉取到云服务器

此时回到云服务器的终端窗口,如果之前关掉了,就重新 sudo ssh ip地址 连上去,通过 git clone 命令将 GitHub 上代码文件拉取到根目录中:

git clone https://github.com/pengfexue2/tedxmy.git

等待拉取完毕,可以看到上传至 GitHub 的代码已经被同步到服务器上了。

注意到下载后的文件夹名字与 GitHub 仓库名字一致,服务器中可以先用 mv 命令将项目名称由 tedxmy 改回 tedxapi:

 mv tedxmy tedxapi

这样服务器上的代码就与本地差不多一致了。

本地文件上传至云服务器

有些涉及密码隐私设置的代码文件,不想通过 GitHub,可以直接上传至云服务器。Mac 直接上传文件至服务器方法如下:

选中终端,左上角菜单栏中 shell - 新建远程连接:

新建远程连接
弹出的远程连接窗口中:

  1. 选择安全文件传输(sftp)
  2. 用户填root
  3. 最下一栏填 sftp root@服务器ip地址
  4. 点击连接,弹出的终端中输入服务器密码,即可建立与服务器的 sftp 连接
    在这里插入图片描述
    此处我们要将 tedxapi/myapi/myapi/settings.py 文件上传至该服务器。
  • 首先查找下该文件在本地的路径,例如我的是 /Users/ted/tedxapi/myapi/myapi/settings.py
  • 然后确定云服务器中该文件要部署的位置 /root/tedxapi/myapi/myapi
  • 在建立的 sftp 终端中输入 “put 本地文件路径 远程路径”
put /Users/ted/tedxapi/myapi/myapi/settings.py /root/tedxapi/myapi/myapi

即可看到文件被成功上传至指定位置。

服务器上更新 sqlite3

由于 CentOS 上配置的 sqlite3 版本较低,需要更新下以防之后报错,在服务器终端先回到根目录,通过连接下载最新的 sqlite3 压缩包

cd ~
wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz

对压缩包解压缩:

tar -zxvf sqlite-autoconf-3300100.tar.gz 

进入解压缩生成的文件夹内:

cd sqlite-autoconf-3300100/
./configure --prefix=/usr/local
make && make install

接下来我们检查下目前服务器上 sqlite3 版本:

# /usr/local/bin/sqlite3 为新安装的,版本是3.30
[root@VM_0_11_centos sqlite-autoconf-3300100]# /usr/local/bin/sqlite3 --version
3.30.1 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b

# /usr/bin/sqlite3 为系统自带的,版本3.7
[root@VM_0_11_centos sqlite-autoconf-3300100]# /usr/bin/sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

# 直接查看环境变量下的 sqlite3 版本,已经被更新为3.30
[root@VM_0_11_centos sqlite-autoconf-3300100]# sqlite3 --version
3.30.1 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b

# 将自带的 sqlie3 命名为 sqlite3_old
[root@VM_0_11_centos sqlite-autoconf-3300100]# mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
# 建立软连接,使系统自带sqlite3路径 指向 新下载的版本
[root@VM_0_11_centos sqlite-autoconf-3300100]# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
# 查看系统自带 sqlite3 版本,被更新成 3.30
[root@VM_0_11_centos sqlite-autoconf-3300100]# /usr/bin/sqlite3 --version
3.30.1 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b

最后,将路径传递给共享库:

export LD_LIBRARY_PATH="/usr/local/lib"

同时,将该 export语句写入 ~/.bashrc 文件中设置开机自启动执行:

vim  ~/.bashrc 

在弹出的 vim 编辑区中插入该语句并保存退出。

然后返回上层文件夹将安装的压缩包和配置文件夹全部删掉:

cd ..
rm -rf sqlite-autoconf-3300100.tar.gz
rm -rf sqlite-autoconf-3300100/

服务器上配置 Python 虚拟环境 virtualenv

服务器终端中进入项目文件夹,执行如下命令:

python3 -m venv myvenv

然后可以通过 ls 命令可以看到文件夹内生成了一个 myvenv 文件夹,然后执行如下命令启动虚拟环境:

source myvenv/bin/activate

可以看到之后的命令前面出现了 (myvenv) 即代表配置虚拟环境成功。此时再输入 python 即可直接进入 python3 环境(因为我们是用 python3 建立的该虚拟环境)。至于配置虚拟环境的好处,我这就不做赘述。
先更新下pip, 然后安装 Django、RestFramework

pip install --upgrade pip
pip install django
pip install djangorestframework

进入到 myapi 文件夹并执行 migrate 命令来创建数据库

cd myapi
python manage.py migrate

然后运行服务器:

python manage.py runserver 0.0.0.0:8000

可以看到如下提示信息:

(myvenv) [root@VM_0_11_centos myapi]# python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 07, 2019 - 10:53:17
Django version 3.0, using settings 'myapi.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

此时打开浏览器,将 http://0.0.0.0:8000/ 中的0.0.0.0换成服务器 ip,即可访问到部署到服务器上的 Django API 了。例如我的访问地址为 http://175.24.134.227:8000/api 首页
但是点击页面上的 website 和 weibo 链接发现 api 数据为空,这是因为我们还没有在服务器上执行 爬虫代码向数据库塞入数据,接下来我们来进行爬虫抓取数据。

服务器上爬虫取数据

contrl + c 退出刚启动的 0.0.0.0:8000 服务器,myapi 中文件夹中的 get_website.py 即爬取知乎和微博热榜数据的代码。因为爬虫代码中用到了 requests 模块和 bs4 模块,我们需要在虚拟环境中安装:

pip install requests
pip install Beautifulsoup4

安装完毕后,仍是在虚拟环境中执行爬虫代码:

python get_website.py

如果看到 “zhihu done”、“weibo done” 提示信息代表爬取顺利。

然后重启服务器,取看下 Django API 接口有无更新:

python manage.py runserver 0.0.0.0:8000

继续访问 http://175.24.134.227:8000,点击页面中的知乎热榜链接:http://175.24.134.227:8000/website/

可以看到数据被加载到 Django API 中了!

知乎热榜
以及 http://175.24.134.227:8000/weibo/ 对应的微博热榜 API:
微博热榜
至此,本地 Django 项目部署到云服务器的第一步完成了,即我们在服务器上实现了和本地同样的 Django API 展示功能。

但是,后续仍需关于 web 的配置以使得服务器上的 Django API 可以通过域名访问,以及自动化定时执行爬虫更新数据等,后续我将继续整理相关流程。

感谢阅读~

最后,也向你推荐我的微信公众号 TEDxPY,内容涉及 Python、小程序等,来找我哦~

公众号 TEDxPY

文章参考链接:

  1. https://wechat.python666.cn/static/djangogirl/djangogirl.html?page=6
  2. https://blog.csdn.net/qq_36288025/article/details/82534508
  3. https://blog.csdn.net/qq_39969226/article/details/92218635
  4. https://jingyan.baidu.com/article/ae97a64672d076fbfc461d29.html
发布了70 篇原创文章 · 获赞 46 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40796925/article/details/103431356