Django项目部署(Ubuntu虚拟机-局域网访问)uWSGI 、Nginx的使用

Django项目部署(Ubuntu虚拟机-局域网访问)uWSGI 、Nginx的使用

一、安装虚拟机并开启SSH服务

1、通过VMware安装Ubuntu虚拟机
  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

    通过上述设置,就可以完成Ubuntu虚拟机的安装。
2、开启ssh服务,通Tabby工具连接Ubuntu系统
  • 1、检查是否已安装 SSH 服务
    • 在安装之前,你可以先检查系统是否已经安装了 SSH 服务。使用以下命令查看sshd服务的运行状态:

    • sudo systemctl status ssh
      
    • 如果显示Active: active (running),则表示 SSH 服务已经安装并正在运行,你可以跳过安装步骤,直接进行后续的配置。

    • 如果显示Unit ssh.service could not be found.,则表示系统中未安装 SSH 服务,需要进行安装。

  • 2、安装 OpenSSH 服务器
    • Ubuntu 系统通常使用 OpenSSH 作为 SSH 服务的实现。你可以使用以下命令来安装 OpenSSH 服务器:

    • sudo apt update
      sudo apt install openssh-server -y
      
    • sudo apt update:用于更新系统的软件包列表,确保可以获取到最新的软件包信息。

    • sudo apt install openssh-server:用于安装 OpenSSH 服务器软件包。

  • 3、启动并设置 SSH 服务开机自启
    • 安装完成后,使用以下命令启动 SSH 服务:

    • sudo systemctl start ssh
      
    • 你可以再次使用sudo systemctl status ssh命令来检查 SSH 服务是否已经成功启动。

      为了确保系统在重启后 SSH 服务能够自动启动,可以使用以下命令设置 SSH 服务开机自启:

    • sudo systemctl enable ssh
      
  • 4、配置防火墙(可选)
    • 如果你的系统上启用了防火墙(如ufw),需要允许 SSH 流量通过防火墙。使用以下命令开放 SSH 端口(默认端口为 22):

    • sudo ufw allow ssh
      # 重新加载防火墙规则
      sudo ufw reload
      
  • 5、验证 SSH 服务
    • 你可以在本地使用ssh命令来验证 SSH 服务是否正常工作。打开一个新的终端窗口,使用以下命令连接到本地的 SSH 服务:

    • ssh your_username@localhost
      
    • 其中,your_username是你的 Ubuntu 系统用户名。输入命令后,系统会提示你输入密码,输入正确的密码后,如果成功登录到系统,则表示 SSH 服务已经正常工作。

  • 6、其他配置(可选)
    • 你可以通过编辑/etc/ssh/sshd_config文件来对 SSH 服务进行更多的配置,例如修改 SSH 服务的监听端口、禁止 root 用户登录等。修改完成后,使用以下命令重启 SSH 服务使配置生效:

    • sudo systemctl restart ssh
      
    • 通过以上步骤,你就可以在 Ubuntu 系统中成功安装和配置 SSH 服务,从而实现远程安全登录和管理。

  • 7、使用Tabby工具链接虚拟机
    • 打开tabby工具,选择配置和连接

在这里插入图片描述

  • 创建一个新的ssh连接,虚拟机ip地址,可以通以下命令查看:

  • ip addr show
    
  • 在这里插入图片描述

  • 在这里插入图片描述

  • 完成上述步骤后,就可以连接到Ubuntu系统了。

  • 在这里插入图片描述

二、创建运行Django项目的python虚拟环境

