deployment arch

This commit is contained in:
2026-01-13 12:19:13 +00:00
parent 10e7191c8f
commit ab077d45eb
2 changed files with 22 additions and 33 deletions

View File

@@ -21,7 +21,6 @@ const (
type pbToml struct { type pbToml struct {
Server serverConfig `toml:"server"` Server serverConfig `toml:"server"`
PocketBase pocketBaseConfig `toml:"pocketbase"` PocketBase pocketBaseConfig `toml:"pocketbase"`
Deployment deploymentConfig `toml:"deployment"`
} }
type serverConfig struct { type serverConfig struct {
@@ -35,11 +34,6 @@ type pocketBaseConfig struct {
ServiceName string `toml:"service_name"` ServiceName string `toml:"service_name"`
} }
type deploymentConfig struct {
ServiceDir string `toml:"service_dir"`
EnvironmentFile string `toml:"environment_file"`
}
func runDeploy() error { func runDeploy() error {
cwd, err := os.Getwd() cwd, err := os.Getwd()
if err != nil { if err != nil {
@@ -77,26 +71,16 @@ func runDeploy() error {
version = defaultPocketbaseVersion version = defaultPocketbaseVersion
} }
serviceDirTemplate := cfg.Deployment.ServiceDir serviceDir := renderServiceTemplate(defaultServiceDirTemplate, serviceName)
if serviceDirTemplate == "" { envFile := renderServiceTemplate(defaultEnvFileTemplate, serviceName)
serviceDirTemplate = defaultServiceDirTemplate unitServiceDir := renderServiceTemplate(defaultServiceDirTemplate, "%i")
} unitEnvFile := renderServiceTemplate(defaultEnvFileTemplate, "%i")
envFileTemplate := cfg.Deployment.EnvironmentFile
if envFileTemplate == "" {
envFileTemplate = defaultEnvFileTemplate
}
serviceDir := renderServiceTemplate(serviceDirTemplate, serviceName)
envFile := renderServiceTemplate(envFileTemplate, serviceName)
unitServiceDir := renderServiceTemplate(serviceDirTemplate, "%i")
unitEnvFile := renderServiceTemplate(envFileTemplate, "%i")
step := 1 step := 1
printStep(step, totalDeploySteps, "validating configuration") printStep(step, totalDeploySteps, "validating configuration")
step++ step++
printStep(step, totalDeploySteps, "probing remote host") printStep(step, totalDeploySteps, "probing remote host")
remoteOS, err := runSSHOutput(serverIP, "uname -s") remoteOS, err := runSSHOutput(serverIP, "/bin/uname -s")
if err != nil { if err != nil {
return fmt.Errorf("failed to determine remote OS: %w", err) return fmt.Errorf("failed to determine remote OS: %w", err)
} }
@@ -104,7 +88,7 @@ func runDeploy() error {
return fmt.Errorf("unsupported remote OS %q", remoteOS) return fmt.Errorf("unsupported remote OS %q", remoteOS)
} }
machineArch, err := runSSHOutput(serverIP, "uname -m") machineArch, err := runSSHOutput(serverIP, "/bin/uname -m")
if err != nil { if err != nil {
return fmt.Errorf("failed to determine remote architecture: %w", err) return fmt.Errorf("failed to determine remote architecture: %w", err)
} }
@@ -292,14 +276,14 @@ systemctl restart pb@%s
} }
func runSSHCommand(server, script string) error { func runSSHCommand(server, script string) error {
cmd := exec.Command("ssh", "-o", "BatchMode=yes", fmt.Sprintf("root@%s", server), "bash", "-lc", script) cmd := exec.Command("ssh", append(sshArgs(server), "bash", "-lc", script)...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
return cmd.Run() return cmd.Run()
} }
func runSSHOutput(server, script string) (string, error) { func runSSHOutput(server, script string) (string, error) {
cmd := exec.Command("ssh", "-o", "BatchMode=yes", fmt.Sprintf("root@%s", server), "bash", "-lc", script) cmd := exec.Command("ssh", append(sshArgs(server), "bash", "-lc", script)...)
var out bytes.Buffer var out bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
@@ -326,7 +310,7 @@ func syncLocalDirectories(server, remoteBase string, dirs []string) error {
} }
remotePath := fmt.Sprintf("root@%s:%s/%s", server, remoteBase, dir) remotePath := fmt.Sprintf("root@%s:%s/%s", server, remoteBase, dir)
cmd := exec.Command("rsync", "-az", "--delete", localPath+"/", remotePath) cmd := exec.Command("rsync", "-e", "ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new", "-az", "--delete", localPath+"/", remotePath)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil { if err := cmd.Run(); err != nil {
@@ -335,3 +319,11 @@ func syncLocalDirectories(server, remoteBase string, dirs []string) error {
} }
return nil return nil
} }
func sshArgs(server string) []string {
return []string{
"-o", "BatchMode=yes",
"-o", "StrictHostKeyChecking=accept-new",
fmt.Sprintf("root@%s", server),
}
}

13
main.go
View File

@@ -283,18 +283,15 @@ func init() {
} }
func writePBConfig(path, serviceName string) error { func writePBConfig(path, serviceName string) error {
const tmpl = `[server] const tmpl = `[pocketbase]
version = "%s"
service_name = "%s"
[server]
ip = "127.0.0.1" ip = "127.0.0.1"
port = 8090 port = 8090
domain = "example.com" domain = "example.com"
[pocketbase]
version = "%s"
service_name = "%s"
[deployment]
service_dir = "/root/pb/{service}"
environment_file = "/root/pb/{service}/.env"
` `
return os.WriteFile(path, []byte(fmt.Sprintf(tmpl, defaultPocketbaseVersion, serviceName)), 0o644) return os.WriteFile(path, []byte(fmt.Sprintf(tmpl, defaultPocketbaseVersion, serviceName)), 0o644)
} }