deployment arch
This commit is contained in:
42
deploy.go
42
deploy.go
@@ -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
13
main.go
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user