1、使用 virtualenv 工具创建虚拟环境
  • virtualenv 是一个第三方工具,功能更强大,支持 Python 2 和 Python 3,并且可以创建跨版本的虚拟环境。

  • 1、安装 virtualenv:如果系统中尚未安装 virtualenv,可以使用 pip 进行安装。在终端中执行以下命令:

  • sudo apt update
    sudo apt install python3-pip -y
    
  • 配置python第三方包安装源

  • # 配置源,使安装速度变快
    pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
    # 安装virtualenv库
    pip3 install virtualenv
    
  • 2、可以使用以下命令查看当前使用的 virtualenv路径path,并将virtualenv路径添加到 系统PATH 环境变量中

  • # 查看virtualenv路径
    pip3 show virtualenv
    
  • virtualenv脚本所在的目录 /home/your_user/.local/bin/virtualenv 不在系统的 PATH 环境变量中,因此系统无法直接找到该脚本。下面为你介绍几种解决这个问题的方法。

    你可以通过修改用户级别的配置文件,将/home/your_user/.local/bin/virtualenv目录添加到 PATH 环境变量中,这样每次登录系统时该目录都会被包含在 PATH 中。

    • 1、编辑 ~/.bashrc 文件(适用于使用 Bash 作为默认 shell 的情况)
      使用文本编辑器(如 nano)打开 ~/.bashrc 文件:

    • nano ~/.bashrc
      
    • 2、添加 PATH 配置

    • export PATH="$HOME/.local/bin:$PATH"
      
    • 这行代码将 /home/wbk/.local/bin$HOME 等同于 /home/your_user)添加到 PATH 环境变量的开头,这样系统会优先在该目录中查找可执行文件。

      按下 ctrl+x -----> y -----> enter退出保存

      保存并退出编辑器,然后执行以下命令使修改后的 ~/.bashrc 文件立即生效:

      source ~/.bashrc
      
2、创建虚拟环境:选择一个目录,使用以下命令创建虚拟环境,同样将其命名为 django_env。
  • 1、创建目录

  • # 切换到根目录下
    cd /
    # 创建虚拟环境目录
    sudo mkdir /envs
    
  • 2、进入/envs文件。创建python虚拟环境(Ubuntu系统自带python3.8)

  • # 进入envs文件
    cd /envs
    # 创建python3虚拟环境
    virtualenv -p python3 django_env
    

    -p python3 选项指定使用系统中的 Python 3 解释器来创建虚拟环境。

  • 3、如果创建报错:virtualenv: error: argument dest: the destination . is not write-able at /envs 说明权限不足,你可以通过修改目录所有者来解决权限问题,假设当前用户名为 your_username,使用以下命令::

  • sudo chown -R your_username:your_username /envs
    

    your_username 替换为你实际的用户名。

  • 4、激活虚拟环境:与使用 venv 模块创建的虚拟环境激活方式相同,执行以下命令激活:

  • source django_env/bin/activate
    

三、安装mysql数据库

1、安装数据库
  • 如果你确定系统中没有安装 mysqldb,可以使用以下命令进行安装:

  • sudo apt update
    sudo apt install mysql-server -y
    
2、启动数据库
  • 可以使用以下命令启动它:

  • sudo systemctl status mysql
    
  • 若希望服务在系统启动时自动启动,可以使用以下命令设置:

  • sudo systemctl enable mysql
    
3、测试登录,设置root登录密码
  • 如果权限不足,可以尝试以 sudo 用户身份连接数据库:

  • sudo mysql -u root -p
    

    这里第一次直接点’enter’键,就可以进入mysql中

  • 执行以下 SQL 语句修改 root 密码(假设新密码为 new_password):

  • ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
    
  • 刷新权限使修改生效:

  • FLUSH PRIVILEGES;
    
4、创建新用户
  • 使用root用户登录到 mysql:

  • sudo mysql -u root -p
    
  • 创建一个新用户并设置密码,这里以用户名为remote_user,密码为your_password为例:

  • CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password';
    
  • 创建一个指定host地址的用户( 192.168.x.x 可以根据需求设置可以允许连接的地址)

  • CREATE USER 'new_user'@'192.168.x.x' IDENTIFIED BY 'your_password';
    
  • 授予该用户对特定数据库的权限,如果你想让该用户拥有对所有数据库的所有权限,可以使用以下命令:

  • GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
    
  • 创建一个数据库(test_db数据库名称)

  • create database test_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    
  • GRANT ALL PRIVILEGES ON your_database.* TO 'new_user'@'localhost';
    
  • 如果你只想让 remote_user 用户拥有某个特定数据库(例如 test_db)的权限,可以执行以下 SQL 语句:

  • GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'remote_user'@'%';
    
    # 刷新权限使更改生效
    FLUSH PRIVILEGES;
    
