1

导语

终于到了最后的步骤,使用 git 同步并且自动部署代码。

添加用户

  1. 添加 git 用户useradd
  2. 禁止 git 用户使用 shell 登录。编辑 /etc/passwd,将 git:x:1001:1001::/home/git:/bin/bash 修改为 git:x:1001:1001::/home/git:/usr/bin/git-shell
  3. 参考之前的文章,设置免密
  4. 添加进用户组 sudo usermod -aG docker git

建立裸仓库

  1. 建立一个目录 library,用作仓库
  2. library 中初始化一个裸仓库 sudo git init --bare you_project_name.git
  3. 设置所有者为 git 用户 sudo chown -R git:docker library
  4. 设置权限为同组可写入 sudo chmod -R g+w library

项目目录链接 git

  1. 同样设置权限为同组可写入并设置所有者

    1. sudo chmod -R g+w you_project_path
    2. sudo chown -R user:docker you_project_path
  2. 在代码目录中,初始化 git,git init
  3. 添加所有文件,git add .
  4. 提交 git commit -m 'init'
  5. 将代码与远端仓库建立连接,git remote add origin /library/you_project_name.git
  6. push 代码,git push origin master
  7. 设置分支跟踪 git branch --set-upstream-to=origin/master master

本地同步代码

  1. 本地直接 clone git clone git@you_server:/library/you_project_name.git
  2. 本地也是 laradock,同样的流程,进入 workspace 容器中安装项目

    1. composer install
    2. cp .env.example .env
    3. php artisan key:generate
  3. 配置 nginx 域名和本地 hosts,然后重启 nginx docker-compose restart nginx
  4. 然后就是正常的 git 操作

设置 git hook

最后一步,设置 hook,自动部署。

  1. 在服务器 /library/you_project_name.git/hooks 目录下编辑 post-update 如下
#! /bin/sh
unset GIT_DIR
DIR_ONE=you_project_path/ #你的项目目录
cd $DIR_ONE
git pull origin master

以上是最初版本。经过几天的使用,发现一个问题。使用 git 用户进行自动部署,项目目录的文件所属者会变成 git(虽然不影响代码运行),所以在 pull 之后重新设置了所属者以及权限(git 用户需要无密码使用 sudo,可参考前文),最终如下

#! /bin/sh
unset GIT_DIR
DIR_ONE=you_project_path/ #你的项目目录
cd $DIR_ONE
git pull
sudo chown -R user:docker $DIR_ONE
sudo chmod -R g+w $DIR_ONE
  1. 设置所有者 sudo chown git:docker post-update
  2. 设置权限 sudo chmod +x post-update

结语

终于完成了。过程不算顺利,但总是比之前好多了。剩下的就是写代码了。


Haoyuqi
472 声望23 粉丝

PHPer