为 Deployer 设置 Linux 和 Apache 服务器
Deployer是一个了不起的工具,用于部署网站(因此得名)。我看过其他工具,但因为Deployer是使用PHP构建和运行的,所以使用它来部署PHP站点是有意义的。这也意味着我不必弄清楚复杂的XML文档或学习Ruby只是为了了解部署正在做什么。
我已经使用Deployer部署我自己的站点有一段时间了,但我一直在使用root用户来完成部署以解决任何权限问题。当我与工作中的开发人员坐下来讨论时,我们研究了如何设置服务器,以便可以在不让工具不受限制地访问服务器的情况下运行部署。为此,我们制定了一个计划,在我们的服务器上创建一个“部署者”用户,该用户将是部署者用来部署站点的用户。
收集信息
在我们开始设置用户之前,我们需要收集几个变量。本质上,我们需要知道Apache使用什么用户来为网站提供服务。此信息稍后用于将部署者用户添加到Apache所在的组中。
Centos下使用一组名为阿帕奇和被叫用户的Apache,您可以使用以下命令确认这一点。
cat/etc/httpd/conf/httpd.conf|grep"^[Group|User]"
Ubuntu使用一个名为www数据和被叫用户WWW的数据,可以使用以下命令确认这一点。
cat/etc/apache2/envvars
要查看系统上当前的用户列表,您可以运行:
getentpasswd
要查看系统上所有组的列表,您可以运行:
getentgroup
配置用户和组权限
有了这些信息,我们现在可以看看创建我们的部署者用户并将他们分配给正确的组。
创建部署者用户。
sudouseradddeployer
为部署者用户添加密码。
sudopasswddeployer
将部署者用户添加到Apache组。
usermod-a-Gapachedeployer
接下来,我们需要允许部署者访问才能运行sudo命令。这通常只是重启服务之类的事情。这是通过将用户添加到正确的组来完成的。
在Centos上,允许用户访问sudo命令的组称为wheel。
usermod-a-Gwheeldeployer
在Ubuntu上,这个组被称为sudo。
usermod-a-Gsudodeployer
为确保部署者用户具有我们需要的访问权限,请使用以下命令。
getentgroup|grepdeployer
尽管您已经为该用户创建了密码,但最好设置一个ssh密钥,而不是分发密码或(甚至更糟)将其提交到您的代码库。
确保对部署目录的写访问
现在我们已经创建了用户,我们需要确保用户可以访问我们要将网站部署到的目录。假设我们在/var/www/html/your-website中创建了一个目录,部署者将在该目录下进行我们的部署,权限设置如下。
首先,我们将整个目录设置为属于Apache组和用户。
sudochown-Rapache:apache/var/www/html/your-website
接下来,我们使用chmod工具运行一些命令,在该目录上正确设置权限。接下来的几个命令将通过首先限制访问然后添加我们想要的访问来设置适当的权限。
要做的第一件事是确保除了Apache用户的成员之外没有其他人可以访问该目录。我们使用“go”选项(意思是“组”和“其他”),然后是“-rwx”,这意味着我们将从这个目录中删除读、写和执行权限。我们还包括-R选项以递归地对所有子目录执行此操作。
chmod-Rgo-rwx/var/www/html/your-website
接下来,我们允许同一组(和'other')的用户再次使用'go'选项访问该目录,然后是'+x',它只提供对该目录的执行访问权限。
chmodgo+x/var/www/html/your-website
我们现在可以开始授予用户和组访问此目录和所有子目录的权限。这是使用'g'选项完成的,然后是选项'+rwx',它为同一组的成员提供对该目录的读、写和执行访问权限。
chmod-Rg+rwx/var/www/html/your-website
全部完成后,目录应该可以使用了。
访问权限
所有这一切的最后一步是确保用户有权从git存储库下载代码。实现此目的的最佳方法是使用部署密钥。这是一个允许只读访问gitrepo的密钥,这对用户来说是完美的。有许多教程详细介绍了如何执行此操作,但在服务器端,您需要创建运行类似内容的ssh密钥。
ssh-keygen-trsa-b4096
由于我们正在创建一条自动路线,因此您不应为此密钥创建密码。
接下来,复制密钥的公共部分并将其上传到您的git存储库。
cat~/.ssh/id_rsa.pub
最后,使用您创建的deloyer用户登录并使用ssh尝试访问gitrepo主机。例如,如果您使用的是bitbucket,则可以使用以下内容。
sshgit@bitbucket.org
这将告诉您您已通过部署密钥进行身份验证,并告诉您shell访问已被禁用。在开始设置部署程序接收之前,检查您是否具有所需的访问权限很有用。