Hugo+Git+Hooks+Remark42工作流部署经验
系统部署
- 由于个人部署,Hugo、Git、Remark42均为GO程序,因此操作系统依赖小,各个版本的BSD和LINUX均能满足要求;本项目部署在Aliyun的VPS,为方便,采用Debian。
- 部署顺序:Caddy、Gitea、Remark42、Hugo、Git hooks。
- 个人站点,建议直接二进制部署。
踩坑经验
(一)Caddy
- 建议采用分站点的方式安排配置文件,主配置文件不变,各站点配置文件置于conf.d中,便于组织和排故。
- 建议采用统一的日志生成机制。
- 本项目采用Aliyun DNS,因此需要使用xcaddy重新编译,加入aliyun dns插件。
- Aliyun DNS的id和secret,通过caddy的env文件导入,具体查阅插件说明。
- 本人采用的配置文件(脱密版):
- 主文件Caddyfile
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{ email xxx@xxx.xxx storage file_system /var/lib/caddy/keys } # 定义可复用日志模板 (logs) { # 访问日志 log { output file /var/log/caddy/{args[0]}_access.log { roll_size 10MB roll_keep 5 roll_keep_for 720h } level INFO } # 错误日志 log { output file /var/log/caddy/{args[0]}_error.log { roll_size 5MB roll_keep 5 } level ERROR } } # 导入所有站点配置 import /etc/caddy/conf.d/*.caddy- 站点文件(示例)
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 27https://www.aibsd.cn { tls { resolvers 1.0.0.1 dns alidns { access_key_id "{env.ALICLOUD_ACCESS_KEY_ID}" access_key_secret "{env.ALICLOUD_ACCESS_KEY_SECRET}" } } root * /opt/www/ # Hugo对模版的子目录支持之rewrite规则 handle /_3p/* { rewrite * /blog{path} file_server } # 自动跳转blog目录 redir / /blog/ permanent # 路径自动补全/ @noSlash path_regexp no_slash ^(.*/[^/.]+)$ redir @noSlash {http.request.uri.path}/ 301 # 其他路径的文件服务器配置 handle { file_server { index index.htm index.html } } import logs www.aibsd.cn }
(二)Gitea
- 个人自托管业务,SQLite3已足够支持,Postgresql对于个人代码托管显得过于重了。
- 如果需要应用git hooks,需要在配置选项增项相应条目,否则hooks不生效。
- hooks脚本需要在项目的设置的“git钩子”中配置,在个人仓库的custom/hooks目录配置脚本是无效的。
- 如果国内部署,需要增项相应的备案信息,需要在gitea根目录的custom/templates/custom/中添加相应的修改模版。
- 注意主配置文件中[server]段的域名配置和ssh配置。
- Gitea主配置文件需要添加的hooks配置
[security] DISABLE_GIT_HOOKS = false- Gitea添加备案信息,模版名称为extra_links_footer.tmpl
<span></span> <a href="https://beian.miit.gov.cn/#/Integrated/recordQuery" target="_blank" rel="noopener noreferrer">某ICP备**********号</a> <span></span> <a href="https://beian.mps.gov.cn/#/query/webSearch" target="_blank" rel="noopener noreferrer">某公网安备**********号</a>
(三)Remark42
- Remark42建议直接二级域名,不建议使用子目录,否则会遇到域交叉信任问题。
- 国内使用,除非你有合法的国际网络代理通道,否则不建议使用官方推荐的认证方式,建议使用邮件登录或匿名登录。
🚨 警告
3. Rmark42在使用邮件登录时,会调用gravatar.com的图标,造成大约5s的延时,会直接导致登录出现“Something went wrong”的错误;该错误在debug信息中无显示,tcpdump跟踪也会因为多域名的缘故造成混淆,最后通过跟踪故障发生时SIGQUIT的goroutine dump才找到石锤信息;解决方法有两种:其一是直接通过hosts将该域名定向到127.0.0.1,其二是通过国内镜像解决,需要将caddy的内部CA加入系统信任,同时caddy配置时添加tls internal来自签。
- Remark42的配置文件,是REMARK前缀,并且不是所有选项都需要remark前缀,需详细查阅官方文档。
- 本项目Remark42主配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25REMARK_URL=https://remark.aibsd.cn SITE=remark SECRET=*** //通过openssl rand -hex 32 获取随机字符串 STORE_TYPE=bolt STORE_BOLT_PATH=*** STORE_TIMOUT=20s BACKUP_PATH=*** BACKUP_DURATION=24h BACKUP_MAX_FILES=10 ADMIN_SHARED_ID=*** ADMIN_SHARED_EMAIL=*** ADMIN_SHARED_PASSWORD=*** AUTH_ANON=true REMARK_ADDRESS=127.0.0.1 REMARK_PORT=4000 AUTH_EMAIL_ENABLE=true AUTH_EMAIL_FROM=xxx@xxx.xxx AUTH_EMAIL_SUBJ="在***的留言确认" AUTH_EMAIL_CONTENT_TYPE="text/html" SMTP_HOST=*** SMTP_PORT=465 SMTP_TLS=true SMTP_USERNAME=*** SMTP_PASSWORD=*** SMTP_TIMEOUT=10s- 本项目的Remark42的caddy反向代理配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16https://remark.aibsd.cn { tls { resolvers 1.0.0.1 dns alidns { access_key_id "{env.ALICLOUD_ACCESS_KEY_ID}" access_key_secret "{env.ALICLOUD_ACCESS_KEY_SECRET}" } } encode zstd gzip reverse_proxy 127.0.0.1:4000 { header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} } import logs remark.aibsd.cn }