Git推送+拉去+uwsgi+Nginx服务器部署项目

一、快速入门

1. 什么是Git

Git是一个分布式的版本控制软件。

  • 软件,类似于QQ、office、dota等安装到电脑上才能使用的工具
  • 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据
  • 分布式
    • 文件夹拷贝
    • 本地版本控制
    • 集中式版本控制
    • 分布式版本控制

2. 为什么要做版本控制

要保留之前所有版本,以便回滚和修改

3. 安装git

二、版本控制--Git管理文件夹

想要让git对---个目录进行版本控制需要以下步骤:

  • 进入要管理的目录

  • 执行初始化命令

    python 复制代码
    git init
  • 检测当前目录下文件状态

    python 复制代码
    git status
    注:新增的文件和修改过后的文件都是红色
  • 管理指定文件(红变绿), .代表当前目录下没有被管理的所有文件。红色:新增的文件/修改了原老文件,其次执行git add .(变绿色)。绿色:git已经管理起来了,其次执行git commit -m '描述信息'。最后生成版本。

    python 复制代码
    git add 文件名
    git add .


  • 个人信息配置:用户名、邮箱【一次即可】

    python 复制代码
    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
  • 生成版本

    python 复制代码
    git commit -m '描述信息'


    如果你对里面文件修改了,那么执行上述命令再次操作让其生成V2版本

  • 查看版本记录

    python 复制代码
    git log

2.1 Git 三大区域

2.2 回滚

  • 回滚至之前版本

    python 复制代码
    git log
    git reset --hard 版本号


    第三个功能就会被git自动替换掉

  • 回滚至之后版本

    python 复制代码
    git reflog
    git reset --hard 版本号

2.3 分支

分支可以给使用者提供多个环境,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

  • 查看分支

    python 复制代码
    git branch
  • 创建分支

    python 复制代码
    git branch 分支名称
  • 切换分支

    python 复制代码
    git checkout 分支名称
  • 分支合并

    python 复制代码
    首先切换到要合并的分支上:git chechout master
    git merge 想要合并的分支        git merge bug    把bug分支合并到master
    注意:切换分支在合并


    紧急修复完后其实,bug分支就没有用了

  • 删除分支

    python 复制代码
    git branch -d 分支名称

2.4 工作流

创建dev分支,在dev分支上去写开发的新功能,开发没有问题了,合并到master分支

2.5 基于github代码托管

  • 注册github账号
  • 创建仓库





  • 本地代码推送


python 复制代码
# 1.给远程仓库起别名
git remote add origin 远程仓库地址
# 2.向远程推送代码
git push -u origin 分支

2.5.1 初次在新电脑下载代码

python 复制代码
# 1.克隆远程仓库代码
git clone 远程仓库地址(内部已实现git remote add origin 远程仓库地址)
# 2. 切换分支
git checkout 分支名称
  • 在新电脑下载完代码后,继续开发
python 复制代码
# 1.切换到dev分支进行开发
git checkout dev
# 2.把master分支合并到dev(仅一次)
git merge master
# 3.修改代码
# 4.提交代码
git add .
git commit -m 'xxx'
git push origin dev

2.5.2 在原先旧电脑继续写代码

python 复制代码
# 1.切换到dev分支进行开发
git checkout dev
# 2.拉代码
git pull origin dev
# 3.继续开发
# 4.提交代码
git add .
git commit -m 'xxx'
git push origin dev

2.5.3 在新电脑上继续开发

python 复制代码
# 1.切换到dev分支进行开发
git checkout dev
# 2.拉下最新代码(不必填clone,只需要通过pull获取最新代码即可)
git pull origin dev
# 3.继续开发
# 4.提交代码
git add .
git commit -m 'xxx'
git push origin dev

开发完毕,上线

python 复制代码
# 1.将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master

# 2.把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev

2.6.4 忘记推送代码

注:忘记了推送代码,后面合并起来可能会发生冲突

  • 在新电脑开发
python 复制代码
# 写一个a1.py编辑
vim a1.py
# 内容为:在新电脑开发了50%功能,有女神约饭忘记提交代码


  • 在旧电脑开发
