PhpStorm使用sftp上传代码

PhpStorm使用sftp上传代码

什么是sftp

sftp是Secure ftp的缩写,就是安全的ftp的意思,它是通过ssh通道来传输的,所以安全,正是因为如此,不像ftp需要专门安装配置服务器,sftp直接就可以用,不需要配置服务器,因为每台服务器都会默认运行sshd服务。

为什么要使用sftp上传

一般上传代码可能会使用git/svn,不过如果是个人写的代码,有时候不需要版本管理(比如只是测试用的)。又或者公司有开发机,每人一个帐号,大家把在自己电脑上写代码,但实际上是上传到开发机中运行,这时也是用sftp。

开始配置

在你要上传的项目中,点击顶部工具栏中的ToolsDeploymentconfiguration
-w825

点击+SFTP
-w797

你要上传到哪个服务器要写个名称,添加名称后就会显示在左侧的列表上
-w798

选中刚刚创建的“公司-test”→点击右侧SSH 错嫩城栓ation
-w1321

点击SSH configuration右侧的三个点...,在弹出的窗口左上角点+就可以新建一个ssh配置(文章开头说过sftp是通过ssh通道来传输的)
-w828

输入服务器ip(或域名),ssh的用户名(username)、密码(password)、端口(port),最后点击Test Connection测试联通性,如果输入都没有问题,会弹出测试成功(“Successfully Connected!”),成功后先点击窗口下方的Apply,再点击OK就会关闭窗口
-w828

另外右击这个名字,可以修改名称,如果不修改,默认就是username@ip的格式
-w828

回到这里,在SSH configuration里就可以选择刚刚创建的ssh配置了,然后root path是指你要上传到服务器的哪个目录(绝对路径),另外就是可以填一下Web server URL,就是打开你服务器这个网站的网址,但是这个一般可以不填(如果是前端可能会比较方便直接打开html页面)
-w1326

继续选择第二个选项卡Mappings(路径映射)这边的路径,是与上一步的路径相对应的,Deployment path是相对前面的Root path,也就是项目最终会上传到Root path+Deployment path里。比如:

Root path = /data/www/myproject
Deployment path = /subproject
那么最终上传路径是: /data/www/myproject/subproject (subproject也是一个目录),注意“/data/www/myproject/subproject”这个目录必须在服务器中存在,否则是上传不了的

同理,Web path也是前面的/web server URL里面去的
-w785

继续,第三个选项卡Excluded Paths里,可以添加你要排除的路径(即本项目不想上传的文件夹),完成后,最后点击窗口右下角的OK保存配置
-w799

注意,由于我们要排除的文件夹一般是缓存文件夹和.github/.svn文件夹,而点开头的文件夹在Mac中是不显示的,即使开启显示有时候也没法直接生效(也许要重启phpstorm或Finder),所以我们可以直接复制要排除的文件/文件夹的绝对路径填到前面的框里即可,自此全部设置完毕。
-w697

设置权限

按道理现在已经可以开始上传了。但是要注意,一般来说,我们会以www用户和www组权限运行nginx以及php-fpm,然后服务器的网站根目录我们会给它www用户和www组权限,这样nginx、php-fpm、网站文件全部同权限同组,就不会有权限问题。

然而,恰恰用于运行服务的用户是不能用于登录的(当然也可以用允许登录的用户,但是一般都会创建一个不能登录的用户来运行服务),所以一般来说,你自己的用来登录ssh的用户肯定不会是www,这就意味着你的账户对权限为www:www的web根目录没有权限,怎么办?

我的做法是让我自己的用户加入www组,这样我自然就有权限去访问权限为www:www的网站根目录了,具体方法请查看:让linux用户隶属于多个组

但是这样还有一个问题,上传用户肯定是非www用户,虽然有权限上传了,但是上传完所属用户和所属组都是继承上传用户以及它的组,www用户依然没有权限访问,怎么办?

我们很容易想到的一个方法,是把www用户加入上传用户所属组,这样即使上传后的文件所有者和所属组都继承上传用户的,但是因为www用户已经在文件所属的那个组里面,所以它还是有权限读写这些文件。但是这个方法不好的地方是,如果提交文件的用户有多个,那么www就需要加入所有这些用户的组里,其实挺不方便的。

还有一种方法,就是设置web根目录的SGID,这样可以达到一种效果,不管谁提交文件,文件的所属组都会继承web根目录的所属组,而不是继承上传者的所属组(当然所有者还是上传者,这个是不会变的),具体参考Linux特殊权限SUID,SGID,SBIT

sudo chmod g+s /path/to/webroot

开始上传

首次上传

设置完权限之后,然后就可以开始上传了,由于是第一次上传,所以先把整个项目上传一下。在phpstorm左侧目录树中右击项目文件夹,它会把整个文件夹包括里面的所有文件(除去前面设置过排除的)都上传到前面设置的目录中Root path+Deployment path中(所以这个目录应该配置为web根目录),你无需在服务器事先创建项目目录
-w1188

特别注意: 如果你前面设置的映射是到web跟目录的,那么你必须在第一次上传完这个项目后,去路径映射里面把你的项目目录填上去,否则单个上传文件的时候,将会上传到web根目录(而我们想要的是上传到项目目录)。或者,另一种方法就是先在服务器建立一个与你的项目目录同名的空目录,但这样的话,上传的时候就不能右击项目目录上传了(因为服务器已经创建了),而是要全选项目目录下的所有文件。

首次上传建议: 说实话,如果文件多的话,首次上传我不太建议使用phpstorm用sftp上传(因为非常慢),我建议先打包压缩,然后scp/rsync传上去后再解压,后面少量文件再来用phpstorm的sftp上传。

后续上传

如果你想每次按保存(或者自动保存)都上传,可以勾选ToolsDeploymentAutomatic Upload
-w704

但我个人不建议自动,我都是写完真正要上传上去测试时,才右击手动上传的。另外如果要把服务器上的文件同步下来,一样右击,只不过是选择download from

打赏

订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

PhpStorm使用sftp上传代码