Files
system-config/system/hosts/mcp/containers/appflowy.nix
2025-03-02 14:35:06 -08:00

89 lines
3.5 KiB
Nix

# Status: Far too complicated to set up right now. There's a lot of built-in
# assumptions about the database and a lot of services to connect to. I think
# they tried to open-source their production code, but it's not particularly
# generic right now.
#
# See https://github.com/AppFlowy-IO/AppFlowy-Cloud/blob/main/doc/DEPLOYMENT.md
{ config, pkgs, ... }:
let
inherit (import ./lib.nix config) mkContainer;
inherit (import ./secrets.nix) appflowy;
in
{
virtualisation.oci-containers.containers = {
appflowy = mkContainer {
image = "appflowyinc/appflowy_cloud:latest";
hostName = "appflowy";
dependsOn = [
"appflowy-gotrue"
"appflowy-db"
];
port = 80;
volumes = [];
environment = {
RUST_LOG = "info";
APPFLOWY_ENVIRONMENT = "production";
APPFLOWY_DATABASE_URL = "postgres://${appflowy.db.username}:${appflowy.db.password}@appflowy-db:5432/${appflowy.db.database}";
APPFLOWY_REDIS_URI = redis://valkey:6379;
APPFLOWY_GOTRUE_JWT_SECRET=appflowy.gotrue.jwt.secret;
APPFLOWY_GOTRUE_JWT_EXP = toString appflowy.gotrue.jwt.expiration;
APPFLOWY_GOTRUE_BASE_URL= "http://appflowy-gotrue:9999";
APPFLOWY_GOTRUE_EXT_URL = "http://appflowy-gotrue.havenisms.com";
APPFLOWY_GOTRUE_ADMIN_EMAIL = appflowy.gotrue.admin.email;
APPFLOWY_GOTRUE_ADMIN_PASSWORD = appflowy.gotrue.admin.password;
APPFLOWY_S3_USE_MINIO = "true";
APPFLOWY_S3_MINIO_URL= "https://minio.${config.domainName}";
APPFLOWY_S3_ACCESS_KEY = appflowy.s3.accessKey;
APPFLOWY_S3_SECRET_KEY = appflowy.s3.secretKey;
APPFLOWY_S3_BUCKET = appflowy.s3.bucket;
APPFLOWY_S3_REGION="us-east-1";
# APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST}
# APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT}
# APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME}
# APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD}
# APPFLOWY_ACCESS_CONTROL=${APPFLOWY_ACCESS_CONTROL}
# APPFLOWY_DATABASE_MAX_CONNECTIONS=${APPFLOWY_DATABASE_MAX_CONNECTIONS}
# APPFLOWY_AI_SERVER_HOST=${APPFLOWY_AI_SERVER_HOST}
# APPFLOWY_AI_SERVER_PORT=${APPFLOWY_AI_SERVER_PORT}
# APPFLOWY_OPENAI_API_KEY=${APPFLOWY_OPENAI_API_KEY}
};
homepageOpts = {
group = "Apps ";
name = "Appflowy";
icon = "appflowy.svg";
description = "Knowledge Base";
};
};
appflowy-db = {
image = "docker.io/postgres:16-alpine";
autoStart = true;
volumes = [
# TODO: move to faster storage?
"/tank/appflowy/db:/var/lib/postgresql/data"
"/tank/appflowy/migrations/before:/docker-entrypoint-initdb.d"
];
environment = {
POSTGRES_USER = appflowy.db.username;
POSTGRES_PASSWORD = appflowy.db.password;
POSTGRES_DB = appflowy.db.database;
};
extraOptions = [];
};
appflowy-gotrue = {
image = "appflowyinc/gotrue:latest";
autoStart = true;
dependsOn = [];
extraOptions = [];
volumes = [];
environment = {
GOTRUE_SITE_URL = "https://appflowy.havenisms.com";
GOTRUE_JWT_SECRET = appflowy.gotrue.jwt.secret;
GOTRUE_JWT_EXP = toString appflowy.gotrue.jwt.expiration;
GOTRUE_DB_DRIVER = "postgres";
API_EXTERNAL_URL = "http://appflowy-gotrue.havenisms.com";
DATABASE_URL = "postgres://supabase_auth_admin:root@appflowy-db:5432/${appflowy.db.database}";
PORT = "9999";
};
};
};
}