欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

建立网站用nginx-gunicorn部署django项目的过程

程序员文章站 2022-07-15 11:38:05
...

前提:有可以在本地运行的django项目。

购买云服务器

当你有了自己写的django项目,你有没有想过如何将你的项目提交到服务器上,让其他人都可以访问。这个时候你就要考虑购买一个云服务器实现这个想法。个人推荐阿里云服务器,如果你是学生,阿里云还有云翼计划,折扣力度更大。价格仅需10元一个月。

https://promotion.aliyun.com/ntms/campus2017.html建立网站用nginx-gunicorn部署django项目的过程

在此请选择系统镜像,ubuntu系统。

购买流程在此不过多叙述,进入后直接根据步骤来就可以了。购买后的样子,本人购买的是轻量应用服务器。

建立网站用nginx-gunicorn部署django项目的过程

进入服务器概览:

建立网站用nginx-gunicorn部署django项目的过程

可以看到ip地址一栏有公网ip 和内网ip,公网ip就是外部可以访问的IP地址,在旁边有重置密码,设置的密码为你远程连接的密码以及root用户的密码。

这个时候就可以尝试远程连接服务器了,笔者在这里用的是xshell远程连接,大家可以百度下载。

远程连接云服务器

进入xshell,选择 文件-》新建,①在主机一栏输入你的公网ip,默认端口22不要理会。②点击用户身份验证。用户名为root,密码为之前重置密码设置的密码。完成后点确定,以后可以直接在文件-》打开,快捷打开你的云服务器。

建立网站用nginx-gunicorn部署django项目的过程建立网站用nginx-gunicorn部署django项目的过程

远程进入云服务器,大概是这个样子。如果你的主机名为乱序而且之后经常报错:主机名无法识别,请更改/etc/hostname,以及/etc/hosts文件,在此提一下。

建立网站用nginx-gunicorn部署django项目的过程

创建新的用户

因为使用root用户不安全,所以创建一个新用户来执行之后的步骤:

# 在 root 用户下运行这条命令创建一个新用户,siyang 是用户名
aaa@qq.com:~# useradd -m -s /bin/bash siyang

# 把新创建的用户加入超级权限组
aaa@qq.com:~# usermod -a -G sudo siyang

# 为新用户设置密码
aaa@qq.com:~# passwd xxxxx

# 切换到创建的新用户
aaa@qq.com:~# su  siyang

# 切换成功,@符号前面已经是新用户名而不是 root 了
aaa@qq.com:~$

下载相关软件

创建成功后,更新ubuntu系统,以及下载git,nginx,python3等软件

#更新系统
aaa@qq.com:~$ sudo apt-get update
aaa@qq.com:~$ sudo apt-get upgrade
#下载软件
aaa@qq.com:~$ sudo apt-get install nginx
aaa@qq.com:~$ sudo apt-get install git
aaa@qq.com:~$ sudo apt-get install python3 python3-pip
aaa@qq.com:~$ sudo apt-get install virtualenv

在此提一下virtualenv,它的作用为为你的django项目创建一个虚拟环境,因为每一个项目所使用的python,第三方包的版本都可能不一样,所以为了版本上不出错误,使用虚拟环境进行操作。后续有它的操作。

启动nginx服务

aaa@qq.com:~$ sudo service nginx start

运行后外部使用公网ip,浏览器登录,如果看到了下面的画面就说明成功开启了

建立网站用nginx-gunicorn部署django项目的过程

将外部项目导入云服务器

导入前的准备工作

你需要将你的项目内setting.py文件修改几个位置。

blogproject/settings.py

DEBUG = False
ALLOWED_HOSTS = ['.你的域名','你的公网ip']

#.你的域名:例如 .siyang.com,最开头一个点说明匹配此域名的所有二级域名,
如果写的是www.siyang.com,那么只允许这一个域名访问。如果没有域名,可以不填。
blogproject/settings.py


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

将你外部项目的环境列表以文件形式写入项目

用cmd进入外部项目,执行下面命令,这里需要提一下,如果你外部的python装了很多跟这个项目没有关系的库,请根据你的记忆在requirement.txt中选择删掉。

pip freeze >requirements.txt

将你的项目导入github中

使用github外部导入,云服务器内导出很方便。不会github的可以百度怎么将项目导入github。

我们需要创建一个文件夹存放项目站点

#创建站点文件夹
aaa@qq.com:~$ mkdir /home/siyang/site
aaa@qq.com:~$ cd /home/siyang/site
#创建项目文件夹
aaa@qq.com:/home/siyang/site$ mkdir 你的项目名字