python 复制代码
# 在旧电脑写了其他的功能,写了个a2.py,a1.py
vim a2.py
内容为:其他功能
vim a1.py
内容为:在旧电脑写了其他功能
  • 再到新电脑拉代码(可能会产生一些冲突,因为:因为有一些代码提交到本地了,还没有提交到github)

    因为在旧电脑编写了a1,a2在新电脑没有编写a2所以a2会自动合并,a1在新旧电脑都有编辑,可能改的同一行就可能产生冲突
  • 解决冲突
  1. 在新电脑打开a1-----》vim a1.py,会发现把两个记录保留合并了


  1. 解决完后,继续开发
    在新电脑上 vim a1.py,内容为:在公司开发了50%,再继续开发50%
  1. 最后
    git add .
    git commit -m 'xxx'
    git push origin dev


  1. 上线,把dev合并到master,然后把master推送到线上
python 复制代码
补充:
git pull origin dev # 从代码仓库拉代码
等价于下面两条命令:
git fetch origin dev
git merge origin/dev
为什么看下图:


2.6 rebase(变基)应用场景

作用:可以保持git提交记录简洁,不分叉

  • 第一种:多个记录整合成一个记录






注意事项:合并的是那些没有提交到仓库的那些记录

  • 第二种:有点像合并
python 复制代码
记录图形展示
git log --graph --pretty=format:"%h %s"



  1. 先切回到dev分支
  2. git rebase变基(变成一个基本的树干),然后把master放进来。git rebase master
  3. 最终的代码是放在master分支的,所以切换到master,然后再git merge 到dev。git checkout master, git merge dev。
  4. 这样提交就变成一条线了
  • 第三种:可能会产生分叉(往下来拉代码会与本地代码无形的进行一次合并,一样的就会冲突,不一样的就会自动合并)
  • 原来往下来拉是git pull ,
  • 为了避免分叉,执行git fetch将代码拉下来
  • 这样拉下来会与本地合并,所以用git rebase就可以了。git rebase origin/分支
python 复制代码
总结:
先不用git pull origin 分支名称,用git fetch origin 分支名称。紧接着用git rebase origin/分支名称
  • 注意事项

在执行git rebase时----》冲突

解决:会提示你执行比如git add 1.py啥的,执行完在执行git rebase --continue

2.7 快速解决冲突

    1. 安装beyond compare
      查看compare安装路径
    1. 在git中配置
      --local:只在当前项目有效
    python 复制代码
    git config --local merge.tool bc3   # 合并工具变成bc3
    git config --local mergetool.path '/usr/local/bin/bcomp'  # 这个路径就是compare的安装路径
    git config --local mergetool.keepBackup false # 解决冲突的时候不用保留源文件
    1. 应用beyond compare 解决冲突
    python 复制代码
    git mergrtool





三、多人协同开发

3.1 工作流

如下图:

  • master上放正在运行的代码
  • dev上放正在开发的代码
  • 想要做斗地主和炸金花的功能,需要将dev做拆分,拆分出来要么叫它的名字要么叫功能名字
  • 假设A做完了,申请合并到dev分支。在这个合并的过程中做代码检查review,不通过检查继续去开发,通过了合并。这里不能直接上线,要谨慎处理
  • 代码拆出来,临时在做一个分支release(预发布)来做测试或者写一些文档之类的,假如测试完后发现了一些小bug,然后修复,完成之后才能上线。
  • bug修复完了,是需要再提交回dev的。斗地主的功能做完了。分支就可以删除了,也可以不删(假如你要开发新功能)
  • 炸金花一样类似

3.2 创建项目&邀请成员

协同开发时,需要所有成员都可以对同一个项目进行操作,需要邀请成员并赋予权限,否则无法开发。github支持两种创建项目的方式(供多人协同开发)。

  1. 第一种:合作者,将用户添加到仓库合作者中之后,该用户就可以向当前仓库提交代码。


  2. 第二种:组织,将成员邀请进入组织,组织下可以创建多个仓库,组织成员可以向组织下仓库提交代码。









    拓展:Tag标签管理
    为了清晰管理版本,在公司不会直接使用commit来做版本,会基于Tag来实现:V1.0、V1.2、V2.0的版本