5、局域网内其它电脑连接数据库设置
  • 确保 mysql 服务已启动并设置为开机自启

  • 在 Ubuntu 系统中,使用以下命令来检查 MySQL服务的运行状态,并确保它在系统启动时自动启动:

  • # 检查mysql服务状态
    sudo systemctl status mysql
    
    # 若mysql未运行,使用以下命令启动
    sudo systemctl start mysql
    
    # 设置mysql服务开机自启
    sudo systemctl enable mysql
    
  • 修改 MariaDB 配置文件以允许远程连接

  • 默认情况下,MySQL 只允许本地连接。你需要修改 MySQL 的配置文件,使其监听所有可用的网络接口。

    • 1、打开 MySQL 配置文件mysqld.cnf:

      sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
      
    • 2、找到bind-address这一行,将其值从127.0.0.1修改为0.0.0.0,表示监听所有可用的网络接口:

      bind-address  = 0.0.0.0
      

      保存并关闭文件(在nano编辑器中,按Ctrl + X,然后按Y,最后按Enter

    • 3、重启 MySQL 服务使配置生效:

      sudo systemctl restart mysql
      
  • 创建允许远程连接的 MySQL 用户

  • 你需要创建一个新的 MariaDB 用户,并授予该用户从任何 IP 地址(%)连接到数据库的权限。

    • 1、创建一个新用户并设置密码,这里以用户名为remote_user,密码为your_password为例:

      CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password';
      
    • 2、授予该用户对特定数据库的权限,如果你想让该用户拥有对所有数据库的所有权限,可以使用以下命令:

      GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
      

      如果你只想让 remote_user 用户拥有某个特定数据库(例如 test_db)的权限,可以执行以下 SQL 语句:

      GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'remote_user'@'%';
      FLUSH PRIVILEGES;
      
    • 3、刷新权限使更改生效:

      FLUSH PRIVILEGES;
      
    • 4、退出 MySQL:

      EXIT;
      
  • 配置防火墙以允许 MySQL 端口访问

  • 默认情况下,Ubuntu 系统的防火墙(ufw)可能会阻止外部对 mysql 端口(默认是 3306)的访问。你需要开放该端口:

    # 允许3306端口的TCP流量
    sudo ufw allow 3306/tcp
    
    # 重新加载防火墙规则
    sudo ufw reload
    
  • 在其他局域网电脑上测试连接

  • 在其他局域网内的电脑上,使用 MySQL 客户端工具(如 Navicat for MySQL 工具)来连接到 Ubuntu 系统中的 MySQL 数据库。

    • 使用 Navicat for MySQL 工具连接:

      在这里插入图片描述

    • 如果连接报1251错误可以使用以下命令解决:

      -- 修改用户的认证插件为 mysql_native_password
      ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
      -- 刷新权限
      FLUSH PRIVILEGES;
      

四、使用Git工具将Django项目拉取到Ubuntu系统中

1、在Ubuntu系统中安装Git
  • 在安装 Git 之前,建议先更新系统的软件包列表,以确保获取到最新的软件包信息。

    sudo apt update
    
  • 使用 apt 命令来安装 Git 了, 在终端中执行以下命令:

    sudo apt install git -y
    
  • 安装完成后,可以通过查看 Git 的版本信息来验证是否安装成功。在终端中执行以下命令:

    sudo git --version
    

    如果安装成功,终端会输出 Git 的版本号。

  • 安装完成后,建议配置你的用户名和邮箱,这样在使用 Git 进行版本控制时,提交记录会包含你的相关信息。在终端中执行以下命令来配置用户名和邮箱:

    sudo git config --global user.name "Your Name"
    sudo git config --global user.email "your_email@example.com"
    

    "Your Name" 替换为你自己的名字,将 "your_email@example.com" 替换为你自己的邮箱地址。--global 参数表示这是全局配置,会应用到你系统上的所有 Git 仓库。通过以上步骤,你就可以在 Ubuntu 系统中成功安装并配置 Git。

2、在本地主机安装Git,并将项目Push到远程仓库
  • 在本地安装Git(这里以windows系统为例);可以到Git官网下载安装:https://git-scm.com/downloads

  • 1、在Django项目文件内鼠标右击使用Git Bash Here 打开cmd命令窗口

  • 2、第一次创建git库时需要设置user.name和user.email信息:

    git config --global user.name "Your Name"
    git config --global user.email "your_email@example.com"
    
  • 创建本地仓库:

    git init
    

    会在当前文件夹下出现一个隐藏的.git文件夹,说明仓库以创建完毕

  • 在你的项目根目录下创建一个名为 .gitignore 的文件。

  • .gitignore 文件用于指定 Git 版本控制系统应忽略的文件和目录,这样这些文件就不会被纳入版本控制,避免将不必要的文件(如编译生成的文件、日志文件、临时文件等)提交到代码仓库中。以下是设置

    # Byte-compiled / optimized / DLL files
    __pycache__/
    *.py[cod]
    *$py.class
    
    # C extensions
    *.so
    
    # Distribution / packaging
    .vscode/
    .Python
    build/
    develop-eggs/
    dist/
    downloads/
    eggs/
    .eggs/
    lib/
    lib64/
    parts/
    sdist/
    var/
    wheels/
    share/python-wheels/
    *.egg-info/
    .installed.cfg
    *.egg
    MANIFEST
    
    # PyInstaller
    #  Usually these files are written by a python script from a template
    #  before PyInstaller builds the exe, so as to inject date/other infos into it.
    *.manifest
    *.spec
    
    # Installer logs
    pip-log.txt
    pip-delete-this-directory.txt
    
    # Unit test / coverage reports
    htmlcov/
    .tox/
    .nox/
    .coverage
    .coverage.*
    .cache
    nosetests.xml
    coverage.xml
    *.cover
    *.py,cover
    .hypothesis/
    .pytest_cache/
    cover/
    
    # Translations
    *.mo
    *.pot
    
    # Django stuff:
    *.log
    local_settings.py
    db.sqlite3
    db.sqlite3-journal
    
    # Flask stuff:
    instance/
    .webassets-cache
    
    # Scrapy stuff:
    .scrapy
    
    # Sphinx documentation
    docs/_build/
    
    # PyBuilder
    .pybuilder/
    target/
    
    # Jupyter Notebook
    .ipynb_checkpoints
    
    # IPython
    profile_default/
    ipython_config.py
    
    # pyenv
    #   For a library or package, you might want to ignore these files since the code is
    #   intended to run in multiple environments; otherwise, check them in:
    # .python-version
    
    # pipenv
    #   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
    #   However, in case of collaboration, if having platform-specific dependencies or dependencies
    #   having no cross-platform support, pipenv may install dependencies that don't work, or not
    #   install all needed dependencies.
    #Pipfile.lock
    
    # poetry
    #   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
    #   This is especially recommended for binary packages to ensure reproducibility, and is more
    #   commonly ignored for libraries.
    #   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
    #poetry.lock
    
    # pdm
    #   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
    #pdm.lock
    #   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
    #   in version control.
    #   https://pdm.fming.dev/latest/usage/project/#working-with-version-control
    .pdm.toml
    .pdm-python
    .pdm-build/
    
    # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
    __pypackages__/
    
    # Celery stuff
    celerybeat-schedule
    celerybeat.pid
    
    # SageMath parsed files
    *.sage.py
    
    # Environments
    .env
    .venv
    env/
    venv/
    ENV/
    env.bak/
    venv.bak/
    
    # Spyder project settings
    .spyderproject
    .spyproject
    
    # Rope project settings
    .ropeproject
    
    # mkdocs documentation
    /site
    
    # mypy
    .mypy_cache/
    .dmypy.json
    dmypy.json
    
    # Pyre type checker
    .pyre/
    
    # pytype static type analyzer
    .pytype/
    
    # Cython debug symbols
    cython_debug/
    
    # PyCharm
    #  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
    #  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
    #  and can be added to the global gitignore or merged into this file.  For a more nuclear
    #  option (not recommended) you can uncomment the following to ignore the entire idea folder.
    .idea/
    
    # database migrations
    # 除了初始化的这个都不提交
    */migrations/*.py
    !*/migrations/__init__.py
    
  • 创建并编辑好 .gitignore 文件后,将其添加到 Git 仓库中:

    git add .gitignore
    git commit -m "Add .gitignore file"
    
    • 如果某个文件已经被纳入版本控制,即使你在 .gitignore 文件中添加了忽略规则,Git 仍然会跟踪该文件。你需要先使用 git rm --cached <file> 命令将其从版本控制中移除,然后再提交更改。
    • .gitignore 文件中的规则是按行解析的,每行代表一个规则。规则可以使用正则表达式的部分语法,如通配符 *? 等。
  • 查看文件状态:

    git status
    
  • 增加文件到暂存区:git add [filename] (点表示全部文件)

    git add .
    
  • 连接远程仓库:(这里需要现在码云上创建一个仓库,然后操作)

    git remote add origin 远程仓库url(https://gitee.com/xxxxxxxxx.git)
    
  • 上传数据到远程仓库:

    第一次上传需要输入你的码云用户名和密码,在windows系统中可以执行命令免除每次输入:

    git config --global credential.helper manager-core
    

    提交代码到远程仓库中执行命令:

    git push origin master
    
3、在Ubuntu系统中Pull代码,安装Django项目所依赖python包
  • 在Ubuntu系统中创建一个data文件夹,用于存放Django项目文件

    # 创建文件夹
    sudo mkdir /data
    # 开通文件夹权限,要不无法正常拉取代码
    sudo chown -R your_username:your_username /data
    
  • 使用Git命令从远程仓库拉取代码:

    cd /data
    sudo git clone https://gitee.com/xxxxxxx/xxxxxxxx.git
    

    后面如何需要同步远程仓库代码可执行命令:

    第一次同步需要输入你的码云用户名和密码,在Ubuntu系统中可以执行命令免除每次输入:

    sudo git config --global credential.helper store
    

    同步远程仓库代码中执行命令:

    sudo git pull origin master
    
  • 启动Ubuntu系统中python虚拟环境,安装项目依赖包

    • 1、进入虚拟环境安装目录,执行下面语句启动虚拟环境:

      # 进入虚拟环境目录
      cd /envs/django_env/bin/
      # 启动虚拟环境
      source activate
      # 退出虚拟环境
      deactivate
      
    • 2、安装Django项目依赖包: requirements.txt 文件是从本地Django项目导出所有运行所需依赖包信息:

      进入本地Django项目开发环境,执行命令生成 requirements.txt文件:

      pip freeze > requirements.txt
      
      asgiref==3.8.1
      Django==3.2
      mysqlclient==2.0.3
      pillow==10.4.0
      sqlparse==0.5.3
      typing_extensions==4.12.2
      tzdata==2024.2
      

      在Ubuntu系统上安装 mysqlclient 时,可能会遇到缺少编译依赖的问题,因为 mysqlclient 是一个 C 语言扩展模块,需要进行编译。不进行编译安装会报错。

      sudo apt-get install python3-dev default-libmysqlclient-dev build-essential -y
      

      使用以下命令根据 requirements.txt 文件安装所有依赖包:

      pip3 install -r /data/django_demo/requirements.txt
      

五、配置local_settings.py文件,迁移数据库以及启动项目运行

1、在Django项目根目录下创建local_settings.py文件
  • 切换到Django项目根目录(包含settings.py文件的目录下)

    cd /data/django_demo/your_django_project/
    
  • 创建local_settings.py文件

    sudo touch local_settings.py
    
  • 使用vim编辑器进行编辑

    sudo vim local_settings.py
    

    进入 vim 编辑器后,按 i 键进入插入模式,就可以输入配置内容了。输入完成后,按 Esc 键退出插入模式,然后输入 :wq 并按 Enter 键,这会保存文件并退出 vim 编辑器。

    from pathlib import Path
    
    
    # 覆盖 DEBUG 设置
    DEBUG = False
    
    # 设置静态资源路径
    BASE_BASE_DIR = Path(__file__).resolve().parent.parent.parent
    
    # 设置收集静态文件存放路径
    STATIC_ROOT = BASE_BASE_DIR / 'allstatic'
    
    # 设置mysql数据库连接信息
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
    		'NAME': 'your_dataname',
            'USER': 'your_username',
            'PASSWORD': 'your_password',
            'HOST': '127.0.0.1',
            'PORT': 3306,
        }
    }
    
    # 配置允许的主机 设置你允许访问的IP, *表示所有主机
    ALLOWED_HOSTS = ['127.0.0.1', '*']
    
