mirror of https://github.com/gogits/gogs.git
Browse Source
The command accepts "apache" and "nginx" subcommands and generates basic configuration files using the configuration values in the gitea ini file.pull/1234/head
Paolo Borelli
10 years ago
2 changed files with 146 additions and 0 deletions
@ -0,0 +1,145 @@
|
||||
// Copyright 2015 The Gogs Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package cmd |
||||
|
||||
import ( |
||||
"os" |
||||
"bufio" |
||||
"log" |
||||
"strings" |
||||
"text/template" |
||||
"github.com/codegangsta/cli" |
||||
|
||||
"github.com/gogits/gogs/modules/setting" |
||||
) |
||||
|
||||
var CmdGenerate = cli.Command{ |
||||
Name: "generate", |
||||
Usage: "Generate web server configuration files", |
||||
Description: `Generate configuration files to use a web server as a proxy for Gogs.`, |
||||
Flags: []cli.Flag{ |
||||
cli.StringFlag{"config, c", "custom/conf/app.ini", "Custom configuration file path", ""}, |
||||
}, |
||||
Subcommands: []cli.Command{ |
||||
{ |
||||
Name: "apache", |
||||
Usage: "generate Apache configuration file", |
||||
Action: runApache, |
||||
Flags: []cli.Flag{ |
||||
cli.StringFlag{"subpath", "", "Use a sub-path", ""}, |
||||
}, |
||||
}, |
||||
{ |
||||
Name: "nginx", |
||||
Usage: "generate nginx configuration file", |
||||
Action: runNginx, |
||||
Flags: []cli.Flag{ |
||||
cli.StringFlag{"subpath", "", "Use a sub-path", ""}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
type ServerType int |
||||
|
||||
const ( |
||||
APACHE ServerType = iota |
||||
NGINX |
||||
) |
||||
|
||||
const ApacheConfTemplate = |
||||
`<VirtualHost *:80> |
||||
ServerName {{.Domain}} |
||||
|
||||
<Proxy *> |
||||
Order allow,deny |
||||
Allow from all |
||||
</Proxy> |
||||
|
||||
ProxyPreserveHost On |
||||
ProxyRequests off |
||||
<Location {{.Subpath}}> |
||||
ProxyPass http://{{.Addr}}:{{.Port}}/
|
||||
ProxyPassReverse http://{{.Addr}}:{{.Port}}/
|
||||
</Location> |
||||
</VirtualHost>` |
||||
|
||||
const NginxConfTemplate = |
||||
`server { |
||||
listen 80; |
||||
server_name {{.Domain}}; |
||||
|
||||
location {{.Subpath}} { |
||||
proxy_pass http://{{.Addr}}:{{.Port}};
|
||||
} |
||||
}` |
||||
|
||||
var ServerTemplates = map[ServerType]string{ |
||||
APACHE: ApacheConfTemplate, |
||||
NGINX: NginxConfTemplate, |
||||
} |
||||
|
||||
const outFile = "gogs.conf" |
||||
|
||||
func runApache(ctx *cli.Context) { |
||||
genConfigFile(ctx, APACHE) |
||||
} |
||||
|
||||
func runNginx(ctx *cli.Context) { |
||||
genConfigFile(ctx, NGINX) |
||||
} |
||||
|
||||
func genConfigFile(ctx *cli.Context, st ServerType) { |
||||
if ctx.IsSet("config") { |
||||
setting.CustomConf = ctx.String("config") |
||||
} |
||||
setting.NewConfigContext() |
||||
|
||||
tmpl, err := template.New("conf").Parse(ServerTemplates[st]) |
||||
if err != nil { |
||||
log.Fatalf("Failed to create configuration template: %s", err) |
||||
} |
||||
|
||||
confOut, err := os.Create(outFile) |
||||
if err != nil { |
||||
log.Fatalf("Failed to open %s for writing: %s", outFile, err) |
||||
} |
||||
|
||||
w := bufio.NewWriter(confOut) |
||||
|
||||
type Params struct { |
||||
Domain string |
||||
Addr string |
||||
Port string |
||||
Subpath string |
||||
} |
||||
|
||||
params := Params{ |
||||
Domain: setting.Domain, |
||||
Addr: "127.0.0.1", |
||||
Port: setting.HttpPort, |
||||
Subpath: "/", |
||||
} |
||||
|
||||
if setting.HttpAddr != "0.0.0.0" { |
||||
params.Addr = setting.HttpAddr |
||||
} |
||||
|
||||
if ctx.IsSet("subpath") { |
||||
params.Subpath = ctx.String("subpath") |
||||
if (!strings.HasPrefix(params.Subpath, "/")) { |
||||
params.Subpath = "/" + params.Subpath |
||||
} |
||||
} |
||||
|
||||
err = tmpl.Execute(w, params) |
||||
if err != nil { |
||||
log.Fatalf("Failed to write configuration to %s: %s", outFile, err) |
||||
} |
||||
|
||||
w.Flush() |
||||
confOut.Close() |
||||
log.Printf("Written %s", outFile) |
||||
} |
Loading…
Reference in new issue