Git OSChina 使用 Webhooks 自动部署代码

年初的时候玩了会树莓派,当时电话电信客服申请了一个静态 ip,配合家里的极路由搞了个私人服务器,但由于树莓派性能一般,导致其访问速度也一般,后面就把它扔到角落里了,将其 ip 绑定到我那服役了四年的老 MBP 上,因为 MBP 是 SSD 的缘故吧,访问的速度也是杠杠的。

我的项目基本上都是放在 git oschina 上,为了方便演示我会把代码更新到 MBP 上,通过绑定的域名来访问。每次在公司想要更新家里的 MBP 的时候都是通过 SSH 登上去 git pull 一下,来回操作的次数多了,久而久之就觉得麻烦,想有什么办法是否可以自动更新,网上了解了下可以通过 git webhooks 来实现。

自己把具体的操作过程记录一下,怕以后忘记了 -.-

1、通过 SSH 登录我的 MPB,输入 who 命令查看确认当前用户

2、生成 deploy key

1
sudo -u jankerli ssh-keygen -t rsa -C "jankerli@gmail.com"

copy 下生成的 key,后面会用到,类似:

1
SHA256:6dDFAi+GCCaPQmGQMbzXS2X3YWSnDm8WQlgm0IfKd8s jankerli@gmail.com

3、在需要自动同步的仓库打开 hook

1
2
cd /project/.git/hooks/
vi post-receieve

添加以下代码:

1
GIT_WORK_TREE=/path/to/your/repo git checkout -f

4、加入接收 webhook 的脚本,这里我使用的 php

在根目录或者所在项目目录下创建 update.php,代码如下:

1
2
3
4
5
6
7
8
9
<?php
$www_folder = "/path/to/your/repo" ;
// git仓库地址
$git_repo = "https://git.oschina.net/***/***.git" ;
// 执行指令
echo shell_exec(" cd $www_folder && git pull $git_repo 2>&1 ");
?>

5、在 git oschina 所在的项目仓库里点击 管理 → WebHooks

URL:xxxxx/update.php
密码:上面 copy 的 6dDFAi+GCCaPQmGQMbzXS2X3YWSnDm8WQlgm0IfKd8s

Sublime 设置文件备份

备份一下自己 IDE 的 setting file,方便下次直接 copy。

Preferences.sublime-setting:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"always_show_minimap_viewport": true,
"auto_complete_commit_on_tab": true,
"auto_complete_with_fields": true,
"color_scheme": "Packages/Material Theme/schemes/Material-Theme.tmTheme",
"default_line_ending": "unix",
"draw_minimap_border": true,
"ensure_newline_at_eof_on_save": true,
"font_face": "Monaco",
"font_size": 15,
"highlight_line": true,
"highlight_modified_tabs": true,
"ignored_packages":
[
"CSS",
"Markdown",
"Vintage"
],
"tab_size": 4,
"theme": "Material-Theme.sublime-theme",
"translate_tabs_to_spaces": true,
"trim_automatic_white_space": true,
"trim_trailing_white_space_on_save": true,
"use_tab_stops": true,
"word_wrap": true
}

Packgage Control.sublime-setting:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"bootstrapped": true,
"in_process_packages":
[
],
"installed_packages":
[
"CSS3",
"DocBlockr",
"Emmet",
"FileHeader",
"LESS",
"Less2Css",
"LiveReload",
"MarkdownEditing",
"Material Theme",
"Package Control"
]
}

Swiper 禁止滑动事件

swiper 这个强大的移动端触摸滑动插件真的很好用,现在有个需求是让它自动滑动,并禁止用户手动滑动事件。

方法一:

1
2
var mySwiper = new Swiper('.swiper-container', {...});
mySwiper.detachEvents();

方法二:
在 swiper-slide 上添加类名 swiper-no-swiping,使该 slide 无法拖动

1
<div class="swiper-slide swiper-no-swiping">Slide 1</div>

Discuz!X3.2 UCenter 无法登陆

long long time 没有接触 dedecms 建站系统了,为了给别人建个站最近又重操旧业。

虽然很久没用这个做网站了,但是搞起来还是那样的熟悉,很快便把 dedecms 和 discuz 论坛的数据打通了,期间遇到一个问题,就是 UCenter 死活登录不上,也没任何提示,就是在本页面刷新。

解决办法:
在 /uc_server/model 中找到 admin.php 找到以下代码:

1
2
3
4
function adminbase() {
parent::__construct();
$this->cookie_status = 0;
}

修改成:

1
2
3
4
function adminbase() {
parent::__construct();
$this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;
}

自定义shell命令

比如我在 ~ 目录下写了个 getip.sh 脚本,每次运行的时候都需要敲入 ./getip.sh。
我想定义一个命令,比如直接敲入 getip 就能直接运行./getip.sh,类似于系统命令那样 cat、cp 之类的命令前面不用 ./ 就能运行

getip.sh 内容:

1
ifconfig | grep "inet " | grep -v 127.0.0.1

把文件复制到 /usr/local/bin 下:

1
sudo cp ~/getip.sh /usr/local/bin

修改下文件的权限:

1
sudo chmod a+x /usr/local/bin/getip.sh

然后在命令行运行 getip.sh 就行了,如果不想输入后面 .sh,那么把 getip.sh 重命名为 getip,这样直接输入 getip 就欧了