2025-11-10 13:13:59 -08:00
|
|
|
create table users(
|
|
|
|
|
user_id bigserial primary key,
|
|
|
|
|
email varchar(255) not null,
|
|
|
|
|
username varchar(255) not null unique,
|
|
|
|
|
key_key varchar(255),
|
2025-11-30 20:13:51 -08:00
|
|
|
key_iv varchar(255)
|
|
|
|
|
);
|
2026-04-08 19:54:32 -07:00
|
|
|
create unique index users_username_idx on users (username);
|
2025-11-10 13:13:59 -08:00
|
|
|
|
2025-11-30 20:13:51 -08:00
|
|
|
create table instances(
|
|
|
|
|
instance_id bigserial primary key,
|
2026-01-18 07:50:31 -08:00
|
|
|
user_id integer not null references users on delete cascade,
|
|
|
|
|
ssh_key_priv_enc text,
|
|
|
|
|
ssh_key_pub_enc text,
|
|
|
|
|
restic_password_enc varchar(255)
|
2025-11-30 20:13:51 -08:00
|
|
|
);
|
|
|
|
|
create unique index instances_user_id_instance_id_idx on instances (instance_id, user_id);
|
|
|
|
|
|
2025-11-10 13:13:59 -08:00
|
|
|
create table user_service_configs(
|
|
|
|
|
id bigserial primary key,
|
2025-11-30 20:13:51 -08:00
|
|
|
user_id integer not null references users on delete cascade,
|
|
|
|
|
instance_id integer not null references instances on delete cascade,
|
2025-11-10 13:13:59 -08:00
|
|
|
cloudflare_api_token_enc varchar(255),
|
|
|
|
|
cloudflare_account_id_enc varchar(255),
|
|
|
|
|
cloudflare_zone_id_enc varchar(255),
|
|
|
|
|
digitalocean_api_token_enc varchar(255),
|
|
|
|
|
digitalocean_region varchar(255),
|
|
|
|
|
digitalocean_size varchar(255),
|
2026-06-17 12:01:35 -07:00
|
|
|
digitalocean_volume_size integer,
|
2025-11-10 13:13:59 -08:00
|
|
|
backblaze_application_key_enc varchar(255),
|
|
|
|
|
backblaze_key_id_enc varchar(255),
|
|
|
|
|
backblaze_bucket_url_enc varchar(255)
|
|
|
|
|
);
|
2025-11-30 20:13:51 -08:00
|
|
|
create unique index user_service_configs_user_id_instance_id_idx on user_service_configs (user_id, instance_id);
|
2025-11-10 13:13:59 -08:00
|
|
|
|
|
|
|
|
create table user_selected_apps(
|
|
|
|
|
id bigserial primary key,
|
2025-11-30 20:13:51 -08:00
|
|
|
user_id integer not null references users on delete cascade,
|
|
|
|
|
instance_id integer not null references instances on delete cascade,
|
2025-11-10 13:13:59 -08:00
|
|
|
wg_easy_version varchar(100),
|
|
|
|
|
nextcloud_version varchar(100),
|
2026-02-23 09:09:58 -08:00
|
|
|
nassella_version varchar(100),
|
2025-12-07 10:38:36 -08:00
|
|
|
log_viewer_version varchar(100),
|
2026-05-23 20:53:44 -07:00
|
|
|
ghost_version varchar(100),
|
|
|
|
|
instance_control_version varchar(100)
|
2025-11-10 13:13:59 -08:00
|
|
|
);
|
2025-11-30 20:13:51 -08:00
|
|
|
create unique index user_selected_apps_user_id_instance_id_idx on user_selected_apps (user_id, instance_id);
|
2025-11-10 13:13:59 -08:00
|
|
|
|
|
|
|
|
create table user_app_configs(
|
|
|
|
|
id bigserial primary key,
|
2025-11-30 20:13:51 -08:00
|
|
|
user_id integer not null references users on delete cascade,
|
|
|
|
|
instance_id integer not null references instances on delete cascade,
|
2025-11-10 13:13:59 -08:00
|
|
|
root_domain varchar(100),
|
|
|
|
|
config_enc text
|
|
|
|
|
);
|
|
|
|
|
|
2025-11-30 20:13:51 -08:00
|
|
|
create unique index user_app_configs_user_id_instance_id_idx on user_app_configs (user_id, instance_id);
|
2025-11-12 05:42:25 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
create type deployment_status as enum ('queued', 'in-progress', 'complete', 'failed');
|
|
|
|
|
|
|
|
|
|
create table deployments(
|
|
|
|
|
id bigserial primary key,
|
|
|
|
|
user_id integer not null references users on delete cascade,
|
2025-11-30 20:13:51 -08:00
|
|
|
instance_id integer not null references instances on delete cascade,
|
2025-11-12 05:42:25 -08:00
|
|
|
started timestamptz,
|
|
|
|
|
finished timestamptz,
|
|
|
|
|
status deployment_status not null default 'queued',
|
|
|
|
|
pid integer,
|
|
|
|
|
generate_configs deployment_status not null default 'queued',
|
|
|
|
|
terraform_custom_image deployment_status not null default 'queued',
|
|
|
|
|
terraform_dns deployment_status not null default 'queued',
|
|
|
|
|
terraform_volume_create deployment_status not null default 'queued',
|
|
|
|
|
terraform_volume_destroy deployment_status not null default 'queued',
|
|
|
|
|
terraform_machine_create deployment_status not null default 'queued',
|
|
|
|
|
terraform_machine_destroy deployment_status not null default 'queued',
|
|
|
|
|
terraform_ip_create deployment_status not null default 'queued',
|
|
|
|
|
terraform_ip_destroy deployment_status not null default 'queued',
|
2026-06-17 12:01:35 -07:00
|
|
|
instance_backup deployment_status not null default 'queued',
|
2025-11-12 05:42:25 -08:00
|
|
|
log_enc text
|
|
|
|
|
);
|
|
|
|
|
|
2025-11-30 20:13:51 -08:00
|
|
|
create index deployments_user_id_instance_id_idx on deployments (user_id, instance_id);
|
2025-11-12 07:31:23 -08:00
|
|
|
|
|
|
|
|
create table user_terraform_state(
|
|
|
|
|
id bigserial primary key,
|
2025-11-30 20:13:51 -08:00
|
|
|
user_id integer not null references users on delete cascade,
|
|
|
|
|
instance_id integer not null references instances on delete cascade,
|
2025-11-12 07:31:23 -08:00
|
|
|
state_enc text,
|
|
|
|
|
state_backup_enc text
|
|
|
|
|
);
|
|
|
|
|
|
2025-11-30 20:13:51 -08:00
|
|
|
create unique index user_terraform_state_user_id_instance_id_idx on user_terraform_state (user_id, instance_id);
|
2026-05-23 20:53:44 -07:00
|
|
|
|
|
|
|
|
create table migrations(
|
|
|
|
|
id bigserial primary key,
|
2026-06-23 17:50:12 -07:00
|
|
|
migration_id integer not null unique
|
2026-05-23 20:53:44 -07:00
|
|
|
);
|
2026-06-22 16:38:56 -07:00
|
|
|
|
|
|
|
|
insert into migrations(migration_id) values(0);
|
|
|
|
|
insert into migrations(migration_id) values(1);
|
|
|
|
|
insert into migrations(migration_id) values(2);
|