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 终端、缓存和反向代理等功能。它能够处理大量的并发连接,并且配置灵活,适合于高流量网站和应用程序。
典型企业部署流程
-
服务器配置:使用 CentOS 部署服务器环境,安装必需的系统软件和工具。
-
版本控制:通过 Git 管理源代码,将应用代码存储在 Git 仓库中。
-
代码部署:使用 Git 将代码从仓库部署到服务器上。可以通过自动化工具(如 Jenkins 或 GitLab CI/CD)实现持续集成和持续部署(CI/CD)。
-
远程管理:通过 Xshell 或其他 SSH 客户端远程访问和管理服务器,进行维护和故障排除。
-
Web 服务器:使用 Nginx 作为 Web 服务器和反向代理,配置静态文件服务、代理请求、负载均衡等。
总结
这种组合工具和技术在企业中是常见且广泛应用的,特别是在 Linux 环境中。它们提供了稳定的服务器环境、有效的版本控制、便捷的远程管理和高性能的 Web 服务。对于企业级应用来说,这些工具能够满足从开发到生产的全流程需求。
web部署的本质
购买服务器
CentOS系统(阿里云,腾讯云)
8.136.100.175:通过公网ip进行访问
登录服务器:
xshell 远程链接服务器。并进行控制
-
链接服务器:
ssh root@8.136.100.175
输入你安装服务器的时候的密码——登录成功
记住账号和密码
关于端口
ip地址 : 理解成一个电脑
端口:a程序
端口:b程序
端口:c程序
22端口 :其他程序远程链接并控制 (开发22端口)
3306端口:mysql
上传代码
-
下载git:去官网下载
-
创建仓库
-
快速设置— 如果你知道该怎么操作,直接使用下面的地址
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"
-
打包代码
设置
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 项目之前,确实需要完成一些准备工作。你列出的步骤很好,这里是一个稍微详细的说明:
-
生成项目所需的依赖列表: 在激活虚拟环境后,运行以下命令来生成
requirements.txt
文件,记录当前环境中的所有依赖包:pip3 freeze > requirements.txt
-
安装项目依赖: 将生成的
requirements.txt
文件传输到服务器上(如果你还没有这样做的话),然后在服务器的虚拟环境中运行以下命令来安装所有依赖:pip3 install -r requirements.txt
-
收集静态文件: 在
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
-
-
在部署 Django 项目之前,确实需要完成一些准备工作。你列出的步骤很好,这里是一个稍微详细的说明:
-
生成项目所需的依赖列表: 在激活虚拟环境后,运行以下命令来生成
requirements.txt
文件,记录当前环境中的所有依赖包:pip3 freeze > requirements.txt
-
安装项目依赖: 将生成的
requirements.txt
文件传输到服务器上(如果你还没有这样做的话),然后在服务器的虚拟环境中运行以下命令来安装所有依赖:pip3 install -r requirements.txt
-
收集静态文件: 在
settings.py
文件中添加STATIC_ROOT
配置项,指定静态文件的收集路径:STATIC_ROOT = '/var/www/django-blog/static/'
然后运行以下命令来收集静态文件:
python manage.py collectstatic
这个命令会将所有静态文件从
STATICFILES_DIRS
和应用的static
目录中收集到STATIC_ROOT
指定的目录中。
完成这些步骤后,你的 Django 项目应该就准备好部署了。确保服务器上配置了正确的权限,并且你的 Web 服务器(如 Nginx 或 Apache)配置正确地指向了静态文件目录。
-
-
/var/www/django-blog/static/
这个路径是服务器上静态文件的收集目录,不需要在本地开发环境中创建这个目录。在本地开发环境中,静态文件通常保存在
static/
目录下或者配置的STATICFILES_DIRS
中。collectstatic
命令会将这些文件收集到你在settings.py
中配置的STATIC_ROOT
路径。本地开发环境
在本地开发环境中,你可以继续使用
DEBUG=True
来方便开发和调试,Django 会自动处理静态文件:-
静态文件路径配置: 在本地开发时,通常你会在
settings.py
中设置STATIC_URL
:STATIC_URL = '/static/'
-
静态文件目录: 在本地开发时,静态文件一般存放在项目的
static/
目录中,或者通过STATICFILES_DIRS
配置指定的目录中。
服务器环境
在服务器上,你需要设置
STATIC_ROOT
来指定静态文件收集目录,并确保该目录存在:-
创建目录: 登录到服务器,使用以下命令创建目录:
sudo mkdir -p /var/www/django-blog/static/
-
设置权限: 确保 Django 有权限写入该目录:
sudo chown -R youruser:yourgroup /var/www/django-blog/static/ sudo chmod -R 755 /var/www/django-blog/static/
-
收集静态文件: 在服务器上的虚拟环境中运行:
python manage.py collectstatic
这个命令将会把所有静态文件收集到
STATIC_ROOT
指定的目录中。
所以,在本地开发环境不需要创建
/var/www/django-blog/static/
目录,只需确保在部署到服务器之前配置好静态文件的相关设置,并在服务器上进行目录创建和权限配置。 -
-
在gitee上创建仓库
-
这个链接指代远程仓库
-
不需要上传的文件。比如:本地的虚拟环境等
-
# 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/
-
命令 需要在你的项目目录这里
-
一次性的命令
-
git config --global user.name "朱慧军" git config --global user.email "13231970+zhuhuijun@user.noreply.gitee.com"
-
mkdir restaurant_system cd restaurant_system git init git remote add origin https://gitee.com/zhuhuijun/restaurant_system.git
-
这些命令用于在 Git 中初始化一个新的本地仓库并将其与远程仓库关联。
-
cd restaurant_system
:-
cd
是 “change directory” 的缩写,用于更改当前工作目录。 -
restaurant_system
是你要进入的目录名。这个目录应该是你的 Django 项目所在的目录。
-
-
git init
:-
这个命令用于在当前目录(即
restaurant_system
)初始化一个新的 Git 仓库。 -
执行这个命令后,Git 会在该目录中创建一个
.git
子目录,其中包含所有必要的文件和目录结构,以便跟踪版本控制。
-
-
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
从远程仓库拉取更新等。 -
-
经常执行
-
git add . git commit -m '注释' git push origin master
-
好的,这里是将本地项目初始化为 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 上的远程仓库
-
-
安装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
-
安装环境
-
python
-
安装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 环境时。每个命令的作用如下:
-
yum install zlib zlib-devel -y
:-
zlib
是一个数据压缩库。 -
zlib-devel
是zlib
的开发库,包含头文件和开发工具,用于编译依赖zlib
的软件。 -
-y
选项自动确认所有安装操作,避免需要手动确认。
-
-
yum install bzip2 bzip2-devel -y
:-
bzip2
是一个数据压缩工具。 -
bzip2-devel
是bzip2
的开发库,包含头文件和开发工具,用于编译依赖bzip2
的软件。
-
-
yum install ncurses ncurses-devel -y
:-
ncurses
是一个库,用于支持终端上的文本用户界面。 -
ncurses-devel
是ncurses
的开发库,包含头文件和开发工具,用于编译依赖ncurses
的软件。
-
-
yum install readline readline-devel -y
:-
readline
是一个用于读取输入的库,常用于提供命令行编辑功能。 -
readline-devel
是readline
的开发库,包含头文件和开发工具,用于编译依赖readline
的软件。
-
-
yum install openssl openssl-devel -y
:-
openssl
是一个用于实现安全通信的工具和库。 -
openssl-devel
是openssl
的开发库,包含头文件和开发工具,用于编译依赖openssl
的软件。
-
-
yum install xz xz-devel -y
:-
xz
是一个数据压缩工具,使用xz
格式。 -
xz-devel
是xz
的开发库,包含头文件和开发工具,用于编译依赖xz
的软件。
-
-
yum install sqlite sqlite-devel -y
:-
sqlite
是一个轻量级的关系数据库管理系统。 -
sqlite-devel
是sqlite
的开发库,包含头文件和开发工具,用于编译依赖sqlite
的软件。
-
-
yum install gdbm gdbm-devel -y
:-
gdbm
是 GNU 数据库管理库。 -
gdbm-devel
是gdbm
的开发库,包含头文件和开发工具,用于编译依赖gdbm
的软件。
-
-
yum install tk tk-devel -y
:-
tk
是一个用于创建图形用户界面的工具包。 -
tk-devel
是tk
的开发库,包含头文件和开发工具,用于编译依赖tk
的软件。
-
-
yum install mysql-devel -y
:-
mysql-devel
是 MySQL 数据库的开发库,包含头文件和开发工具,用于编译依赖 MySQL 的软件。
-
-
yum install python-devel -y
:-
python-devel
是 Python 的开发库,包含头文件和开发工具,用于编译 Python 扩展模块。
-
-
yum install libffi-devel -y
:-
libffi
是一个用于调用 C 函数的库。 -
libffi-devel
是libffi
的开发库,包含头文件和开发工具,用于编译依赖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 源码
-
下载 Python 源码:
-
尝试从 python.org、清华镜像 和 华为云镜像 下载 Python 3.10.8。
-
成功从华为云镜像下载并保存为
Python-3.10.8.tgz
。
-
-
解压源码包:
-
尝试使用
tar
解压文件,但出现了gzip: stdin: unexpected end of file
和tar: Unexpected EOF in archive
错误。 -
发现下载的文件大小为 78K,这表明文件可能损坏或下载不完全。
-
-
删除损坏的文件:
-
使用
rm
命令删除了损坏的文件Python-3.10.8.tgz
。
-
-
重新下载并验证:
-
从华为云镜像重新下载 Python 3.10.8 源码,并成功保存为
Python-3.10.8.tgz
。 -
重新解压文件:
tar xzf Python-3.9.5.tgz
。
-
-
编译和安装:
-
进入解压后的目录,运行以下命令来配置、编译和安装 Python:
cd Python-3.9.5/ ./configure make all make install
-
2. 配置
pip
源-
为
pip3.9
设置豆瓣源:-
使用以下命令配置
pip3.9
使用豆瓣源:pip3.9 config set global.index-url https://pypi.douban.com/simple/
-
-
验证配置:
-
使用以下命令确认配置:
pip3.9 config get global.index-url
-
-
使用豆瓣源安装包:
-
使用
pip3.9
安装包,例如:pip3.9 install requests
-
遇到的问题和解决
-
文件下载问题:
-
初次下载的文件可能损坏,导致解压失败。通过从可靠的镜像重新下载文件解决了问题。
-
-
配置源失败:
-
检查配置命令是否正确,确保
pip
版本正确匹配。
-
希望这个总结对你有帮助!如果有其他问题,随时告诉我。
-
-
数据库
-
下载最新的 SQLite 版本:
cd /tmp wget https://www.sqlite.org/2024/sqlite-autoconf-3420000.tar.gz
-
解压并安装 SQLite:
tar xzf sqlite-autoconf-3420000.tar.gz cd sqlite-autoconf-3420000 ./configure --prefix=/usr/local make make install
-
验证安装:
验证 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
-
-
虚拟环境
-
安装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
也可以这样的激活运行。只是和本地的一样。效果比较差。不建议执行
-
-
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 & 后台运行
-
停止
-
ps -ef|grep nb_uwsgi.ini Kill -9 12648
-
-
nginx
-
安装:在任何目录下面都可以
yum install nginx -y
-
配置:创建 Nginx 配置文件
/etc/nginx/conf.d/xiaozhu_logs.conf
。 -
nginx的默认配置文件路径
-
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/; } } }
-
配置解释
-
全局配置:
-
user nginx;
:指定 Nginx 进程运行的用户。 -
worker_processes auto;
:根据系统的 CPU 核心数自动设置工作进程的数量。 -
error_log /var/log/nginx/error.log;
:指定错误日志文件的位置。 -
pid /run/nginx.pid;
:指定 Nginx 进程 ID 文件的位置。
-
-
动态模块加载:
-
include /usr/share/nginx/modules/*.conf;
:加载动态模块配置。
-
-
事件配置:
-
worker_connections 1024;
:每个工作进程允许的最大连接数。
-
-
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 类型设置。
-
-
上游服务器配置:
-
upstream flask { ... }
:定义一个名为flask
的上游服务器组,其中包括127.0.0.1:8001
。如果你的 Django 应用使用 uWSGI 作为 WSGI 服务器,这里的flask
可以改为django
。
-
-
服务器配置:
-
listen 80;
:监听 80 端口。 -
server_name 8.136.100.175;
:指定服务器名称或 IP 地址。替换为你的实际域名或 IP 地址。 -
location / { ... }
:处理根路径的请求,转发到 uWSGI。 -
location /static/ { ... }
:处理静态文件请求,将其映射到静态文件路径。 -
location /media/ { ... }
:处理媒体文件请求,将其映射到媒体文件路径。
-
配置步骤
-
保存配置文件: 将上述配置保存为
/etc/nginx/nginx.conf
或/etc/nginx/conf.d/myproject.conf
,具体路径取决于你的 Nginx 配置结构。 -
检查配置文件: 确保配置文件没有语法错误:
bash 复制代码 sudo nginx -t
-
重新加载 Nginx: 应用配置更改:
bash 复制代码 sudo systemctl reload nginx
-
确保 uWSGI 正在运行: 确保 uWSGI 已经在
127.0.0.1:8001
上监听。如果没有,请启动 uWSGI 并确保它运行正常。 -
检查日志文件: 监控 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 服务的当前状态,包括是否正在运行、启动时间以及最新的日志条目。
-
示例
-
启动 Nginx:
sudo systemctl start nginx
启动 Nginx 后,可以通过访问你的服务器 IP 或域名来验证是否正常工作。
-
停止 Nginx:
sudo systemctl stop nginx
停止 Nginx 后,网站将变得不可访问。
-
重启 Nginx:
sudo systemctl restart nginx
适用于应用配置更改后的操作。
-
重新加载配置:
sudo systemctl reload nginx
应用配置更改而不中断服务。
-
查看状态:
sudo systemctl status nginx
-
开机自己启动
-
cd /etc/nginx/ systemctl enable nginx systemctl start nginx 在我们修改代码。要重新启动这个 systemctl restart nginx
-
-
-
看起来你正在递归删除 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 安装
-
重新下载并解压 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
-
配置和编译 Python
配置和编译 Python:
./configure --enable-optimizations make sudo make altinstall
-
创建新的虚拟环境
使用新的 Python 版本创建虚拟环境:
python3.9 -m venv /data/www/xiaozhu_logs/env
激活虚拟环境:
source /data/www/xiaozhu_logs/env/bin/activate
-
安装 Django 和其他依赖
安装 Django 和其他项目所需的依赖:
pip install --upgrade pip pip install -r /data/www/xiaozhu_logs/requirements.txt
-
检查 SQLite 版本
确保虚拟环境中使用的是最新的 SQLite 版本:
python -c "import sqlite3; print(sqlite3.sqlite_version)"
-
重启服务
重启 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
错误的原因。
解决方法
-
更新 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
-
重新编译 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
-
确认环境设置
确保你的虚拟环境中使用的是新的 SQLite 库。激活虚拟环境后,重新确认 SQLite 版本:
source /data/www/xiaozhu_logs/env/bin/activate python -c "import sqlite3; print(sqlite3.sqlite_version)"
-
重启服务
更新 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
错误。如果遇到其他问题或需要进一步帮助,请告知!
手动下载并上传
如果在服务器上下载失败,你可以在本地计算机上手动下载文件,然后上传到服务器:
-
在本地计算机上下载:
-
打开 SQLite 官方下载页面 或 清华大学镜像站。
-
选择合适版本并下载。
-
-
上传文件到服务器:
-
使用
scp
或其他文件传输工具将下载的文件上传到服务器。例如:
bash 复制代码 scp sqlite-autoconf-3420000.tar.gz user@yourserver:/path/to/your/directory
-
-
在服务器上解压并安装:
bash复制代码cd /path/to/your/directory tar xvf sqlite-autoconf-3420000.tar.gz cd sqlite-autoconf-3420000 ./configure make sudo make install
总结
-
确认下载链接:确保使用的链接是正确的,并且文件存在。
-
尝试其他版本:如果指定版本不可用,可以尝试其他版本。
-
手动下载并上传:如果在服务器上下载失败,可以手动下载文件并上传到服务器
关于Sqlite可以从下载
看起来你尝试下载 SQLite 3.4.1 版本的源码包时遇到了 404 错误。可能是因为该版本的源码包不存在或链接有误。
解决方法
-
确认版本号:
-
SQLite 3.4.1 版本相对较旧,可能已经不再在 GitHub 的官方发布页面上提供。
-
-
尝试其他版本或更新版本:
-
如果你能使用较新的版本,请尝试下载更高版本的 SQLite 源码。你可以从 SQLite GitHub Releases 页面 查找最新的稳定版本。
-
-
从历史版本下载:
-
如果你必须使用 SQLite 3.4.1 版本,你可以尝试在 SQLite 旧版本页面 查找并下载所需的版本。
-
示例操作步骤
下载较新版本的 SQLite
-
从 GitHub Releases 页面下载:
-
访问 SQLite GitHub Releases 页面 查找可用的版本。
-
找到最新的稳定版本(如 3.39.4 或更高)并下载。
例如,下载 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
-
-
解压和安装:
tar xvf sqlite-3.39.4.tar.gz cd sqlite-version-3.39.4 ./configure make sudo make install
手动下载历史版本
如果确实需要 SQLite 3.4.1 版本,可以尝试在其他镜像站点或网站查找历史版本。手动下载并上传到服务器,然后解压并安装。
例子:手动下载和上传
-
手动下载:
-
在本地计算机上访问 SQLite 历史版本页面 下载所需版本。
-
-
上传到服务器:
scp sqlite-autoconf-3.4.1.tar.gz user@yourserver:/path/to/your/directory
-
解压和安装:
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 步骤
-
确认 SQLite 库的位置: 确保新的 SQLite 库已正确安装,并确定其路径。例如,你可以用以下命令查找新安装的 SQLite 库文件:
find / -name libsqlite3.so 2>/dev/null
你找到了多个
libsqlite3.so
文件。为了确保你的 Python 使用的是最新的 SQLite 版本,需要将新的库文件路径添加到LD_LIBRARY_PATH
中。你可以按照以下步骤操作:-
设置环境变量:
将包含新 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
-
验证环境变量:
确保环境变量已正确设置:
echo $LD_LIBRARY_PATH
你应该看到你刚刚设置的路径。
-
重新编译 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
-
验证 SQLite 版本:
在 Python 环境中验证 SQLite 版本是否已更新:
import sqlite3 print(sqlite3.sqlite_version)
你应该看到
3.39.4
版本号。
通过这些步骤,你应该能够确保 Python 使用的是最新版本的 SQLite。如果你在过程中遇到任何问题,请告诉我,我可以帮助你解决。
-
MySQL
安装
-
yum install mariadb-server -y :服务端 yum install mariadb -y :客户端
-
授权
mysql -u root -p
-
你的 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'@'%'
:授予用户s40
对day280b
数据库的所有权限。 -
FLUSH PRIVILEGES
:使权限更改立即生效。
请根据你的实际需求和安全策略调整用户名、密码和权限设置。如果有任何问题或需要进一步帮助,请告诉我!
-
-
远程链接
-
前提:开放端口3306
-
@'%'没有写这个或者是本机电脑ip
-
本地测试
-
无密码可以登录 --》去除掉(就可以有密码登录)
-
有密码无法登录
-
mysql -u root -p; show databases; use mysql; show tables; desc user;
-
select Host,User,Password from user; delete from user where Host="localhost" and User =" ";
-
域名
Https
——申请证书
——上传服务器
——nginx配置 (433开放端口)