2、执行数据库迁移
  • 在项目的根目录下(包含 manage.py 文件的目录),依次运行以下命令:

    # 生成迁移文件
    python manage.py makemigrations
    # 执行数据库迁移
    python manage.py migrate
    

    makemigrations 命令会检查项目中的模型变化,并生成相应的迁移文件。

    migrate 命令会将这些迁移文件应用到数据库中,创建或更新相应的表。

3、初步启动项目
  • 在项目的根目录下(包含 manage.py 文件的目录),依次运行以下命令:

    python manage.py runserver 0.0.0.0:8000
    
  • 使用虚拟机IP地址本机访问测试(192.168.x.x:8000)

    在这里插入图片描述

    出现上述图片信息,表示我们已经可以通过局域网访问我们的django项目了,只需要在local_settings.py文件中 ALLOWED_HOSTS= [‘添加虚拟机ip地址’] 即可正常访问了。有可能会出现项目静态文件无法加载现象。

4、收集static静态文件
  • 在django项目目录下创建allstatic文件夹

    • 这里以上述文件结构为例:/data/django_demo/

      mkdir allstatic
      
    • 设置文件夹权限

      sudo chown -R your_username:your_username allstatic
      
    • 切换到django项目根目录( manage.py文件目录下 )执行命令收集静态文件:

      python manage.py collectstatic
      

      出现 "197 static files copied to ‘/data/django_demo/allstatic’. " 表示收集静态资源完成。

