前言
前几天部署完 Docsify,然后利用 Github Page 绑定了域名进行访问测试,发现访问体验并不理想,用家里的 WiFi 访问还能忍受,用手机数据访问速度就很慢了。查看 Docsify 文档,发现 Docsify 可以部署在 Nginx 上。同理,部署在 Apache 上也是没有问题的。
本文记录利用 Apache 部署 Docsify,利用 Git 的钩子功能(hooks)实现服务器仓库内容到服务器站点目录的同步。当本地 push 文档项目到服务器时,服务器站点目录会自动同步本地项目,实现文档网站自动更新。
OS:CentOS Linux release 7.7
Apache:2.4.6
本地安装 Docsify
安装 Git 客户端
博主本地客户端为 Win10,下载 Git Windows 客户端安装包进行安装,选项默认即可,路径可以更改到 D 盘。
安装 Node
下载 Node Windows 安装包进行安装,选项默认即可,路径可以更改到 D 盘。
安装完成后,在 D 盘根目录下空白处右键选择Git Bash Here
,进入 Git Bash,输入 node -v
,npm -v
查看 node 和 npm 版本,如下表明安装成功:
配置 Docsify
在 Git Bash 中输入以下指令全局安装 docsify-cli,可以于在本地初始化 Docsify 和预览网站:
npm i docsify-cli -g
接下来在 D 盘根目录新建 DocTest 文件夹,在 DocTest 文件夹下初始化文档项目,项目文件夹名为 docs,可根据实际需要更改:
cd DocTest
docsify init ./docs
进入 docs 文件夹,开启本地 docsify 服务器:
cd docs
docsify serve
在浏览器输入http://localhost:3000
可以预览本地文档网站:
目前为止,本地 Docsify 安装完成。
服务器端 Git 配置
配置 Git
安装 Git:
sudo yum install -y git
使用 root 权限添加 git 用户,并设置密码:
sudo useradd git
sudo passwd git
为安全起见,禁止 git 用户使用 shell 登录服务器:
sudo vi /etc/passwd
找到 git 所在行,修改为如下配置:
git:x:1000:1000::/home/git:/usr/bin/git-shell
给 git 用户文件夹授权
sudo chown -R git:git /home/git/
配置仓库
创建空仓库,并给仓库授权:
cd /home/git
git init --bare doctest.git
sudo chown -R git:git doctest.git
接下来为仓库配置钩子,在/doctest.git/hooks
路径下新建post-receive
自动拉取脚本:
vi /home/git/doctest.git/hooks/post-receive
在post-receive
填入以下内容,路径/var/www/doctest
是要发布的文档站点目录,根据实际需要设置。
#!/bin/sh
unset GIT_DIR
cd /var/www/doctest || exit
git pull origin master
授予脚本可执行权限:
chmod +x /home/git/doctest.git/hooks/post-receive
进入 web 站点根目录,克隆上面创建的仓库,并授权:
cd /var/www
sudo git clone /home/git/doctest.git
sudo chown -R git:git /var/www/doctest
在 Git Bash 中输入以下命令,进入本地 DocTest 文件夹,新建 webdocs 文件夹,把服务器上的空仓库克隆到本地。
提示输入密码时输入 git 用户的密码。
cd d:\DocTest
mkdir webdocs
cd webdocs
git clone ssh://git@x.x.x.x:N/home/git/doctest.git
N 为 SSH 端口,默认为 22,根据实际情况填写
克隆成功会提示克隆的是空仓库,忽略即可。
接下来,把
D:\DocTest\docs
下的所有文件复制到D:\DocTest\webdocs\doctest
文件夹下,然后 push 到服务器:cd D:\DocTest\webdocs\doctest
git add .
git commit -m"push test"
git push origin master
如下所示,push 成功,master -> FETCH_HEAD
表示项目已同步到站点目录,进入/var/www/doctest
文件夹下可以发现本地的文件已经同步到站点目录了。
Permission denied
,根据以上权限设置,检查与 git 用户相关的文件/文件夹的权限,保证文件/文件夹的所属用户组为 git。
到目前为止,服务器端 Git 就配置完成了。
Apache 站点配置
配置文档站点
在/etc/httpd/conf.d/
路径下新建虚拟主机文件docs.conf
:
sudo vi /etc/httpd/conf.d/docs.conf
在docs.conf
文件中填入以下内容:
<VirtualHost *:80>
ServerName docs.mtycho.com
DocumentRoot /var/www/doctest/
</VirtualHost>
<Directory "/var/www/doctest/">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
域名 DNS 记录记得指向服务器 IP
重启 Apache:
sudo service httpd restart
此时,可以通过 http://docs.mtycho.com 访问文档网站。
部署 SSL 证书
首先为二级域名申请 SSL 证书,这里不再赘述。
新建文件夹/etc/httpd/doc
:
sudo mkdir /etc/httpd/doc
将证书文件上传到/etc/httpd/doc
目录下。
然后编辑虚拟主机文件docs.conf
:
sudo vi /etc/httpd/conf.d/docs.conf
在docs.conf
中增加以下内容:
<VirtualHost *:443>
DocumentRoot "/var/www/doctest"
ServerName docs.mtycho.com:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/httpd/doc/docs.mtycho.com_public.crt
SSLCertificateKeyFile /etc/httpd/doc/docs.mtycho.com.key
SSLCertificateChainFile /etc/httpd/doc/docs.mtycho.com_chain.crt
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
域名需要修改为自己的域名
保存文件,重启 Apache:
sudo service httpd restart
现在,可以通过 https://docs.mtycho.com 访问文档网站了。
设置 HTTP 重定向到 HTTPS(HSTS)
继续编辑docs.conf
,把<VirtualHost *:80>
段修改为如下所示:
<VirtualHost *:80>
ServerName docs.mtycho.com
DocumentRoot /var/www/doctest/
Redirect permanent / https://docs.mtycho.com/
</VirtualHost>
保存文件,重启 Apache:
sudo service httpd restart
到这里,Apache 环境下部署 Docsify 已经完成,最后效果如下图所示,由于博主后续对文档网站进行了编辑、设置,所以和 Dcosify 初始界面不太一样。