云主机(或 VPS 主机)的几种代码文件部署方式

发表于2017-06-06   4996次阅读

云主机(或 VPS 主机)的几种代码文件部署方式

云主机或者 VPS 主机相对于开发者来说是一个空白的操作系统,必要的软件环境都需要开发者自己安装,自己动手丰衣足食吗,这样比较灵活的,但也会相对麻烦。在单机环境下,上传代码文件(或者代码)包主要有这么几种办法:

FTP 方式

这种方式需要服务端和本地客户端都安装 FTP 配套软件。FTP 服务端开源软件有很多,比如 vsftpd,Pure-FTPd,ProFTPD 等等,这些 FTP 服务端软件历史也比较悠久,网上的资料也非常多。如果是仅仅用了上传代码文件,这些软件并无明显的差别,这里我们以 vsftpd 为例演示使用方法:

  • 安装 vsftpd
yum -y install vsftpd
  • 添加用户
# 添加非登录用户,仅限 ftp 使用
$ sudo useradd wwwuser -d /home/wwwuser -s /sbin/nologin  
$ sudo passwd wwwuser
  • 配置
$ sudo vim /etc/vsftpd/vsftpd.conf
#安全配置

#开启日志记录功能,便于追踪问题,如果磁盘空间小的话日志要定期清理
xferlog_enable=YES
#日志文件路径
xferlog_file=/var/log/xferlog
#禁止匿名用户上传文件
anonymous_enable=NO

#设置白名单用户,只允许有限几个用户数上传文件,白名单文件默认在 '/etc/vsftpd/user_list' 中
userlist_enable=YES
userlist_deny=NO

#修改默认端口,默认为21
listen_port=50077
  • 启动
service vsftpd restart

另外,vsftp 也支持 https 数据传输,这里不再赘述,有需要的同学可以参考这篇文章:《How To Configure vsftpd to Use SSL/TLS on a CentOS VPS》

免费的 ftp client 也非常多,这里就不做介绍了。

命令方式

scp 命令

scp (secure copy) 是 Linux 下的远程文件传输工具,而且是加密传输。如果你的本地环境是 MacOS 或者某些 Linux 的桌面版本,用这个工具传输代码会很方便,拿来就用,不用单独安装。

scp 命令格式为:

scp <选项> 本地文件路径 用户名@地址:远程路径

用法例如:

$ scp  ~/wordpress/4.6.1/latest.tar.gz coderxing@www.coderxing.com:~
coderxing@www.coderxing.com's password:
latest.tar.gz            100% 7774KB   3.8MB/s   00:02

常用选项为:

-r 拷贝目录
-P 指定 ssh 端口
-v 显示调试信息
-C 启用压缩传输
-l 限制传输速度,单位是 Kbit/s.

scp 每次提交文件都需要输入密码,比较麻烦,可以用以下集中方式配置无密码传输。

方式一:配置ssh无密码登录。

scp 是基于 ssh 协议,scp 无密码传输相当于配置 ssh 的无密码登录,配置方式如下:

  • 在本地电脑生成秘钥(比如我的Mac笔记本),如下:
[coderxingMacintosh]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/coderxing/.ssh/id_rsa):
Created directory '/home/coderxing/.ssh'.
Enter passphrase (empty for no passphrase): <这里直接回车,无密码登录不需要设置密码>
Enter same passphrase again: <回车>
Your identification has been saved in /home/coderxing/.ssh/id_rsa.
Your public key has been saved in /home/coderxing/.ssh/id_rsa.pub.
The key fingerprint is:
0f:81:34:7f:15:5c:66:eb:eb:83:c3:46:3c:4a:c6:58 coderxing@VM_centos
The key's randomart image is:
+--[ RSA 2048]----+
|      o    .oo+  |
|     . +   ..o . |
|      . o .   .  |
|         oE  .   |
|        S+ .  .  |
|        .o+ +  . |
|         o.+ o.  |
|          . =..  |
|           . ... |
+-----------------+

[coderxingMacintosh]$ cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGKklAId/dtp4UUuQQuHog1ImfFnKpr8aVN4WgkEO8S8mZ7C3jvLxvI0SEYjWccmtYirWTMNZSCT0S6qNSmvjjw96VMfYQ3o/0k4Rp+EIX2wqj+1iaJQtnrrZE7IGehnMAD/m6/BPZOlCR32nXMg349PkXTxHv9lzi3L0eTO9v9LuFQenZnrH6xt0K2G5NLNIMhs0r8MAEU7MwiKfx9rTwGVDHmjF3iB/WlhYAhax/ooV5hpJqBhWzirh/KS0yHWJQfL/eDIa0vWl99HNaJrGaeXl4kBziG9IrDsL7ut7MCGYR/tOmDB3ua4Bq757UfV/GALqcLopWfPtJugp7AbKj coderxing@local

