概况:ubuntu 16.04下部署django+nginx+uwsig+mysql

1.由于项目在本地开发时采用python3.6,因此需要确认ubuntu下版本,并配置默认版本为python3,参考链接

https://www.cnblogs.com/yifugui/p/8649864.html

2.安装pip3

3.安装django项目需要的依赖包,注意用pip3(由于virtualenv一直使用不成功,这里不用虚拟环境),

参考django项目打包链接

安装过程中出现当前用户没有相关路径的权限时先将其卸载,再重新安装,脚本如下:

sudo -H pip3 uninstall xxx

sudo -H pip3 install xxx

后面用manage.py启动django server时可能出现reload(sys)不存在错误,找到相应文件,修改引用,

解决方法参考链接

4.本地安装xshell+xftp,用于向服务器传输工程文件,

参考xshell+xftp使用链接

工程文件上传后需要修改settings.py下的静态文件路径

STATICFILES_DIRS=[(os.path.join(BASE_DIR,'static'))]

-->

STATIC_ROOT=[(os.path.join(BASE_DIR,'static'))]

5. 安装mysql,创建与工程setting.py中同名的数据库,配置访问权限与端口。创建数据库过程可以通过navcat实现,访问权限配置通过脚本,参考mysql安装及配置

5.1 修改mysql配置文件,允远程主机访问,将bind-address 设置为0.0.0.0

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address            = 0.0.0.0

5.2 配置数据库用户、权限、密码,在mysql命令行下实现,注意命令行格式

2.1 GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION

2.2 FLUSH PRIVILEGES

5.3 用navcat远程连接数据库,并创建与工程setting.py中同名的数据库,注意编码选用UTF8,否则在生成有中文字段的数据表时会报错

5.4 用navcat创建完成后为了安全起见,重新修改mysql配置文件,将bind-address 设置为127.0.0.1,只允许本地主机登录

6.ubuntu下进入到工程manage.py所在文件夹,运行sudo python  manage.py runserver 0.0.0.0:端口号 (端口号及其访问权限需要在云服务器控制台安全组中设置,参考链接)。本地浏览器远程访问该工程创建的server,访问地址:远程服务器公网IP:端口号。可以看到网页成功加载。这么顺利?当然是不可能的:)

可能遇到的问题:

6.1.由于pipy官网的xadmin版本太老,导致server运行时会报错,需要从github下载最新版,下载解压后将名为xadmin的文件夹放置工程目录下,与manage.py同级,参考xadmin源文件安装方法

6.2出现任何module not found的问题无脑pip3 install

6.3出现permission denied 的问题无脑sudo

6.4xftp能连接远程服务器但是文件传输错误很大可能是文件夹写权限没有开通,ubuntu下通过chmod 777 dir(文件夹名)实现

6.5 启动django server前需要先migrate,sudo python  manage.py migrate 把model中的数据模型同步到数据库中

到此为止,部署的工作已经完成八成左右了,不是还有nginx和uwsgi的安装配置吗?

陈独秀同学,请你坐下,坐下

之所以这么说,是因为nginx和uwsgi的配置和项目的耦合不是很大,只需要把相应的路径设置正确就行

9.确保nginx和uwsgi在配置文档修改后已经重启,确保nginx的对外端口在服务器的安全策略允许,在本地浏览器输入服务器ip,bingo~

可能出现的问题:

9.1 nginx和uwsgi的安装配置基本是固化的,除了项目路径和ip端口需要自己指定

9.2 如果浏览器返回不正确,先重启nginx和uwsgi,没有什么是重启一下不能解决的,如果有,重启两下:)

9.3 项目文件需要更新的话先关uwsgi 进程,更新完后再重启nginx和uwsgi,又是重启:)

相关脚本:

cd /home/ubuntu/imooc                //进入uwsgi配置文件目录

uwsgi --ini imooc_uwsgi.ini            //运行配置文件

killall -9 uwsgi                                //关闭uwsgi进程

sudo service nginx restart            //重启nginx服务

/etc/init.d/nginx start # 启动        //启动nginx

kill -QUIT 主进程号                         //停止nginx进程

10.玩的开心

一些坑

python3.6解释器与3.5解释器对django模板语法处理的区别:

1. 在3.6中,html文件中引用图片资源方法为src={{MEDIA_URL}}{{XXXX.image}}

在3.5中,为src='{{MEDIA_URL}}{{XXXX.image}}'

在{}两侧多了单引号!

由于本地开发用的解释器为3.6,而远程服务器安装的是3.5,导致部分图片资源加载失败

2.工程文件上传到服务器后需要修改settings.py中的三个地方:

2.1DEBUG模式

DEBUG = True ----> False

2.2.远程访问IP设置

ALLOWED_HOSTS = ['127.0.0.1'] ----> ['0']

2.3.静态资源路径表示

STATICFILES_DIRS=[(os.path.join(BASE_DIR,'static'))]

-------->STATIC_ROOT=os.path.join(BASE_DIR,'static')

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