文章
在Fly.io上部署Postgresql
目录
- 在 Fly.io 上部署自建 Postgresql 的顺序就是:
- 安装Postgresql
- 1️⃣ 先创建应用
- 2️⃣ 设置数据库密码(Secrets)
- 3️⃣ 创建数据卷(持久化) 有很多坑,最好是使用付费的
- 4️⃣ 编辑 fly.toml
- 连接Postgresql
- 你现在已经成功进入了 PostgreSQL 交互终端 (newsletter=#),但是 PostgreSQL 并不像 MySQL 那样有 SHOW TABLES,它是用标准 SQL 和系统 catalog 来查询表信息的。你可以用下面几种方法测试数据库是否正常:
- 1️⃣ 查看当前数据库里的表
- 2️⃣ 创建一个测试表
- 3️⃣ 插入一条测试数据
- 4️⃣ 查询测试数据
- 5️⃣ 删除测试表(可选)
在 Fly.io 上部署自建 Postgresql 的顺序就是:#
环境准备 安装flyctl,创建fly.io的账号,并完成visa信用卡或者借记卡的绑定认证(必须)
安装Postgresql#
1️⃣ 先创建应用#
在本机电脑创建一个文件夹,用于存放部署所需的相关文件,也可以直接使用我的代码仓库,clone到本地某个没有使用的文件夹,在终端中(cmd,powershell等)执行下面步骤
# 卸载应用
fly apps destroy ani-postgres # 会进行登录认证相关的操作,记得打开浏览器点击确认
# 创建应用
fly apps create ani-postgres
ani-postgres是你的数据库应用名- 这一步只是注册 app,不会启动数据库
2️⃣ 设置数据库密码(Secrets)#
fly secrets set POSTGRES_PASSWORD="mypassword" --app ani-postgres
- Postgres 官方镜像要求首次初始化必须有密码
- 通过
secrets传入,不要在fly.toml写明明文密码
3️⃣ 创建数据卷(持久化) 有很多坑,最好是使用付费的#
fly volumes create pg_data --size 3 --region hkg --app ani-postgres
卷会挂载到 ~~~~/var/lib/postgresql/dataFly 免费卷最大 3GB
4️⃣ 编辑 fly.toml#
确保内容类似:
# fly.toml for ani-postgres
app = "ani-postgres"
primary_region = "hkg"
[build]
image = "postgres:15"
# 不挂载卷
#[mounts]
# source = "pg_data"
# destination = "/var/lib/postgresql/data/db"
[env]
PGDATA = "/var/lib/postgresql/data"
POSTGRES_USER = "postgres"
POSTGRES_DB = "newsletter"
TZ = "Asia/Shanghai"
# 密码使用 secrets 设置,不在 toml 中写
# POSTGRES_PASSWORD = "your-strong-password"
[[services]]
protocol = "tcp"
internal_port = 5432
[[services.ports]]
port = 5432
[[services.tcp_checks]]
interval = "15s"
timeout = "2s"
grace_period = "30s"
restart_limit = 0
[[vm]]
memory = "1gb"
cpu_kind = "shared"
cpus = 1