ssh-keygen 命令默认使用 rsa 非对称加密算法生成秘钥,会生成公钥和私钥两个文件,请求方使用公钥加密请求,请求接受方使用私钥解密请求数据,这样既可以保证数据传输的安全性,防止被篡改。生成的文件默认保存在当然用户主目录的 .ssh 文件夹,如图:

[coderxingMacintosh] $ ls ~/.ssh/
id_rsa  id_rsa.pub

其中 id_rsa.pub 是公钥,id_rsa 是私钥。

  • 在远程主机上(比如个人的 Mac 笔记本)配置公钥 编辑 ~/.ssh/authorized_keys 文件(没有则创建),将之前在远程主机生成的公钥添加进去。
[coderxingVM] $ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGKklAId/dtp4UUuQQuHog1ImfFnKpr8aVN4WgkEO8S8mZ7C3jvLxvI0SEYjWccmtYirWTMNZSCT0S6qNSmvjjw96VMfYQ3o/0k4Rp+EIX2wqj+1iaJQtnrrZE7IGehnMAD/m6/BPZOlCR32nXMg349PkXTxHv9lzi3L0eTO9v9LuFQenZnrH6xt0K2G5NLNIMhs0r8MAEU7MwiKfx9rTwGVDHmjF3iB/WlhYAhax/ooV5hpJqBhWzirh/KS0yHWJQfL/eDIa0vWl99HNaJrGaeXl4kBziG9IrDsL7ut7MCGYR/tOmDB3ua4Bq757UfV/GALqcLopWfPtJugp7AbKj coderxing@VM_58_157_centos" >> ~/.ssh/authorized_keys

[coderxingVM] $ chmod 600 ~/.ssh/authorized_keys

注意:authorized_keys 的权限必须是 600,既只有文件所有者才能读写。

配好之后,在进行 scp 就不会出现输入密码提示了:

$ scp  ~/wordpress/4.6.1/latest.tar.gz coderxing@www.coderxing.com:~
latest.tar.gz            100% 7774KB   2.3MB/s   00:04

方式二: 使用 sshpass

sshpass 可以让交互式的密码输入方式变成参数传递方式,也可以变相实现类似无密码访问的方式。而且某些场景下不能配置无密码访问,比如 ~/.ssh/authorized_keys 无法修改,这时 sshpass 就派上用场了,而且也可以编码到脚本中。

安装

sshpass 需要单独安装,以下是Linux(或MacOS)环境下源码安装方式:

$ sudo wget https://downloads.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz
$ sudo tar -zxvf sshpass-1.06.tar.gz
$ cd sshpass-1.06/
$ sudo ./configure
$ sudo make
$ sudo make install
使用方式

为 sshpass 和密码创建一个别名命令,这样不用每次使用都输入密码。

$ alias scptest='sshpass -v -p <密码> scp'
$ $ scptest -P 50022 ~/wordpress/wp-signup.php coderxing@www.coderxing.com:

sshpass 的常用选项

-p password #使用密码字符串作为输入
-f passwordfile #使用密码文件作为输入
-e #使用环境变量 SSHPASS 作为密码输入
-v #显示交互详情信息

其他方式

除了上面介绍的两种方式,还可以使用 expect 命令,sshpass 仅限于 ssh, sftp,scp 几种基于 ssh 进行交互的命令,而且执行过程中只能使用一套密码。expect 可以根据不用的交互提示出入不同的密码。但编写expect脚本相对复杂一些,如果只是提交代码文件就略显笨重。

IDE 插件

很多 IDE 开发工具有自己的文件提交插件,可以帮助开发者提高文件提交效率。比如 Eclipse 的 Remote System Explorer (RSE) 插件,

安装

在 Eclipse 应用市场(Help -> Eclipse Marketplace)中搜索 "Remote System Explorer.",如下图所示: 点击 “Installed” 完成安装即可。

配置

通过菜单 Windows -> Show Views -> Remote System 打开远程文件系统视图,如下图: 点击面板左上角的 “New Connection” 按钮进行配置,弹出配置面板如图: 从图中可见,RSE 支持多种访问方式比如 ftp, ssh, telnet,我们以ssh 为例,如图 配置过程中一直下一步即可。

双击“My Home 或者 Root” 会弹出密码提示, 如需添加文件,直接拖拽到对应目录即可,非常方便。