一、快速入门
1. 什么是Git
Git
是一个分布式的版本控制软件。
- 软件,类似于QQ、office、dota等安装到电脑上才能使用的工具
- 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据
- 分布式
- 文件夹拷贝
- 本地版本控制
- 集中式版本控制
- 分布式版本控制
2. 为什么要做版本控制
要保留之前所有版本,以便回滚和修改
3. 安装git
-
针对不同系统的安装详见:
二、版本控制--Git管理文件夹
想要让git
对---个目录进行版本控制需要以下步骤:
-
进入要管理的目录
-
执行初始化命令
pythongit init
-
检测当前目录下文件状态
pythongit status 注:新增的文件和修改过后的文件都是红色
-
管理指定文件(红变绿),
.
代表当前目录下没有被管理的所有文件。红色:新增的文件/修改了原老文件,其次执行git add .(变绿色)。绿色:git已经管理起来了,其次执行git commit -m '描述信息'。最后生成版本。pythongit add 文件名 git add .
-
个人信息配置:用户名、邮箱【一次即可】
pythongit config --global user.email "you@example.com" git config --global user.name "Your Name"
-
生成版本
pythongit commit -m '描述信息'
如果你对里面文件修改了,那么执行上述命令再次操作让其生成V2版本 -
查看版本记录
pythongit log
2.1 Git 三大区域
2.2 回滚
-
回滚至之前版本
pythongit log git reset --hard 版本号
第三个功能就会被git自动替换掉 -
回滚至之后版本
pythongit reflog git reset --hard 版本号
2.3 分支
分支可以给使用者提供多个环境,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
-
查看分支
pythongit branch
-
创建分支
pythongit branch 分支名称
-
切换分支
pythongit checkout 分支名称
-
分支合并
python首先切换到要合并的分支上:git chechout master git merge 想要合并的分支 git merge bug 把bug分支合并到master 注意:切换分支在合并
紧急修复完后其实,bug分支就没有用了
-
删除分支
pythongit 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在新旧电脑都有编辑,可能改的同一行就可能产生冲突 - 解决冲突
- 在新电脑打开a1-----》vim a1.py,会发现把两个记录保留合并了
- 解决完后,继续开发
在新电脑上vim a1.py
,内容为:在公司开发了50%,再继续开发50%
- 最后
git add .
git commit -m 'xxx'
git push origin dev
- 上线,把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"
- 先切回到dev分支
- git rebase变基(变成一个基本的树干),然后把master放进来。git rebase master
- 最终的代码是放在master分支的,所以切换到master,然后再git merge 到dev。git checkout master, git merge dev。
- 这样提交就变成一条线了
- 第三种:可能会产生分叉(往下来拉代码会与本地代码无形的进行一次合并,一样的就会冲突,不一样的就会自动合并)
- 原来往下来拉是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 快速解决冲突
-
- 安装beyond compare
查看compare安装路径
- 安装beyond compare
-
- 在git中配置
--local:只在当前项目有效
pythongit config --local merge.tool bc3 # 合并工具变成bc3 git config --local mergetool.path '/usr/local/bin/bcomp' # 这个路径就是compare的安装路径 git config --local mergetool.keepBackup false # 解决冲突的时候不用保留源文件
- 在git中配置
-
- 应用beyond compare 解决冲突
pythongit mergrtool
三、多人协同开发
3.1 工作流
如下图:
- master上放正在运行的代码
- dev上放正在开发的代码
- 想要做斗地主和炸金花的功能,需要将dev做拆分,拆分出来要么叫它的名字要么叫功能名字
- 假设A做完了,申请合并到dev分支。在这个合并的过程中做代码检查review,不通过检查继续去开发,通过了合并。这里不能直接上线,要谨慎处理
- 代码拆出来,临时在做一个分支release(预发布)来做测试或者写一些文档之类的,假如测试完后发现了一些小bug,然后修复,完成之后才能上线。
- bug修复完了,是需要再提交回dev的。斗地主的功能做完了。分支就可以删除了,也可以不删(假如你要开发新功能)
- 炸金花一样类似
3.2 创建项目&邀请成员
协同开发时,需要所有成员都可以对同一个项目进行操作,需要邀请成员并赋予权限,否则无法开发。github支持两种创建项目的方式(供多人协同开发)。
- 第一种:合作者,将用户添加到仓库合作者中之后,该用户就可以向当前仓库提交代码。
- 第二种:组织,将成员邀请进入组织,组织下可以创建多个仓库,组织成员可以向组织下仓库提交代码。
拓展: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分支
pythongit checkout dev git checkout -b release
-
测试等
-
合并到master
python使用pull request 或 本地将release合并到master分支
-
在master分支打Tag
pythongit tag -a V2 -m '第二版 斗地主功能' git pull origin --tags
-
运维人员就可以去下载代码做上线了
pythongit 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 中。改操作可以不执行,不设置也可以成功。
pythonssh-agent bash ssh-add ~/.ssh/id_rsa.github ssh-add ~/.ssh/id_rsa.gitee
-
多账号配置 config 文件
- 创建config文件
pythontouch ~/.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:
- Github:
https://github.com/settings/keys
将 id_rsa.github.pub 中的内容填进去,起名的话随意。 - Gitee
https://gitee.com/profile/sshkeys
将 id_rsa.gitee.pub 中的内容填进去,起名的话随意。
- Github:
-
测试成功
pythonssh -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的远程库关联起来
pythongit 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
pythongit config --local user.name 'xxx' git config --local user.email 'xxx@xx.com'
-
全局配置文件:~/.gitconfig
pythongit config --global user.name 'xxxx' git config --global user.name 'xxxx@xx.com'
-
系统配置文件:/etc/.gitconfig
pythongit 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
pythonyum install git-y
-
第一步操作
pythoncd /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为例)
-
安装gcc
pythonyum install gcc -y
-
安装系统Python依赖
pythonyum 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
-
下载源码 Python3.9.5 ,https://www.python.org/ftp/python/
pythonyum install wget -y cd /data/ wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
-
解压&编译&安装
python解压: tar -xvf Python-3.9.5.tgz 进入目录并编译安装: cd Python-3.9.5 ./configure make all make install
-
python解释器配置豆瓣源(腾讯云服务器,默认腾讯源)
pythonpip3.9 config set global.index-url https://pypi.douban.com/simple/
-
-
安装虚拟环境
-
安装virtualenv
pythonpip3.9 install virtualenv
-
创建虚拟环境(不一定和代码或者项目在一起,可以放在任意的地放,一般会在根目录:/envs/xxx创建。这里的xxx是环境名字)
pythonmake /envs virtualenv /envs/xxx --python=python3.9
-
激活虚拟环境
pythonsource /envs/xxx/bin/activate
-
-
安装uwsgi(在虚拟环境里面)
pythonsource /envs/xxx/bin/activate pip install uwsgi
- 基于uwsgi运行flask项目
cd 项目目录-
命令行
pythonuwsgi --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/
-
执行命令
pythonsource /envs/xxx/bin/activate uwsgi --ini nb_uwsgi.ini uwsgi --ini nb_uwsgi.ini & # 后台运行
-
停止
pythonps -ef|grep nb_uwsgi kill -9 xxx
-
-
- 基于uwsgi运行flask项目
-
安装Nginx(利用Nginx做反向代理和处理静态文件)
pythonyum install nginx -y
-
配置(修改nginx.conf配置文件:/etc/nginx/nginx.conf)
pythonuser 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
-
启动Nginx(先吧uwsgi启动起来)
-
临时启动
pythonsystemctl 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
-
赋予一个可执行权限
pythonchmod 755 reboot.sh chmod 755 stop.sh ./reboot.sh ./stop.sh
-
-
-
-
第四步:MySQL
-
安装服务端(安装服务端的时候客户端会自动安装上)
pythonyum install mariadb-server -y
pythonmariadb-server.x86_64 1:5.5.68-1.el7
-
安装客户端
pythonyum install mariadb -y
python软件包 1:mariadb-5.5.68-1.el7.x86_64 已安装并且是最新版本
-
启动
pythonsystemctl start mariadb systemctl stop mariadb # 开机自启 systemctl enable mariadb
-
登录
pythonmysql -u root -p
-
root设置密码
pythonUPDATE user SET password=password('qwe123..') WHERE user='root'; flush privileges;
-
创建数据库 day28db
pythonCREATE DATABASE day28db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
-
创建用户 s5
pythoninsert into mysql.user(user,host,password) values('s5','%',password('qwe123..')); flush privileges; # `host`: 指定该用户可以从哪个主机连接到数据库服务器。`%`表示任何主机都可以。
-
授权
pythongrant all privileges on 数据库.* to settle@'%'; flush privileges; grant all privileges on day28db.* to s5@'%'; flush privileges; # 授予用户s5在day28db数据库上的所有权限。(如表、视图等)。
-
远程测试(MariaDB和MySQL一样道理)
-
本地测试
有密码无法登录,无密码可以登录,为什么呢?因为本地localhost账户,本机登录不需要输入密码,所以将本机不需要密码去除掉,看mysql表,里面user这张表,储存了所有的用户如下图
现在就正常了,使用原来的方式登录
-