python 复制代码
git tag -a V1.0 -m '版本介绍'        创建本地创建Tag信息
git tag -d V1.0						删除Tag
git push origin --tags				将本地tag信息推送到远程仓库
git pull origin --tags				更新本地tag版本信息

git checkout v.10					切换tag
git clone -b V0.1 地址				指定tag下载代码

3.3 其他人开发


  • 注册Github或Gitlab账号
  • 邀请小弟进入组织(默认对组织中的项目具有读权限)



  • 发送后会接收到一份Emil邮件,同意加入

3.4 code review

  • 配置,代码review之后才能合并到dev分支








    创建完就发给他的领导了
  • 在Web网站上做review


  • 可以用命令去做




    我们就把斗地主这个功能经过代码的review提交到dev分支了


3.5 提测上线(预发布)

由专门团队或团队leader执行以下步骤:

  • 基于dev分支创建release分支

    python 复制代码
    git checkout dev
    git checkout -b release
  • 测试等

  • 合并到master

    python 复制代码
    使用pull request
    或
    本地将release合并到master分支
  • 在master分支打Tag

    python 复制代码
    git tag -a V2 -m '第二版 斗地主功能'
    git pull origin --tags



  • 运维人员就可以去下载代码做上线了

    python 复制代码
    git clone -b V2 地址

3.6 给开源软件贡献代码

  • fork源代码,将别人源代码拷贝到我自己的远程仓库。
  • 在自己仓库进行修改代码
  • 给源代码的作者提交修复bug的申请(pull request)

3.7 推送代码到github/gitee

  • git 全局用户设置

    python 复制代码
    ## 产看 全局配置
    git config --global --list
    
    # 清除(如果未添加过,则不需要清除)
    git config --global --unset user.name "name"
    git config --global --unset user.email "@mail"
    
    
    git config --global user.name "new name"                      
    git config --global user.email "new emial"
    
    # 注:--global 表示全局属性,所有的git项目都会共用属性。设置本地机器默认commit的昵称与Email. 必须使用在 gitee 或者 github 上配置的 email.
  • 生成生成新的 SSH keys

    • GitHub 的钥匙
    python 复制代码
    # 第一步
    ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "邮箱1"
    
    out:
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    # 说明: 遇到以上Enter passphrase (empty for no passphrase),直接敲回车即可,不需要输入用户名或者密码
    
    # 第二步
    一直敲回车
    our identification has been saved in /Users/likun/.ssh/id_rsa.github.
    Your public key has been saved in /Users/likun/.ssh/id_rsa.github.pub.
    The key fingerprint is:
    SHA256:xxxx xxxx
    The key's randomart image is:
    ---[RSA 3072]----+
    |     xx .   xxxx |
    +----[SHA256]-----+
    • Gitee 的钥匙
    python 复制代码
    # 第一步
    ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitee -C "邮箱2"
    
    # 第二步
    一直敲回车
    
    Your identification has been saved in /Users/likun/.ssh/id_rsa.gitee.
    Your public key has been saved in /Users/likun/.ssh/id_rsa.gitee.pub.
    The key fingerprint is:
    SHA256:dFuVYB3D7tIzMbioTmv1O5O1Jl4F8TLIpFqgk0RsHuo 1363653611@qq.com
    The key's randomart image is:
    +---[RSA 3072]----+
    |     xx .   xxxx |
    +----[SHA256]-----+
  • 完成后会在~/.ssh / 目录下生成以下文件。

    python 复制代码
     - id_rsa.github
     - id_rsa.github.pub
     - id_rsa.gitee
     - id_rsa.gitee.pub
  • 识别 SSH keys 新的私钥

    默认只读取 id_rsa,为了让 SSH 识别新的私钥,需要将新的私钥加入到 SSH agent 中。改操作可以不执行,不设置也可以成功。

    python 复制代码
    ssh-agent bash
    ssh-add ~/.ssh/id_rsa.github
    ssh-add ~/.ssh/id_rsa.gitee
  • 多账号配置 config 文件

    • 创建config文件
    python 复制代码
    touch ~/.ssh/config 
    • config 中填入如下内容
    python 复制代码
    #Default gitHub user Self
    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa.github
    
    # gitee
    Host gitee.com
        Port 22
        HostName gitee.com
        User git
        IdentityFile ~/.ssh/id_rsa.gitee
  • 添加 ssh

    分别添加SSH到Gitee和Github:

    1. Github:
      https://github.com/settings/keys
      将 id_rsa.github.pub 中的内容填进去,起名的话随意。
    2. Gitee
      https://gitee.com/profile/sshkeys
      将 id_rsa.gitee.pub 中的内容填进去,起名的话随意。
  • 测试成功

    python 复制代码
    ssh -T git@gitee.com
    Hi zbcn! You've successfully authenticated, but GITEE.COM does not provide shell access.
    
    ssh -T git@github.com
    Hi 1363653611! You've successfully authenticated, but GitHub does not provide shell access.
    python 复制代码
    要推送github/gitee
    1、先切换目录,例如:E:\git\smart-open
    2、初始化git仓库并在本地提交
    git init	# 初始化git仓库
    git add .	# 将当前目录下的文件添加到仓库(缓冲区)
    git commit -m " first commit"	# 提交到本地仓库
  • 本地库上使用命令git remote add把它同时和Github、Gitee的远程库关联起来

    python 复制代码
    git remote add github git@github.com:xxx/xxx_test.git
    git remote add gitee git@gitee.com:xxxx/xx-test.git
    # 强烈建议使用ssh方式,因为https方式每次都要输入用户名和密码
  • 关联完成后,我们可以通过输入git remote -v来查看关联的远程库信息

  • 如果要推送到GitHub,使用命令:git push github master

  • 如果要推送到Gitee,使用命令:git push gitee master

