通常想到自动部署,人们想到的都是将代码用git传到repo,然后通过repo自动部署到服务器中,这种方式对于多人协作是非常友好的。但是如果只是想简单地将本地项目目录实时同步到远程服务器,达到实时测试的目的,pycharm给我们提供了一种更为简洁有效的方式。
我是T型人小付,一位坚持终身学习的互联网从业者。
文章目录
- 操作环境
- 准备工作
- Pycharm配置
- ssh配置
- 目录映射配置
- 自动创建不存在目录
- 设置自动同步
- 效果演示
- 总结
操作环境
本地环境
- Centos7+Gnome桌面
- Pycharm 2019.3
- Anaconda3(Python3.7)
- Django 2.2.10 LTS
远端环境
- Centos7 无桌面
- Anaconda3(Python3.7)
- Django 2.2.10 LTS
- IP: 172.29.56.178(允许SSH)
为了使得环境因素对测试的干扰降到最低,本地和远程的部署环境尽量保持一致。因为采用SFTP协议进行传输,需要确保本地能成功ssh到远端,不管是密码还是密钥方式。
准备工作
说明一下,出于项目隔离的目的,我对每个项目都用virtualenv创建了独立的根目录。
本地配置
进入本地的test环境,安装django
(test) [fuhx@testmachine test]$ pip install django==2.2.10
创建项目备用
(test) [fuhx@testmachine test]$ django-admin startproject TestAutoSync
(test) [fuhx@testmachine test]$ ll
total 8
drwxrwxr-x 3 fuhx fuhx 4096 May 27 13:16 bin
drwxrwxr-x 3 fuhx fuhx 23 May 27 13:14 lib
-rw-rw-r-- 1 fuhx fuhx 264 May 27 13:14 pyvenv.cfg
drwxrwxr-x 3 fuhx fuhx 43 May 27 13:17 TestAutoSync
这里的TestAutoSync
就是我们待会要操作的目录。
远端配置
同样进入test环境(任意环境,名字不一定要是test),安装django
(test) (base) [root@ai-therm test]# pip install django==2.2.10
创建一个空目录,用来和本地的项目目录进行同步
(test) (base) [root@ai-therm test]# mkdir TestAutoSync
(test) (base) [root@ai-therm test]# ll
total 8
drwxr-xr-x 3 root root 4096 May 27 14:28 bin
drwxr-xr-x 3 root root 23 May 27 14:27 lib
-rw-r--r-- 1 root root 245 May 27 14:27 pyvenv.cfg
drwxr-xr-x 2 root root 6 May 27 14:29 TestAutoSync
需要确保ssh的用户在这个目录具有写操作权限。
Pycharm配置
ssh配置
下面用pycharm打开本地项目,注意是在manage.py
的上一级目录,不然django项目会有问题
之后进入远程部署配置,Tools
-Deployment
-Configuration
点左边的加号,选择sftp
填入相关信息如下,这里将远端的Root path
设定为刚才我们创建的空目录
如果ssh的信息无误,点击Test Connection
会提示成功
目录映射配置
之后进入Mappings
选项卡,将本地的目录和远端的目录映射起来。需要注意这里的远端目录的根目录是以上面设定的Root path
为准
如果有不想同步的子目录可以去第三个选项卡Excluded Paths
进行剔除,我这里就不选了。
自动创建不存在目录
打开如下Options
将Create empty directories
勾选上,当远端有目录不存在时会自动创建
设置自动同步
将Automatic Upload
勾选上,这样只要本地目录有文件更改都会自动进行上传
效果演示
首次同步先进行手动操作,将本地目录和远端目录的内容同步到一致。点击下面的按钮进行手动上传
页面下方会显示同步的内容和进度
去远端检查,发现成功进行了同步
(test) (base) [root@ai-therm TestAutoSync]# ll
total 4
-rw-r--r-- 1 root root 632 May 27 13:17 manage.py
drwxr-xr-x 2 root root 74 May 27 15:19 TestAutoSync
下面来检测下自动同步功能,编辑urls.py
文件,每次保存都会看到下面有自动同步的消息不断弹出来
去远端查看发现文件成功被自动同步
(test) (base) [root@ai-therm TestAutoSync]# cat urls.py
"""TestAutoSync URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/'),
]
这样就达到自动同步的目的了,同时因为两边的环境都是一样的,所以在本地测试正常的代码同步到远端基本也是可用的,这样就方便测试人员及时连接过去测试了。
总结
当然,除了上传到远端服务器,pycharm还可以从远端进行下载,以及两边文件的比较和同步,不过这些功能用的就比较少了。