鱼C论坛

 找回密码
 立即注册
查看: 2842|回复: 2

[技术交流] 记录一些自己在学习django时的一些经历

[复制链接]
发表于 2016-3-4 10:45:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 forsaken 于 2016-3-9 16:37 编辑

最近一直在学习django做一些东西,在学习了基本架构之后就想在服务器上部署一下模拟真实运营环境,于是乎就遇见的各种各样的问题,在查阅的诸多资料后还算解决了一些,在这里做一些简单的记录吧,不过由于水平有限有些机理并没有完全掌握,在以后技术提高之后再进行修正。

我自己租了一台阿里云的服务器,使用的是ubuntu系统,不知道其他的系统是什么样,反正这个的刚开机的情况着实令人蛋疼。

首先里面默认安装了python2.7和python3.4
  1. $ python
复制代码

默认是使用的python2.7,不过他默认的安装版本可能有一些问题,所以我想安装最新的python3.5.1,那么第一个问题就来了,安装python!

那么第一步需要更新系统
  1. $ sudo apt-get update
复制代码

如果不更新的话有一些依赖的环境将无法安装

安装好后,进入你想安装的位置比如安装在/home目录下
  1. $ cd /home
复制代码


下载python,需要其他版本更改一下版本号就可以了
  1. $ wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
复制代码


解压
  1. $ sudo tar zxvf Python-3.5.1.tgz
复制代码


然后网上许多文章就开始讲进行编译安装了,不过仅仅这样可能会出现许多意想不到的bug,因为缺少相应的编译环境
  1. sudo apt-get install libpcre3 libpcre3-dev libssl-dev zlib1g-dev libffi-dev
复制代码

install后面都是需要依赖的编译环境,缺什么装什么,装不了的请升级系统,不过这可能只是一部分,其他的一些因为还没有碰到相应的情况,暂时这些就已经可以正常工作了,以后遇到了再进行修正。

安装了之后进入解压好的python目录
  1. $ cd Python-3.5.1
复制代码

执行
  1. $ sudo ./configure --prefix=/home/python
复制代码

prefix后面是安装路径可自行定义
编译过程中可能会发现依旧有很多no,可能是依赖的环境还是不完整
完成后执行
  1. make
复制代码

稍等一会儿后执行
  1. make install
复制代码

稍等片刻python就安装完成了
不过此时执行
  1. python
复制代码

仍旧是2.7
这里我是使用软连接来进行修改
  1. ln -s /home/python/bin/python3.5 /usr/bin/python
复制代码

当然该目录下如果已经存在了python链接,将其删除或重命名就可以了,当然pip也要链进去
软连接大致相当于windows下的快捷方式,一般可能在
  1. /bin
  2. /sbin
  3. /usr/bin
  4. /usr/sbin
  5. /usr/local/bin
复制代码

可以进这些目录下看一看管理一下自己的链接
至此在linux下就已经成功安装了python3.5.1
执行
  1. python
复制代码

应该就是3.5.1版本了

接下来就是配置服务器,我使用的是nginx+uwsgi
安装nginx等环境
  1. sudo apt-get install python-dev nginx
复制代码

安装uwsgi
  1. sudo pip install uwsgi
复制代码

当然之前需要安装django
  1. pip install django
复制代码


pip安装的包都在
  1. /python/bin
复制代码

目录下,如果输入一些包的命令无效,可以将其用上面的方法使用软链接链到上面的某个目录中

在你的想要的目录下建立django项目
  1. cd /home
  2. django-admin.py startproject mysite
复制代码

然后建立一个应用吧
  1. cd mysite
  2. python manage.py startapp myapp
复制代码


现在就可以着手服务器的配置了
将uwsgi_params这个文件复制到项目目录下
它在这里
  1. /etc/nginx
复制代码

