超哥教你发布CRM

发布CRM你将使用以下软件

  • nginx
  • uWSGI
  • CentOS7
  • CRM项目文件
  • virtualenv
  • supervisor

WSGI、uWSGI

python web服务器开发使用WSGI协议(Web Server Gateway Interface)

python web项目默认会生成一个wsgi.py文件,确定好应用模块。

生产环境中使用的是uWSGI,实现了WSGI所有接口,C语言编写,效率很高的web服务器。

uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

Nginx

使用nginx是为了它的反向代理功能,项目会通过Django+uWSGI+Nginx进行服务器线上部署。

CentOS

1.打包项目CRM文件夹,压缩文件

2.通过xftp、scp、lrzsz等上传文件至Centos服务器

Linux使用技巧

1.通过xshell或者iTerm等软件,多终端操作你的linxu,这样对uwsgi、nginx、项目代码调试的时候,避免来回切换目录,提供工作效率。

2.注意修改了linux软件的配置文件,都要重启服务才能生效。

Virtualenv

构建一个干净,隔离的python解释器环境,防止软件依赖,冲突等问题,建议使用。

Supervisor

Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

项目部署

激活虚拟python环境

#创建基于python3的虚拟解释器环境venv
virtualenv --no-site-packages --python=python3 venv
#激活python3虚拟环境
[[email protected] /data 11:11:30]#source venv/bin/activate
(venv) [[email protected] /data 11:11:35]#

安装uwsgi

(venv) [[email protected] /data 11:13:23]#pip3 install uwsgi

配置启动uwsgi.ini,启动uwsgi时候,用这个配置文件启动

(venv) [[email protected] /data 11:14:25]#cat uwsgi.ini
[uwsgi]
#使用nginx连接时使用
socket=0.0.0.0:8000
#不用nginx直接当做web服务器使用
#http=0.0.0.0:9000
#项目目录绝对路径
chdir=/data/Ace_crm#wsgi文件路径,在项目底下
wsgi-file=Ace_crm/wsgi.py
#指定解释器目录
home=/data/venv
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

配置nginx

配置nginx.conf,通过nginx反向代理将请求丢给django处理

(venv) [[email protected] /data 11:20:32]#cat /opt/nginx1-12/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    #定义负载均衡池,名字叫做django,池子中写入uwsgi发布django的socket地址
    upstream django {
    server 0.0.0.0:8000;
}
    server {
        listen       80;
        server_name  pythonav.cn;
        #访问nginx的根路径时,转发请求给uwsgi的8000端口,这里要和uwsgi.ini写的一致
        location / {
        include  /opt/nginx1-12/conf/uwsgi_params;     #请求转发给upstream地址池里的uwsgi程序
        uwsgi_pass django;
        }
        location /static/ {
            alias /opt/nginx1-12/html/static/;
}

}
}

热加载nginx服务,读取nginx.conf内容

(venv) [[email protected] /data 11:24:24]#/opt/nginx1-12/sbin/nginx -t
nginx: the configuration file /opt/nginx1-12/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx1-12/conf/nginx.conf test is successful
(venv) [[email protected] /data 11:26:07]#/opt/nginx1-12/sbin/nginx -s reload

启动uwsgi,启动django

(venv) [[email protected] /data 11:26:54]#uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
(venv) [[email protected] /data 11:27:10]#ps -ef|grep uwsgi
root     15540     1  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15543 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15544 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15545 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15546 15540  0 11:27 ?        00:00:00 uwsgi uwsgi.ini
root     15590 11958  0 11:27 pts/0    00:00:00 grep --color=auto uwsgi

#如果需要停止uwsgi可以使用ps -ef|grep uwsgi,找到pid杀掉#更好的一个杀掉uwsgi的方式killall -9 uwsgi

访问nginx的80端口,查看是否请求转发给django

http://pythonav.cn/login/
或者10.0.0.10/login

配置nginx的静态资源

为什么要配置静态资源?

配置静态资源目录是因为让静态资源通过nginx可以直接返回,不需要通过uwsgi,也就是让uwsgi只处理后端逻辑,不处理静态资源,优化性能

配置静态资源,django和nginx

#创建静态资源存放目录
[[email protected] /opt/nginx1-12/html 11:39:51]#mkdir -vp /opt/nginx1-12/html/static
mkdir: created directory ‘/opt/nginx1-12/html/static’#给目录添加权限[[email protected] /opt/nginx1-12/html 11:40:57]#chmod  755 /opt/nginx1-12/html/static/

配置django的settings.py

DEBUG = False
ALLOWED_HOSTS = [‘*‘]

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = ‘/static/‘
STATIC_ROOT= ‘/opt/nginx1-12/html/static/‘
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, ‘static‘)
]

分割线--

收集django静态文件

python3 manage.py collectstatic
这一句话就会把以前放在app下static中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中

然后请求静态资源就会去nginx配置的 location /static {alias /opt/nginx1-12/html/static/ } 寻找 

以上步骤完成后,访问服务器主机地址和端口,如果nginx.conf中配置的为80端口,则地址栏不需要输入端口,因为浏览器请求端口也是默认为80端口,非80端口的需要自己在ip后面添加

