• 一、ubuntu-django+nginx+uwsgi:ubuntu系统部署django项目,前后端不分离项目


    一、创建用户和文件夹

    #创建www文件夹,所有网站项目都放到这里
    $ sudo mkdir /www
    #创建用户组
    sudo groupadd www -g 666
    #创建用户
    $ sudo useradd www -u 666 -g 666 -M -s /sbin/nologin
    #查看
    $ id wwwid
    #设置www文件夹的所属组和所属用户
    $ sudo chown -R www.www /www/  
    #$ sudo chmod -R  666 某一目录,所有用户对一个目录的权限,用户组、所在用户,其他用户
    #更新用户的密码
    $ sudo passwd www
    #输入要设置的密码:Huawei@123
    切换到该用户
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1、/www目录用来存放项目

    2、www用户用来运行配置文件

    二、切换到www用户下,在用户的家目录下创建虚拟环境。

    1、安装python解释器

    $~ sudo apt update  #更新软件源
    $~ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
    $~ wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz     #官网下载压缩包
    $~ sudo tar -xvzf Python-3.7.9.tgz  #解压
    $~ cd Python-3.7.9   #进入python文件夹
    $~ ./configure --with-ssl  prefix=/opt/python_exe/python37  #指定位置安装解释器
    $~ make  #编译
    $~ sudo make install #安装
    #测试
    $ cd /opt/python37 
    $ python3  #看看能不能出来python解释器命令行
    
    解释器安装到的路径:sudo  find / -name python3.7
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2、将新安装的python3.7解释器加到环境变量最前面【不配置也不影响后面的部署】

    #1、查看到python3.9解释器所在的位置
    sudo find / -name python3.7
    # 在 /usr/local/bin/  这是默认安装的位置
    #我上面指定安装在/opt/python_exe/python37/
    #2、查看环境变量
    echo $PATH
    #查看到所有环境变量: /usr/sbin/:...
    #把环境变量复制,起来
    #3、建立软连接
    ln s /opt/python_exe/python37/bin/python3.7 /usr/local/bin/python
    #4、设置环境变量,
    sudo vi /etc/profile
    添加
    PATH=$PATH:/usr/local/bin/:拼接上第二步查到的路径
    保存
    
    #5、重启虚拟机
    
    在任何位置输入python,显示的是python3.7.9的解释器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3、配置虚拟环境【一个项目配置一个虚拟环境】

    #下载virtualenv依赖
     sudo apt install virtualenv
    #virtualenv不是官方自带的包,需要pip安装
     pip install virtualenv
     pip install virtualenvwrapper
    #到home目录下创建 .virtualenv文件夹
     sudo makedir $HOME/.virtualenvs
    #打开 ~/.bashrc文件,并添加如下
    #指定存放虚拟环境的路
    vi ~/.bashrc
    添加下面两条:虚拟环境存放的路径,/home/当前用户下/.virtualenvs
    export WORKON_HOME=$HOME/.virtualenvs
    
    source ~/.local/bin/virtualenvwrapper.sh
    #运行
    source ~/.bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4、创建虚拟环境给待部署的项目

    mkvirtualenv -p 解释器的安装位置 虚拟环境的名字
    mkvirtualenv -p /opt/python_exe/python37/bin/python3.7 python37_django
    #导入项目运行的依赖
    1、切换到虚拟环境中
    cd  ~/.virtualenvs
    workon python37_django
    2、给虚拟环境安装依赖包,该依赖包是在项目中,运行 pip freeze > requirement.txt 生成
    pip install -r requirement.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、项目上线前的准备

    1、配置settings.py文件

    #debug设置成False后,django不再处理静态文件
    DEBUG = False
    #项目允许启动的域名或IP,"*"代表所有都可以启动项目
    ALLOWED_HOSTS = ['*']
    #数据库还要修改,看你的数据库是否跟项目在一台机器,具体看情况设置数据库的连接IP
    #静态文件,将所有静态文件都收集到static文件夹中
    STATIC_URL = '/static/'
    STATICFILES_DIRS=[
        #os.path.join(BASE_DIR,'static')
    ]
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
    #用户资源,开放出一个窗口
    MEDIA_URL='/media/'
    MEDIA_ROOT=os.path.join(BASE_DIR,'media')
    #要配置media还需要到总路由文件配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2、配置总路由文件,项目同名下的urls.py[项目创建时就已经弄好的]

    from .项目名 import settings
    from django.conf.urls.static import static
    urlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
    
    • 1
    • 2
    • 3

    3、收集静态文件

    进入terminal执行:
    python manage.py collectstatic
    
    
    • 1
    • 2
    • 3

    4、安装uwsgi

    pip install uwsgi
    
    • 1

    5、生成项目的依赖文件

    #方式一:使用pip来生成依赖文件
    pip freeze > requirement.txt
    
    #方式二:使用三方包来生成依赖文件
    #先安装pipreps
    pip install pipreqs
    #导出依赖包,生成依赖文件,默认生成requirements.txt 
    pipreqs ./ --encoding=utf-8
    
    推荐使用pipreqs来生成依赖文件,只会将项目需要的依赖写进到文件中。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6、到二下执行步骤4,给虚拟环境安装依赖环境

    1、切换到项目的虚拟环境
    cd  ~/.virtualenvs
    workon python37_django
    2、给虚拟环境安装依赖包,该依赖包是在项目中,运行 pip freeze > requirement.txt 生成
    cd /www/www.bbs.com/BBS14 #我的项目跟目录
    pip install -r requirement.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7、迁移mysql数据库:mysql安装移步

    1、生成sql文件,在cmd中执行:
    >mysqldump -h 127.0.0.1 -uroot -pHuawei@123 oasystem > f:oasystem.sql
                                   IP                                            待导数据库     导出的位置和名字
    2、将该文件上传到待部署的服务器上,假设上传到/opt/mysql_data/中
    3、在服务器的mysql中导入项目的数据库
    #先创建项目的数据库,要跟项目中配置的数据库名一样
    
    >create database oasystem;
    
    #导入项目的数据库数据
    
    >use oasystem;
    
    > source /opt/mysql_data/oasystem.sql
    
    #看到很多ok,再查询一下数据库表是否存在
    
    >show tables;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    8、将整个项目移动到服务器的/www/www.bbs.com中

    四、nginx配置

    安装nginx

    1、更新源
    $> sudo apt update
    2、安装nginx
    $> sudo apt install nginx
    3、查看版本
    $> sudo nginx -v
    nginx常用命令
    前提:进入到nginx安装位置(ubuntu18默认在/etc/nginx/)
     
    #nginx的配置文件,在/etc/nginx/
    nginx.cong
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    配置nginx.conf

    cd /etc/nginx/
    sudo vi nginx.conf
    #配置内容
    
    user www; #设置运行用户
    worker_processes auto;
    pid /var/run/nginx.pid;
    
    events {
    	worker_connections 1024;
    }
    
    http {
    	add_header 'Access-Control-Allow-Origin' 'origin-list';
    	include /etc/nginx/mime.types;
    	default_type application/octet-stream;
    	#log format
    log_format main '$remote_addr-$remote_user [$time_local] "$request"'
    '$status $body_bytes_sent "$http_referer"'
    '"$http_user_agent" "$http_x_forwarded_for" ';
    
    	error_log /var/log/nginx/error.log error;
    	access_log /var/log/nginx/access.log main;
    	sendfile on;
    	keepalive_timeout 65;
    	#gzip on;
    	#将server段,写到各个文件中
    	include /etc/nginx/conf.d/*.conf;
    	#include导入该目录下的所有.conf配置文件
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    配置虚拟主机站点,一个项目一个虚拟主机

     cd /etc/nginx/conf.d
     vi www.bbs.com.conf #虚拟主机配置名一个跟域名一样,这样好找 
     #配置内容
     upstream mybbs{
            #负载均衡,名字随便起,是给proxy_pass或uwsgi_proxy使用
            #server 127.0.0.1:8888 weight=1;
            #server 127.0.0.1:8080 weight=2; #权重
            server  192.168.137.140:9999;
        }
    
    server{
    	listen 80;
    	server_name www.bbs.com;
    	charset utf-8;
    	location / {
    		include    /etc/nginx/uwsgi_params;
    		uwsgi_pass mybbs;
    		#index /www/www.bbs.com/BBS14/app01/templates/app01/login.html;
    	}
    
    	location /static {
    		#可以通过www.bbs.com/static 访问到下面的文件夹中的数据,有nginx实现静态文件的处理
    		alias /www/www.bbs.com/BBS14/static/; 
    
    	}
    	location /media {
    		alias /www/www.bbs.com/BBS14/media/;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    五、uwsgi配置

    cd /www/www.bbs.com/BBS14 
    vi uwsgi.ini
    #配置内容
    [uwsgi]
    #uwsgi监听0.0.0.0:8080 nginx发送的请求,项目以8080端口启动
    #socket=127.0.0.1:8080
    socket=192.168.137.140:9999
    #http=0.0.0.0:8888
    #配置项目根路径,项目的所在目录,改成linux电脑中的路径
    chdir=/www/www.bbs.com/BBS14
    #配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
    wsgi-file=/www/www.bbs.com/BBS14/BBS14/wsgi.py
    #配置启动的进程数
    processes=2
    #配置每个进程的线程数
    threads=2
    #配置启动管理主进程
    master=True
    #配置存放主进程的进程号文件,重启和停止如果该文件
    pidfile=uwsgi.pid
    #配置dump日志记录,配置日志的位置
    daemonize=uwsgi.log
    #如果使用的是虚拟环境,需要配置
    #virtualenv = /home/lhz/.virtualenvs/python37_django2
    home = /home/lhz/.virtualenvs/python37_django
    #plugins = python3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    六、启动项目

    1、启动nginx

    #启动nginx需要root用户权限
    cd /etc/nginx
    sudo nginx
    
    #重启
    sudo nginx -s reload
    #停止
    sudo nginx -s stop
    
    查看nginx运行情况
    ps -aux|grep nginx
    
    #强制删除nginx 
    pkill -9 nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2、启动uwsgi

    #操作uwsgi,要切换到项目的虚拟环境下,使用当前登录用户的权限就可以
    #注意,必须切换到虚拟环境中,再启动uwsgi
    cd ~/.virtualenvs
    workon python37_django2
    
    #2、启动django项目
    cd /www/www.bbs.com/BBS14
    #启动
    uwsgi --ini uwsgi.ini
    #重启
    uwsgi --reload uwsgi.pid
    #停止
    uwsgi --stop uwsgi.pid
    
    启动成功:
    [uWSGI] getting INI configuration from uwsgi.ini
    #查看日志,如果最新的启动日志中,没有显示warning,最后的几行如下面所示就是成功了
    cat uwsgi.log
    
    spawned uWSGI master process (pid: 4621)
    spawned uWSGI worker 1 (pid: 4626, cores: 2)
    spawned uWSGI worker 2 (pid: 4627, cores: 2)
    
    如果在浏览器中出现错误了,可以查看uwsgi.log,
    cd /www/www.bbs.com/BBS14
    cat uwsgi.log
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE
    Mysql详细学习笔记
    OSCP-Vulnhub靶机记录-Election-walkthrough
    python3.11版本pip install ddddocr调用时报错got an unexpected keyword argument ‘det‘ 解决
    嵌入式C 语言函数宏封装妙招
    一文学会如何使用适配器模式
    yt-dlp下载视频多了,IP会不会封禁啊?如果封禁了,怎么办?
    二叉树的具体原理及实现
    【VsCode】VsCode的安装与42个插件大全
    JVM篇---第十一篇
  • 原文地址:https://blog.csdn.net/weixin_46371752/article/details/126221895