5、通过uWSGI运行django项目
  • 安装 uWSGI 包

    pip install uwsgi
    
  • 设置 uWSGI 配置文件

    • 1、在django项目根目录下创建django_uwsgi.ini文件

      touch django_uwsgi.ini
      
    • 2、配置django_uwsgi.ini文件

      [uwsgi]
      # 切换到项目目录
      chdir = /data/django_demo/your_django_project/
      # 项目的WSGI模块
      wsgi-file = /data/django_demo/your_django_project/wsgi.py
      # 监听所有网络接口的8000端口
      http = 127.0.0.1:8000
      # 以主进程模式运行
      master = true
      # 设置进程数
      processes = 4
      # 设置线程数
      threads = 2
      # 项目使用的虚拟环境路径
      virtualenv = /envs/django_env/ 
      
    
    
  • 3、执行以下命令启动、后台启动、关闭 uWSGI :

    # 启动uwsgi
    /envs/django_env/bin/uwsgi  --ini /data/django_demo/your_django_project/django_uwsgi.ini
    
    # 后台启动uwsgi
    /envs/django_env/bin/uwsgi  --ini /data/django_demo/your_django_project/django_uwsgi.ini & >/dev/null
    
    # 关闭后台启动uwsgi
    ps -ef | grep /data/django_demo/your_django_project/django_uwsgi.ini | grep -v grep | awk '{print $2}' | xargs kill -9
    
