设为首页 收藏本站
查看: 1003|回复: 0

[经验分享] 生产环境部署python代码(django+uwsgi+nginx)

[复制链接]

尚未签到

发表于 2018-8-13 09:21:04 | 显示全部楼层 |阅读模式
  基础环境不做介绍,在django开发web项目完成后,一直使用django自带的服务器进行调试:
  python manage.py runserver 0.0.0.0:8080
  这个服务器在开发时使用,实际生产则不能满足,要使用uwsgi把动态请求转给python执行,使用nginx处理静态请求,部署如下:
  在开发环境中,收集python所需的安装包及其具体版本号:
  pip freeze > programlist.txt
  然后,把programlist.txt文件传递服务器上;
  前提:线上服务器已经安装好python环境、django环境、nginx等;
  在服务器上安装python项目所需要的程序包:
  pip install -r programlist.txt
  创建django项目:
  django-admin startprojcet  test
  会在本地创建一个test项目同名的目录,并进入:
  cd test
  再创建项目下的一个应用:
  python manage.py starapp apptest
  此时,当前目录会出现apptest目录、manage.py文件和test目录(与项目目录下同名的又一个目录);
  还要创建相应的目录:
  在项目目录test下创建目录:
  test/templates/apptest
  test/static/apptest
  test/static/media
  注意:两级目录均需要创建
  修改settings.py文件:
  DEBUG=False
  #允许指定主机访问服务器
  ALLOWED_HOSTS=['*']
  #添加应用
  INSTALLED_APPS = [
  ...
  'test',
  ]
  #修改模板路径
  TEMPLATES = [
  {
  ...
  'DIRS': [os.path.join(BASE_DIR,'templates')],
  ...
  },
  ]
  #添加静态文件路径
  STATIC_URL = '/static/'
  STATICFILES_DIRS=[
  os.path.join(BASE_DIR,'static')
  ]
  #nginx配置中的静态文件路径
  STATIC_ROOT='/var/www/test/static/'
  #配置数据库
  DATABASES = {
  'default': {
  'ENGINE': 'django.db.backends.mysql',
  'NAME': 'test3',
  'USER': 'root',
  'PASSWORD': 'root',
  'HOST': 'localhost',
  'PORT': '3306',
  }
  }
  修改主urls.py文件:
  #配置url路径
  from django.conf.urls import url,include
  from django.contrib import admin
  urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url('^',include('booktest.urls')),
  ]
  在应用目录下创建一个urls.py文件:
  test/urls.py
  如:
  from django.conf.urls import url
  import views
  urlpatterns=[
  url(r'^$',views.index),
  ]
  在views.py文件里定义各种视图函数;
  如:
  from django.shortcuts import render
  def index(request):
  return render(request,'booktest/index.html')
  在templates/apptest/创建各html模板文件;
  如index.html:
  <head>
  <meta charset=&quot;UTF-8&quot;>
  <title>Title</title>
  <script src=&quot;/static/booktest/jquery-1.12.4.min.js&quot;></script>
  

    <script>  $(function () {
  $('img').width(100).height(100);
  });
  
</script>
  

  </head>
  <body>
  <img src=&quot;/static/booktest/a1.jpg&quot; />
  </body>
  注意:先把a1.jpg和js文件放到test/static/apptest目录下;
  此时,先测试一下,把settings中的DEBUG改为=False,如果不改,则会显示不出图片;再启动django开发时的服务器,访问浏览器能看见图片且符合js里面设定的图片大小既可进行下一步配置;
  下面配置wsgi:
  安装uWSGI:
  pip install uwsgi
  在项目test目录下创建uwsgi.ini文件,内容如下:
  [uwsgi]
  #使用nginx连接,使用socket
  socket=192.168.1.250:8080
  #直接做web服务器,使用http
  #http=192.168.1.250:8080
  #项目的绝对路径
  chdir=/root/projects/test
  #相对项目绝对路径的一个路径
  wsgi-file=test/wsgi.py
  processes=4
  therads=2
  master=True
  pidfile=uwsgi.pid
  daemonize=uswgi.log
  运行uwsgi:
  uwsgi --ini uwsgi.ini
  如果uwsgi.ini文件使用的是http,则直接访问服务器的ip地址和端口既可显示页面;
  停止uwsgi:
  uwsgi --stop uwsgi.pid
  如果uwsgi.ini文件使用的是socket,则需要nginx服务的配合使用:
  配置nginx.conf:
  server {
  listen       80 default_server;
  listen       [::]:80 default_server;
  servername  ;
  root         /usr/share/nginx/html;
  include /etc/nginx/default.d/*.conf;
  

    location / {  include uwsgi_params;
  uwsgi_pass 192.168.1.250:8080;
  }
  location /static {
  alias /var/www/test/static/;
  }
  

  在静态文件存放目录:
  /var/www/test/static/
  修改静态文件所在目录static的目录权限:
  chmod  777 static
  再把静态文件,放到/var/www/test/static/目录下既可,django提供方便的命令,来采集静态文件:
  python manage.py collectstaic
  输入yes;
  执行该命令后,会自动把静态文件都复制到/var/www/test/static/目录下;
  最后,直接访问服务器的域名或ip,完成访问页面;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-550976-1-1.html 上篇帖子: python 解决方法:ImportError: No module named cx_Oracle 下篇帖子: CrazyWing:Python自动化运维开发实战 十七、Python异常
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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