CentOS+xshell 部署 Django

CentOS、Git、Xshell 和 Nginx 的组合是企业环境中常见的部署工具和技术栈。以下是每个工具的角色及其在企业部署中的应用:

1. CentOS

  • 角色:操作系统

  • 应用:CentOS 是一个稳定的、企业级的 Linux 发行版,广泛用于服务器和数据中心。它提供了一个安全、可靠的环境来运行 Web 应用和数据库。

2. Git

  • 角色:版本控制

  • 应用:Git 是一个分布式版本控制系统,用于管理源代码的版本和历史记录。在企业中,它用于代码协作、代码审查和持续集成(CI)流程。GitHub、GitLab 和 Gitee 等平台提供了 Git 仓库托管服务。

3. Xshell

  • 角色:SSH 客户端

  • 应用:Xshell 是一个 Windows 上的 SSH 客户端,用于远程管理和操作服务器。它提供了一个用户友好的界面来连接和管理远程系统,非常适合企业中的系统管理员和开发人员使用。

4. Nginx

  • 角色:Web 服务器和反向代理

  • 应用:Nginx 是一个高性能的 Web 服务器和反向代理服务器。在企业环境中,Nginx 常用于处理 HTTP 请求、负载均衡、SSL 终端、缓存和反向代理等功能。它能够处理大量的并发连接,并且配置灵活,适合于高流量网站和应用程序。

典型企业部署流程

  1. 服务器配置:使用 CentOS 部署服务器环境,安装必需的系统软件和工具。

  2. 版本控制:通过 Git 管理源代码,将应用代码存储在 Git 仓库中。

  3. 代码部署:使用 Git 将代码从仓库部署到服务器上。可以通过自动化工具(如 Jenkins 或 GitLab CI/CD)实现持续集成和持续部署(CI/CD)。

  4. 远程管理:通过 Xshell 或其他 SSH 客户端远程访问和管理服务器,进行维护和故障排除。

  5. Web 服务器:使用 Nginx 作为 Web 服务器和反向代理,配置静态文件服务、代理请求、负载均衡等。

总结

这种组合工具和技术在企业中是常见且广泛应用的,特别是在 Linux 环境中。它们提供了稳定的服务器环境、有效的版本控制、便捷的远程管理和高性能的 Web 服务。对于企业级应用来说,这些工具能够满足从开发到生产的全流程需求。

web部署的本质

image-20240729125121460

购买服务器

CentOS系统(阿里云,腾讯云)

8.136.100.175:通过公网ip进行访问

登录服务器:

image-20240729125623121

xshell 远程链接服务器。并进行控制

  1. 链接服务器:

ssh root@8.136.100.175

image-20240729130303436

输入你安装服务器的时候的密码——登录成功

image-20240729130724847

记住账号和密码

image-20240729130829713

image-20240729130850453

关于端口

ip地址 : 理解成一个电脑

端口:a程序

端口:b程序

端口:c程序

22端口 :其他程序远程链接并控制 (开发22端口)

3306端口:mysql

image-20240729131309159

