Dokploy安装和部署项目流程

使用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。
  • 多项目管理方便,日志可视化。

前置条件

  1. 一台Linux服务器.运行内存2GB RAM
  2. 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会进入到如图所示的页面

  1. 首先在General下看到Provider这一栏
  2. 选择你的仓库 我项目是放在Github上,所以选择Github
  3. 选择Github Account 如果是第一次Github会要求你授权登录,授权成功后可以选择你的账号
  4. Repository仓库可以看到你Github上所有的项目,这时选择你需要部署的项目
  5. 下面的Branch 、Build Path等配置不变按照默认的来

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

配置Build

页面接着往下滑会看到Build Type设置。

  1. Build Type选择 Dockerfile
  2. 下面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

相关推荐
普通网友3 小时前
前端安全攻防:XSS, CSRF 等防范与检测
前端·安全·xss
携欢3 小时前
PortSwigger靶场之Reflected XSS into attribute with angle brackets HTML-encoded通关秘籍
前端·xss
小爱同学_3 小时前
React知识:useState和useRef的使用
前端·react.js
再学一点就睡3 小时前
双 Token 认证机制:从原理到实践的完整实现
前端·javascript·后端
wallflower20203 小时前
滑动窗口算法在前端开发中的探索与应用
前端·算法
蚂蚁绊大象3 小时前
flutter第二话题-布局约束
前端
龙在天3 小时前
我是前端,scss颜色函数你用过吗?
前端
霍格沃兹软件测试开发3 小时前
AI 测试平台新功能揭秘:自动化测试用例运行的奥秘
运维·自动化·测试用例
Mapmost3 小时前
单体化解锁3DGS场景深层交互价值,让3DGS模型真正被用起来!
前端