6、通过Nginx监听9000端口代理转发请求以及静态文件请求加载
  • 安装Nginx

    sudo apt update
    sudo apt install nginx -y
    
  • 配置nginx.conf文件,ubuntu系统中nginx.conf文件一般在/etc/nginx/nginx.conf中

    # 进入文件所在目录
    cd /etc/nginx/
    # 复制一份文件,备用
    sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
    # 进行修改文件
    sudo vim nginx.conf
    
  • http{}中设置以下内容:可以根据自己的需求进行修改(这里只在局域网中使用,所以这么设置)

    # uwsgi启动接口
    upstream django {
    	server 127.0.0.1:8000;
    	}
    server {
    	# 监听9000端口
    	listen 9000;
    	# 转发静态文件请求
    	location /static/ {
    		alias /data/django_demo/allstatic/;
    	}
    	# 转发非静态文件请求
    	location / {
    		proxy_pass http://django;
    	}
    }
    
  • 检查配置文件语法、重新加载配置、启动nginx、开机自启动nginx、检查nginx状态、重新启动nginx

    # 检查配置文件语法
    sudo nginx -t  
    # 重新加载配置
    sudo systemctl reload nginx 
    # 启动nginx
    sudo systemctl start nginx
    # 开机自启动nginx
    sudo systemctl enable nginx
    # 检查nginx状态
    sudo systemctl status nginx
    # 重新启动nginx
    sudo systemctl restart nginx
    
  • 防火墙配置,阻断8000端口访问

    # 查看 ufw 是否已经启用
    sudo ufw status
    

    若显示 Status: inactive,表示 ufw 未启用,可使用以下命令启用:

    # 启动防火墙
    sudo ufw enable
    # 阻止所有TCP协议的 8000 端口
    sudo ufw deny 8000/tcp
    # 重新加载生效
    sudo ufw reload
    

