Ubuntu-18.04.2系统 Ngi

发布时间:2019-05-26 22:30:37编辑:auto阅读(2047)

    首先准备环境:

    1.使用虚拟机 VMware Workstation Pro (也可以不用),安装Ubuntu-18.04.2系统

     

    开始搭建环境

    (因为ubuntu18.4.2集成了python3.6,因此不需下载python3,只需下载pip即可,有的话可以不用下载)

    sudo apt install python3-pip

    ------搭建python环境------

    1 sudo apt-get install python3 (如果有python环境可以不装)
    2 sudo apt-get install python3-dev #类库和头文件单独的包
    3 sudo apt-get install libxml* #解析xml文件的库
    4 sudo apt-get install net-tools #网络管理命令如:ifconfig是查看本地ip
    5 sudo apt-get install lsof #列出打开文件工具

    ------安装 数据库---------

    1 (使用sqlite3数据库可以不装)                                                            
    2 apt-get install mysql-server 
    3 apt-get install mysql-client 
    4 apt-get install libmysqlclient-dev

    ------更新pip版本---------

    pip3 install --upgrade pip3

    ------安装SSH-------------

    sudo apt-get install openssh-server

    ------安装vim-------------

    sudo apt install vim

    ------安装django----------

    sudo pip3 install django

    -------上传你的django项目-----------------
    可以在Home目录把项目直接复制到Home目录里
    (这里注意:Home是ubuntu桌面上你能看到的目录,/home和/opt是用cd命令行进入的根目录,两者有很大的区别)
    我们直接cd回车进入根目录,cd /opt进入opt文件夹,mkdir project创建project目录
    再cd回车进入根目录ls看文件夹,找你的项目目录mysite,这时看到你的项目目录准备复制
    用cp进行复制(你的命令所处位置在Home/(~/$)指向你的mysite目录)
    ----------进行复制------------------------

    sudo cp -r mysite /opt/project/

    ------------------------------------------

    上传之后运行django测试你的项目能不能运行成功
    先进入你的项目目录/opt/project/mysite进行数据迁移
    ----------数据迁移------------------------

    1 sudo python3 manage.py makemigrations
    2 sudo python3 manage.py migrate

    ------------------------------------------

    如果想用admin界面,可以用如下指令创建管理员:
    ----------创建超级用户--------------------

    sudo python3 manage.py createsuperuser

    ------------------------------------------
    输入打算使用的登录名:username:michaelshu
    输入email:Email address:
    输入密码,需要输入两次,输入过程中密码不显示:
    Password: Password (again):
    当两次密码都相同的时候,就会提示superuser创建成功。
    Superuser created successfully

    ----------添加静态文件目录----------------
    #在settings.py中添加默认的静态目录(收集使用)
    STATIC_ROOT = os.path.join(BASE_DIR,'static')

    先运行--noinput表示是不需要交互的,再来收集静态文件至static目录中
    ----------收集静态文件--------------------

    1 sudo python3 manage.py collectstatic --noinput 
    2 sudo python3 manage.py collectstatic 

    ------------------------------------------

    ----------运行django项目测试--------------

    sudo python3 manage.py runserver 127.0.0.1:8000

    ------------------------------------------
    浏览器访问127.0.0.1:8000查看成功与否
    成功之后安装uwsgi

    ----------安装 uwsgi----------------------

    sudo pip3 install uwsgi

    测试uwsgi,创建test.py文件:

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]

    ----------通过uwsgi运行该文件-------------

    uwsgi --http :8001 --wsgi-file test.py

    --------------------------------------------------
    在浏览器端输入127.0.0.1:8001即可看到Hello World

    接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/opt/project/mysite
    ----------通过uwsgi运行项目文件-----------

    uwsgi --http :8001 --chdir /opt/project/mysite/ --wsgi-file mysite/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

    ---------------------------------------------------
    在浏览器端输入127.0.0.1:8001/admin即可看到你的django项目admin页面
    常用选项:
    http : 协议类型和端口号
    processes : 开启的进程数量
    workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
    chdir : 指定运行目录(chdir to specified directory before apps loading)
    wsgi-file : 载入wsgi-file(load .wsgi file)
    stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)
    threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
    master : 允许主进程存在(enable master process)
    daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
    pidfile : 指定pid文件的位置,记录主进程的pid号。
    vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

    -------------------小重点-------------------------
    接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:
    mysite/

    ├── manage.py

    ├── mysite/

    │ ├── __init__.py

    │ ├── settings.py

    │ ├── urls.py

    │ └── wsgi.py

    └── my_uwsgi.ini

    在我们通过Django创建mysite目时,在子目录mysite下已经帮我们生成的 wsgi.py文件。所以,我们只需要再创建my_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。
    ---------------------配置文件内容--------------------------------------------

    # my_uwsgi.ini file
    [uwsgi]
    
    # Django-related settings
    #socket是用nginx来测试时用的
    #socket = :8000
    #用uwsgi单独测试时用
    http = :8000
    
    # the base directory (full path)
    chdir = /opt/project/mysite
    
    # Django s wsgi file
    module = mysite.wsgi
    
    # process-related settings
    # master
    master = true
    
    # maximum number of worker processes
    processes = 4
    
    # ... with appropriate permissions - may be needed
    # chmod-socket = 664
    # clear environment on exit
    vacuum = true

    ----------------------------------------------------------------------------
    这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。
    socket 指定项目执行的端口号。
    chdir 指定项目的目录。
    module mysite.wsgi,可以这么来理解,对于mysite_uwsgi.ini文件来说,与它的平级的有一个mysite目录,这个目录下有一个wsgi.py文件。其它几个参数,可以参考上一小节中参数的介绍。接下来,切换到mysite项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。
    在项目目录下/opt/project/mysite运行命令启动uwigs,看是否成功,注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。
    ---------用ini文件启动uwsgi---------------

    uwsgi --ini my_uwsgi.ini 

    ------------------------------------------------
    (这里容易犯两个错误:1.项目文件没放对地方,2.http和socket弄混了(socket是搭配nginx用的,用uwsgi单独测试要用http))
    成功之后安装nginx

    --------安装 Nginx--------------------------

    sudo apt-get install nginx

    --------nginx命令---------------------------

    1 /etc/init.d/nginx start #启动
    2 /etc/init.d/nginx stop #停止
    3 /etc/init.d/nginx restart #重启

    ------------------------------------------------

    再接下来要做的就是修改nginx.conf配置文件。
    打开/etc/nginx/nginx.conf文件,添加如下内容。
    (cd返回根目录,cd /etc/nginx进入nginx目录,ls查看目录下的nginx.conf文件,sudo vim nginx.conf打开此文件)
    ------------------小重点------------------------------
    一定要把server放在http{}中,不然会报错,头疼的错误,还要特别注意分号(;)

    server {
        listen 8099; 
        server_name 127.0.0.1;
        #也可以加你的本机地址 
        #server_name 127.0.0.1 192.168.1.12;
        charset UTF-8;
        access_log /var/log/nginx/mysite_access.log;
        error_log /var/log/nginx/mysite_error.log;
    
        client_max_body_size 75M;
    
        location / { 
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8000;
            uwsgi_read_timeout 2;
        } 
        location /static {
            expires 30d;
            autoindex on; 
            add_header Cache-Control private;
            alias /opt/project/mysite/static/;
        }
    }

    ----------------------------------------------------------

    listen 指定的是nginx代理uwsgi对外的端口号。
    server_name 网上大多资料都是设置的一个网址(例,www.example.com),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。
    在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8000;
    include必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口号与myweb_uwsgi.ini配置中的文件中的必须一致。

    现在重新启动nginx,然后浏览器访问:http://127.0.0.1:8099/
    通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

    这时运行访问你的项目应该会报个错误:attempt to write a readonly database(尝试写入只读数据库)
    解决很简单,首先停掉nginx和uwsgi,cd /opt/project/mysite进入mysite目录查找db.sqlite3数据库文件
    -----------对sqlite3赋予权限----------------

    sudo chmod 777 db.sqlite3

    --------------------------------------------
    顺带着文件夹也给赋权吧,对mysite项目文件和project目录赋予权限

    1 sudo chmod 777 mysite
    2 sudo chmod 777 project

    如果还有错那就是504 Gateway Time-out这个错误了吧,提醒你一下,"socket"有没有改过来,

    要把my_uwsgi.ini配置文件中的"http"注释掉,先停掉nginx和uwsgi,使用"socket",接下来cd /opt/project/mysite 进入项目根目录使用 sudo vim my_uwsgi.ini打开uwsgi文件更改配置

    # Django-related settings
    #socket是用nginx来测试时用的
    socket = :8000
    #用uwsgi单独测试时用
    #http = :8000

    这时就完美成功了吧,如果还报错不要急,仔细查看报错信息,一点点解决,你就会离成功更近了一步,容易犯错的位置已经重点标红了,注意使用啊,一起加油吧!!

    附录一点vim的使用方法:

     1     光标:j 下   k 上  H 左 L右
     2     i --当前光标下进入编辑模式  
     3     ESC --退出编辑模式
     4     a --当前光标下一个字符进入编辑模式
     5     A --尾行进入编辑模式
     6     dd --删除整行
     7     dG --删除光标所在行到文件最后一行所有内容
     8     dgg --删除光标所在行到文件第一行所有内容
     9     u --返回上一次修改状态
    10     wq --保存退出
    11     q! --放弃打开文件后的所有修改退出

    文章引用:http://www.cnblogs.com/fnng/p/5268633.html

关键字