前提:有可以在本地运行的django项目。
当你有了自己写的django项目,你有没有想过如何将你的项目提交到服务器上,让其他人都可以访问。这个时候你就要考虑购买一个云服务器实现这个想法。个人推荐阿里云服务器,如果你是学生,阿里云还有云翼计划,折扣力度更大。价格仅需10元一个月。
https://promotion.aliyun.com/ntms/campus2017.html
在此请选择系统镜像,ubuntu系统。
购买流程在此不过多叙述,进入后直接根据步骤来就可以了。购买后的样子,本人购买的是轻量应用服务器。
进入服务器概览:
可以看到ip地址一栏有公网ip 和内网ip,公网ip就是外部可以访问的IP地址,在旁边有重置密码,设置的密码为你远程连接的密码以及root用户的密码。
这个时候就可以尝试远程连接服务器了,笔者在这里用的是xshell远程连接,大家可以百度下载。
进入xshell,选择 文件-》新建,①在主机一栏输入你的公网ip,默认端口22不要理会。②点击用户身份验证。用户名为root,密码为之前重置密码设置的密码。完成后点确定,以后可以直接在文件-》打开,快捷打开你的云服务器。
远程进入云服务器,大概是这个样子。如果你的主机名为乱序而且之后经常报错:主机名无法识别,请更改/etc/hostname,以及/etc/hosts文件,在此提一下。
因为使用root用户不安全,所以创建一个新用户来执行之后的步骤:
# 在 root 用户下运行这条命令创建一个新用户,siyang 是用户名
root@Room:~# useradd -m -s /bin/bash siyang
# 把新创建的用户加入超级权限组
root@Room:~# usermod -a -G sudo siyang
# 为新用户设置密码
root@Room:~# passwd xxxxx
# 切换到创建的新用户
root@Room:~# su siyang
# 切换成功,@符号前面已经是新用户名而不是 root 了
siyang@Room:~$
创建成功后,更新ubuntu系统,以及下载git,nginx,python3等软件
#更新系统
siyang@Room:~$ sudo apt-get update
siyang@Room:~$ sudo apt-get upgrade
#下载软件
siyang@Room:~$ sudo apt-get install nginx
siyang@Room:~$ sudo apt-get install git
siyang@Room:~$ sudo apt-get install python3 python3-pip
siyang@Room:~$ sudo apt-get install virtualenv
在此提一下virtualenv,它的作用为为你的django项目创建一个虚拟环境,因为每一个项目所使用的python,第三方包的版本都可能不一样,所以为了版本上不出错误,使用虚拟环境进行操作。后续有它的操作。
siyang@Room:~$ sudo service nginx start
运行后外部使用公网ip,浏览器登录,如果看到了下面的画面就说明成功开启了
你需要将你的项目内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。
我们需要创建一个文件夹存放项目站点。
#创建站点文件夹
siyang@Room:~$ mkdir /home/siyang/site
siyang@Room:~$ cd /home/siyang/site
#创建项目文件夹
siyang@Room:/home/siyang/site$ mkdir 你的项目名字
这个时候就要用到virtualenv建造虚拟环境了
siyang@Room:/home/siyang/site$ cd 你的项目名字
#建造虚拟环境,在这里选择python3版本,根据你项目的版本选择,默认为python2
siyang@Room:/home/siyang/site/你的项目名字$ virtualenv --python=python3 env
建造完后你会发现"你的项目名字"多了一个env文件夹。
进入虚拟环境
siyang@Room:/home/siyang/site/你的项目名字$source env/bin/activate
#如果没问题,进入之后就是这个样子
(env) siyang@Room:~/home/siyang/site/你的项目名字$
系统默认的Python版本为2,进入虚拟环境这个时候的python版本就为3了
从github导出项目
(env)siyang@Room:/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)siyang@Room:/home/siyang/site/你的项目名字$ pip install-r 外部项目/requirement.txt
收集静态文件
(env)siyang@Room:/home/siyang/site/你的项目名字/外部项目$ python manage.py collectstatic
生成数据库
这里使用的是mysql数据库,ubuntu系统并没有mysql所以需要安装。会提示你设置数据库密码。
sudo apt-get install mysql-server
导入数据库文件
(env)siyang@Room:/home/siyang/site/你的项目名字/外部项目$ python manage.py migrate
创建超级用户
(env)siyang@Room:/home/siyang/site/你的项目名字/外部项目$ python manage.py createsuperuser
先在服务器的 /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:端口,端口为选择没有占用的最好。
/etc/nginx/sites-available是存放当前的server配置, 在这里修改
/etc/nginx/sites-enabled是激活并使用的server配置
所以我们需要创建一个链接到/etc/nginx/sites-enabled
(env)siyang@/etc/nginx/sites-available$:ln -s /etc/nginx/sites-available/你的项目名字 /etc/nginx/sites-enabled/你的项目名字
#这里的二个路径必须写绝对路径
然后我们回到/home/siyang/site/你的项目名字/外部项目
安装gunicorn,开启服务
(env)siyang@Room:/home/siyang/site/你的项目名字/外部项目$pip install gunicorn
(env)siyang@Room:/home/siyang/site/你的项目名字/外部项目$gunicorn -b 内网ip:端口 项目名字.wsgi:application
#这里的 项目名字 为存放setting.py文件的文件夹
后期补充:
①如果你最后访问公网ip仍然是welcome to nginx !请删掉/etc/nginx/sites-available/下的default文件
②更改nginx文件后请重启nginx
③只用公网ip进行学习没问题,但是局限性很大,最好购买个域名。但是国内网站域名审核很严格,需要备案(不收费),根据情况选择,选择域名最好后缀选择下,因为国内有些后缀是不能备案的,所以买了白买,请注意。
④在此没有使用域名,是因为博主正在网站备案,域名审核。暂时无法使用。
这篇博客是我前些时候研究django部署问题,然后从网络上搜索,找到一篇其他大神写的教程,加以学习,并从中找到不足之处加以完善,最后总结出来的结果。属于偏向于新手的教程,博主也在共同学习。如果上述流程有哪些错误请及时留言提出。谢阅。