100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Django的web项目部署至Centos7服务器并配置域名访问

Django的web项目部署至Centos7服务器并配置域名访问

时间:2023-12-25 17:10:39

相关推荐

Django的web项目部署至Centos7服务器并配置域名访问

配置服务器

本教程使用的本地环境为 Windows 10,服务器环境为 CentOS 7(64 位)。(如果你还不知道服务器是什么的话,我简单解释一下服务器其实就是一台在其他地方运行的主机。这台主机可能没有显示器,就躺在某个服务器厂的架子上。如果你还没有用过服务器,我建议如果仅仅是想搭建一些小的网站的话,可以购买阿里云的学生机服务器,一个月只要9.5。)如果你的环境和我的有所差异(比如 Ubuntu)导致一些命令无法执行,将这些命令转换为你所在环境的命令执行即可,重点在于理解每一步的作用,这样无论在何种环境你都能成功地完成部署,而不是机械地复制粘贴命令。

远程登录到服务器

服务器通常位于云端,需要使用远程登录工具登录后才能对服务器进行操作。我使用的是阿里云的学生机服务器。可以直接平台内的远程连接完成登录

远程登录之后的样子如图所示。

创建一个超级用户

顺利连接到远程服务器了,如果是一台全新服务器的话,通常我们是以 root 用户登录的。在 root 下部署代码不够安全,最好是建一个新用户(如果你已经以非 root 用户登录的话可以跳过这一步)。下面的一些列命令将创建一个拥有超级权限的新用户(把 yangxg 替换成你自己想要的用户名,我这里取我的名字拼音 yangxg):

# 在 root 用户下运行这条命令创建一个新用户,Mrhuo 是用户名# 选择一个你喜欢的用户名,不一定非得和我的相同root@server:~# adduser Mrhuo# 为新用户设置密码# 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可root@server:~# passwd Mrhuo# 把新创建的用户加入超级权限组root@server:~# usermod -aG wheel Mrhuo# 切换到创建的新用户root@server:~# su - Mrhuo# 切换成功,@符号前面已经是新用户名而不是 root 了Mrhuo@server:$

新用户创建并切换成功了。如果是新服务器的话,最好先更新一下系统,避免因为版本太旧而给后面安装软件带来麻烦。运行下面的两条命令:

Mrhuo@server:$ sudo yum updateMrhuo@server:$ sudo yum upgrade

更新SQLite3

如果您的数据库不是采用的SQLite可以跳过这段。

为了方便,我们博客使用了 SQLite3 数据库,django 2.2 要求 SQLite3 数据库版本在 3.8.3 以上,而 CentOS 7 系统自带版本低于 django 2.2 所要求的最低版本,所以首先来更新 SQLite3 的版本。

注意有可能你使用的服务器系统发行版 SQLite3 已经高于 3.8.3,这一步就可以跳过。如何查看 SQLite3 的版本呢?请执行 sqlite3 --version

# 创建 src 目录并进到这个目录Mrhuo@server:$ mkdir -p ~/srcMrhuo@server:$ cd ~/src# 下载 sqlite3 源码并解压安装Mrhuo@server:$ wget //sqlite-autoconf-3290000.tar.gzMrhuo@server:$ tar zxvf sqlite-autoconf-3290000.tar.gzMrhuo@server:$ cd sqlite-autoconf-3290000Mrhuo@server:$ ./configureMrhuo@server:$ makeMrhuo@server:$ sudo make install

小贴士:

如果 wget 命令不存在,使用 sudo yum install -y wget 安装即可。

至此 SQLite3 更新完毕,接下来安装 Python3。

安装Python3和Pipenv

CentOS 7 自带的 Python 发行版为 2.7,因此需要安装 Python3,为了兼容性,我们安装 Python 3.6.4。

首先安装可能的依赖:

Mrhuo@server:$ sudo yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

然后下载 Python 3.6.4 的源码并解压:

Mrhuo@server:$ cd ~/srcMrhuo@server:$ wget /ftp/python/3.6.4/Python-3.6.4.tgzMrhuo@server:$ tar -zxvf Python-3.6.4.tgz

最后编译安装:

Mrhuo@server:$ cd Python-3.6.4Mrhuo@server:$ ./configure LD_RUN_PATH=/usr/local/lib LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"Mrhuo@server:$ make LD_RUN_PATH=/usr/local/libMrhuo@server:$ sudo make install

注意这里安装 Python 时,Python 会依赖 SQLite3 的库,所以在 configure 时通过 LD_RUN_PATH 指定依赖的搜索目录(因为我们之前更新了 SQLite3 的版本,指定依赖搜索目录确保使用新的 SQLite3 依赖库),另外两个参数作用类似。

然后输入 python3.6 -V 和 pip3.6 -V 命令测试安装结果,输出版本号说明安装成功了。

有了 pip,就可以安装 Pipenv 了:

Mrhuo@server:$ sudo pip3.6 install pipenv

注意