完毕,有问题再找超哥

老男孩教育

QQ:877348180

原文地址:https://www.cnblogs.com/abdm-989/p/12168489.html

时间: 2024-11-05 11:39:17

超哥教你发布CRM的相关文章

寒哥教你学iOS - 经验漫谈

http://www.jianshu.com/p/cb54054d3add 寒哥教你学iOS - 经验漫谈 字数2848 阅读1896 评论19 喜欢43 顺便来个广告 iOS开发者 群173499350 给大家提供一个交流技术 也可以聊天打屁的平台 本篇文章主要讲解 4个问题 load妙用 aop面向切面编程 NSNumber Or Int @()适配64位 1 让appDelegate 减少负担 经过漫长时间的学习 你终于掌握了iOS大法 你找到了份iOS开发的工作 信誓旦旦的要开始你的co

教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题)

原文:教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题) 之前发布过Silverlight应用程序,当时也没有你遇到什么阻碍,直接使用的Visual Studio 2010的Publish功能,貌似也没有作什么设置.后来重装系统,也就都没有了,这两天帮一个大哥做了一些小例子,顺便整合了一下.于是闲来无聊遍想发布一下,结果费了老大周折才弄好,于是再次好好记录一下,以便下次查阅.

远哥教你MuleESB系列视频教程

远哥教你MuleESB系列视频课程介绍(共11个视频) ?1.Mule ESB介绍 ?2.社区版/企业版的区别和安装 ?3.MuleESB快速入门,以及MEL和Message结构 ?4.官方例子讲解 ?(JMS/FTP/Database/Smtp/MQ/RAML/APIkit等) ?5.在MuleESB中消费另一个WS服务的几种方式 ?6.在MuleESB中使用事物控制(Transactional) ?7.Java Components的使用 ?8.Java Transformers/DataM

js网站轮播图怎么做如何做?鸡哥教你简单制作效果炫酷

日了狗啦,刚刚鸡哥辛苦码了那么多字全丢了又要重新写,这是第二遍写了...今天鸡哥给小白写个不需要写js原生代码,只需要几个插件和一段通俗易懂得jquery代码就能搞定的轮播图,当然js原生代码写着也不算很繁琐,但是有些浪费时间,更何况很多人并不会用js直接写包括鸡哥,当年在学校还是研究过一段时间js的,当时还独自写了一个轮播图俘获了多少同班妹子的芳心,不过现在是基本废了,这东西要常写,不然忘的很快. 唉,本来还有妹子等着鸡哥呢,我这一大意文章丢了,重新写的话估计来不及了,先打个电话让妹子回家吧~

BZOJ 1568: [JSOI2008]Blue Mary开公司(超哥线段树)

1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1080  Solved: 379[Submit][Status][Discuss] Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“Project”. 若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益. 若单词为Project,则

手把手图文并茂教你发布Android开源库

http://blog.csdn.net/hejjunlin/article/details/52452220 经常逛github,总看到别人的readme中写着compile 'com.xxx:1.0.xxx',这个已经越来越普及,个人,团人,公司都在用,虽然做android这么长时间了,但是发现自己好像不会,走了好多弯路,几经折腾,这没什么技术含量的玩意,还挺费时的,所以,下定决心,发布一个开源库出来,也就是前面文章中介绍的SuperIndicator类库之实现<仿爱奇艺视频,腾讯视频,搜狐

肖哥教你解决安装和运行eNSP过程中遇到的各种问题

华为ensp 目前不是很稳定,肖哥现将在使用ensp过程中遇到的问题总结如下: 使用ENSP注意事项: ① 建议安装ensp时,安装目录不要出现中文. ② 关闭杀毒软件(尤其是电脑管家)和防火墙. ③ 管理员的用户名不要出现中文. ④ 在BIOS中将CPU 虚拟化功能(VT.virtual) 打开,否则会运行的很卡. 一:软件预览及下载 这是我使用的ENSP版本. 这是ENSP软件下载链接 华为ensp 模拟器V380: 链接:https://yunpan.cn/cY6YxZni2EYRx  密

【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)

概述 关于CocoaPods的介绍不在本文的主题范围内,如果你是iOS开发者却不知道CocoaPods,那可能要面壁30秒了.直奔主题,这篇文章主要介绍如果把你的代码发布到CocoaPods代码库中,让别人可以使用“pod search yourOpenProject”命令查找到你的代码. 在2014年5月20日以前,发布代码到CocoaPods可以使用这篇文章.但时过境迁,出于安全性等方面的考虑,CocoaPods团队放弃了该方式,使用本文要说的trunk方式,用流程图表示如下:(图片来自Co

想制作纯色的UIButton吗? 来,哥教你~

因为项目要做到美观,加上扁平化设计这么流行,所以各种找资料. 原本想找找UIButton是否有直接的设置方法,却发现没有.找到点击后高亮也只有setBackgroundImage 这条路走了. 首先写一个能改变大小,颜色,返回值为image的类方法.(我在网上找的...) + (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size { CGRect rect = CGRectMake(0, 0, size.width, size.