四、其他

4.1 配置

  • 项目配置文件:项目/.git/config

    python 复制代码
    git config --local user.name 'xxx'
    git config --local user.email 'xxx@xx.com'
  • 全局配置文件:~/.gitconfig

    python 复制代码
    git config --global user.name 'xxxx'
    git config --global user.name 'xxxx@xx.com'
  • 系统配置文件:/etc/.gitconfig

    python 复制代码
    git config --system user.name 'xxx'
    git config --system user.name 'xxx@xx.com'
    
    注意:需要root权限

应用场景

python 复制代码
git config --local user.name 'xxx'
git config --local user.email 'xxxx@xx.com'

git config --local merge.tool bc3
git config --local mergetool.path '/usr/local/bin/bcomp'
git config --local mergetool.keepBackup false

git remote add origin 地址,默认添加在本地配置文件中(--local)

4.2 免密码登录

  • URL中体现
python 复制代码
原来的地址:https://github.com/xxxx/dbhot.git
修改的地址:https://用户名:密码@github.com/xxx/dbhot.git

git remote add origin https://用户名:密码@github.com/xxx/dbhot.git
git push origin master
  • SSH实现
python 复制代码
 - 生成公钥和私钥(默认放在~/.ssh目录下,id_rsa.pub公钥、id_rsa私钥) 
	ssh-keygen
 - 拷贝公钥的内容,并设置到GitHub中
 - 在git本地中配置ssh地址 
	git remote add origin git@github.com:xxx/dbhot.git
 - 以后使用 
	git push origin master
  • git自动管理凭证

4.3 git忽略文件

让Git不再管理当前目录下的某些文件。

python 复制代码
 * .h
!a.h
files/
*.py[c|a|d]

更多参考:https://github.com/github/gitignore

3.5 github任务管理相关

  • issues,文档以及任务管理。
  • wiki,项目文档。

五、Python.gitignore文件

