8
8
"github.com/pterm/pterm"
9
9
)
10
10
11
-
12
11
// Template for the systemd service file
13
12
const serviceTemplate = `[Unit]
14
13
Description=Nostr Relay Pyramid
@@ -18,19 +17,27 @@ After=network.target
18
17
Type=simple
19
18
User=nostr
20
19
WorkingDirectory=/home/nostr
21
- Environment="DOMAIN={{.Domain}}"
22
- Environment="RELAY_NAME=nostr-relay-pyramid"
23
- Environment="RELAY_PUBKEY={{.PubKey}}"
20
+ EnvironmentFile=/etc/systemd/system/nostr-relay-pyramid.env
24
21
ExecStart=/usr/local/bin/nostr-relay-pyramid
25
22
Restart=on-failure
26
23
27
24
[Install]
28
25
WantedBy=multi-user.target
29
26
`
30
27
28
+ // Template for the environment file
29
+ const envTemplate = `
30
+ DOMAIN={{.Domain}}
31
+ RELAY_NAME=nostr-relay-pyramid
32
+ RELAY_PUBKEY={{.PubKey}}
33
+ `
34
+
31
35
// Path for the systemd service file
32
36
const serviceFilePath = "/etc/systemd/system/nostr-relay-pyramid.service"
33
37
38
+ // Path for the environment file
39
+ const envFilePath = "/etc/systemd/system/nostr-relay-pyramid.env"
40
+
34
41
// Function to check if a user exists
35
42
func userExists (username string ) bool {
36
43
cmd := exec .Command ("id" , "-u" , username )
@@ -40,8 +47,8 @@ func userExists(username string) bool {
40
47
41
48
// Function to set up the relay service
42
49
func SetupRelayService (domain , pubKey string ) {
43
-
44
50
spinner , _ := pterm .DefaultSpinner .Start ("Configuring nginx for HTTP..." )
51
+
45
52
// Check if the service file exists and remove it if it does
46
53
if _ , err := os .Stat (serviceFilePath ); err == nil {
47
54
err = os .Remove (serviceFilePath )
@@ -50,20 +57,28 @@ func SetupRelayService(domain, pubKey string) {
50
57
}
51
58
}
52
59
60
+ // Check if the environment file exists and remove it if it does
61
+ if _ , err := os .Stat (envFilePath ); err == nil {
62
+ err = os .Remove (envFilePath )
63
+ if err != nil {
64
+ log .Fatalf ("Error removing environment file: %v" , err )
65
+ }
66
+ }
67
+
53
68
// Ensure the user for the relay service exists
54
69
if ! userExists ("nostr" ) {
55
- spinner .UpdateText ("Creating user 'nostr'..." )
70
+ spinner .UpdateText ("Creating user 'nostr'..." )
56
71
err := exec .Command ("adduser" , "--disabled-login" , "--gecos" , "" , "nostr" ).Run ()
57
72
if err != nil {
58
73
log .Fatalf ("Error creating user: %v" , err )
59
74
}
60
75
} else {
61
- spinner .UpdateText ("User 'nostr' already exists" )
76
+ spinner .UpdateText ("User 'nostr' already exists" )
62
77
}
63
78
64
79
// Ensure the data directory exists and set ownership
65
80
const dataDir = "/var/lib/nostr-relay-pyramid"
66
- spinner .UpdateText ("Creating data directory..." )
81
+ spinner .UpdateText ("Creating data directory..." )
67
82
err := os .MkdirAll (dataDir , 0755 )
68
83
if err != nil {
69
84
log .Fatalf ("Error creating data directory: %v" , err )
@@ -74,8 +89,26 @@ func SetupRelayService(domain, pubKey string) {
74
89
log .Fatalf ("Error setting ownership of the data directory: %v" , err )
75
90
}
76
91
92
+ // Create the environment file
93
+ spinner .UpdateText ("Creating environment file..." )
94
+ envFile , err := os .Create (envFilePath )
95
+ if err != nil {
96
+ log .Fatalf ("Error creating environment file: %v" , err )
97
+ }
98
+ defer envFile .Close ()
99
+
100
+ envTmpl , err := template .New ("env" ).Parse (envTemplate )
101
+ if err != nil {
102
+ log .Fatalf ("Error parsing environment template: %v" , err )
103
+ }
104
+
105
+ err = envTmpl .Execute (envFile , struct { Domain , PubKey string }{Domain : domain , PubKey : pubKey })
106
+ if err != nil {
107
+ log .Fatalf ("Error executing environment template: %v" , err )
108
+ }
109
+
77
110
// Create the systemd service file
78
- spinner .UpdateText ("Creating service file..." )
111
+ spinner .UpdateText ("Creating service file..." )
79
112
serviceFile , err := os .Create (serviceFilePath )
80
113
if err != nil {
81
114
log .Fatalf ("Error creating service file: %v" , err )
@@ -93,14 +126,14 @@ func SetupRelayService(domain, pubKey string) {
93
126
}
94
127
95
128
// Reload systemd to apply the new service
96
- spinner .UpdateText ("Reloading systemd daemon..." )
129
+ spinner .UpdateText ("Reloading systemd daemon..." )
97
130
err = exec .Command ("systemctl" , "daemon-reload" ).Run ()
98
131
if err != nil {
99
132
log .Fatalf ("Error reloading systemd daemon: %v" , err )
100
133
}
101
134
102
135
// Enable and start the nostr relay service
103
- spinner .UpdateText ("Enabling and starting service..." )
136
+ spinner .UpdateText ("Enabling and starting service..." )
104
137
err = exec .Command ("systemctl" , "enable" , "nostr-relay-pyramid" ).Run ()
105
138
if err != nil {
106
139
log .Fatalf ("Error enabling nostr relay service: %v" , err )
@@ -111,6 +144,6 @@ func SetupRelayService(domain, pubKey string) {
111
144
log .Fatalf ("Error starting nostr relay service: %v" , err )
112
145
}
113
146
114
- spinner .Success ("Nostr relay service configured" )
147
+ spinner .Success ("Nostr relay service configured" )
115
148
}
116
149
0 commit comments