上传代码

  1. 下载git:去官网下载

  2. 创建仓库

  3. 快速设置— 如果你知道该怎么操作,直接使用下面的地址

    https://gitee.com/zhuhuijun/restaurant_system.git

    我们强烈建议所有的git仓库都有一个README, LICENSE, .gitignore文件

    初始化 readme 文件

    Git入门?查看 帮助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何连接本站, 如何导入仓库

    简易的命令行入门教程:

    Git 全局设置:

    git config --global user.name "朱慧军"
    git config --global user.email "13231970+zhuhuijun@user.noreply.gitee.com"

    创建 git 仓库:

    mkdir restaurant_system
    cd restaurant_system
    git init 
    touch README.md
    git add README.md
    git commit -m "first commit"
    git remote add origin https://gitee.com/zhuhuijun/restaurant_system.git
    git push -u origin "master"

    已有仓库?

    cd existing_git_repo
    git remote add origin https://gitee.com/zhuhuijun/restaurant_system.git
    git push -u origin "master"

  4. image-20240729140240132

  5. 打包代码

    设置 settings.py
    • 确保 DEBUG = False

    • 设置 ALLOWED_HOSTS,包括你的域名或 IP 地址。

    • 配置静态文件和媒体文件:

      python复制代码STATIC_URL = '/static/'
      STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
      ​
      MEDIA_URL = '/media/'
      MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

    在部署 Django 项目之前,确实需要完成一些准备工作。你列出的步骤很好,这里是一个稍微详细的说明:

    1. 生成项目所需的依赖列表: 在激活虚拟环境后,运行以下命令来生成 requirements.txt 文件,记录当前环境中的所有依赖包:

      pip3 freeze > requirements.txt
    2. 安装项目依赖: 将生成的 requirements.txt 文件传输到服务器上(如果你还没有这样做的话),然后在服务器的虚拟环境中运行以下命令来安装所有依赖:

      pip3 install -r requirements.txt
    3. 收集静态文件: 在 settings.py 文件中添加 STATIC_ROOT 配置项,指定静态文件的收集路径:

      STATIC_ROOT = '/var/www/django-blog/static/'

      然后运行以下命令来收集静态文件:

      python manage.py collectstatic

      这个命令会将所有静态文件从 STATICFILES_DIRS 和应用的 static 目录中收集到 STATIC_ROOT 指定的目录中。

    完成这些步骤后,你的 Django 项目应该就准备好部署了。确保服务器上配置了正确的权限,并且你的 Web 服务器(如 Nginx 或 Apache)配置正确地指向了静态文件目录。生成静态文件:

    python manage.py collectstatic
    数据库迁移:
    ython manage.py migrate
  6. 在部署 Django 项目之前,确实需要完成一些准备工作。你列出的步骤很好,这里是一个稍微详细的说明:

    1. 生成项目所需的依赖列表: 在激活虚拟环境后,运行以下命令来生成 requirements.txt 文件,记录当前环境中的所有依赖包:

      pip3 freeze > requirements.txt
    2. 安装项目依赖: 将生成的 requirements.txt 文件传输到服务器上(如果你还没有这样做的话),然后在服务器的虚拟环境中运行以下命令来安装所有依赖:

      pip3 install -r requirements.txt
    3. 收集静态文件: 在 settings.py 文件中添加 STATIC_ROOT 配置项,指定静态文件的收集路径:

      STATIC_ROOT = '/var/www/django-blog/static/'

      然后运行以下命令来收集静态文件:

      python manage.py collectstatic

      这个命令会将所有静态文件从 STATICFILES_DIRS 和应用的 static 目录中收集到 STATIC_ROOT 指定的目录中。

    完成这些步骤后,你的 Django 项目应该就准备好部署了。确保服务器上配置了正确的权限,并且你的 Web 服务器(如 Nginx 或 Apache)配置正确地指向了静态文件目录。

  7. /var/www/django-blog/static/ 这个路径是服务器上静态文件的收集目录,不需要在本地开发环境中创建这个目录。

    在本地开发环境中,静态文件通常保存在 static/ 目录下或者配置的 STATICFILES_DIRS 中。collectstatic 命令会将这些文件收集到你在 settings.py 中配置的 STATIC_ROOT 路径。

    本地开发环境

    在本地开发环境中,你可以继续使用 DEBUG=True 来方便开发和调试,Django 会自动处理静态文件:

    1. 静态文件路径配置: 在本地开发时,通常你会在 settings.py 中设置 STATIC_URL

      STATIC_URL = '/static/'
    2. 静态文件目录: 在本地开发时,静态文件一般存放在项目的 static/ 目录中,或者通过 STATICFILES_DIRS 配置指定的目录中。

    服务器环境

    在服务器上,你需要设置 STATIC_ROOT 来指定静态文件收集目录,并确保该目录存在:

    1. 创建目录: 登录到服务器,使用以下命令创建目录:

      sudo mkdir -p /var/www/django-blog/static/
    2. 设置权限: 确保 Django 有权限写入该目录:

      sudo chown -R youruser:yourgroup /var/www/django-blog/static/
      sudo chmod -R 755 /var/www/django-blog/static/
    3. 收集静态文件: 在服务器上的虚拟环境中运行:

      python manage.py collectstatic

      这个命令将会把所有静态文件收集到 STATIC_ROOT 指定的目录中。

    所以,在本地开发环境不需要创建 /var/www/django-blog/static/ 目录,只需确保在部署到服务器之前配置好静态文件的相关设置,并在服务器上进行目录创建和权限配置。

  8. 在gitee上创建仓库

    1. https://gitee.com/zhuhuijun/xiaozhu_logs.git

    2. 这个链接指代远程仓库

    3. 不需要上传的文件。比如:本地的虚拟环境等

    4. image-20240729134511889

    5. # Byte-compiled / optimized / DLL files
      __pycache__/
      *.py[cod]
      *$py.class
      ​
      # C extensions
      *.so
      ​
      # Distribution / packaging
      .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/
  9. 命令 需要在你的项目目录这里

    1. 一次性的命令

    2. git config --global user.name "朱慧军"
      git config --global user.email "13231970+zhuhuijun@user.noreply.gitee.com"
    3. mkdir restaurant_system
      cd restaurant_system
      git init 
      git remote add origin https://gitee.com/zhuhuijun/restaurant_system.git
    4. 这些命令用于在 Git 中初始化一个新的本地仓库并将其与远程仓库关联。

      1. cd restaurant_system:

        • cd 是 “change directory” 的缩写,用于更改当前工作目录。

        • restaurant_system 是你要进入的目录名。这个目录应该是你的 Django 项目所在的目录。

      2. git init:

        • 这个命令用于在当前目录(即 restaurant_system)初始化一个新的 Git 仓库。

        • 执行这个命令后,Git 会在该目录中创建一个 .git 子目录,其中包含所有必要的文件和目录结构,以便跟踪版本控制。

      3. git remote add origin https://gitee.com/zhuhuijun/restaurant_system.git:

        • git remote add 用于添加一个新的远程仓库到你的本地 Git 仓库。

        • origin 是这个远程仓库的名称,通常用作默认的远程仓库别名。你可以使用其他名称,但 origin 是约定俗成的默认名称。

        • https://gitee.com/zhuhuijun/restaurant_system.git 是远程仓库的 URL。在这里,它指向你在 Gitee 上创建的仓库地址。

      通过这条命令,你将本地的 Git 仓库与 Gitee 上的远程仓库建立了连接。之后,你可以使用 git push 将本地的更改推送到 Gitee 上的远程仓库,使用 git pull 从远程仓库拉取更新等。

    5. 经常执行

    6. git add .
      git commit -m '注释'
      git push origin master
    7. 好的,这里是将本地项目初始化为 Git 仓库并推送到远程仓库的完整过程总结:

      1. 初始化 Git 仓库

      在项目目录下初始化一个空的 Git 仓库:

      git init

      2. 添加远程仓库

      将远程仓库地址添加到本地 Git 仓库中:

      git remote add origin https://gitee.com/zhuhuijun/xiaozhu_logs.git

      3. 添加文件到暂存区

      将所有文件添加到 Git 的暂存区:

      git add .

      4. 提交更改

      提交暂存区的更改,并写一条提交信息:

      git commit -m "Initial commit"

      5. 推送到远程仓库

      将本地仓库的内容推送到远程仓库,并将本地 master 分支与远程 master 分支关联:

      git push -u origin master

      整个过程的命令顺序

      git init
      git remote add origin https://gitee.com/zhuhuijun/xiaozhu_logs.git
      git add .
      git commit -m "Initial commit"
      git push -u origin master

      执行完以上命令后,你的项目就会被推送到 Gitee 上的远程仓库

  10. 安装git

    yum install git -y

    第一次

    mkidrs data
    cd /data/
    mkidrs  www
    cd /data/www  
    ​
    ​
    git clone  https://gitee.com/zhuhuijun/restaurant_system.git 

    之后

    cd /data/www/restaurant_system/
    git pull origin master
  11. 安装环境

    1. python

    2. 安装gcc

      yun install gcc -y

      安装python依赖

      sudo yum install zlib zlib-devel -y
      sudo yum install bzip2 bzip2-devel -y
      sudo yum install ncurses ncurses-devel -y
      sudo yum install readline readline-devel -y
      sudo yum install openssl openssl-devel -y
      sudo yum install xz xz-devel -y
      sudo yum install sqlite sqlite-devel -y
      sudo yum install gdbm gdbm-devel -y
      sudo yum install tk tk-devel -y
      sudo yum install mysql-devel -y
      sudo yum install python-devel -y
      sudo yum install libffi-devel -y

      解释

      这些命令用于在 CentOS 系统上安装一些软件包和开发库,它们通常用于支持 Python 的编译和运行,尤其是在构建 Python 环境时。每个命令的作用如下:

      1. yum install zlib zlib-devel -y:

        • zlib 是一个数据压缩库。

        • zlib-develzlib 的开发库,包含头文件和开发工具,用于编译依赖 zlib 的软件。

        • -y 选项自动确认所有安装操作,避免需要手动确认。

      2. yum install bzip2 bzip2-devel -y:

        • bzip2 是一个数据压缩工具。

        • bzip2-develbzip2 的开发库,包含头文件和开发工具,用于编译依赖 bzip2 的软件。

      3. yum install ncurses ncurses-devel -y:

        • ncurses 是一个库,用于支持终端上的文本用户界面。

        • ncurses-develncurses 的开发库,包含头文件和开发工具,用于编译依赖 ncurses 的软件。

      4. yum install readline readline-devel -y:

        • readline 是一个用于读取输入的库,常用于提供命令行编辑功能。

        • readline-develreadline 的开发库,包含头文件和开发工具,用于编译依赖 readline 的软件。

      5. yum install openssl openssl-devel -y:

        • openssl 是一个用于实现安全通信的工具和库。

        • openssl-developenssl 的开发库,包含头文件和开发工具,用于编译依赖 openssl 的软件。

      6. yum install xz xz-devel -y:

        • xz 是一个数据压缩工具,使用 xz 格式。

        • xz-develxz 的开发库,包含头文件和开发工具,用于编译依赖 xz 的软件。

      7. yum install sqlite sqlite-devel -y:

        • sqlite 是一个轻量级的关系数据库管理系统。

        • sqlite-develsqlite 的开发库,包含头文件和开发工具,用于编译依赖 sqlite 的软件。

      8. yum install gdbm gdbm-devel -y:

        • gdbm 是 GNU 数据库管理库。

        • gdbm-develgdbm 的开发库,包含头文件和开发工具,用于编译依赖 gdbm 的软件。

      9. yum install tk tk-devel -y:

        • tk 是一个用于创建图形用户界面的工具包。

        • tk-develtk 的开发库,包含头文件和开发工具,用于编译依赖 tk 的软件。

      10. yum install mysql-devel -y:

        • mysql-devel 是 MySQL 数据库的开发库,包含头文件和开发工具,用于编译依赖 MySQL 的软件。

      11. yum install python-devel -y:

        • python-devel 是 Python 的开发库,包含头文件和开发工具,用于编译 Python 扩展模块。

      12. yum install libffi-devel -y:

        • libffi 是一个用于调用 C 函数的库。

        • libffi-devellibffi 的开发库,包含头文件和开发工具,用于编译依赖 libffi 的软件。

      yum install wget -y
      华为云镜像
      cd /data/
      wget https://mirrors.huaweicloud.com/python/3.9.5/Python-3.9.5.tgz
      ​

      以下是你在设置 Python 和 pip 过程中所执行的步骤总结:

      1. 下载和安装 Python 源码

      1. 下载 Python 源码

      2. 解压源码包

        • 尝试使用 tar 解压文件,但出现了 gzip: stdin: unexpected end of filetar: Unexpected EOF in archive 错误。

        • 发现下载的文件大小为 78K,这表明文件可能损坏或下载不完全。

      3. 删除损坏的文件

        • 使用 rm 命令删除了损坏的文件 Python-3.10.8.tgz

      4. 重新下载并验证

        • 从华为云镜像重新下载 Python 3.10.8 源码,并成功保存为 Python-3.10.8.tgz

        • 重新解压文件:tar xzf Python-3.9.5.tgz

      5. 编译和安装

        • 进入解压后的目录,运行以下命令来配置、编译和安装 Python:

          cd Python-3.9.5/
          ./configure 
          make all
          make install

      2. 配置 pip

      1. pip3.9 设置豆瓣源

        • 使用以下命令配置 pip3.9 使用豆瓣源:

          pip3.9 config set global.index-url https://pypi.douban.com/simple/
      2. 验证配置

        • 使用以下命令确认配置:

          pip3.9 config get global.index-url
      3. 使用豆瓣源安装包

        • 使用 pip3.9 安装包,例如:

          pip3.9 install requests

      遇到的问题和解决

      • 文件下载问题

        • 初次下载的文件可能损坏,导致解压失败。通过从可靠的镜像重新下载文件解决了问题。

      • 配置源失败

        • 检查配置命令是否正确,确保 pip 版本正确匹配。

      希望这个总结对你有帮助!如果有其他问题,随时告诉我。

    3. 数据库

      1. 下载最新的 SQLite 版本

        cd /tmp
        wget https://www.sqlite.org/2024/sqlite-autoconf-3420000.tar.gz
      2. 解压并安装 SQLite

        tar xzf sqlite-autoconf-3420000.tar.gz
        cd sqlite-autoconf-3420000
        ./configure --prefix=/usr/local
        make
        make install
      3. 验证安装

        验证 SQLite 已成功安装并使用新版本:

        sqlite3 --version

        你应该看到 3.8.3 或更高版本。

      重新编译 Python 以使用新的 SQLite

      如果需要,你可以重新编译 Python 以确保它使用新的 SQLite 版本:

      cd Python-3.9.5/
      ./configure
      make all
      make install

      验证安装

      验证 SQLite 已成功安装并使用新版本:

      sqlite3 --version

      查找新版本的 SQLite 库路径

      ldconfig -p | grep sqlit

      设置环境变量

      确保 /usr/local/lib 在你的 LD_LIBRARY_PATH 环境变量中:

      export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    4. 虚拟环境

      • 安装vritualenv

      • cd /data/
        pip3.9 install virtualenv
      • 创建虚拟环境

         mkdir /envs
         cd /envs
         virtualenv /envds/nb --pyhton=python3.9 
      • 激活虚拟环境

        source /envs/nb/bin/activate
        pip install django
        项目的所有依赖,可以使用以下命令安装所有依赖:
        pip3 install -r requirements.txt

        也可以这样的激活运行。只是和本地的一样。效果比较差。不建议执行

        image-20240729153341813

    5. uwsgi

      • 安装

        source /envs/nb/bin/activate
        pip install uwsgi
      • 命令行(繁琐,每次输入)

        cd /data/www/rsetaurant_system/
        ls
        uwgi --http :8080 --wsgi-file wsgi.py --callable application

      uWSGI 配置文件 (nb_uwsgi.ini)

      [uwsgi]
      # 绑定到本地端口或 UNIX 套接字
      socket = 127.0.0.1:8001
      ​
      # 指定 Django 项目的根目录
      chdir = /data/www/xiaozhu_logs/
      ​
      # 指定 WSGI 文件路径
      wsgi-file = /data/www/xiaozhu_logs/mysite/wsgi.py
      ​
      # 设置 WSGI callable 名称
      callable = application
      ​
      # 进程数量
      processes = 4
      ​
      # 指定虚拟环境路径
      virtualenv = /envs/nb/
      ​
      # 启用 master 进程管理
      master = true
      ​
      # 日志文件
      logto = /var/log/uwsgi/uwsgi.log
      ​
      # 启用清理功能
      vacuum = true
      ​
      • 解释

        这是一个用于 uWSGI 配置的示例文件,专门用于部署 Django 项目。以下是每个配置选项的详细解释:

        ini复制代码[uwsgi]
        # 绑定到本地端口或 UNIX 套接字
        socket = 127.0.0.1:8001
        • socket:指定 uWSGI 监听的地址和端口(在本例中为 127.0.0.1:8001)。也可以使用 UNIX 套接字,例如 unix:/tmp/uwsgi.sock

        ini复制代码# 指定 Django 项目的根目录
        chdir = /data/www/xiaozhu_logs/
        • chdir:设置工作目录为 Django 项目的根目录,这样 uWSGI 就会在此目录下查找 WSGI 文件和其他项目文件。

        ini复制代码# 指定 WSGI 文件路径
        wsgi-file = /data/www/xiaozhu_logs/mysite/wsgi.py
        • wsgi-file:指定 Django 项目的 WSGI 文件路径。uWSGI 将使用这个文件来启动 Django 应用。

        ini复制代码# 设置 WSGI callable 名称
        callable = application
        • callable:指定 WSGI 应用的 callable 名称。通常是 application,这是 Django 默认的 WSGI callable 名称。

        ini复制代码# 进程数量
        processes = 4
        • processes:指定 uWSGI 启动的工作进程数量。增加进程数量可以提高并发处理能力。

        ini复制代码# 指定虚拟环境路径
        virtualenv = /envs/nb/
        • virtualenv:指定 Python 虚拟环境的路径。uWSGI 将使用这个虚拟环境来运行 Django 应用,以确保使用正确的 Python 版本和依赖包。

        ini复制代码# 启用 master 进程管理
        master = true
        • master:启用主进程管理。主进程会管理 worker 进程的生命周期,并提供一些额外的功能,比如重载和优雅的停止。

        ini复制代码# 日志文件
        logto = /var/log/uwsgi/uwsgi.log
        • logto:指定 uWSGI 日志文件的路径,用于记录 uWSGI 的运行日志。

        ini复制代码# 启用清理功能
        vacuum = true
        • vacuum:启用清理功能。在 uWSGI 停止时,它会自动删除创建的套接字文件和 PID 文件等。

      • 启动

        source /envs/nb/bin/activate
        uwsgi --ini nb_uwsgi.ini
        ​
        uwsgi --ini nb_uwsgi.ini & 后台运行 
      • 停止

      • image-20240729155957671

        ps -ef|grep nb_uwsgi.ini
        Kill -9 12648
        ​
        ​
    6. nginx

      • 安装:在任何目录下面都可以

        yum install nginx -y

      • 配置:创建 Nginx 配置文件 /etc/nginx/conf.d/xiaozhu_logs.conf

      • nginx的默认配置文件路径

      • image-20240729161020396

      • cd /etc/nginx/
        ​
        删除默认的nginx.conf
        rm nginx.conf
        ​
        新建 nginx.conf + 加拷贝内容 + 保存
        cd /etc/nginx/
        vim nginx.conf 创建并打开
        i --------编辑模式
        粘贴
        按一下:ESC键
        :wq 保存并退出
        :Wq! 强制退出
        cat nginx.conf 查看文件
        ​
      user nginx;
      worker_processes auto;
      error_log /var/log/nginx/error.log;
      pid /run/nginx.pid;
      ​
      # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
      include /usr/share/nginx/modules/*.conf;
      ​
      events {
          worker_connections 1024;
      }
      ​
      http {
          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 /var/log/nginx/access.log main;
      ​
          sendfile on;
          tcp_nopush on;
          tcp_nodelay on;
          keepalive_timeout 65;
          types_hash_max_size 4096;
          include /etc/nginx/mime.types;
          default_type application/octet-stream;
      ​
          upstream flask {
              server 127.0.0.1:8001;
          }
      ​
          server {
              listen 80;
              server_name 8.136.100.175;
      ​
              location / {
                  include uwsgi_params;
                  uwsgi_pass 127.0.0.1:8001;
              }
      ​
              location /static/ {
                  alias /data/www/xiaozhu_logs/users/static/;
              }
      ​
              location /media/ {
                  alias /data/www/xiaozhu_logs/media/;
              }
          }
      }
      ​
      • 配置解释

        1. 全局配置

          • user nginx;:指定 Nginx 进程运行的用户。

          • worker_processes auto;:根据系统的 CPU 核心数自动设置工作进程的数量。

          • error_log /var/log/nginx/error.log;:指定错误日志文件的位置。

          • pid /run/nginx.pid;:指定 Nginx 进程 ID 文件的位置。

        2. 动态模块加载

          • include /usr/share/nginx/modules/*.conf;:加载动态模块配置。

        3. 事件配置

          • worker_connections 1024;:每个工作进程允许的最大连接数。

        4. HTTP 配置

          • log_format main ...:定义访问日志的格式。

          • access_log /var/log/nginx/access.log main;:指定访问日志文件的位置。

          • sendfile on;tcp_nopush on;tcp_nodelay on;:提高文件传输性能。

          • keepalive_timeout 65;:保持连接的超时时间。

          • types_hash_max_size 4096;include /etc/nginx/mime.types;default_type application/octet-stream;:MIME 类型设置。

        5. 上游服务器配置

          • upstream flask { ... }:定义一个名为 flask 的上游服务器组,其中包括 127.0.0.1:8001。如果你的 Django 应用使用 uWSGI 作为 WSGI 服务器,这里的 flask 可以改为 django

        6. 服务器配置

          • listen 80;:监听 80 端口。

          • server_name 8.136.100.175;:指定服务器名称或 IP 地址。替换为你的实际域名或 IP 地址。

          • location / { ... }:处理根路径的请求,转发到 uWSGI。

          • location /static/ { ... }:处理静态文件请求,将其映射到静态文件路径。

          • location /media/ { ... }:处理媒体文件请求,将其映射到媒体文件路径。

        配置步骤

        1. 保存配置文件: 将上述配置保存为 /etc/nginx/nginx.conf/etc/nginx/conf.d/myproject.conf,具体路径取决于你的 Nginx 配置结构。

        2. 检查配置文件: 确保配置文件没有语法错误:

          bash
          复制代码
          sudo nginx -t
        3. 重新加载 Nginx: 应用配置更改:

          bash
          复制代码
          sudo systemctl reload nginx
        4. 确保 uWSGI 正在运行: 确保 uWSGI 已经在 127.0.0.1:8001 上监听。如果没有,请启动 uWSGI 并确保它运行正常。

        5. 检查日志文件: 监控 Nginx 错误日志和访问日志:

          bash复制代码tail -f /var/log/nginx/error.log
          tail -f /var/log/nginx/access.log

        这些步骤和配置应该能帮助你正确配置 Nginx 以反向代理到 uWSGI,并处理 Django 应用的静态和媒体文件

      • 启动Nginx

      • 开机需要重新启动

        systemctl start nginx
        systemctl stop nginx
        systemctl restart nginx

        这些是用于管理 Nginx 服务的 systemctl 命令,允许你启动、停止和重启 Nginx。以下是每个命令的详细说明:

        启动 Nginx

        sudo systemctl start nginx
        • 作用:启动 Nginx 服务。如果 Nginx 尚未运行,这个命令会启动它。

        停止 Nginx

        sudo systemctl stop nginx
        • 作用:停止 Nginx 服务。如果 Nginx 正在运行,这个命令会停止它。注意,停止服务会使 Nginx 不再处理任何请求,可能会导致网站不可访问。

        重启 Nginx

        sudo systemctl restart nginx
        • 作用:重启 Nginx 服务。这个命令会先停止 Nginx,然后再重新启动它。用于应用配置更改或恢复服务的正常运行状态。

        额外命令

        除了上述命令,还有一些其他有用的 systemctl 命令:

        • 重新加载配置(不重启服务,应用配置更改而不中断服务):

          sudo systemctl reload nginx
        • 查看 Nginx 服务状态

          sudo systemctl status nginx
          • 作用:显示 Nginx 服务的当前状态,包括是否正在运行、启动时间以及最新的日志条目。

        示例

        1. 启动 Nginx

          sudo systemctl start nginx

          启动 Nginx 后,可以通过访问你的服务器 IP 或域名来验证是否正常工作。

        2. 停止 Nginx

          sudo systemctl stop nginx

          停止 Nginx 后,网站将变得不可访问。

        3. 重启 Nginx

          sudo systemctl restart nginx

          适用于应用配置更改后的操作。

        4. 重新加载配置

          sudo systemctl reload nginx

          应用配置更改而不中断服务。

        5. 查看状态

          sudo systemctl status nginx
        • 开机自己启动

        • cd /etc/nginx/
          ​
          systemctl enable nginx
          systemctl start nginx
          ​
          在我们修改代码。要重新启动这个
          systemctl restart nginx

          image-20240729163751432


看起来你正在递归删除 Python-3.9.5 目录及其内容。如果你看到类似 rm: cannot remove 'Python-3.9.5/Mac/BuildScript/scripts': Directory not empty 的错误,说明该目录还有一些文件或子目录尚未删除。你可以继续使用 rm -r 命令递归地删除目录中的所有内容,或使用更强制的选项来确保删除。

以下是几种解决方案:

删除 Python 源码目录

rm -r /data/Python-3.9.5

使用 rm -rf 强制删除

为了确保删除 Python-3.9.5 目录及其所有内容,可以使用 rm -rf 命令。这个命令会递归删除目录及其所有内容,并强制执行:

rm -rf /data/Python-3.9.5

注意:使用 rm -rf 命令要非常小心,因为它会删除指定目录及其所有内容,无法恢复。

验证删除

删除完成后,可以验证 Python-3.9.5 目录是否已被成功删除:

ls /data

确保目录不再存在。

继续 Python 安装

  1. 重新下载并解压 Python 源码

    进入 /data 目录并重新下载 Python 3.9.5 的源码:

    cd /data
    wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
    tar xvf Python-3.9.5.tgz
    cd Python-3.9.5
  2. 配置和编译 Python

    配置和编译 Python:

    ./configure --enable-optimizations
    make
    sudo make altinstall
  3. 创建新的虚拟环境

    使用新的 Python 版本创建虚拟环境:

    python3.9 -m venv /data/www/xiaozhu_logs/env

    激活虚拟环境:

    source /data/www/xiaozhu_logs/env/bin/activate
  4. 安装 Django 和其他依赖

    安装 Django 和其他项目所需的依赖:

    pip install --upgrade pip
    pip install -r /data/www/xiaozhu_logs/requirements.txt
  5. 检查 SQLite 版本

    确保虚拟环境中使用的是最新的 SQLite 版本:

    python -c "import sqlite3; print(sqlite3.sqlite_version)"
  6. 重启服务

    重启 uWSGI 和 Nginx 服务,以确保更新生效:

    sudo systemctl restart uwsgi
    sudo systemctl restart nginx

这样,你就可以重新安装 Python 和配置环境。如果你遇到其他问题或需要进一步帮助,请告诉我!


你的虚拟环境中的 SQLite 版本是 3.7.17,这确实低于 Django 4.2.14 对 SQLite 3.8.3 的要求。这就是为什么你遇到 deterministic=True requires SQLite 3.8.3 or higher 错误的原因。

解决方法

  1. 更新 SQLite

    你需要更新虚拟环境中的 SQLite 版本。通常,虚拟环境中的 SQLite 是与系统的 SQLite 库绑定的,因此你需要确保系统的 SQLite 库也是最新版本。以下是一些步骤来解决这个问题:

    对于 CentOS/RHEL 系统,安装和更新 SQLite:

    sudo yum update sqlite sqlite-devel

    对于 Ubuntu/Debian 系统,更新 SQLite:

    sudo apt-get update
    sudo apt-get install sqlite3 libsqlite3-dev

    从源码编译和安装 SQLite

    如果系统软件包管理器没有提供最新版本的 SQLite,你可能需要从源码编译和安装:

    # 下载最新的 SQLite 源码
    wget https://www.sqlite.org/2023/sqlite-autoconf-3390400.tar.gz
    ​
    # 解压缩
    tar xvfz sqlite-autoconf-3390400.tar.gz
    cd sqlite-autoconf-3390400
    ​
    # 编译并安装
    ./configure
    make
    sudo make install
  2. 重新编译 Python

    如果系统的 SQLite 库更新后,虚拟环境中的 SQLite 版本仍然较低,你可能需要重新编译 Python 以确保其使用新的 SQLite 版本。可以从源码重新编译 Python:

    # 下载 Python 源码
    wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
    ​
    # 解压缩
    tar xvf Python-3.9.5.tgz
    cd Python-3.9.5
    ​
    # 配置和编译
    ./configure --enable-optimizations
    make
    sudo make altinstall

    重新编译 Python 后,重新创建虚拟环境并安装所需的包:

    # 删除旧的虚拟环境
    rm -rf /data/www/xiaozhu_logs/env
    ​
    # 创建新的虚拟环境
    python3.9 -m venv /data/www/xiaozhu_logs/env
    ​
    # 激活虚拟环境
    source /data/www/xiaozhu_logs/env/bin/activate
    ​
    # 安装 Django 和其他依赖
    pip install django
  3. 确认环境设置

    确保你的虚拟环境中使用的是新的 SQLite 库。激活虚拟环境后,重新确认 SQLite 版本:

    source /data/www/xiaozhu_logs/env/bin/activate
    python -c "import sqlite3; print(sqlite3.sqlite_version)"
  4. 重启服务

    更新 SQLite 和 Python 后,重新启动 uWSGI 和 Nginx 服务:

    sudo systemctl restart uwsgi
    sudo systemctl restart nginx

总结

更新虚拟环境中的 SQLite 版本至关重要,以确保兼容 Django 的要求。如果你遵循上述步骤来更新 SQLite 和重新编译 Python,应该能够解决 deterministic=True requires SQLite 3.8.3 or higher 错误。如果遇到其他问题或需要进一步帮助,请告知!


手动下载并上传

如果在服务器上下载失败,你可以在本地计算机上手动下载文件,然后上传到服务器:

  1. 在本地计算机上下载

    • 打开 SQLite 官方下载页面 或 清华大学镜像站。

    • 选择合适版本并下载。

  2. 上传文件到服务器

    • 使用

      scp

      或其他文件传输工具将下载的文件上传到服务器。例如:

      bash
      复制代码
      scp sqlite-autoconf-3420000.tar.gz user@yourserver:/path/to/your/directory
  3. 在服务器上解压并安装

    bash复制代码cd /path/to/your/directory
    tar xvf sqlite-autoconf-3420000.tar.gz
    cd sqlite-autoconf-3420000
    ./configure
    make
    sudo make install

总结

  1. 确认下载链接:确保使用的链接是正确的,并且文件存在。

  2. 尝试其他版本:如果指定版本不可用,可以尝试其他版本。

  3. 手动下载并上传:如果在服务器上下载失败,可以手动下载文件并上传到服务器


关于Sqlite可以从下载

看起来你尝试下载 SQLite 3.4.1 版本的源码包时遇到了 404 错误。可能是因为该版本的源码包不存在或链接有误。

解决方法

  1. 确认版本号

    • SQLite 3.4.1 版本相对较旧,可能已经不再在 GitHub 的官方发布页面上提供。

  2. 尝试其他版本或更新版本

    • 如果你能使用较新的版本,请尝试下载更高版本的 SQLite 源码。你可以从 SQLite GitHub Releases 页面 查找最新的稳定版本。

  3. 从历史版本下载

    • 如果你必须使用 SQLite 3.4.1 版本,你可以尝试在 SQLite 旧版本页面 查找并下载所需的版本。

示例操作步骤

下载较新版本的 SQLite
  1. 从 GitHub Releases 页面下载

    例如,下载 SQLite 3.39.4 版本:

    wget https://github.com/sqlite/sqlite/archive/refs/tags/version-3.39.4.tar.gz -O sqlite-3.39.4.tar.gz
  2. 解压和安装

    tar xvf sqlite-3.39.4.tar.gz
    cd sqlite-version-3.39.4
    ./configure
    make
    sudo make install
手动下载历史版本

如果确实需要 SQLite 3.4.1 版本,可以尝试在其他镜像站点或网站查找历史版本。手动下载并上传到服务器,然后解压并安装。

例子:手动下载和上传

  1. 手动下载

  2. 上传到服务器

    scp sqlite-autoconf-3.4.1.tar.gz user@yourserver:/path/to/your/directory
  3. 解压和安装

    cd /path/to/your/directory
    tar xvf sqlite-autoconf-3.4.1.tar.gz
    cd sqlite-autoconf-3.4.1
    ./configure
    make
    sudo make install

总结

  • 检查 GitHub Releases 页面:找出可用的版本并下载。

  • 手动下载和上传:如果需要特定版本,可以在其他地方找到并上传到服务器。

尽管你已经成功安装了 SQLite 3.39.4,但你的 Python 环境仍然显示使用的是 SQLite 3.7.17。这通常表明 Python 在编译时链接到了旧版本的 SQLite 库。要解决这个问题,你需要重新编译 Python 以确保它使用新的 SQLite 版本。

重新编译 Python 步骤

  1. 确认 SQLite 库的位置: 确保新的 SQLite 库已正确安装,并确定其路径。例如,你可以用以下命令查找新安装的 SQLite 库文件:

    find / -name libsqlite3.so 2>/dev/null

    你找到了多个 libsqlite3.so 文件。为了确保你的 Python 使用的是最新的 SQLite 版本,需要将新的库文件路径添加到 LD_LIBRARY_PATH 中。你可以按照以下步骤操作:

    1. 设置环境变量

      将包含新 SQLite 库的路径添加到 LD_LIBRARY_PATH 环境变量中。根据你提供的路径,最可能的是 /data/sqlite-version-3.39.4/.libs//usr/local/lib/。例如:

      export LD_LIBRARY_PATH=/data/sqlite-version-3.39.4/.libs:$LD_LIBRARY_PATH

      或者:

      export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    2. 验证环境变量

      确保环境变量已正确设置:

      echo $LD_LIBRARY_PATH

      你应该看到你刚刚设置的路径。

    3. 重新编译 Python

      如果你还没有重新编译 Python,请清理旧的编译文件并重新配置 Python:

      cd /path/to/python-source
      make clean
      ./configure --prefix=/usr/local --with-sqlite3=/data/sqlite-version-3.39.4

      或者:

      ./configure --prefix=/usr/local

      然后编译并安装 Python:

      make
      sudo make install
    4. 验证 SQLite 版本

      在 Python 环境中验证 SQLite 版本是否已更新:

      import sqlite3
      print(sqlite3.sqlite_version)

      你应该看到 3.39.4 版本号。

    通过这些步骤,你应该能够确保 Python 使用的是最新版本的 SQLite。如果你在过程中遇到任何问题,请告诉我,我可以帮助你解决。


MySQL

安装

  1. yum install mariadb-server -y  :服务端
    yum install mariadb -y :客户端
  2. 授权

    mysql -u root -p
    • image-20240730132059845

  • 你的 SQL 语句中有一些小错误和不完整的部分。下面是修正后的 SQL 语句,包括创建数据库、创建用户、授权权限等步骤。

    创建数据库

    CREATE DATABASE day280b DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    • DEFAULT CHARSET utf8 设置数据库的字符集为 UTF-8。

    • COLLATE utf8_general_ci 设置数据库的字符排序规则为 utf8_general_ci,这是一个常用的排序规则。

    创建用户

    你需要先创建用户,然后设置密码。注意,MySQL 用户的创建和密码设置通常使用 CREATE USER 语句而不是 INSERT INTO。假设你要创建一个用户名为 s40 的用户,密码为 que123..

    CREATE USER 's40'@'%' IDENTIFIED BY 'que123..';

    授权权限

    然后,授予用户对 day280b 数据库的所有权限:

    GRANT ALL PRIVILEGES ON day280b.* TO 's40'@'%';

    刷新权限

    为了使权限更改立即生效,运行:

    FLUSH PRIVILEGES;

    完整的 SQL 脚本

    以下是完整的 SQL 脚本,包含创建数据库、创建用户、授权权限和刷新权限的步骤:

    -- 创建数据库
    CREATE DATABASE day280b DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    ​
    -- 创建用户
    INSERT INTO mysql.user (User, Host, Password) VALUES ('85', '%', PASSWORD('que123..'));
    FLUSH PRIVILEGES;  (旧版本不推荐使用)
    ​
    CREATE USER 's40'@'%' IDENTIFIED BY 'que123..';
    ​
    -- 授权权限
    GRANT ALL PRIVILEGES ON day280b.* TO 's40'@'%';
    ​
    -- 刷新权限
    FLUSH PRIVILEGES;

    说明

    • CREATE DATABASE day280b:创建一个名为 day280b 的数据库。

    • CREATE USER 's40'@'%' IDENTIFIED BY 'que123..':创建一个名为 s40 的用户,允许从任何主机连接,并设置密码。

    • GRANT ALL PRIVILEGES ON day280b.* TO 's40'@'%':授予用户 s40day280b 数据库的所有权限。

    • FLUSH PRIVILEGES:使权限更改立即生效。

    请根据你的实际需求和安全策略调整用户名、密码和权限设置。如果有任何问题或需要进一步帮助,请告诉我!

  • 远程链接

  • 前提:开放端口3306

  • @'%'没有写这个或者是本机电脑ip

  • image-20240730134702827

  • 本地测试

  • 无密码可以登录 --》去除掉(就可以有密码登录)

  • 有密码无法登录

  • mysql -u root -p;
    show databases;
    use mysql;
    show tables;
    desc user;

    image-20240730140600954

    • select Host,User,Password from user;
        
      delete from user where Host="localhost" and User =" ";

域名

Https

——申请证书

——上传服务器

——nginx配置 (433开放端口)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值