@@ -5,41 +5,78 @@ package headscale
5
5
6
6
import (
7
7
"fmt"
8
+ "io/fs"
9
+ "net/netip"
8
10
"os"
9
11
"path"
10
12
"time"
11
13
12
14
"github.com/daytonaio/daytona/internal/util"
13
15
"github.com/daytonaio/daytona/pkg/server/config"
14
- server_types "github.com/daytonaio/daytona/pkg/types"
15
- "github.com/juanfont/headscale/hscontrol/types"
16
+ "github.com/daytonaio/daytona/pkg/types"
17
+ hstypes "github.com/juanfont/headscale/hscontrol/types"
16
18
"github.com/rs/zerolog"
17
19
"github.com/rs/zerolog/log"
18
- "gopkg.in/yaml.v2"
20
+ "tailscale.com/tailcfg"
21
+ "tailscale.com/types/dnstype"
19
22
)
20
23
21
- func getConfig (serverConfig * server_types .ServerConfig ) (* types .Config , error ) {
24
+ func getConfig (serverConfig * types .ServerConfig ) (* hstypes .Config , error ) {
22
25
configDir , err := config .GetConfigDir ()
23
26
if err != nil {
24
27
return nil , fmt .Errorf ("failed to get config directory: %w" , err )
25
28
}
26
29
27
- err = types .LoadConfig (path .Join (configDir , "headscale" , "config.yaml" ), true )
28
- if err != nil {
29
- return nil , fmt .Errorf ("failed to load headscale configuration: %w" , err )
30
- }
31
-
32
- cfg , err := types .GetHeadscaleConfig ()
33
- if err != nil {
34
- return nil , err
30
+ cfg := & hstypes.Config {
31
+ DBtype : "sqlite3" ,
32
+ ServerURL : fmt .Sprintf ("https://%s.%s" , serverConfig .Id , serverConfig .Frps .Domain ),
33
+ Addr : fmt .Sprintf ("127.0.0.1:%d" , serverConfig .HeadscalePort ),
34
+ EphemeralNodeInactivityTimeout : 5 * time .Minute ,
35
+ NodeUpdateCheckInterval : 10 * time .Second ,
36
+ BaseDomain : "daytona.local" ,
37
+ DERP : hstypes.DERPConfig {
38
+ ServerEnabled : true ,
39
+ AutomaticallyAddEmbeddedDerpRegion : true ,
40
+ ServerRegionID : 999 ,
41
+ ServerRegionCode : "local" ,
42
+ ServerRegionName : "Daytona embedded DERP" ,
43
+ Paths : []string {},
44
+ ServerPrivateKeyPath : path .Join (configDir , "headscale" , "derp_server_private.key" ),
45
+ UpdateFrequency : 24 * time .Hour ,
46
+ AutoUpdate : true ,
47
+ STUNAddr : "0.0.0.0:3478" ,
48
+ },
49
+ Log : hstypes.LogConfig {
50
+ Format : "text" ,
51
+ },
52
+ IPPrefixes : []netip.Prefix {
53
+ netip .MustParsePrefix ("fd7a:115c:a1e0::/48" ),
54
+ netip .MustParsePrefix ("100.64.0.0/10" ),
55
+ },
56
+ DNSConfig : & tailcfg.DNSConfig {
57
+ Proxied : true ,
58
+ Nameservers : []netip.Addr {
59
+ netip .MustParseAddr ("127.0.0.11" ),
60
+ netip .MustParseAddr ("1.1.1.1" ),
61
+ },
62
+ Resolvers : []* dnstype.Resolver {
63
+ {
64
+ Addr : "127.0.0.11" ,
65
+ },
66
+ {
67
+ Addr : "1.1.1.1" ,
68
+ },
69
+ },
70
+ },
71
+ DBpath : path .Join (configDir , "headscale" , "headscale.db" ),
72
+ UnixSocket : path .Join (configDir , "headscale" , "headscale.sock" ),
73
+ UnixSocketPermission : fs .FileMode .Perm (0700 ),
74
+ NoisePrivateKeyPath : path .Join (configDir , "headscale" , "noise_private.key" ),
75
+ CLI : hstypes.CLIConfig {
76
+ Timeout : 10 * time .Second ,
77
+ },
35
78
}
36
79
37
- zerolog .TimeFieldFormat = zerolog .TimeFormatUnix
38
- log .Logger = log .Output (zerolog.ConsoleWriter {
39
- Out : & util.DebugLogWriter {},
40
- TimeFormat : time .RFC3339 ,
41
- })
42
-
43
80
logLevelEnv , logLevelSet := os .LookupEnv ("LOG_LEVEL" )
44
81
if logLevelSet {
45
82
cfg .Log .Level , err = zerolog .ParseLevel (logLevelEnv )
@@ -51,16 +88,11 @@ func getConfig(serverConfig *server_types.ServerConfig) (*types.Config, error) {
51
88
}
52
89
53
90
zerolog .SetGlobalLevel (cfg .Log .Level )
54
-
55
- cfg .Log .Format = "text"
56
-
57
- cfg .ServerURL = fmt .Sprintf ("http://127.0.0.1:%d" , serverConfig .HeadscalePort )
58
- cfg .Addr = fmt .Sprintf ("127.0.0.1:%d" , serverConfig .HeadscalePort )
59
-
60
- cfg .DBpath = path .Join (configDir , "headscale" , "headscale.db" )
61
- cfg .UnixSocket = path .Join (configDir , "headscale" , "headscale.sock" )
62
- cfg .NoisePrivateKeyPath = path .Join (configDir , "headscale" , "noise_private.key" )
63
- cfg .DERP .ServerPrivateKeyPath = path .Join (configDir , "headscale" , "derp_server_private.key" )
91
+ zerolog .TimeFieldFormat = zerolog .TimeFormatUnix
92
+ log .Logger = log .Output (zerolog.ConsoleWriter {
93
+ Out : & util.DebugLogWriter {},
94
+ TimeFormat : time .RFC3339 ,
95
+ })
64
96
65
97
return cfg , nil
66
98
}
@@ -76,76 +108,4 @@ func init() {
76
108
log .Error ().Err (err ).Msg ("failed to create headscale directory" )
77
109
return
78
110
}
79
-
80
- if _ , err := os .Stat (path .Join (c , "headscale" , "config.yaml" )); os .IsNotExist (err ) {
81
- yamlString , err := yaml .Marshal (defaultConfig )
82
- if err != nil {
83
- log .Error ().Err (err ).Msg ("failed to marshal default headscale configuration" )
84
- return
85
- }
86
-
87
- err = os .WriteFile (path .Join (c , "headscale" , "config.yaml" ), yamlString , 0600 )
88
- if err != nil {
89
- log .Error ().Err (err ).Msg ("failed to write default headscale configuration" )
90
- return
91
- }
92
- }
93
- }
94
-
95
- var defaultConfig map [string ]interface {} = map [string ]interface {}{
96
- "acl_policy_path" : " " ,
97
- "acme_email" : " " ,
98
- "acme_url" : "https://acme-v02.api.letsencrypt.org/directory" ,
99
- "db_type" : "sqlite3" ,
100
- "derp" : map [string ]interface {}{
101
- "auto_update_enabled" : true ,
102
- "paths" : []interface {}{},
103
- "server" : map [string ]interface {}{
104
- "automatically_add_embedded_derp_region" : true ,
105
- "enabled" : true ,
106
- "ipv4" : "1.2.3.4" ,
107
- "ipv6" : "2001:db8::1" ,
108
- "region_code" : "headscale" ,
109
- "region_id" : 999 ,
110
- "region_name" : "Headscale Embedded DERP" ,
111
- "stun_listen_addr" : "0.0.0.0:3478" ,
112
- },
113
- "update_frequency" : "24h" ,
114
- "urls" : []interface {}{"https://controlplane.tailscale.com/derpmap/default" },
115
- },
116
- "disable_check_updates" : false ,
117
- "dns_config" : map [string ]interface {}{
118
- "base_domain" : "example.com" ,
119
- "domains" : []interface {}{},
120
- "magic_dns" : true ,
121
- "nameservers" : []interface {}{"1.1.1.1" },
122
- "override_local_dns" : true ,
123
- },
124
- "ephemeral_node_inactivity_timeout" : "5m" ,
125
- "grpc_allow_insecure" : false ,
126
- "grpc_listen_addr" : "127.0.0.1:50443" ,
127
- "ip_prefixes" : []interface {}{
128
- "fd7a:115c:a1e0::/48" ,
129
- "100.64.0.0/10" ,
130
- },
131
- "log" : map [string ]interface {}{
132
- "format" : "text" ,
133
- "level" : "info" ,
134
- },
135
- "logtail" : map [string ]interface {}{
136
- "enabled" : false ,
137
- },
138
- "metrics_listen_addr" : "127.0.0.1:9090" ,
139
- "node_update_check_interval" : "10s" ,
140
- "noise" : map [string ]interface {}{
141
- "private_key_path" : "/" ,
142
- },
143
- "randomize_client_port" : false ,
144
- "server_url" : "http://127.0.0.1:8000" ,
145
- "tls_cert_path" : "" ,
146
- "tls_key_path" : "" ,
147
- "tls_letsencrypt_cache_dir" : "/var/lib/headscale/cache" ,
148
- "tls_letsencrypt_challenge_type" : "HTTP-01" ,
149
- "tls_letsencrypt_hostname" : "" ,
150
- "tls_letsencrypt_listen" : ":http" ,
151
111
}
0 commit comments