问题1:他们指的是远程服务器上的用户。
问题 2:这取决于两种情况: 1. 您需要添加本地用户的公钥才能推送到远程服务器。2. 如果需要将 ssh 部署到另一台服务器,您将需要向运行 post-receive 挂钩的本地用户添加公钥。很可能只有 1 是您关心的问题,而 2 不是因为远程服务器将容纳远程 git repo 和 www 服务器。
这意味着您将公钥添加到 linux/unix 环境中的 authorized_keys 文件中。该文件通常位于 /home/$USER/.ssh/authorized_keys 中。 authorized_keys 文件与用户的 known_hosts 文件位于同一目录中。
问题 3:他们正在解释如何设置远程 git 存储库。它不需要与本地存储库位于同一路径。
好的 - 现在澄清这里实际发生的事情。本教程将教您如何设置远程存储库,该存储库将在每次推送时部署 jekyll 安装。
这意味着如果你有一个 github repo,你不能在那里设置服务器端的钩子。相反,您会在远程服务器上设置一个新的遥控器。因此,假设您登录到您的服务器(通常使用 ssh),运行pwd
以了解您的完整路径或将其设置在环境变量中:
$DIR=`pwd`
现在您可以在此服务器上创建一个裸仓库:
git init --bare $DIR/<SOMEDIRNAME>.git
现在您的服务器上有一个远程裸 git 存储库。接下来,您需要添加允许它在收到推送时部署您的 Jekyll 站点的钩子。您列出的站点有一个相当简单的部署,但基本上它所做的只是使 _site 目录成为提供的 html 页面,您可以通过多种方式执行此操作,我建议您在不干扰用户的情况下尽可能多地执行此操作,here是一个示例脚本,可能会做这样的事情:
#!/bin/bash
# Assuming a directory structure for www:
# $www_root/releases
# $www_root/shared
# $www_root/current
# all releases go in releases dir as timestamps dirs
# any logs or other shared items go in shared dir - shared/logs
# current is a symlink to latest release
unset GIT_DIR
WWW_ROOT=/PATH/TO/WWW
REPO_PATH=/PATH/TO/REPO
REPO_BRANCH=master
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO
DATE=$(date +"%Y%m%d%H%M")
# get code
if [ ! -d $WWW_ROOT/shared/git_maint ]; then
mkdir -p $WWW_ROOT/shared/git_maint
cd $WWW_ROOT/shared/git_maint
git clone $REPO_PATH $WWW_ROOT/shared/git_maint
git checkout master
else
cd $WWW_ROOT/shared/git_maint
git pull
git checkout master
fi
# do deploy
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE
ln -snf $WWW_ROOT/releases/$DATE $WWW_ROOT/current
exit 0
像这样的东西将是一个很好的部署。如果您将此脚本保存在远程服务器上的裸 repo hooks/post-receive 文件中,那么它将在每次将存储库推送到时运行。只要记住让它可执行: chmod 755hooks/post-receive
所以如果你把这个新的遥控器添加到你的 git repo 中:
git remote add DEPLOY_PROD user@remote.server.com:/path/to/bare/repo
然后git push DEPLOY_PROD
- 它将推送到您的遥控器,然后您的远程仓库将触发它的 post-receive 钩子,然后将裸仓库复制到几乎可以在任何时候被吹走的维护目录。然后使用此目录将站点目录 cp 到发布目录,然后将其链接到主目录。
当然,所有这些很可能是矫枉过正的,您可以创建一个从本地主机运行的部署脚本,以通过 ssh 完成所有这些操作。
问题是您无法直接从 github 为这种方法运行服务器端挂钩,因此您必须解决它。我建议您查看 capistrano 作为部署策略 - current/releases/shared 目录和 git_maint 目录取自他们的架构,效果很好。
如果您需要任何帮助,请告诉我,我在开发部署和自动部署策略方面拥有丰富的经验,因此根据您的情况,情况会有所不同。