CapRover 是什么

CapRover 是一个开源的自托管平台即服务(PaaS)解决方案(Heroku 的开源替代),旨在显著简化网络应用和数据库的部署与管理。

它作为一个强大的网络服务器管理器,支持广泛的应用类型,包括 NodeJS、Python、PHP、ASP.NET、Ruby,以及 MySQL、MongoDB、Postgres 等流行数据库,甚至 WordPress 等平台 。

CapRover 安装部署

基于Debian系统。

防火墙放行端口

如果未启用防火墙,可跳过。

此处使用相对于 iptables 更简单的 ufw 进行设置,如果系统未安装 ufw 则需先安装,或者直接使用 iptables

1
ufw allow 80,443,3000,996,7946,4789,2377/tcp; ufw allow 7946,4789,2377/udp;

安装 Docker

1
2
3
4
5
6
7
8
9
10
11
apt-get update && apt-get install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update && apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装 CapRover

1
docker run -p 80:80 -p 443:443 -p 3000:3000 -e ACCEPTED_TERMS=true -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover

纯 IPv6 服务器安装方式

1
2
3
4
5
6
docker run -p 80:80 -p 443:443 -p 3000:3000 \
-e BY_PASS_PROXY_CHECK='TRUE' \
-e MAIN_NODE_IP_ADDRESS='2b01::ff' \
-e ACCEPTED_TERMS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /captain:/captain caprover/caprover
  • MAIN_NODE_IP_ADDRESS 为机器的公网 IP。

安装成功后,执行 caprover serversetup 命令会被卡在 IPv6 地址不符合 IPv4 这一步。
通过地址加端口号访问 [2b01::ff]:3000 ,默认密码:captain42

安装的应用无法绑定域名,外部无法访问

绑定域名

添加 A 记录泛解析:

  • Type: A
  • Name: *.something
  • IP Address: 服务器 IP 地址

如果需要套上CDN,不建议直接使用二级域名泛解析,而是使用三级域名做泛解析(*.something.domain.com),避免遇上SSL证书错误、域名指向IP错误、集群registry异常等问题。

安装运行 CapRover CLI

  • npm install -g caprover
  • caprover serversetup

根据提示输入服务器 IP、泛解析根域名(something.domain.com)、SSL 证书邮箱等信息。

安装完毕后会给出 CapRover 的登录信息,等待数分钟 CapRover 启动完成后即可在浏览器中登录。

相关操作命令

卸载 CapRover

1
2
3
4
5
6
7
docker service rm $(docker service ls -q)
## 删除 CapRover 设置目录
rm -rf /captain
## 退出 swarm 集群
docker swarm leave --force
## 完整的清理 docker 未使用内容
docker system prune --all --force

重置 CapRover 登录密码

1
2
3
4
5
6
7
8
9
10
11
12
13
docker service scale captain-captain=0

# 备份配置
cp /captain/data/config-captain.json /captain/data/config-captain.json.backup

# 删除旧密码
jq 'del(.hashedPassword)' /captain/data/config-captain.json > /captain/data/config-captain.json.new
cat /captain/data/config-captain.json.new > /captain/data/config-captain.json
rm /captain/data/config-captain.json.new

# 设置临时密码
docker service update --env-add DEFAULT_PASSWORD=mytemppassword captain-captain
docker service scale captain-captain=1

重启 CapRover

1
docker service update captain-captain --force

其他问题

应用绑定其它域名时显示1107:verification failed

  1. 确保域名有正确指向服务器 IP;
  2. 如果使用的是 CloudFlare 的解析服务,应暂用其反代功能(要使用反代功能,则应使用下面的 Nginx 使用自定义SSL);
  3. 跳过域名验证:
1
2
echo  "{\"skipVerifyingDomains\":\"true\"}" >  /captain/data/config-override.json
docker service update captain-captain --force

Nginx使用自定义SSL

  1. 在宿主机中(/captain/generated/nginx,安装 CapRover 时,映射的本地目录/caprover)添加SSL证书(在目录/captain/data/nginx-shared/下创建 cert.pemkey.pem);
  2. 在 CapRover 管理面板中,选择需要自定义 ssl 的应用,依次点击HTTP SettingsEdit Default Nginx Configurations
  3. 修改配置
    • 原配置:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%
    if (!s.forceSsl) {
    %>
    listen 80;
    <%
    }
    if (s.hasSsl) {
    %>
    listen 443 ssl http2;
    ssl_certificate <%-s.crtPath%>;
    ssl_certificate_key <%-s.keyPath%>;
    <%
    }
    %>
    • 改成:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%
    if (!s.forceSsl) {
    %>
    listen 80;
    <%
    }
    if (true) { ### <<< CHANGED
    %>
    listen 443 ssl http2;
    ssl_certificate /nginx-shared/custom-ssl_certificate.crt; ### <<< CHANGED
    ssl_certificate_key /nginx-shared/custom-ssl_certificate_key.key; ### <<< CHANGED
    <%
    }
    %>

证书签署错误

自部署Registry连接TLS超时

一键应用

一键应用(One-Click App)是 CapRover 预先配置好的应用模板,这些模板包含了应用程序运行所需要的所有配置,如:

  • 应用程序代码或 Docker 镜像
  • 数据库配置
  • 环境变量
  • 端口映射
  • 持久化存储
  • CapRover 特有配置

它是如何工作的?

当你在 CapRover 控制面板中选择安装一个一键应用时,CapRover 会:

  1. 拉取预定义配置:获取该应用程序的模板定义。
  2. 自动部署:根据模板自动执行一系列部署操作,包括拉取 Docker 镜像、创建容器、配置 Nginx 反向代理、设置 SSL 证书等。
  3. 准备就绪:在几分钟后,就可以通过配置的域名访问并开始使用该应用。

一键应用的优势

  • 极度简化部署:无需深入了解 Docker 、Nginx 或应用程序本身复杂部署细节,大大降低技术门槛;
  • 节省时间:从安装到运行,整个过程通常只需几分钟,无需耗费数小时甚至数天进行手动部署;
  • 减少错误:预配置的模板经过测试,可以最大限度地减少手动配置可能引入的错误;

一键应用的配置文件

CapRover 及社区维护的 One-Click App 仓库:

本人自己维护的 One-Click App 仓库,主要是根据自身需求创建或调整(移除一键应用内自带的数据库,改成使用全局数据库,避免资源浪费)的配置文件。当前包含的一键应用如下: