
Appsmith Docker 自托管如何配置自定义域名与自有 SSL 证书【免费下载链接】appsmithPlatform to build admin panels, internal tools, and dashboards. Integrates with 25 databases and any API.项目地址: https://gitcode.com/GitHub_Trending/ap/appsmith你已经在自己的服务器上用 Docker 跑起了 Appsmith构建后台、内部工具和仪表盘的平台可对接 25 数据库和任意 API但访问入口还停留在http://localhost。这篇文章解决两件事让 Appsmith 通过你自己的域名如app.example.com访问并用你购买的自有 SSL 证书而不是容器自动申请的 Lets Encrypt 证书提供 HTTPS。适用对象是通过官方appsmith/appsmith-ce单容器镜像自托管 Appsmith 的部署者前提是按 deploy/docker/README.md 完成了基础部署。一、准备条件确认容器已在运行先确认docker和docker-compose已安装可用下面的命令验证输出为文档示例$ docker --version Docker version 20.10.7, build f0df350 $ docker-compose --version docker-compose version 1.29.2, build 5becea4c官方 README 给出的自托管docker-compose.yml如下。注意其中同时映射了80和443两个端口这是后面 HTTPS 能生效的前提./stacks:/appsmith-stacks这个卷是后文放证书和修改配置文件的宿主机挂载目录version: 3 services: appsmith: image: appsmith/appsmith-ce container_name: appsmith-ce ports: - 80:80 - 443:443 volumes: - ./stacks:/appsmith-stacks restart: unless-stopped把文件保存在安装目录README 建议命名为appsmith下然后启动docker-compose up -d该命令首次运行会拉取镜像并初始化应用可能需要几分钟。初始化完成后 Appsmith 应在http://localhost可访问。用docker ps或docker-compose ps后者需要在docker-compose.yml所在目录执行确认容器处于运行状态$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3b8f2c9638d0 appsmith/appsmith /opt/appsmith/entrypoint.sh 17 minutes ago Up 17 minutes 0.0.0.0:80-80/tcp, 0.0.0.0:443-443/tcp appsmith上面的docker ps输出是文档示例实际容器 ID、运行时长和容器名会不同判断标准是容器STATUS为Up且端口包含80、443。二、配置自定义域名这一步分两半DNS 指向 容器内环境变量。1. 修改 DNS 记录。在你的域名注册商 / DNS 服务商处把目标域名例如app.example.com的记录指向运行 Appsmith 实例的服务器 IP。README 提示多数注册商GoDaddy、Route 53、Digital Ocean、Namecheap 等都有创建子域名的官方文档可照做。DNS 生效后域名解析必须指向运行容器的机器否则后面的证书加载和访问都无从谈起。2. 设置APPSMITH_CUSTOM_DOMAIN。容器启动时会把配置生成在docker.env中宿主机路径为安装目录下的./stacks/configuration/docker.env容器内为/appsmith-stacks/configuration/docker.env。用编辑器打开它找到这一行并填上你的域名APPSMITH_CUSTOM_DOMAINapp.example.com这里有两个来自容器内 Caddy 配置脚本 caddy-reconfigure.mjs 的硬性约束值只能是域名本身。如果带了http://或https://前缀脚本会忽略整个值等同于没有配置自定义域名该变量是模板 docker.env.sh 生成的docker.env中的一项容器启动时读取从容器外部设置的环境变量会覆盖docker.env中的值。三、部署自有 SSL 证书README 的 “Custom SSL Certificate” 一节给出的操作路径如下把你的证书文件重命名为fullchain.pem私钥文件重命名为privkey.pem把这两个文件复制到mounting-directory/ssl/子目录。mounting-directory指docker-compose.yml中的挂载卷目录即上面的./stacks也就是安装目录下的./stacks/ssl/重启容器docker restart appsmith容器启动时会检查mounting-directory/ssl目录下的证书文件存在就使用它们。关于第 3 步的重启命令需要说明一个文档内的不一致README 正文写的是docker restart appsmith但同一文档给出的docker-compose.yml示例中container_name是appsmith-ce。实际容器名以你docker ps看到的为准——如果你按上面示例的 compose 文件部署命令应为docker restart appsmith-ce。必须注意的回退行为README 明确说明如果证书文件没有使用fullchain.pem和privkey.pem这两个确切文件名容器会视为“未提供自定义证书”转而自动通过 Lets Encrypt 申请证书。所以文件名不匹配时你部署的自有证书不会生效且容器会走自动申请流程。四、验证结果重启完成后按以下顺序核对容器进程正常。用docker ps确认容器回到Up状态容器内由 supervisord 管理多个进程Appsmith server、Caddy、MongoDB 等可以在安装目录执行下面命令查看全部进程状态docker-compose exec appsmith-ce supervisorctl status也可以打开 Supervisord 的 Web 界面http://localhost/supervisor/查看进程列表下图为文档中的界面示例若某个进程异常可看它最近的 stderr 输出docker-compose exec appsmith-ce supervisorctl tail backend stderrHTTPS 使用你的证书。按 caddy-reconfigure.mjs 的逻辑当APPSMITH_CUSTOM_DOMAIN非空且/appsmith-stacks/ssl/fullchain.pem可读时Caddy 会以tls /appsmith-stacks/ssl/fullchain.pem /appsmith-stacks/ssl/privkey.pem的方式绑定https://即对外服务你的证书此时不再走 Lets Encrypt 自动申请。用浏览器或curl -v https://app.example.com访问核对证书是否为你的证书如检查颁发者和有效期。HTTP 自动跳转。配置了自定义域名后Caddy 会对http://你的域名做redir https://{host}{uri}跳转访问 HTTP 地址应被重定向到 HTTPS。五、边界与已知行为本地 80 端口保持 HTTP。Caddy 配置对本地 80 端口绑定的是 http配置脚本中的注释说明这是为了让 localhost 请求不被强制跳转到 https所以http://localhost访问方式在配置自定义域名后依然可用。旧 Lets Encrypt 证书的兼容路径。如果ssl/下没有自有证书脚本还会检查/appsmith-stacks/letsencrypt/live/域名/fullchain.pem旧版 certbot 证书的存放位置存在且未过期则复用过期的会被忽略并重新走自动申请。数据备份。换机器或灾难恢复时README 提醒除数据库归档外还应保留docker.env包含可解密数据源信息的加密凭据导出命令为docker-compose cp appsmith-ce:/appsmith-stacks/configuration/docker.env .。遇到问题。README 的 Troubleshooting 部分指引联系 supportappsmith.com 或在 Discord 的 #support 频道求助。完成以上配置后Appsmith 实例即通过自有域名和自有证书对外提供 HTTPS 服务后续证书到期时只需按第三节把新的fullchain.pem与privkey.pem覆盖到./stacks/ssl/并重启容器即可。【免费下载链接】appsmithPlatform to build admin panels, internal tools, and dashboards. Integrates with 25 databases and any API.项目地址: https://gitcode.com/GitHub_Trending/ap/appsmith创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考