Dokku This Smallest Paas Implementation
Dokku 简介
The smallest PaaS implementation you've ever seen
Dokku helps you build and manage the lifecycle of applications
——《Dokku官方介绍》
Dokku 是一个基于 Docker 的小型 PaaS 平台, 可以帮助你实现轻松的管理你的服务的生命周期, 包括创建数据库, 管理域名, 生成 HTTPS 密钥, 自动化编译部署等
安装 Dokku
官方推荐的安装方法有以下三种, 个人建议非 arch 系统使用 bash script
-
bash script
# for debian systems, installs dokku via apt-get wget https://raw.githubusercontent.com/dokku/dokku/v0.27.6/bootstrap.sh sudo DOKKU_TAG=v0.27.6 bash bootstrap.sh # Configure your server domain via `dokku domains:set-global` # and user access (via `dokku ssh-keys:add`) to complete the installation
-
apt
# install docker wget -nv -O - https://get.docker.com/ | sh # setup dokku apt repository wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add - export SOURCE="https://packagecloud.io/dokku/dokku/ubuntu/" export OS_ID="$(lsb_release -cs 2>/dev/null || echo "bionic")" echo "bionic focal jammy" | grep -q "$OS_ID" || OS_ID="bionic" echo "deb $SOURCE $OS_ID main" | tee /etc/apt/sources.list.d/dokku.list apt-get update # install dokku apt-get install dokku dokku plugin:install-dependencies --core # run with root! # Configure your server domain via `dokku domains:set-global` # and user access (via `dokku ssh-keys:add`) to complete the installation
-
arch
# install dokku via yay yay -S dokku
配置 Dokku
配置 SSH 密钥
-
生成密钥(可选)
如果没有 SSH 密钥, 可用以下命令生成
ssh-keygen # 输入命令后会让你输入 # 1. 密钥保存位置, 默认为 ~/.ssh # 2. 密钥密码, 可以直接回车 # 3. 重复密钥密码
完成后, 可以在 ~/.ssh 下看到 id_rsa.pub 和 id_rsa, 即 SSH 公钥与私钥
-
向服务器导入密钥
ssh-copy-id {{.your-server-user}}@{{.your-server-host}} # 例如 ssh-copy-id root@localhost
输入命令后, 会要求你输入服务器密码, 完成后就会自动将公钥上传至服务端
-
将密钥添加至 Dokku
使用步骤2中的服务器用户登录服务器, 然后输入以下命令
cat ~/.ssh/authorized_keys | dokku ssh-keys:add admin
配置域名
使用以下命令配置 Dokku
dokku domains:set-global {{.your-server-host}}
# 例如 dokku domains:set-global xilin.icu
使用Dokku
创建应用程序
创建一个名为 blog 的应用
dokku apps:create blog
分配子域名
域名信息的常用操作
# 查询域名信息
dokku domains:report {{.your-app-name}}
# 删除域名
dokku domains:remove {{.your-app-name}} {{.domain}}
# 添加一个域名
dokku domains:add {{.your-app-name}} {{.domain}}
# 清空域名
dokku domains:clear {{.your-app-name}}
# 添加多个域名
dokku domains:set {{.your-app-name}} {{.domain-one}} {{.domain-two}}
通常为项目添加一个 www
的子域名
dokku domains:add blog www.xilin.icu
设置端口
端口管理常用操作
# 查询端口信息
dokku proxy:ports {{.your-app-name}}
# 删除端口
dokku proxy:ports-remove {{.your-app-name}} \
{{.protocol}}:{{.host-port}}:{{.container-port}}
# 添加端口
dokku proxy:ports-add {{.your-app-name}} \
{{.protocol}}:{{.host-port}}:{{.container-port}}
# 清除所有端口映射
dokku proxy:ports-clear {{.your-app-name}}
# 添加多个端口映射
dokku proxy:ports-set {{.your-app-name}} \
{{.protocol-one}}:{{.host-port-one}}:{{.container-port-one}} \
{{.protocol-two}}:{{.host-port-two}}:{{.container-port-two}}
默认会将容器内的 5000 端口, 映射到外部的 HTTP:80
与 HTTPS:443
端口, 可以改为容器内的 80
端口
dokku proxy:ports-clear blog
dokku proxy:ports-set blog http:80:80 https:443:80
设置转发
通常我们并不直接使用二级域名, 而是使用 www
之类的三级域名
安装转发插件
dokku plugin:install https://github.com/dokku/dokku-redirect.git
转发常用操作
# 查看转发设置
dokku redirect {{.your-app-name}}
# 设置转发
dokku redirect:set {{.your-app-name}} {{.source}} {{.dest}}
# 清除转发
dokku redirect:unset {{.your-app-name}} {{.source}}
将我们的二级域名转发至三级域名
dokku redirect:set blog xilin.icu www.xilin.icu
设置SSL
Let's Encrypt is a non-profit certificate authority run by Internet Security Research Group (ISRG) that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. It is the world's largest certificate authority, used by more than 265 million websites, with the goal of all websites being secure and using HTTPS. The Internet Security Research Group (ISRG), the provider of the service, is a public benefit organization. Major sponsors include the Electronic Frontier Foundation (EFF), the Mozilla Foundation, OVH, Cisco Systems, Facebook, Google Chrome, Internet Society, AWS, NGINX, and Bill and Melinda Gates Foundation. Other partners include the certificate authority IdenTrust, the University of Michigan (U-M), and the Linux Foundation.
Let's Encrypt 是一个免费签署 SSL 证书的机构, 向机构申请证书需要通过相关的验证, 同时申请的证书只有三个月的有效时间
因此 Dokku 使用 letsencrypt
插件管理 SSL 证书, 可以自动完成相关的验证, 同时会创建定时任务完成证书的续约
安装并配置 letsencrypt
插件
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
dokku config:set --global DOKKU_LETSENCRYPT_EMAIL={{.your-email}}
常用操作
# 开启证书管理
dokku letsencrypt:enable {{.your-app-name}}
# 关闭证书管理
dokku letsencrypt:disable {{.your-app-name}}
# 移除证书文件
dokku letsencrypt:cleanup {{.your-app-name}}
# 添加或移除自动续约任务
dokku letsencrypt:cron-job {{--add|--remove}}
为应用开启证书
dokku letsencrypt:enable blog
dokku letsencrypt:cron-job --add
使用项目
之后你可以在本地创建一个项目, 将 Dokku 作为一个远程仓库, 后续的修改直接推送至远程就可以完成自动部署
cd blog
git remote add dokku dokku@xilin.icu:blog
git push dokku main:master
Dokku 本身支持多种部署类型
个人偏好使用 Dockerfile, 只需要你在项目根目录下有一个 Dockerfile, 即可完成自动镜像构建与部署