Linux发布项目

项目发布

发布项目将用到的软件

  nginx

  uwsgi

  CentOS7

  项目文件

  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 :

  通过xftp, scp, lrzsz等上传文件将项目压缩文件上传至CentOS服务器.

Linux使用技巧 :

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

  注意每次修改了linux软件的配置文件之后, 都要讲服务重新启动一下才能生效.

virtualenv :

  使用虚拟环境, 隔离python解释器的环境, 防止软件依赖和冲突的问题

supervisor :

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


项目部署

准备工作 :

项目发布需要在Linux上启动数据库
并且Linux环境内安装pymysql, 并且更改setting.py文件内的数据库连接信息
Linux环境内也需要安装django-multiselectfield
settings.py内更改允许主机 :ALLOWED_HOSTS = ['*']

1. 激活虚拟环境 :

#创建基于python3的虚拟解释器环境venv
virtualenv --no-site-packages --python=python3 venv
#激活python3虚拟环境
[root@localhost  /data 11:11:30]#source venv/bin/activate
(venv) [root@localhost  /data 11:11:35]#
------------------------------------------------------------------------
# 安装了virtualenvwrapper的话直接创建
mkvirtualenv venv

2. 安装uwsgi :

# 在虚拟环境内安装
(venv) [root@localhost  /data 11:11:35]#pip3 install uwsgi
# 在预部署项目的目录内创建uwsgi.ini文件并做配置


[uwsgi] #项目的绝对路径,定位到项目的第一层 chdir =/opt/xx(项目目录) #指明项目的wsgi文件路径 module =xx(项目目录).wsgi #指明虚拟解释器的第一层路径 home = /root/all_envs(总虚拟环境目录)/xxx(部署项目的虚拟环境名) #指明通过uwsgi,启动的进程数 processes = 5 #如果已经配置了nginx(启动了服务, 配置了uwsgi_pass),请用这个socket连接 socket = 0.0.0.0:9000 #如果没有使用nginx, 想通过uwsgi直接启动web服务,指明http协议 #http = 0.0.0.0:9000 # 在退出uwsgi环境后, 清空环境变量 vacuum = true
# uwsgi常见问题
uwsgi启动项目的时候, 很有可能会抱一个错误 : no application(找不到应用)
意思就是 :
    uwsgi找不到项目的wsgi.py
    其实uwsgi是通过application对象加载项目的
    application = get_wsgi_application()

3. 安装nginx :

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

  nginx接收到了基于wsgi协议的动态请求, 然后通过uwsgi_pass转发给uwsgi服务器.

#user  nobody;
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  /data/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    #定义负载均衡池(即存放服务器的池子)
    upstream xx{
    server 127.0.0.1:9000;

}

    server {
        listen       80;
        server_name  www.xd.com;

        location / {
        uwsgi_pass xx;
        include /opt/nginx1-12/conf/uwsgi_params;
        }

    location /static {
    通过nginx处理静态文件 alias /opt/static/
; } error_page 400 402 403 404 /40x.html; location = /40x.html { root /data/xd/; } } }

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

4. 配置静态资源

# 配置django的settings.py, 收集所有项目所需的静态文件
    1. 通过命令, 收集整个项目所需要的静态文件, 放入到一个固定文件夹内
        STATIC_ROOT='/opt/static/'
    2. 执行命令
        python3 manage.py collectstatic
    3. 此时项目内的所有静态文件, 都跑到/opt/static/目录下了

 5. 配置完成之后启动nginx和uwsgi

# 启动nginx
sbin/nginx -t    # 语法检查
sbin/nginx       # 启动nginx
--------------------------------------------------------------
# 启动uwsgi启动项目
uwsgi --ini uwsgi.ini
--------------------------------------------------------------
如果想要停止uwsgi可以使用ps -ef |grep uwsgi
killall -9 uwsgi

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

原文地址:https://www.cnblogs.com/dong-/p/10098853.html