部署之代码同步
# GIT小试牛刀
上传代码的方式有很多种, 例如: FTP工具、scp命令、rsync服务、svn等, 不过目前公司主流的都是使用git+代码托管平台.
项目部署的本质: 将本地电脑上的项目代码上传到服务器 - 服务器配置(安装mysql、redis等) - 启动
将代码扔到服务器上:
老旧的方式(都不咋用啦) - scp、FTP、rsync、svn、pycharm 它们都是将代码直接扔到服务器上.
现在通常使用 git 来完成!! git不会将代码直接扔到服务器上.
我的电脑本地下载git工具,服务器上也下载git工具.
■ 我们先通过git将代码上传"git push"推到 代码仓库中,服务器通过git从代码仓库中把代码"git pull"拉取下来!!
[进阶]:上述过程是手动的,现在更多的是 hook自动集成,代码仓库一更新,服务器上的代码就自动重新部署.
[★]git还可以实现协同开发,以及代码版本的控制!回滚等.
代码托管仓库: github、gitee、gitlab(自建的)
2
3
4
5
6
7
8
9
10
11
# 本地上传代码到仓库
本地第一次上传代码到仓库
- 电脑上安装git
https://git-scm.com/ 根据电脑的操作系统下载对应的git,点点点就安装好啦!!
- 注册github/gitee
- 再gitee上创建一个新的仓库,(相当于一个空的文件夹) 得到一个仓库地址: https://gitee.com/One_PieceDC/order.git
- 在本地git进行配置
1.git全局配置 (在终端的任意位置输入以下代码!)
git config --global user.name "菜市场"
git config --global user.email "[email protected]"
- 对将要上传的项目进行配置
1.在终端进入项目目录 (把项目拖到终端上就行了
2.输入以下命令进行初始化 -- 最开始做一次即可
git init # 在项目根目录下会出现一个隐藏目录 .git
git remote add origin https://gitee.com/One_PieceDC/order.git # 就可用origin代指仓库地址了
3.提交代码
git add .
git commit -m "第一次提交,项目初始化"
4.提交到远程仓库
git push origin main # -- 首次提交时会叫你输入用户名和密码!!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 服务器拉取仓库代码
服务器第一次拉取仓库代码
- 购买服务器,进行登录
(´・Д・)」此处我是通过阿里云的web版使用的服务器,这种方式不专业!
专业的做法是在自己电脑上利用ssh连接到远程服务器!!
- 输入以下命令
pwd # 看在哪个目录下
git # 看是否有git软件
yum install git # centos可通过yum命令下载git
# 克隆代码!! 首次操作会需输入gitee账号的用户名和密码
# 克隆时,还包含了remote add的操作
git clone https://gitee.com/One_PieceDC/order.git
ls # 可以看到当前目录下有order文件夹
2
3
4
5
6
7
8
9
10
11
# 情景:项目代码有变.
情景:当对项目代码进行了修改.
>本地
git add .
git commit -m "修改了xx功能"
git push origin main # 最新的代码就同步到gitee仓库啦!在仓库页面可以看到对哪个文件进行了修改.
>服务器
(´・Д・)」此处我是通过阿里云的web版使用的服务器,这种方式不专业!
专业的做法是在自己电脑上利用ssh连接到远程服务器!!
★一定要先进入项目根目录下
cd order
git pull origin main # 拉取最新的代码,只会同步变化的地方,不会像克隆一样全部重新拉下来
2
3
4
5
6
7
8
9
10
# ssh登录服务器
在自己电脑上利用ssh连接到远程服务器!
ssh root@服务器公网IP
、mac终端和windows的git软件、windows的xshell都集成了ssh!!
# 代码同步
(´・Д・)」
# 本地上传
上面"GIT小试牛刀"的步骤 存在一些问题,我们逐一的来进行解决!!
1.代码仓库gitee创建一个仓库,仓库名尽量与项目名一致
2.本地本机推送代码
git add .
git commit -m "xxxxx"
git push origin main
- 上述推送代码的步骤能推,但存在一些问题:
问题1> 有些文件不需要推送
eg: _pycache_文件夹里的.pyc文件,这些是py运行过程中生成的字节码,无需提交
问题2> 本地项目的mysql、redis等配置和线上服务器的mysql、redis等配置是不一样的,
2
3
4
5
6
7
8
9
10
# .gitignore文件
在项目中创建一个
.gitignore
的文件, 在里面写上文件名或文件夹, 可以git忽略一些文件, 不要进行版本控制.
★ 一般会在做项目开发时就会在项目根目录下把.gitignore给加上! / 在对项目进行 git init之前!
https://github.com/github/gitignore/blob/main/Python.gitignore
# - 该文件内容中,最后关于pycharm的注释可以取消
# - 在该文件内容最后添加一个忽略文件 .DS_Store ,这是mac系统自动生成的,无需提交
# --- ★★★★★★★★★★ 加以下内容!!
.DS_Store
# database migrations
*/migrations/*.py
!*/migrations/_init_.py
2
3
4
5
6
7
8
9
10
Q: 在前面"GIT小试牛刀"的小节中 已经对项目进行 git init啦!!
此时再往里加入.gitignore文件,然后 add、commit、push后成功再次上传到仓库中,但需要忽略的文件依旧存在,怎么办?
A: 简单粗暴的解决办法:
删除gitee仓库 + 本地项目中删除根目录下的.git
目录 + 重新创建git仓库 + 本地重新推送到仓库
step1: gitee删除仓库
step2: 本地进入项目根目录,执行以下命令或操作
ls -a
rm -rf .git
往项目根目录下添加python相关的.gitignore文件
step3: gitee新创建代码仓库order
step4: 本地进入项目根目录,执行以下命令或操作
# - Git 全局设置 在前面已经做过了,只需做一遍,所以其实这里可以不执行这两条命了啦!
git config --global user.name "菜市场"
git config --global user.email "[email protected]"
# - 本机进行的代码版本控制以及提交的代码记录都会存储在.git目录里!!
# Initialized empty Git repository in /Users/dengchuan/Desktop/order/.git/
git init
git add .
git commit -m "第一次提交"
# - 配置代码仓库的地址 相当于起个别名,origin代指代码仓库地址
git remote add origin https://gitee.com/One_PieceDC/order.git
# - 本地提交代码到仓库中
git push origin main
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# local_settings.py
本地和线上的配置如何进行隔离呢? 利用local_settings.py文件!!
Step1: 本地在settings.py所在目录下创建同级文件 local_settings.py
Step2: 本地在settings.py的《最后》添加以下代码
try:
from .local_settings import *
except ImportError:
pass
2
3
4
说明:
- 在.gitignore文件中是有写 local_settings.py 的!
"★★★"所以,在本地提交代码到仓库的时候,仓库中是不会有 local_settings.py 文件的!!
- 之所以在本地项目代码中添加local_settings.py文件,是为了方便本地的开发环境的配置!!
我们可以在该文件中写入本地的mysql、redis等配置,因为在setting.py的最后写了代码"from .local_settings import *"
So,在本地运行项目时,local_settings.py中的配置会覆盖setting.py中的配置.
- 待本地的代码上传到仓库中,线上服务器从仓库中拉取代码后!
我们在线上服务器中,以同样的方式创建 local_settings.py 文件!! 在里面进行线上的mysql、redis等配置.
(*≧ω≦) 经过上述步骤,本地和线上的配置就成功进行了隔离!!
★ 通常会将本地和线上一样的配置放在setting.py中
将本地所特有的放在本地的local_settings.py中,线上所特有的放在线上的local_settings.py中!
>> .gitignore文件中得写 local_settings.py 噢~
2
3
4
5
6
7
8
9
10
11
12
13
14
# gitee密钥登录
解决本地提交代码时, 每次需要输入密码 以及 线上服务器拉去代码时,每次也需要输入密码 的问题!!
也许你会发现不进行下述的配置,开始几次输入后,后面也不用输入了,这是因为 电脑凭证!电脑自己保存了密码.Hhh
但有些同志的电脑不好使, 就会每次都让输入. mac的电脑凭证是那个 "钥匙串".
■ 方式一: 仓库地址选择HTTP连接,在本地设置仓库地址时,固定用户名和密码!!
git remote add origin https://用户名:密码@仓库地址
git remote remove origin
# git remote add origin https://gitee.com/One_PieceDC/order.git
git remote add origin https://One_PieceDC:xxx@gitee.com/One_PieceDC/order.git
■ 方式二: 仓库地址选择SSH连接, 使用密钥(★推荐!)
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa.gitee # - 一路回车即可 -f是为了指定名字
cat ~/.ssh/id_rsa.gitee.pub # - 将该公钥给gitee!!
ssh-add ~/.ssh/id_rsa.gitee # !!一定记得执行这步.
ssh -T git@gitee.com # 看是否通过ssh验证!!
>> Hi 菜市场(@One_PieceDC)! You've successfully authenticated, but GITEE.COM does not provide shell access.
git add .
git commit -m "测试ssh"
git remote add origin_ssh git@gitee.com:One_PieceDC/order.git # - 此处的远程仓库地址就是ssh连接啦!!
git push origin_ssh main
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
查看配置远程仓库地址
# GIT版本控制
git关于版本控制的体现,以及本地or线上服务器的回滚操作(回滚过去,代码也会相应改变!!)
1> 在本地的git每次执行commit命令时, 都会生成一个提交记录, 如果执行git push也会将记录提交到代码仓库.
2> 以下命令可以在本地、线上执行, 以此来切换到各种版本!!
- 查看记录
git log
git reflog
- 回滚到指定版本
git reset --hard fa1653b6cd5ed1ff12ef1acdf534e91b9b895604
2
3
4
5
# 线上同步
(´・Д・)」
- 通过http连接从gitee仓库克隆代码
yum install git
git clone https://gitee.com/One_PieceDC/order.git
■ 配置gitee密钥!!/ssh连接
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa.gitee
cat ~/.ssh/id_rsa.gitee.pub
将公钥配置到gitee上
"""
执行ssh-add ~/.ssh/id_rsa.gitee
若提示信息Could not open a connection to your authentication agent.
那么在该命令之前先执行 命令 ssh-agent bash
"""
ssh-add ~/.ssh/id_rsa.gitee
ssh -T git@gitee.com
- 通过ssh连接从gitee仓库克隆代码
git clone git@gitee.com:One_PieceDC/order.git
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
我们本地想要通过SSH连接服务器, 每次连接都输入密码也觉得比较烦, 此时也可以使用秘钥的方式直接连接服务器
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa.Aliserver
# - 会让输入服务器的密码!上传的公钥内容在服务器的/root/.ssh/authorized_keys里!!
ssh-copy-id -i ~/.ssh/id_rsa.Aliserver.pub root@47.109.154.134
ssh-add ~/.ssh/id_rsa.Aliserver
ssh root@47.109.154.134 # 不用输入服务器的密码啦!!
2
3
4
5
6
# ★★★总结(简略版)
对到目前所学的知识点,做一个归纳总结!! 上面都可以不看, 看这里就行!Hhhh
◎ 本地配置gitee的ssh免密登陆
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa.gitee # - 一路回车即可 -f是为了指定名字
cat ~/.ssh/id_rsa.gitee.pub # - ★ 将该公钥给gitee!!
ssh-add ~/.ssh/id_rsa.gitee # !!一定记得执行这步.
ssh -T git@gitee.com
◎ 线上服务器配置gitee的ssh免密登陆
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa.gitee
cat ~/.ssh/id_rsa.gitee.pub # - ★ 将该公钥配置到gitee上
ssh-add ~/.ssh/id_rsa.gitee # !! 若通过不了,则执行该命令之前先执行命令 ssh-agent bash
ssh -T git@gitee.com
◎ 在本地配置线上服务器的ssh免密登陆
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa.Aliserver
# - 会让输入服务器的密码!上传的公钥内容在服务器的/root/.ssh/authorized_keys里!!
ssh-copy-id -i ~/.ssh/id_rsa.Aliserver.pub root@47.109.154.134
ssh-add ~/.ssh/id_rsa.Aliserver # !!
ssh root@47.109.154.134 # 棒! 不用输入服务器的密码啦!!
------ ------ ------
在gitee上创建仓库,拿到新建仓库的http地址和ssh地址!!
eg:
https://gitee.com/One_PieceDC/order.git
git@gitee.com:One_PieceDC/order.git
------ ------ ------
本地项目,添加.gitignore文件!!
配置local_settings.py文件,以便实现线上环境和本地环境的隔离.
- [<进入本地项目的根目录>], 第一次需要执行的命令:
git config --global user.name "菜市场"
git config --global user.email "[email protected]"
git init
git add .
git commit -m "第一次提交"
"""
git remote add origin https://gitee.com/One_PieceDC/order.git
git push origin main
"""
# - 因为前面在本地配置了gitee的ssh免密登陆
git remote add origin-ssh git@gitee.com:One_PieceDC/order.git
git push origin-ssh main
- [<进入本地项目的根目录>], 往后提交代码只需执行命令:
git add .
git commit -m "xxxx"
git push origin-ssh main
------ ------ ------
线上服务器,克隆代码 (可通过云服务器厂商提供的web地址登陆服务器,也可在本地通过终端的ssh工具登陆服务器!!)
- 你想将仓库里的项目克隆到哪个目录下,你就进入哪个目录 第一次拉取项目需要执行以下命令
yum install git
"""
git clone https://gitee.com/One_PieceDC/order.git # origin指代远程的http地址
"""
# - 因为前面在线上服务器上配置了gitee的ssh免密登陆
git clone git@gitee.com:One_PieceDC/order.git # origin指代远程的ssh地址
- 以后获取项目最新代码,只需[<进入项目根目录下>]
cd order
git pull origin main
------ ------ ------
在本地或者线上服务器上进行项目的版本控制,回滚操作
- 查看记录
git log
git reflog
- 回滚到指定版本
git reset --hard fa1653b6cd5ed1ff12ef1acdf534e91b9b895604
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
若ssh的形式 push、pull失败, 先执行下 ssh-add 相关命令试试!!