接下来写uwsgi的配置文件
在项目目录下建立一个.ini文件,就叫mysite.ini好了,当然名字可以随便取,写入如下配置信息
  1. [uwsgi]
  2. socket = /tmp/mysite.sock
  3. chdir = /home/mysite/
  4. wsgi-file = mysite/wsgi.py
  5. master = true
  6. processes = 2
  7. threads = 4

  8. chmod-socket = 666
  9. daemonize = /home/mysite/mysite.log
复制代码

sock文件夹是uwsgi与nginx连接的通道,将其放在/tmp目录下可避免权限问题,在其他目录下可能会因为权限问题引发500错误,所以如果在配置过程中出现500错误,可能就是因为权限问题,最后的daemonize是uwsgi的日志位置,出现错误应该第一时间查看日志,探究其真正的错误原因,我一开始就不会看日志走了不少弯路,直接搜索出现的问题给出的答案各式各样解决不了问题。。

然后就开始配置nginx文件,新建文件mysite.conf
  1. # the upstream component nginx needs to connect to
  2. upstream mysite {
  3.         server unix:///tmp/mysite.sock;
  4.         # server 127.0.0.1:8001
  5. }

  6. # Configuration of the server
  7. server {
  8.         # the port your site will be served on
  9.         listen          80;

  10.         # the domain name it will serve for
  11.         server_name     * # substitute your machine's IP address or FQDN
  12.         charset         utf-8

  13.         # max upload size
  14.         client_max_body_size    75M;    # adjust to taste

  15.         access_log /home/mysite/access.log;
  16.         error_log /home/mysite/error.log;

  17.         # Django media
  18.         location /media {
  19.                 alias /home/mysite/media;
  20.         }

  21.         location /static {
  22.                 alias /home/mysite/static;
  23.         }

  24.         # Finally. send all non-media requests to the Django server
  25.         location / {
  26.                 uwsgi_pass mysite;
  27.                 include /home/mysite/uwsgi_params;
  28.         }
  29.         location = /favicon.ico{
  30.                 log_not_found off;
  31.         }
  32. }
  33.   
复制代码


upstream与sock文件夹相连接,server_name写域名或ip就好了,access_log和error_log是nginx的日志,出现异常应第一时间查看,最后的favicon.ico这个东西还没有研究过是做什么的,但如果没使用过这个东西也不添加这段语句的话会出现404错误,所以先把它关掉。

之后将这个配置文件连接到nginx下
  1. ln -s /home/mysite/mysite.conf /etc/nginx/sites-enabled/mysite.conf
复制代码

可执行
  1. service nginx configtest
复制代码

来检测是否有语法问题

接下来对django项目配置文件settings.py进行修改
  1. ALLOWED_HOSTS = ['*',]
复制代码

这是为了省事就直接用‘*’来匹配所有,更多的写法还是看官方的文档吧~
如果是在生产环境应将
  1. DEBUG = False
复制代码

如果是测试阶段可以改为True
最后加入静态文件配置目录
  1. STATIC_ROOT = '/home/mysite/static/'
复制代码

保存完成

进入项目目录
  1. cd /home/mysite
复制代码

运行
  1. uwsgi mysite.ini
复制代码

重启服务器
  1. service nginx restart
复制代码

部署静态文件
  1. python manage.py collectstatic
复制代码


至此应该就可以正常工作了,如果有问题多多查看日志,我在部署过程中就出现了404和500错误,主要原因是python安装不完整,sock权限问题,favicon.ico这个东西的问题,和settings.py未进行设置。存在的问题可根据日志进行逐一排查。静态文件每次进行修改都需要执行部署静态文件的语句。

评分

参与人数 2荣誉 +4 鱼币 +6 收起 理由
zooo + 1 + 1 感谢楼主无私奉献!
~风介~ + 3 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 11:36:20 | 显示全部楼层
支持全栈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-6 19:34:35 | 显示全部楼层
这样的话基本的部署就应该是完成了,更多的技巧就需要进一步的学习了,其中可能会有一些错误和疏漏,请大家多多指正围观交流啊~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表