这个时候就要用到virtualenv建造虚拟环境了

aaa@qq.com:/home/siyang/site$ cd 你的项目名字
#建造虚拟环境,在这里选择python3版本,根据你项目的版本选择,默认为python2
aaa@qq.com:/home/siyang/site/你的项目名字$ virtualenv --python=python3 env

建造完后你会发现"你的项目名字"多了一个env文件夹。

进入虚拟环境

aaa@qq.com:/home/siyang/site/你的项目名字$source env/bin/activate
#如果没问题,进入之后就是这个样子
(env) aaa@qq.com:~/home/siyang/site/你的项目名字$

系统默认的Python版本为2,进入虚拟环境这个时候的python版本就为3了

从github导出项目

(env)aaa@qq.com:/home/siyang/site/你的项目名字$ git clone https://github.com/xxxx/xxxxx.git

#https://github.com/xxxx/xxxxx.git 为外部存在github项目的地址。

现在"你的项目名字"就有2个文件夹,一个为env,一个为github(外部项目,之后都以"外部项目"称呼)。

现在你的项目结构为

site\
    你的项目名字\
        env\
        外部项目\
             

虚拟环境Python依赖

将外部项目所用到的Python包进行安装

(env)aaa@qq.com:/home/siyang/site/你的项目名字$ pip install-r 外部项目/requirement.txt

收集静态文件

(env)aaa@qq.com:/home/siyang/site/你的项目名字/外部项目$ python manage.py collectstatic

生成数据库

这里使用的是mysql数据库,ubuntu系统并没有mysql所以需要安装。会提示你设置数据库密码。

sudo apt-get install mysql-server

导入数据库文件

(env)aaa@qq.com:/home/siyang/site/你的项目名字/外部项目$ python manage.py migrate

创建超级用户

(env)aaa@qq.com:/home/siyang/site/你的项目名字/外部项目$ python manage.py createsuperuser

配置 Nginx

先在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件,文件名就选择项目名字。写上下面的配置内容:

/etc/nginx/sites-available/你的项目名字

server {
    charset utf-8;
    listen 80;
    server_name 公网ip; ①

    location /static { ②
        alias /home/yangxg/sites/你的项目名字/外部项目/static; 
    }

    location / { ③
        proxy_set_header Host $host;
        proxy_pass http://内网ip:端口;
    }
}

①这里的公网ip是没有域名的情况下使用的,如果有域名请填写域名,nginx会根据server_name得知访问的是哪个项目。

②nginx拦截静态文件,nginx来调用静态文件。

③其他访问走这个路线。之中的内网ip:端口,端口为选择没有占用的最好。

建立网站用nginx-gunicorn部署django项目的过程

/etc/nginx/sites-available是存放当前的server配置, 在这里修改

/etc/nginx/sites-enabled是**并使用的server配置

所以我们需要创建一个链接到/etc/nginx/sites-enabled

(env)aaa@qq.com/etc/nginx/sites-available$:ln -s /etc/nginx/sites-available/你的项目名字 /etc/nginx/sites-enabled/你的项目名字
#这里的二个路径必须写绝对路径

然后我们回到/home/siyang/site/你的项目名字/外部项目

gunicorn操作

安装gunicorn,开启服务

(env)aaa@qq.com:/home/siyang/site/你的项目名字/外部项目$pip install gunicorn
(env)aaa@qq.com:/home/siyang/site/你的项目名字/外部项目$gunicorn -b 内网ip:端口 项目名字.wsgi:application
#这里的 项目名字 为存放setting.py文件的文件夹

这个时候外部访问 公网ip 就可以看到你的项目了

后期补充

①如果你最后访问公网ip仍然是welcome to nginx !请删掉/etc/nginx/sites-available/下的default文件

②更改nginx文件后请重启nginx

③只用公网ip进行学习没问题,但是局限性很大,最好购买个域名。但是国内网站域名审核很严格,需要备案(不收费),根据情况选择,选择域名最好后缀选择下,因为国内有些后缀是不能备案的,所以买了白买,请注意。

④在此没有使用域名,是因为博主正在网站备案,域名审核。暂时无法使用。

最后的话:

这篇博客是我前些时候研究django部署问题,然后从网络上搜索,找到一篇其他大神写的教程,加以学习,并从中找到不足之处加以完善,最后总结出来的结果。属于偏向于新手的教程,博主也在共同学习。如果上述流程有哪些错误请及时留言提出。谢阅。