使用Dokploy的原因
css
我之前用的都是传统的部署方式。通过Dockerfile进行部署然后使用Nginx做反向代理。SSL证书使用Let's Encrypt 。每当上一个新项目这一套程序都得走一遍而且是纯手动配置执行。因为考虑到现在是初期尝试阶段,新项目的个数会有点多,再加上想把重心放在产品业务上,运维方面的事情就想通过自动化来完成。于是发现了Dokploy<font style="color:rgb(31, 35, 40);"> 是一个免费的、自托管的平台即服务 (PaaS),可简化应用程序和数据库的部署和管理。</font>
✅ 优点
- 自带 Traefik,自动处理域名解析、HTTPS 证书(Let's Encrypt 自动续期)。
- Web UI 一键部署,不用自己写 nginx.conf。
- 内置 GitHub 自动部署,更新代码 = 自动重新构建/上线。
- 内置 数据库/存储管理,可以直接装 Postgres、MySQL、Redis。
- 多项目管理方便,日志可视化。
前置条件
- 一台Linux服务器.运行内存2GB RAM
- Linux发行版(以下版本官方测试过,其他发行版不太确定是否能使用)
- Ubuntu 24.04 LTS
- Ubuntu 23.10
- Ubuntu 22.04 LTS
- Ubuntu 20.04 LTS
- Ubuntu 18.04 LTS
- Debian 12
- Debian 11
- Debian 10
- Fedora 40
- Centos 9
- Centos 8
安装Dokploy
Dokploy有两种使用模式:云版本,开源版本
使用云版本每个月会有一定的费用,而开源版本是完全免费的 收费模式如下图

本篇介绍的是在服务器上安装的开源版本
我的服务器的发行版是Debian 12 其他Linux发行版安装同理
安装使用官方提供的命令
bash
curl -sSL https://dokploy.com/install.sh | sh
如果服务器上没有安装Docker 这条命令会自动帮你安装
注意: 需要确保服务器上的80、443、3000端口是空闲状态
我安装时因为服务器上有Nginx运行所以提示80端口被占用,把Nginx关掉就可以安装了
安装成功后可以通过 你的服务器公网http://IP:3000 比如http://123:456:789:123:3000(需要设置服务器的3000端口开放才可以访问)

进入图中页面可以注册你的账号密码
部署第一个项目
这里我使用NextJS项目为例来部署一个项目

登录到主页面后可以看到Dokploy的控制台
新建Project
选择左侧菜单的Projects-> 点击右侧的Create Project

输入项目名称和描述信息
点击Create
新建Service
点击进入刚刚创建的Project可以看到这个页面是Service服务页面
Service是Project下面的服务,可以理解成真正意义上你的单独的项目

点击右侧的Create Service -> 选择Application->填写你的项目名称等信息
配置关联Git项目仓库

点击刚刚创建的Service会进入到如图所示的页面
- 首先在General下看到Provider这一栏
- 选择你的仓库 我项目是放在Github上,所以选择Github
- 选择Github Account 如果是第一次Github会要求你授权登录,授权成功后可以选择你的账号
- Repository仓库可以看到你Github上所有的项目,这时选择你需要部署的项目
- 下面的Branch 、Build Path等配置不变按照默认的来

最后点击Save保存 记住一定得点一下,下一步配置Build时如果没保存会把刚刚的配置清空掉
配置Build

页面接着往下滑会看到Build Type设置。
- Build Type选择 Dockerfile
- 下面Docker File 填写./Dockerfile
项目中一定得有Dockerfile文件并且在最外层的根目录。Dockerfile文件在下面可以参考下。
我NextJS用的是pnpm构建的,所以Dockerfile中会有pnpm-lock.yaml的文件。如果构建时发现这个文件没有就是因为没有使用pnpm run build的原因,在本地执行一遍就好了
dockerfile
FROM node:22-alpine AS base
# Install dependencies only when needed
FROM base AS deps
RUN apk add --no-cache libc6-compat && yarn global add pnpm
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json pnpm-lock.yaml* ./
RUN pnpm i --frozen-lockfile
# Rebuild the source code only when needed
FROM deps AS builder
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY . .
RUN pnpm build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs && \
mkdir .next && \
chown nextjs:nodejs .next
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
# server.js is created by next build from the standalone output
CMD ["node", "server.js"]
最后点击save保存
设置环境变量

点击菜单上面的Environment可以看到如上图的页面
在Environment Settings 这一栏点开右边的眼睛图标就可以添加你项目中的.env配置文件
最后点击最下面的Save保存
部署

回到General菜单,点击Deploy部署按钮即可
这时选择Deployments菜单可以看到部署时的情况日志
当部署成功之后点击最右侧的Logs菜单查看项目的日志
给项目添加域名
配置DNS
这里我以cloudflare为例
把域名指向你服务器的公网IP

Type: A
name:域名.com
conent: 服务器的公网IP
如果需要配置www前缀 可以参考CNAME那一栏的配置
配置域名和SSL证书

选择Domains这栏->点击Add Domain

可以参考我的配置,把Host换成你的域名
Container Port是Dockerfile里写的容器内端口,这里我是3000
配置完成后通过域名就可以访问到你当前的项目了
www前缀域名转发到一级主域名
我所使用的版本Dokploy 0.25.1目前没有找到可视化的配置方法。有人说在左侧菜单Traefik File System中可以配置,这个我没有试过 主要对Traefik不太熟悉
目前的办法是通过Cloudflare进行转发

Cloudflare左侧菜单 Rules->Page Rules->点击Create Page Rule

具体配置可以参考我的配置,把域名换成你自己的即可
目前为止项目配置到此结束,通过域名和www域名转发到主域名都可以访问了!
给Dokploy添加域名(可选)

配置之前记得设置DNS把域名映射到服务器的IP上,和上面4.1配置DNS步骤一样
如果想通过域名访问dokploy页面可以点击菜单左侧Web Server
Domain输入你的未使用域名(二级域名也可以)
Let's Encrypt Email 填写你的邮箱 开启Https点击Save
接下来便可以通过域名访问dokploy页面了,3000端口也可以不同对外开放了~
好了,本期教程到此结束。如果有任何疑问可以在下方留言 更多精彩内容可以关注我的博客 haydenbi.com