Skip to content

Commit 00629fe

Browse files
das7padlunny
authored andcommitted
[assets] configurable URL for static resources (#7911)
* static url * add cors support for static resources * [assets] work on the migration to configurable url for assets Signed-off-by: Jakob Ackermann <[email protected]> * [misc] fix whitespace Signed-off-by: Jakob Ackermann <[email protected]> * [assets] fix the loading of the manifest.json It is generated dynamically, and as such can not be served by the cdn. Signed-off-by: Jakob Ackermann <[email protected]> * Revert "add cors support for static resources" This reverts commit 42f964f Signed-off-by: Jakob Ackermann <[email protected]> * [docs] add the STATIC_URL_PREFIX option Signed-off-by: Jakob Ackermann <[email protected]> * [docs] reverse-proxy: nginx: add two setups for STATIC_URL_PREFIX Signed-off-by: Jakob Ackermann <[email protected]> * [assets] migrate the url of a new asset to the static url prefix REF: f2a3abc Signed-off-by: Jakob Ackermann <[email protected]>
1 parent d0c7a08 commit 00629fe

File tree

21 files changed

+211
-129
lines changed

21 files changed

+211
-129
lines changed

custom/conf/app.ini.sample

+2
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd
185185
PROTOCOL = http
186186
DOMAIN = localhost
187187
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
188+
; when STATIC_URL_PREFIX is empty it will follow APP_URL
189+
STATIC_URL_PREFIX =
188190
; The address to listen on. Either a IPv4/IPv6 address or the path to a unix socket.
189191
HTTP_ADDR = 0.0.0.0
190192
HTTP_PORT = 3000

docs/content/doc/advanced/config-cheat-sheet.en-us.md

+7
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,13 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
138138
- `ROOT_URL`: **%(PROTOCOL)s://%(DOMAIN)s:%(HTTP\_PORT)s/**:
139139
Overwrite the automatically generated public URL.
140140
This is useful if the internal and the external URL don't match (e.g. in Docker).
141+
- `STATIC_URL_PREFIX`: **\<empty\>**:
142+
Overwrite this option to request static resources from a different URL.
143+
This includes CSS files, images, JS files and web fonts.
144+
Avatar images are dynamic resources and still served by gitea.
145+
The option can be just a different path, as in `/static`, or another domain, as in `https://cdn.example.com`.
146+
Requests are then made as `%(ROOT_URL)s/static/css/index.css` and `https://cdn.example.com/css/index.css` respective.
147+
The static files are located in the `public/` directory of the gitea source repository.
141148
- `HTTP_ADDR`: **0.0.0.0**: HTTP listen address.
142149
- If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket
143150
defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings.

docs/content/doc/usage/reverse-proxies.en-us.md

+68
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,74 @@ server {
4444

4545
Then set `[server] ROOT_URL = http://git.example.com/git/` in your configuration.
4646

47+
## Using Nginx as a reverse proxy and serve static resources directly
48+
We can tune the performance in splitting requests into categories static and dynamic.
49+
50+
CSS files, JavaScript files, images and web fonts are static content.
51+
The front page, a repository view or issue list is dynamic content.
52+
53+
Nginx can serve static resources directly and proxy only the dynamic requests to gitea.
54+
Nginx is optimized for serving static content, while the proxying of large responses might be the opposite of that
55+
(see https://serverfault.com/q/587386).
56+
57+
Download a snap shot of the gitea source repository to `/path/to/gitea/`.
58+
59+
We are only interested in the `public/` directory and you can delete the rest.
60+
61+
Depending on the scale of your user base, you might want to split the traffic to two distinct servers,
62+
or use a cdn for the static files.
63+
64+
### using a single node and a single domain
65+
66+
Set `[server] STATIC_URL_PREFIX = /_/static` in your configuration.
67+
68+
```
69+
server {
70+
listen 80;
71+
server_name git.example.com;
72+
73+
location /_/static {
74+
alias /path/to/gitea/public;
75+
}
76+
77+
location / {
78+
proxy_pass http://localhost:3000;
79+
}
80+
}
81+
```
82+
83+
### using two nodes and two domains
84+
85+
Set `[server] STATIC_URL_PREFIX = http://cdn.example.com/gitea` in your configuration.
86+
87+
```
88+
# application server running gitea
89+
server {
90+
listen 80;
91+
server_name git.example.com;
92+
93+
location / {
94+
proxy_pass http://localhost:3000;
95+
}
96+
}
97+
```
98+
99+
```
100+
# static content delivery server
101+
server {
102+
listen 80;
103+
server_name cdn.example.com;
104+
105+
location /gitea {
106+
alias /path/to/gitea/public;
107+
}
108+
109+
location / {
110+
return 404;
111+
}
112+
}
113+
```
114+
47115
## Using Apache HTTPD as a reverse proxy
48116

49117
If you want Apache HTTPD to serve your Gitea instance, you can add the following to your Apache HTTPD configuration (usually located at `/etc/apache2/httpd.conf` in Ubuntu):

modules/setting/setting.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ var (
9999
LetsEncryptEmail string
100100
GracefulRestartable bool
101101
GracefulHammerTime time.Duration
102+
StaticURLPrefix string
102103

103104
SSH = struct {
104105
Disabled bool `ini:"DISABLE_SSH"`
@@ -573,7 +574,7 @@ func NewContext() {
573574
defaultAppURL += ":" + HTTPPort
574575
}
575576
AppURL = sec.Key("ROOT_URL").MustString(defaultAppURL)
576-
AppURL = strings.TrimRight(AppURL, "/") + "/"
577+
AppURL = strings.TrimSuffix(AppURL, "/") + "/"
577578

578579
// Check if has app suburl.
579580
appURL, err := url.Parse(AppURL)
@@ -583,6 +584,7 @@ func NewContext() {
583584
// Suburl should start with '/' and end without '/', such as '/{subpath}'.
584585
// This value is empty if site does not have sub-url.
585586
AppSubURL = strings.TrimSuffix(appURL.Path, "/")
587+
StaticURLPrefix = strings.TrimSuffix(sec.Key("STATIC_URL_PREFIX").MustString(AppSubURL), "/")
586588
AppSubURLDepth = strings.Count(AppSubURL, "/")
587589
// Check if Domain differs from AppURL domain than update it to AppURL's domain
588590
// TODO: Can be replaced with url.Hostname() when minimal GoLang version is 1.8

modules/templates/helper.go

+3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ func NewFuncMap() []template.FuncMap {
4848
"AppSubUrl": func() string {
4949
return setting.AppSubURL
5050
},
51+
"StaticUrlPrefix": func() string {
52+
return setting.StaticURLPrefix
53+
},
5154
"AppUrl": func() string {
5255
return setting.AppURL
5356
},

templates/admin/hook_new.tmpl

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@
1111
{{end}}
1212
<div class="ui right">
1313
{{if eq .HookType "gitea"}}
14-
<img class="img-13" src="{{AppSubUrl}}/img/gitea-sm.png">
14+
<img class="img-13" src="{{StaticUrlPrefix}}/img/gitea-sm.png">
1515
{{else if eq .HookType "gogs"}}
16-
<img class="img-13" src="{{AppSubUrl}}/img/gogs.ico">
16+
<img class="img-13" src="{{StaticUrlPrefix}}/img/gogs.ico">
1717
{{else if eq .HookType "slack"}}
18-
<img class="img-13" src="{{AppSubUrl}}/img/slack.png">
18+
<img class="img-13" src="{{StaticUrlPrefix}}/img/slack.png">
1919
{{else if eq .HookType "discord"}}
20-
<img class="img-13" src="{{AppSubUrl}}/img/discord.png">
20+
<img class="img-13" src="{{StaticUrlPrefix}}/img/discord.png">
2121
{{else if eq .HookType "dingtalk"}}
22-
<img class="img-13" src="{{AppSubUrl}}/img/dingtalk.ico">
22+
<img class="img-13" src="{{StaticUrlPrefix}}/img/dingtalk.ico">
2323
{{else if eq .HookType "telegram"}}
24-
<img class="img-13" src="{{AppSubUrl}}/img/telegram.png">
24+
<img class="img-13" src="{{StaticUrlPrefix}}/img/telegram.png">
2525
{{else if eq .HookType "msteams"}}
26-
<img class="img-13" src="{{AppSubUrl}}/img/msteams.png">
26+
<img class="img-13" src="{{StaticUrlPrefix}}/img/msteams.png">
2727
{{end}}
2828
</div>
2929
</h4>

templates/base/footer.tmpl

+23-23
Original file line numberDiff line numberDiff line change
@@ -12,46 +12,46 @@
1212

1313
{{template "base/footer_content" .}}
1414

15-
<script src="{{AppSubUrl}}/vendor/plugins/jquery/jquery.min.js?v=3.4.1"></script>
16-
<script src="{{AppSubUrl}}/vendor/plugins/jquery-migrate/jquery-migrate.min.js?v=3.0.1"></script>
17-
<script src="{{AppSubUrl}}/vendor/plugins/jquery.areyousure/jquery.are-you-sure.js"></script>
15+
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery/jquery.min.js?v=3.4.1"></script>
16+
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery-migrate/jquery-migrate.min.js?v=3.0.1"></script>
17+
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.areyousure/jquery.are-you-sure.js"></script>
1818
{{if .RequireSimpleMDE}}
19-
<script src="{{AppSubUrl}}/vendor/plugins/simplemde/simplemde.min.js"></script>
20-
<script src="{{AppSubUrl}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script>
21-
<script src="{{AppSubUrl}}/vendor/plugins/codemirror/mode/meta.js"></script>
19+
<script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script>
20+
<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script>
21+
<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js"></script>
2222
<script>
23-
CodeMirror.modeURL = "{{AppSubUrl}}/vendor/plugins/codemirror/mode/%N/%N.js";
23+
CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js";
2424
</script>
2525
{{end}}
2626
{{if .RequireGitGraph}}
2727
<!-- graph -->
28-
<script src="{{AppSubUrl}}/vendor/plugins/gitgraph/gitgraph.js"></script>
29-
<script src="{{AppSubUrl}}/js/draw.js"></script>
28+
<script src="{{StaticUrlPrefix}}/vendor/plugins/gitgraph/gitgraph.js"></script>
29+
<script src="{{StaticUrlPrefix}}/js/draw.js"></script>
3030
{{end}}
3131

3232
<!-- Third-party libraries -->
3333
{{if .RequireHighlightJS}}
34-
<script src="{{AppSubUrl}}/vendor/plugins/highlight/highlight.pack.js"></script>
34+
<script src="{{StaticUrlPrefix}}/vendor/plugins/highlight/highlight.pack.js"></script>
3535
{{end}}
3636
{{if .RequireMinicolors}}
37-
<script src="{{AppSubUrl}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script>
37+
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script>
3838
{{end}}
3939
{{if .RequireDatetimepicker}}
40-
<script src="{{AppSubUrl}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script>
40+
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script>
4141
{{end}}
4242
{{if .RequireDropzone}}
43-
<script src="{{AppSubUrl}}/vendor/plugins/dropzone/dropzone.js"></script>
43+
<script src="{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js"></script>
4444
{{end}}
4545
{{if .RequireU2F}}
46-
<script src="{{AppSubUrl}}/vendor/plugins/u2f/index.js"></script>
46+
<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script>
4747
{{end}}
4848
{{if .EnableCaptcha}}
4949
{{if eq .CaptchaType "recaptcha"}}
5050
<script src='{{ URLJoin .RecaptchaURL "api.js"}}' async></script>
5151
{{end}}
5252
{{end}}
5353
{{if .RequireTribute}}
54-
<script src="{{AppSubUrl}}/vendor/plugins/tribute/tribute.min.js"></script>
54+
<script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js"></script>
5555
<script>
5656
var issuesTribute = new Tribute({
5757
values: [
@@ -101,7 +101,7 @@
101101
return ':' + item.original + ':';
102102
},
103103
menuItemTemplate: function (item) {
104-
return '<img class="emoji" src="{{AppSubUrl}}/vendor/plugins/emojify/images/' + item.original + '.png"/>' + item.original;
104+
return '<img class="emoji" src="{{StaticUrlPrefix}}/vendor/plugins/emojify/images/' + item.original + '.png"/>' + item.original;
105105
}
106106
}]
107107
});
@@ -115,16 +115,16 @@
115115
}
116116
</script>
117117
{{end}}
118-
<script src="{{AppSubUrl}}/vendor/plugins/emojify/emojify.min.js"></script>
119-
<script src="{{AppSubUrl}}/vendor/plugins/clipboard/clipboard.min.js"></script>
120-
<script src="{{AppSubUrl}}/vendor/plugins/vue/vue.min.js"></script>
118+
<script src="{{StaticUrlPrefix}}/vendor/plugins/emojify/emojify.min.js"></script>
119+
<script src="{{StaticUrlPrefix}}/vendor/plugins/clipboard/clipboard.min.js"></script>
120+
<script src="{{StaticUrlPrefix}}/vendor/plugins/vue/vue.min.js"></script>
121121

122122
<!-- JavaScript -->
123-
<script src="{{AppSubUrl}}/vendor/plugins/semantic/semantic.min.js"></script>
124-
<script src="{{AppSubUrl}}/js/index.js?v={{MD5 AppVer}}"></script>
123+
<script src="{{StaticUrlPrefix}}/vendor/plugins/semantic/semantic.min.js"></script>
124+
<script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script>
125125
{{if .EnableHeatmap}}
126-
<script src="{{AppSubUrl}}/vendor/plugins/moment/moment.min.js" charset="utf-8"></script>
127-
<script src="{{AppSubUrl}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.browser.js" charset="utf-8"></script>
126+
<script src="{{StaticUrlPrefix}}/vendor/plugins/moment/moment.min.js" charset="utf-8"></script>
127+
<script src="{{StaticUrlPrefix}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.browser.js" charset="utf-8"></script>
128128
<script type="text/javascript">
129129
initHeatmap('user-heatmap', '{{.HeatmapUser}}');
130130
</script>

templates/base/footer_content.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
{{end}}
1717
</div>
1818
</div>
19-
<a href="{{AppSubUrl}}/vendor/librejs.html" data-jslicense="1">JavaScript licenses</a>
19+
<a href="{{StaticUrlPrefix}}/vendor/librejs.html" data-jslicense="1">JavaScript licenses</a>
2020
{{if .EnableSwagger}}<a href="{{AppSubUrl}}/api/swagger">API</a>{{end}}
2121
<a target="_blank" rel="noopener noreferrer" href="https://gitea.io">{{.i18n.Tr "website"}}</a>
2222
{{if (or .ShowFooterVersion .PageIsAdmin)}}<span class="version">{{GoVer}}</span>{{end}}

templates/base/head.tmpl

+22-22
Original file line numberDiff line numberDiff line change
@@ -70,35 +70,35 @@
7070
THE SOFTWARE.
7171
---
7272
Licensing information for additional javascript libraries can be found at:
73-
{{AppSubUrl}}/vendor/librejs.html
73+
{{StaticUrlPrefix}}/vendor/librejs.html
7474

7575
@licend The above is the entire license notice
7676
for the JavaScript code in this page.
7777
*/`}}
7878
</script>
7979

80-
<link rel="shortcut icon" href="{{AppSubUrl}}/img/favicon.png" />
81-
<link rel="mask-icon" href="{{AppSubUrl}}/img/gitea-safari.svg" color="#609926">
82-
<link rel="preload" href="{{AppSubUrl}}/vendor/assets/font-awesome/css/font-awesome.min.css" as="style" onload="this.rel='stylesheet'">
83-
<noscript><link rel="stylesheet" href="{{AppSubUrl}}/vendor/assets/font-awesome/css/font-awesome.min.css"></noscript>
84-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/assets/octicons/octicons.min.css">
80+
<link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png" />
81+
<link rel="mask-icon" href="{{StaticUrlPrefix}}/img/gitea-safari.svg" color="#609926">
82+
<link rel="preload" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css" as="style" onload="this.rel='stylesheet'">
83+
<noscript><link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"></noscript>
84+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/octicons/octicons.min.css">
8585

8686
{{if .RequireSimpleMDE}}
87-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/simplemde/simplemde.min.css">
87+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css">
8888
{{end}}
8989

9090
{{if .RequireGitGraph}}
9191
<!-- graph -->
92-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/gitgraph/gitgraph.css">
92+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/gitgraph/gitgraph.css">
9393
{{end}}
9494

9595
{{if .RequireTribute}}
96-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/tribute/tribute.css">
96+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css">
9797
{{end}}
9898

9999
<!-- Stylesheet -->
100-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/semantic/semantic.min.css">
101-
<link rel="stylesheet" href="{{AppSubUrl}}/css/index.css?v={{MD5 AppVer}}">
100+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/semantic/semantic.min.css">
101+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}">
102102
<noscript>
103103
<style>
104104
.dropdown:hover > .menu { display: block; }
@@ -107,25 +107,25 @@
107107
</noscript>
108108

109109
{{if .RequireHighlightJS}}
110-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/highlight/github.css">
110+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/highlight/github.css">
111111
{{end}}
112112
{{if .RequireMinicolors}}
113-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css">
113+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css">
114114
{{end}}
115115
{{if .RequireDatetimepicker}}
116-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.css">
116+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.css">
117117
{{end}}
118118
{{if .RequireDropzone}}
119-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/dropzone/dropzone.css">
119+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.css">
120120
{{end}}
121121
{{if .EnableHeatmap}}
122-
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.css">
122+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.css">
123123
{{end}}
124124
<style class="list-search-style"></style>
125125

126-
<script src="{{AppSubUrl}}/vendor/plugins/promise-polyfill/polyfill.min.js"></script>
127-
<script src="{{AppSubUrl}}/vendor/plugins/cssrelpreload/loadCSS.min.js"></script>
128-
<script src="{{AppSubUrl}}/vendor/plugins/cssrelpreload/cssrelpreload.min.js"></script>
126+
<script src="{{StaticUrlPrefix}}/vendor/plugins/promise-polyfill/polyfill.min.js"></script>
127+
<script src="{{StaticUrlPrefix}}/vendor/plugins/cssrelpreload/loadCSS.min.js"></script>
128+
<script src="{{StaticUrlPrefix}}/vendor/plugins/cssrelpreload/cssrelpreload.min.js"></script>
129129
{{if .PageIsUserProfile}}
130130
<meta property="og:title" content="{{.Owner.Name}}" />
131131
<meta property="og:type" content="profile" />
@@ -144,16 +144,16 @@
144144
{{else}}
145145
<meta property="og:title" content="{{AppName}}">
146146
<meta property="og:type" content="website" />
147-
<meta property="og:image" content="{{AppUrl}}img/gitea-lg.png" />
147+
<meta property="og:image" content="{{StaticUrlPrefix}}img/gitea-lg.png" />
148148
<meta property="og:url" content="{{AppUrl}}" />
149149
<meta property="og:description" content="{{MetaDescription}}">
150150
{{end}}
151151
{{if .IsSigned }}
152152
{{ if ne .SignedUser.Theme "gitea" }}
153-
<link rel="stylesheet" href="{{AppSubUrl}}/css/theme-{{.SignedUser.Theme}}.css">
153+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{.SignedUser.Theme}}.css">
154154
{{end}}
155155
{{else if ne DefaultTheme "gitea"}}
156-
<link rel="stylesheet" href="{{AppSubUrl}}/css/theme-{{DefaultTheme}}.css">
156+
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css">
157157
{{end}}
158158
{{template "custom/header" .}}
159159
</head>

templates/base/head_navbar.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="ui container" id="navbar">
22
<div class="item brand" style="justify-content: space-between;">
33
<a href="{{AppSubUrl}}/">
4-
<img class="ui mini image" src="{{AppSubUrl}}/img/gitea-sm.png">
4+
<img class="ui mini image" src="{{StaticUrlPrefix}}/img/gitea-sm.png">
55
</a>
66
<div class="ui basic icon button mobile-only" id="navbar-expand-toggle">
77
<i class="sidebar icon"></i>

templates/home.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div class="ui stackable middle very relaxed page grid">
44
<div class="sixteen wide center aligned centered column">
55
<div>
6-
<img class="logo" src="{{AppSubUrl}}/img/gitea-lg.png" />
6+
<img class="logo" src="{{StaticUrlPrefix}}/img/gitea-lg.png" />
77
</div>
88
<div class="hero">
99
<h1 class="ui icon header title">

0 commit comments

Comments
 (0)