返回文章列表

文章

在Fly.io上部署Postgresql

目录
  1. 在 Fly.io 上部署自建 Postgresql 的顺序就是:
  2. 安装Postgresql
  3. 1️⃣ 先创建应用
  4. 2️⃣ 设置数据库密码(Secrets)
  5. 3️⃣ 创建数据卷(持久化) 有很多坑,最好是使用付费的
  6. 4️⃣ 编辑 fly.toml
  7. 连接Postgresql
  8. 你现在已经成功进入了 PostgreSQL 交互终端 (newsletter=#),但是 PostgreSQL 并不像 MySQL 那样有 SHOW TABLES,它是用标准 SQL 和系统 catalog 来查询表信息的。你可以用下面几种方法测试数据库是否正常:
  9. 1️⃣ 查看当前数据库里的表
  10. 2️⃣ 创建一个测试表
  11. 3️⃣ 插入一条测试数据
  12. 4️⃣ 查询测试数据
  13. 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/data
  • Fly 免费卷最大 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