惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
V
V2EX
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
美团技术团队
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks

WAYJAM

告别 NPM Token:迁移到 Trusted Publishing 全记录 Sing-box:IPv6 优先出站与 Netflix 强制 IPv6 分流 [All In One] HomeLab 虚拟化 iKuai + Mihomo - IPv6 支持 [All In One] HomeLab 虚拟化 iKuai + Mihomo LiteLLM 多模型 API 中转 MacOS Bootstrp with Nix Fluency Support Full Rss [All In One] PVE 中 OpenWrt LXC 重启问题 Tabby 终端配置以及配置全平台同步 Cloudflare Tunnel + Nginx Proxy Manager:服务穿透 PVE 7 升级 8 笔记 PVE 安装 Android x86 & 安装 Magisk [All In One] HomeLab 2023 搭建总结 [All In One] 轻量的文件 & 媒体服务器配置 [All In One] R71s 主机散热改造 [All In One] PVE LXC 安装 OpenWrt 软路由以及网络规划 [All In One] 安装 Proxmox VE 7.4 从零开始配置Rime - 2023 Self Hosted Bitwarden + Cloudfare HTTPS Debian NFS Server 以及 MacOS Client AdguardHome 和 Clash 透明代理配合使用 使用 Kind 部署 Prow 手记 BackBlaze B2 + Cloudfare Worker 图床 PicGo Amazon S3 插件 自动给模板生成 Inline-Svg Hugo Theme WeUI 发布! Hugo Theme Fluency 发布! Docker Clash 和 透明代理 有限状态机与分布式熔断器 「家庭娱乐」N1刷 EmuELEC 做游戏盒子
Fly.io 部署 Artalk 评论系统
2023-06-02 · via WAYJAM

最近写了几篇博客,发现博客原来使用的 Valine 评论系统已经年久失修,被 LeanCloud 冻结停止服务了,于是在多个评论系统中选中了 Artalk 重新部署博客评论系统。

Artalk 支持 Docker 形式部署,故需要部署在 CVM 上或者支持 Docker 的 PaaS 上,而我的 CVM 基本是实验环境,经常重建,不太适合评论系统此类需要稳定部署的应用,另外老牌的 Heroku 要下线免费套餐,之前看到网上有推荐 fly.io ,提供有限的免费额度,跑小博客的评论系统完全足够了。

Artalk 是一款简洁的自托管评论系统,你可以在服务器上轻松部署并置入前端页面中。

Fly.io 的核心功能是分布式的应用部署与执行,可以轻松部署和运行多种类型的应用程序(包括 Web 应用、API 应用、容器应用等),支持多种编程语言和框架,例如 Go、Rust、Python、Node.js 等,可以自动水平扩展和负载均衡。Fly.io 利用了全球范围内分布的 20 多个数据中心和数千个云计算节点,提供了高可用的、低延迟的应用程序部署和全球分发服务。

安装 flyctl

fly.io 的 Docker 形式部署目前还不能在页面直接进行,需根据官方文档安装 cli 工具(如 macOS):

brew install flyctl

创建 Fly.io 应用

Fly.io 的 Docker 部署文档:https://fly.io/docs/languages-and-frameworks/dockerfile/,常规的应用简要步骤: 0. 创建 dockerfile

  1. flyctl launch 创建应用(此步骤会新建 fly.toml 配置文件)
  2. 创建 storage
  3. 配置使用 storage
  4. 执行 deploy

但由于 fly.io 无法配置挂载,所以首次部署时 Artalk 会因为没有配置文件无法启动,所以我在模板仓库里面使用了 entrypoint.sh 脚本拷贝配置文件到部署副本内。

我新建了一个部署模板,Git Clone 模板仓库:https://github.com/wayjam/artalk-deploy

(1) 初始化应用

(2) 创建 Storage

flyctl volumes create data --size 1 --app 上一步初始化的应用名

如果 Storage 名不是 data 则需要修改 fly.toml 的 mounts。

(3) 创建 Artalk 配置

下载配置模板到 Git 仓库根目录:

wget -O artalk.yml https://raw.githubusercontent.com/ArtalkJS/Artalk/master/conf/artalk.example.zh-CN.yml

根据 Artalk 文档 以及自身站点场景修改配置。

不建议修改监听端口,修改后需要更新 fly.toml 且监听端口不会暴露到外部,暴露端口在 fly.toml 中另外声明。

(4) 使用 Postgres 数据库

Artalk 默认使用 sqlite3 作为 DB 存储,Fly.io 同时也支持创建 Postgres 数据库,所以也可以创建一个 Postgres 数据库给 Artalk 使用。

创建完数据库会显示 DB 的连接信息,

连接数据库实例 & 创建数据库

flyctl postgres connect -a wayjam-db
create database artalk;

修改连接信息

将数据库连接信息填入 artalk.yaml

(5) 部署

  • 首次部署 or 需要上传本地配置到部署副本flyctl deploy --build-target with-conf --remote-only
  • 不上传本地配置到部署副本flyctl deploy --build-target base --remote-only

我的模板仓库使用了 Dockerfile 的 multistage 提供的两种部署选项是为了兼容部署场景:是否要上传本地 conf 到远端的场景。用处主要在于首次部署的场景,其他需要更改远端配置的场景可以使用下面提到的 ssh 手工更改或者 sftp 上传。但远端编辑的体验肯定比不上在本地修改再上传。

(6) SSH 连接到副本

flyctl 中内建了很多有用的命令,比如 flyctl ssh console 就可以连接到远程副本。

总结

目前 Fly.io 部署应用基本上没有遇到不可解决的问题,但总体易用性还是比不上 Heroku,很多问题文档没有特别说明的还需到官方论坛去查找解决办法。

本文以 Artalk 的部署为例展示一个完整应用的部署生命周期,希望也可以给到部署其他应用一个参考。