python 复制代码
[.gitignore 文件](https://github.com/github/gitignore/blob/main/Python.gitignore)
```python
# Byte-compiled / optimized / DLL files
__pycache__/       """Python 文件编译后的缓存目录。git上传时会忽略该目录下的文件"""
*.py[cod]        """Python 文件编译后的字节码文件(如 .pyc、.pyo、.pyd)。"""
*$py.class		"""Python 文件编译后的类文件。"""

# C extensions
*.so	"""C 语言扩展生成的共享库文件。"""

# Distribution / packaging
.Python
build/
develop-eggs/	""".Python、build/、develop-eggs/ 等:这些是 Python 包分发和构建过程中生成的一些临时文件和目录。"""
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		"""*.manifest、*.spec:PyInstaller 构建可执行文件时生成的配置和清单文件。"""

# Installer logs
pip-log.txt
pip-delete-this-directory.txt
"""pip-log.txt、pip-delete-this-directory.txt:pip 安装日志文件。"""

# Unit test / coverage reports  
htmlcov/		"""htmlcov/、.tox/ 等:单元测试和覆盖率报告生成的文件和目录。"""
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot		"""*.mo、*.pot:国际化的翻译文件。"""

# Django stuff:
*.log			"""*.log、local_settings.py 等:Django 项目中的日志文件和本地配置文件。"""
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy			""".scrapy:Scrapy 爬虫框架的相关文件。"""

# Sphinx documentation
docs/_build/			"""docs/_build/:Sphinx 生成文档的构建目录。"""

# PyBuilder
.pybuilder/				""".pybuilder/、target/:PyBuilder 构建工具生成的文件。"""
target/

# Jupyter Notebook
.ipynb_checkpoints		""".ipynb_checkpoints:Jupyter Notebook 的检查点文件。"""

# IPython
profile_default/			"""profile_default/、ipython_config.py:IPython 的配置和默认配置文件。"""
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 
 """.python-version:pyenv 使用的 Python 版本文件。"""

# 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/		""".pdm.toml、.pdm-python、.pdm-build/:pdm 相关的配置和构建文件。"""

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
"""__pypackages__/:PEP 582 定义的包目录。"""
# Celery stuff
celerybeat-schedule
celerybeat.pid
"""celerybeat-schedule、celerybeat.pid:Celery 任务调度器的相关文件。"""
# SageMath parsed files
*.sage.py
"""*.sage.py:SageMath 解析生成的 Python 文件。"""
# Environments
.env			""".env、.venv 等:虚拟环境相关文件。"""
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject			""".spyderproject、.spyproject:Spyder IDE 的项目设置文件。"""
.spyproject

# Rope project settings
.ropeproject
""".ropeproject:Rope(Python 重构工具)的项目设置文件。"""
# mkdocs documentation
/site
"""/site:mkdocs 生成的静态文档目录。"""
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
""".mypy_cache/、.dmypy.json 等:mypy 类型检查器的缓存文件。"""
# Pyre type checker
.pyre/
""".pyre/:Pyre 类型检查器的相关文件。"""
# pytype static type analyzer
.pytype/
""".pytype/:pytype 静态类型分析器的相关文件。"""
# Cython debug symbols
cython_debug/
"""cython_debug/:Cython 调试符号文件。"""
# 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/
""".idea/:PyCharm IDE 的项目配置文件。看不到就是隐藏文件"""
.DS_Store
"""macOS 操作系统生成的隐藏文件,用于存储文件夹的自定义属性,如视图选项、背景图像和其他视觉设置。这些文件通常不需要被版本控制系统(如 Git)跟踪,"""

# database migrations
*/migrations/*.py
"""这条规则用于忽略所有目录下的 migrations 子目录中的所有 Python 文件(.py)。数据库迁移文件通常用于记录数据库模式的变化,以便在不同环境中同步数据库结构。虽然这些文件可能包含重要的数据库迁移逻辑,但实际的数据库状态(如迁移文件的具体内容)通常不需要被 Git 跟踪,因为它们可以通过 makemigrations 命令重新生成。"""
!*/migrations/__init__.py
"""这条规则是一个例外规则,用于明确指定 migrations 目录中的 __init__.py 文件不应被忽略。__init__.py 文件是 Python 包的初始化文件,用于标识该目录是一个 Python 包。通常情况下,__init__.py 文件是必需的,即使在没有其他内容的情况下也是如此。"""

六、服务器

  • 在服务器安装Git

    python 复制代码
    yum install git-y
  • 第一步操作

    python 复制代码
    cd /data
    mkdirs www
    cd /data/www/
    git clone https://gitee.com/xxx/day08.git
    >>>需要输入码云账号+密码
  • 第二步:

    python 复制代码
    # 进入项目目录
    cd /data/www/day18/
    git pull origin master  # 代码修改了在本地推送到git然后再服务器拉取指令写这个,将拉取最新代码
  • 第三步:环境搭建

    • 安装Python(以Python3.9.5为例)

      1. 安装gcc

        python 复制代码
        	yum install gcc -y
      2. 安装系统Python依赖

        python 复制代码
        yum install zlib zlib-devel -y
        yum install bzip2 bzip2-devel  -y
        yum install ncurses ncurses-devel -y
        yum install readline readline-devel -y
        yum install openssl openssl-devel -y
        yum install xz lzma xz-devel  -y
        yum install sqlite sqlite-devel  -y
        yum install gdbm gdbm-devel  -y
        yum install tk tk-devel -y
        yum install mysql-devel  -y
        yum install python-devel  -y
        yum install libffi-devel -y
      3. 下载源码 Python3.9.5 ,https://www.python.org/ftp/python/

        python 复制代码
        yum install wget -y
        cd /data/
        wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
      4. 解压&编译&安装

        python 复制代码
        解压:
        tar -xvf Python-3.9.5.tgz
        进入目录并编译安装:
        cd Python-3.9.5
        ./configure
        make all
        make install
      5. python解释器配置豆瓣源(腾讯云服务器,默认腾讯源)

        python 复制代码
        pip3.9 config set global.index-url https://pypi.douban.com/simple/
    • 安装虚拟环境

      1. 安装virtualenv

        python 复制代码
        pip3.9 install virtualenv
      2. 创建虚拟环境(不一定和代码或者项目在一起,可以放在任意的地放,一般会在根目录:/envs/xxx创建。这里的xxx是环境名字)

        python 复制代码
        make /envs
        virtualenv /envs/xxx --python=python3.9
      3. 激活虚拟环境

        python 复制代码
        source /envs/xxx/bin/activate
    • 安装uwsgi(在虚拟环境里面)

      python 复制代码
      source /envs/xxx/bin/activate
      pip install uwsgi
      1. 基于uwsgi运行flask项目
        cd 项目目录
        • 命令行

          python 复制代码
          uwsgi --http :8080 --wsgi-file app.py  --callable app
        • 配置文件(推荐)

          • 创建nb_uwsgi.ini(名字随便写)

            python 复制代码
            [uwsgi]
            socket=127.0.0.1:8001
            chdir=/data/www/xxx项目/			# 项目目录
            wsgi-file= app.py
            callable =app
            processes =1
            virtualenv=/envs/xxx/
          • 执行命令

            python 复制代码
            source /envs/xxx/bin/activate
            uwsgi --ini nb_uwsgi.ini 
            uwsgi --ini nb_uwsgi.ini & 			# 后台运行
          • 停止

            python 复制代码
            ps -ef|grep nb_uwsgi
            kill -9 xxx
    • 安装Nginx(利用Nginx做反向代理和处理静态文件)

      python 复制代码
      yum install nginx -y
      1. 配置(修改nginx.conf配置文件:/etc/nginx/nginx.conf)

        python 复制代码
        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;
                listen       [::]:80;
        
                # Load configuration files for the default server block.
                # include /etc/nginx/default.d/*.conf;
        
        		location /static {
                    alias  /data/www/xxx/static;
                }
        
                location / {
                    uwsgi_pass  flask;
                    include     uwsgi_params;
                }
        
            }
        }

        主要修改如下:

        python 复制代码
        # 查看文件
        cat nginx.conf
      2. 启动Nginx(先吧uwsgi启动起来)

        • 临时启动

          python 复制代码
          systemctl start nginx  		# 启动
          systemctl stop nginx		# 停止
          systemctl restart nginx		# 重启
          # 开机启动
          systemctl enable nginx
        • 脚本(内容如下)

          python 复制代码
          ./reboot.sh
          ./stop.sh

          reboot.sh(重启)

          python 复制代码
          #!/usr/bin/env bash
          
          echo -e "\033[34m--------------------wsgi process--------------------\033[0m"			# echo 输出
          
          ps -ef|grep nb_uwsgi.ini | grep -v grep
          
          sleep 0.5
          
          echo -e '\n--------------------going to close--------------------'
          
          ps -ef |grep nb_uwsgi.ini | grep -v grep | awk '{print $2}' | xargs kill -9
          
          sleep 0.5
          
          echo -e '\n----------check if the kill action is correct----------'
          
          /envs/nb/bin/uwsgi  --ini nb_uwsgi.ini &  >/dev/null
          
          echo -e '\n\033[42;1m----------------------started...----------------------\033[0m'
          sleep 1
          
          ps -ef |grep nb_uwsgi.ini | grep -v grep

          stop.sh(停止)

          python 复制代码
          #!/usr/bin/env bash
          
          echo -e "\033[34m--------------------wsgi process--------------------\033[0m"
          
          ps -ef |grep nb_uwsgi.ini | grep -v grep
          
          sleep 0.5
          
          echo -e '\n--------------------going to close--------------------'
          
          ps -ef |grep nb_uwsgi.ini | grep -v grep | awk '{print $2}' | xargs kill -9
          
          sleep 0.5
        • 赋予一个可执行权限

          python 复制代码
          chmod 755 reboot.sh
          chmod 755 stop.sh
          ./reboot.sh
          ./stop.sh

  • 第四步:MySQL

    • 安装服务端(安装服务端的时候客户端会自动安装上)

      python 复制代码
      yum install mariadb-server -y
      python 复制代码
      mariadb-server.x86_64 1:5.5.68-1.el7
    • 安装客户端

      python 复制代码
      yum install mariadb -y
      python 复制代码
      软件包 1:mariadb-5.5.68-1.el7.x86_64 已安装并且是最新版本
    • 启动

      python 复制代码
      systemctl start mariadb
      systemctl stop mariadb
      # 开机自启
      systemctl enable mariadb
    • 登录

      python 复制代码
      mysql -u root -p
    • root设置密码

      python 复制代码
      UPDATE user SET password=password('qwe123..') WHERE user='root'; 
      flush privileges;
    • 创建数据库 day28db

      python 复制代码
      CREATE DATABASE day28db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    • 创建用户 s5

      python 复制代码
      insert into mysql.user(user,host,password) values('s5','%',password('qwe123..'));
      flush privileges;		# `host`: 指定该用户可以从哪个主机连接到数据库服务器。`%`表示任何主机都可以。
    • 授权

      python 复制代码
      grant all privileges on 数据库.* to settle@'%';
      flush privileges;
      
      grant all privileges on  day28db.* to s5@'%';
      flush privileges;		#  授予用户s5在day28db数据库上的所有权限。(如表、视图等)。
    • 远程测试(MariaDB和MySQL一样道理)

    • 本地测试

      有密码无法登录,无密码可以登录,为什么呢?因为本地localhost账户,本机登录不需要输入密码,所以将本机不需要密码去除掉,看mysql表,里面user这张表,储存了所有的用户如下图









      现在就正常了,使用原来的方式登录

相关推荐
Kkooe39 分钟前
GitLab|数据迁移
运维·服务器·git
一念之坤1 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
久醉不在酒1 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
WindFutrue1 小时前
使用Mybatis向Mysql中的插入Point类型的数据全方位解析
数据库·mysql·mybatis
Beekeeper&&P...1 小时前
git bash是什么,git是什么,git中的暂存区是什么,git中的本地仓库是什么,git中工作目录指的是什么
开发语言·git·bash
wxl7812271 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder1 小时前
Python入门(12)--数据处理
开发语言·python
LKID体2 小时前
Python操作neo4j库py2neo使用(一)
python·oracle·neo4j
墨鸦_Cormorant2 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker