Skip to content

Commit 3b95c5d

Browse files
authored
Merge pull request #3211 from Infisical/add-systemmd-service
add system md service for gateway
2 parents de8f315 + 004a8b7 commit 3b95c5d

File tree

2 files changed

+93
-10
lines changed

2 files changed

+93
-10
lines changed

cli/packages/cmd/gateway.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package cmd
22

33
import (
4-
// "fmt"
5-
6-
// "github.com/Infisical/infisical-merge/packages/api"
7-
// "github.com/Infisical/infisical-merge/packages/models"
84
"context"
95
"fmt"
106
"os"
@@ -14,13 +10,8 @@ import (
1410

1511
"github.com/Infisical/infisical-merge/packages/gateway"
1612
"github.com/Infisical/infisical-merge/packages/util"
17-
"github.com/rs/zerolog/log"
18-
19-
// "github.com/Infisical/infisical-merge/packages/visualize"
20-
// "github.com/rs/zerolog/log"
21-
22-
// "github.com/go-resty/resty/v2"
2313
"github.com/posthog/posthog-go"
14+
"github.com/rs/zerolog/log"
2415
"github.com/spf13/cobra"
2516
)
2617

@@ -40,6 +31,16 @@ var gatewayCmd = &cobra.Command{
4031
util.HandleError(fmt.Errorf("Token not found"))
4132
}
4233

34+
domain, err := cmd.Flags().GetString("domain")
35+
if err != nil {
36+
util.HandleError(err, "Unable to parse domain flag")
37+
}
38+
39+
// Try to install systemd service if possible
40+
if err := gateway.InstallGatewaySystemdService(token.Token, domain); err != nil {
41+
log.Warn().Msgf("Failed to install systemd service: %v", err)
42+
}
43+
4344
Telemetry.CaptureEvent("cli-command:gateway", posthog.NewProperties().Set("version", util.CLI_VERSION))
4445

4546
sigCh := make(chan os.Signal, 1)

cli/packages/gateway/systemd.go

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package gateway
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"os/exec"
7+
"path/filepath"
8+
"runtime"
9+
10+
"github.com/rs/zerolog/log"
11+
)
12+
13+
const systemdServiceTemplate = `[Unit]
14+
Description=Infisical Gateway Service
15+
After=network.target
16+
17+
[Service]
18+
Type=simple
19+
EnvironmentFile=/etc/infisical/gateway.conf
20+
ExecStart=/usr/local/bin/infisical gateway
21+
Restart=on-failure
22+
InaccessibleDirectories=/home
23+
PrivateTmp=yes
24+
LimitCORE=infinity
25+
LimitNOFILE=1000000
26+
LimitNPROC=60000
27+
LimitRTPRIO=infinity
28+
LimitRTTIME=7000000
29+
30+
[Install]
31+
WantedBy=multi-user.target
32+
`
33+
34+
func InstallGatewaySystemdService(token string, domain string) error {
35+
if runtime.GOOS != "linux" {
36+
log.Info().Msg("Skipping systemd service installation - not on Linux")
37+
return nil
38+
}
39+
40+
if os.Geteuid() != 0 {
41+
log.Info().Msg("Skipping systemd service installation - not running as root/sudo")
42+
return nil
43+
}
44+
45+
configDir := "/etc/infisical"
46+
if err := os.MkdirAll(configDir, 0755); err != nil {
47+
return fmt.Errorf("failed to create config directory: %v", err)
48+
}
49+
50+
configContent := fmt.Sprintf("INFISICAL_UNIVERSAL_AUTH_ACCESS_TOKEN=%s\n", token)
51+
if domain != "" {
52+
configContent += fmt.Sprintf("INFISICAL_API_URL=%s\n", domain)
53+
} else {
54+
configContent += "INFISICAL_API_URL=\n"
55+
}
56+
57+
configPath := filepath.Join(configDir, "gateway.conf")
58+
if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil {
59+
return fmt.Errorf("failed to write config file: %v", err)
60+
}
61+
62+
servicePath := "/etc/systemd/system/infisical-gateway.service"
63+
if _, err := os.Stat(servicePath); err == nil {
64+
log.Info().Msg("Systemd service file already exists")
65+
return nil
66+
}
67+
68+
if err := os.WriteFile(servicePath, []byte(systemdServiceTemplate), 0644); err != nil {
69+
return fmt.Errorf("failed to write systemd service file: %v", err)
70+
}
71+
72+
reloadCmd := exec.Command("systemctl", "daemon-reload")
73+
if err := reloadCmd.Run(); err != nil {
74+
return fmt.Errorf("failed to reload systemd: %v", err)
75+
}
76+
77+
log.Info().Msg("Successfully installed systemd service")
78+
log.Info().Msg("To start the service, run: sudo systemctl start infisical-gateway")
79+
log.Info().Msg("To enable the service on boot, run: sudo systemctl enable infisical-gateway")
80+
81+
return nil
82+
}

0 commit comments

Comments
 (0)