这里可能会报没有pip3.6这个指令的错。因为加上sudo权限之后它的默认搜索路径是在/usr/bin下面。我们得改一下默认的搜索路径。备份原有配置,设置python默认版本号为3.xmv /usr/bin/pip /usr/bin/pip.bak再执行:ln -s /usr/local/bin/pip3.6 /usr/bin/pip最后,执行pip -V验证,如图版本变成了3.x小提示怎么查看自己的pip指令在没在/user/bin/下面呢,你可以用阿里云平台自带的查看文件树的方法,也可以使用第三方工具。比如我用的WinSCP这个工具连接本地电脑和服务器,可以通过拖拽的方式将我本地的文件移到服务器中。

这下再试试,是不是就没有报错了。如果下载得很慢的话可能是因为访问的是其他国家的服务器。所以我推荐采用国内的源。

sudo pip install -i http:/simple --trusted-host pipenv安装过程行云流水

部署代码

接下来开始准备部署代码,让我们的应用在服务上跑起来,这和在本地开发时的过程是一模一样的。不过为了将应用部署到服务器上,我们首先要对项目做一点配置,打开 settings.py,找到 ALLOWED_HOSTS,将其修改为:

blogproject/settings.py

ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '你的服务器的公网IP','.你的域名(如果有的话)']

指定了 ALLOWED_HOSTS 的值后,django 将只允许通过指定的域名访问我们的应用,比如这里只允许通过 127.0.0.1,localhost 以及 和其任意子域名(域名前加一个点表示允许访问该域名下的子域名)访问(即 HTTP 报文头部中 Host 的值必须是以上指定的域名,通常你在浏览器输入域名访问网站时,Host 的值就会被设置为网站的域名),这样可以避免 HTTP Host 头攻击。

django 项目中会有一些 CSS、JavaScript 等静态文件,为了能够方便地让 Nginx 处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于 django 项目的根目录,并且命名为 static。为了完成这些任务,需要在项目的配置文件里做一些必要的配置:

blogproject/settings.py# 其他配置...STATIC_URL = '/static/'# 加入下面的配置STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_ROOT 即指定静态文件的收集路径,这里指定为 BASE_DIR(项目根目录,在 settings.py 文件起始处定义)下的 static 文件夹。

现在的关键是把代码传到服务器上来了,方法有很多。我这里介绍两种git和WinSCP.如果你熟悉git的话那就用git上传到仓库再在服务器里拉进文件就好了。如果你不熟悉git,我推荐用WinSCP这个工具。它可以直接从本地拖拽文件置你的服务器。

第一种git

首先安装 git:

Mrhuo@server:$ sudo yum install -y git

将代码上传到 GitHub 等代码托管平台,这样我们就可以方便地把代码拉取到服务器了。Git 和 GitHub 的使用相信你已经很熟悉了,这里就不赘述过程。如果不知道如何使用地话可以自行百度相关教程。注意数据库文件不要上传!

我通常喜欢把应用代码放在 ~/apps/ 目录下,先来设置一下服务器的文件结构,用于存放应用代码等相关文件:

# 在用户目录下创建 apps 目录并进入Mrhuo@server:$ mkdir -p ~/appsMrhuo@server:$ cd ~/apps# 拉取博客代码Mrhuo@server:$ git clone /HelloGitHub-Team/HelloDjango-blog-tutorial.git

第二种WinSCP

如图真的超级简单,方便。直接连接上服务器之后拖拽就行了。

然后进入到项目根目录,安装项目依赖:

Mrhuo@server:$ cd ~/apps/HelloDjango-blog-tutorialMrhuo@server:$ pipenv install --deploy --ignore-pipfile

然后创建一下数据库:

如果你部署项目的时候没有发送你的数据库文件的话,才需要创建数据库。否则就不需要。换句话说就是如果你的项目根目录下已经有了sqlite3.db这个文件的话就不需要做次步了。Mrhuo@server:$ pipenv run python manage.py migrate

启动开发服务器:

Mrhuo@server:$ pipenv run python manage.py runserver 0.0.0.0:8080

这里我们启动开发服务器时指定了服务器运行的 ip 和端口,这将允许通过公网 ip 的 8080 端口访问我们的博客。

访问 ip:8080,可以看到访问成功(其中 ip 为你服务器的公网 ip)。

访问失败?

如果通过ip:8080访问失败的话首先看你运行完pipenv run python manage.py runserver 0.0.0.0:8080是否显示已成功部署了。然后再检测你的服务器的安全组是否打开。

如图,这里有几个端口是需要你手动配置的。授权对象0.0.0.0代表所有其他的电脑都允许访问你当前的这个端口。

如何通过域名访问

拥有一个自己的域名,可以去阿里云注册一个域名,当然也可以从别人那里买。注意注册的时候要完成实名认证,以及模板创建。这些在你购买的时候都会显示在页面上的。.com类型的域名是在国外的不需要备案。而.cn的域名是需要国内备案的可能需要1-3天。购买成功后,再去解析你的域名。意思就是将你的域名与你的服务器的ip地址绑定。

阿里云域名控制台

阿里云域名解析

好啦。接下来你就可以直接通过你的域名来访问你的网站啦。

尾声

这篇教程是我在参考别人的教程时所遇到的一些问题,希望能给大家带来一些帮助!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。