导语
终于到了最后的步骤,使用 git 同步并且自动部署代码。
添加用户
- 添加 git 用户
- 禁止 git 用户使用 shell 登录。编辑
/etc/passwd
,将git:x:1001:1001::/home/git:/bin/bash
修改为git:x:1001:1001::/home/git:/usr/bin/git-shell
- 参考之前的文章,设置免密
- 添加进用户组
sudo usermod -aG docker git
建立裸仓库
- 建立一个目录
library
,用作仓库 - 在
library
中初始化一个裸仓库sudo git init --bare you_project_name.git
- 设置所有者为 git 用户
sudo chown -R git:docker library
- 设置权限为同组可写入
sudo chmod -R g+w library
项目目录链接 git
-
同样设置权限为同组可写入并设置所有者
sudo chmod -R g+w you_project_path
sudo chown -R user:docker you_project_path
- 在代码目录中,初始化 git,
git init
- 添加所有文件,
git add .
- 提交
git commit -m 'init'
- 将代码与远端仓库建立连接,
git remote add origin /library/you_project_name.git
-
push
代码,git push origin master
- 设置分支跟踪
git branch --set-upstream-to=origin/master master
本地同步代码
- 本地直接 clone
git clone git@you_server:/library/you_project_name.git
-
本地也是 laradock,同样的流程,进入 workspace 容器中安装项目
composer install
cp .env.example .env
php artisan key:generate
- 配置 nginx 域名和本地 hosts,然后重启 nginx
docker-compose restart nginx
- 然后就是正常的 git 操作
设置 git hook
最后一步,设置 hook,自动部署。
在服务器/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
- 设置所有者
sudo chown git:docker post-update
- 设置权限
sudo chmod +x post-update
结语
终于完成了。过程不算顺利,但总是比之前好多了。剩下的就是写代码了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。