六、总结:

  • 1、安装配置Django项目运行所需的环境,例如:python环境、mysql数据库等。
  • 2、拉取本地项目文件并进行配置,例如:local_settings.py文件等。
  • 3、收集static静态资源文件,通过uwsgi运行django项目。
  • 4、通过Nginx监听、代理转发请求完成django项目运行。
  • 5、如果想在远程服务器上运行django项目(可以外网访问),需要更改该uwsgi.ini文件、以及nginx.conf文件即可。
    • uwsgi.ini文件(外网访问)

      [uwsgi]
      # 切换到项目目录
      chdir = /data/django_demo/your_django_project/
      # 项目的WSGI模块
      wsgi-file = /data/django_demo/your_django_project/wsgi.py
      # 监听所有网络接口的8000端口
      socket = 127.0.0.1:8000
      # 以主进程模式运行
      master = true
      # 设置进程数
      processes = 4
      # 设置线程数
      threads = 2
      # 项目使用的虚拟环境路径
      virtualenv = /envs/django_env/ 
      
    • nginx.conf文件(外网访问)

      # uwsgi启动接口
      upstream django {
      	server 127.0.0.1:8000;
      	}
      server {
      	# 监听80端口
      	listen 80;
      	# 转发静态文件请求
      	location /static/ {
      		alias /data/django_demo/allstatic/;
      	}
      	# 转发非静态文件请求
      	location / {
      		uwsgi_pass  django;
              include  uwsgi_params;
      	}
      }
      
  • 6、外网访问,如果需要监听https请求,还需要配置ssl证书,以及域名的解析信息,这里就不赘述了。可参考:(Django项目部署流程
  • 4、通过Nginx监听、代理转发请求完成django项目运行。
  • 5、如果想在远程服务器上运行django项目(可以外网访问),需要更改该uwsgi.ini文件、以及nginx.conf文件即可。
    • uwsgi.ini文件(外网访问)

      [uwsgi]
      # 切换到项目目录
      chdir = /data/django_demo/your_django_project/
      # 项目的WSGI模块
      wsgi-file = /data/django_demo/your_django_project/wsgi.py
      # 监听所有网络接口的8000端口
      socket = 127.0.0.1:8000
      # 以主进程模式运行
      master = true
      # 设置进程数
      processes = 4
      # 设置线程数
      threads = 2
      # 项目使用的虚拟环境路径
      virtualenv = /envs/django_env/ 
      
    • nginx.conf文件(外网访问)

      # uwsgi启动接口
      upstream django {
      	server 127.0.0.1:8000;
      	}
      server {
      	# 监听80端口
      	listen 80;
      	# 转发静态文件请求
      	location /static/ {
      		alias /data/django_demo/allstatic/;
      	}
      	# 转发非静态文件请求
      	location / {
      		uwsgi_pass  django;
              include  uwsgi_params;
      	}
      }
      
  • 6、外网访问,如果需要监听https请求,还需要配置ssl证书,以及域名的解析信息,这里就不赘述了。可参考:(Django项目部署流程
<think>好的,用户想在Ubuntu虚拟机部署Django项目,我需要根据他们提供的引用资料来整理步骤。首先,用户之前提到的引用中提到了安装Apache2、mod_wsgi,还有使用NginxuWSgi的情况。不过用户现在可能更关心基本的部署方法,可能不需要太复杂的配置。 首先,我需要确定用户是初次部署,所以应该从基础开始。根据引用[2],在Ubuntu20.04下部署Django,需要安装虚拟环境和Django。引用[3]提到了使用虚拟环境安装依赖,所以可能需要先创建虚拟环境,安装Django,然后配置服务器。 另外,用户提到的是虚拟机,可能需要处理网络问题,比如让宿主机访问虚拟机内的应用。引用[4]中提到了运行runserver时使用0.0.0.0:8000,这样外部才能访问。所以需要确保Django的开发服务器正确绑定地址。 不过用户可能更倾向于生产环境部署,所以可能需要配置Apache或者Nginx。引用[1]里用的是Apache2和mod_wsgi,而引用[3]用的是NginxuWSgi。需要比较这两种方式的步骤,然后给出两种方法供用户选择。 接下来,步骤应该包括安装Python和虚拟环境,安装Django,创建项目,安装服务器软件(Apache或Nginx),配置服务器,处理静态文件,处理权限,最后测试访问。 需要注意检查配置文件中的路径是否正确,比如项目路径、静态文件路径。还要提醒用户关于ALLOWED_HOSTS的设置,以及可能的防火墙问题,虽然引用[4]提到防火墙已关闭,但可能需要确认。 另外,用户可能遇到依赖问题,所以需要生成requirements.txt并安装依赖包,如引用[3]所述。 最后,生成相关的问题,帮助用户进一步优化或解决可能的问题,比如性能优化、HTTPS配置等。</think>### Ubuntu虚拟机部署Django应用分步指南 #### 一、基础环境配置 1. **更新系统** ```bash sudo apt update && sudo apt upgrade -y ``` 2. **安装Python与虚拟环境** ```bash sudo apt install python3 python3-pip python3-venv -y ``` 3. **创建项目目录** ```bash mkdir ~/django_project && cd ~/django_project ``` #### 二、Django项目部署(开发模式) 1. **创建虚拟环境** ```bash python3 -m venv venv source venv/bin/activate ``` 2. **安装Django** ```bash pip install django==4.2.11 # 版本号参考引用[2] ``` 3. **启动测试服务** ```bash python manage.py runserver 0.0.0.0:8000 # 关键参数见引用[4] ``` - 此时应通过`宿主机IP:8000`访问服务 #### 三、生产环境部署(Apache2+mod_wsgi方案)[^1] 1. **安装依赖组件** ```bash sudo apt install apache2 libapache2-mod-wsgi-py3 ``` 2. **配置文件示例** ```apache # /etc/apache2/sites-available/django.conf <VirtualHost *:80> ServerName your_domain.com DocumentRoot /home/user/django_project Alias /static /home/user/django_project/static <Directory /home/user/django_project/static> Require all granted </Directory> WSGIDaemonProcess django_project python-path=/home/user/django_project python-home=/home/user/django_project/venv WSGIProcessGroup django_project WSGIScriptAlias / /home/user/django_project/project/wsgi.py <Directory /home/user/django_project/project> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost> ``` 3. **关键操作命令** ```bash sudo a2ensite django.conf sudo systemctl reload apache2 ``` #### 四、必要配置调整 1. **设置ALLOWED_HOSTS** ```python # settings.py ALLOWED_HOSTS = ['虚拟机IP', '域名', 'localhost'] ``` 2. **收集静态文件** ```bash python manage.py collectstatic ``` 3. **文件权限设置** ```bash sudo chown :www-data ~/django_project sudo chmod 775 ~/django_project ``` #### 五、验证部署 1. **检查Apache状态** ```bash systemctl status apache2 ``` 2. **查看错误日志** ```bash tail -f /var/log/apache2/error.log ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值