如何将数据从开发服务器移动到生产服务器?

时间:2014-02-07 13:51:51

标签: apache godaddy cpanel

我们在GoDaddy有两个“Linux Deluxe”服务器。

我习惯使用两台相同的服务器进行开发和生产,但是我从未设置或管理它们,所以我想知道如何去做。

如何在服务器之间移动文件?我可以使用哪些工具来自动执行此过程?

4 个答案:

答案 0 :(得分:3)

如前所述,我们需要更多地了解您的系统,以便给出一个好的答案。

但我要指出,在大多数环境中,将生产计算机设置为git主机并使用git push来管理来自开发环境的同步是值得的。 (如果你曾经使用过Heroku,这似乎很熟悉。)

原因:

  1. 它让您无法记住哪些文件已更新。刚推。
  2. 它提供了一种快速简单的回滚机制。如果您推动了更改并且结果已被破坏,则只需roll back as shown here
  3. 无论如何,您应该有一个本地仓库进行变更管理。
  4. git使用post post hook更新生产机器。在生产服务器上的登录主页中设置裸存储库。

    mkdir site.git
    cd site.git
    git init --bare
    

    设置站点根目录,例如:

    mkdir /var/www/www.mysite.com
    

    然后创建包含以下内容的n shell脚本hooks/post-receive(不要忘记chomod +x):

    #!/bin/sh
    GIT_WORK_TREE=/var/www/www.mysite.com git checkout --force
    

    现在将site.git添加为开发计算机存储库的远程。推送到该目标将更新生产机器。

    <强> NB

    我并不主张git是一个完整的解决方案。正如@Will I Am在评论中所说,您需要根据存储库的存储位置来考虑敏感数据。但即便如此,如果设置正确的方式e.g. as explained heregit也可能是一个有用的工具。敏感数据的一般想法是使用git和单独的repo或子模块作为安全FTP的智能形式。当然,如果敏感数据的数量和/或复杂性很小,那么简单的副本或远程shell脚本也可以。

答案 1 :(得分:1)

移动文件的方法:

  1. FTP:适用于Windows和Linux,但非常不安全 - 你永远不应该使用它。

  2. SFTP:非常安全,但您需要对Linux服务器进行shell(SSH)访问。

    • 如果您正在使用Windows进行开发,则可以安装OpenSSH for Windows,然后您将获得命令行SCP。
    • 如果您使用的是Linux,它会与SCP捆绑在一起,以便您可以立即开始使用它。
    • SCP的简短语法如下,more details here。此命令在本地开发服务器中运行,它将文件复制到生产服务器。

      scp <your-local-files> <prod-username>@<prod-host>:<prod-port>

    • 还有像WinSCP和Putty / SuperPutty这样的GUI,用于从Windows到Linux执行SCP。

  3. RSync:SCP上的包装器,可用于有效复制大量文件,因为它可以执行很多操作,例如仅复制已更改的文件,压缩等。适用于Linux,但您可能找不到它对于Windows。

  4. 移动数据的方法:我假设你在谈论数据库数据?在这种情况下,它取决于您的数据库。一般说明是:

    1. 请参阅您的数据库文档,了解如何将所有数据导入文件或导出/快照/备份(术语不同但所有意思相同)。 e.g。

    2. 使用上述文件复制方法复制生成的转储文件。

    3. 再次参阅有关如何导入此文件的数据库文档。

    4. 自动执行此过程的工具:我假设您正在询问如何自动复制这些文件。以下是选项:

      • SCP和RSync是命令行工具,因此您可以在Linux中使用Cron(作业调度程序)在每天的某个给定时间自动复制文件。如果您使用的是Windows,则需要查找其他一些计划工具。

      • 如果您要自动化,则需要一些方法来保存密码。但建议您使用无密码的基于密钥的身份验证,这比在脚本中某处硬编码密码更安全。您可以在SSH Public-key authentication找到很多教程。

      最后,有各种工具和包装器可以简化(或有时复杂化)这个过程。但是他们需要安装/设置其他软件包等。一般来说,它们属于软件部署领域,但我不会进一步解释这一点,因为它可以得到非常的见解。在进入更高级别的抽象之前,首先要更好地理解基本工具。

答案 2 :(得分:0)

确实,你没有给我们足够的信息,但话虽如此,我会采用像@Gene这样的方法,并做一些改变:

  1. 在测试服务器上拥有源代码管理
  2. 在生产服务器上打开并正确设置SSH,但不要使用root连接到它
  3. 在设置为连接到生产服务器的测试服务器上进行SSH有效登录,理想情况下,您将使用双方证书(生产和测试),以便您可以从测试连接到生产无密码(您将在测试服务器上安装prod公钥,检查this link如何操作
  4. 在源控件上使用commit politics,以便您知道某些分支或标记是预先测试的版本或已经过QA过程。这很重要!
  5. 在测试服务器(GITSubversion)上设置提交后挂钩,执行以下操作:
    1. 检查是否已创建标记
    2. 如果是,请复制标签文件夹文件并通过正确设置的无密码SSH帐户将其上传到生产服务器
    3. 在生成服务器上通过ssh在同一个post-commit shell脚本上执行任何操作(例如,如果.htaccess文件发生更改,则重新启动生产中的apache或类似内容)
  6. 这样做有一些好处:

    • 您确保该过程是自动的,因此如果您仅将标签或某些分支用于生产代码,您将能够附加自动部署脚本,由您提交后的SCM挂钩调用
    • 您在同一个脚本上执行安装后步骤
    • 您可以控制同一个脚本中是否出现问题,并通过邮件通知某人或执行生产回滚所需的任何操作
    • ...并且您不需要在生产服务器上安装SCM。

    当然这只是一种方法,因为你没有提供很多关于你的应用程序是什么以及如何使用源代码控制或正确设置应用程序配置需要的信息,但我认为这应该适用于大多数基本设置。

    祝你好运!

答案 3 :(得分:0)

我会使用这些工具自动执行文件复制:

  1. ftp或sftp - 这些用于在两台服务器之间复制文件。但是,他们要求手动输入用户和密码。
  2. expect - Expect可用于自动手动输入用户和密码。
  3. scp - 这是另一个选项,可以设置为自动执行文件复制。
  4. 看看这个:linux script to automate ftp operation