Compare commits
No commits in common. 'main' and 'gh-pages' have entirely different histories.
54 changed files with 7834 additions and 648 deletions
@ -1,9 +0,0 @@ |
|||||||
site |
|
||||||
*.secret |
|
||||||
data/ |
|
||||||
custom/conf/app.ini |
|
||||||
custom/gitea.db |
|
||||||
custom/avatars |
|
||||||
custom/log/ |
|
||||||
custom/public/ |
|
||||||
custom/queues/ |
|
@ -1,3 +0,0 @@ |
|||||||
[submodule "mkdocs-material"] |
|
||||||
path = mkdocs-material |
|
||||||
url = https://git.charlesreid1.com/charlesreid1/mkdocs-material.git |
|
@ -1,69 +0,0 @@ |
|||||||
# d-gitea |
|
||||||
|
|
||||||
This is the gitea docker container used to run gitea on charlesreid1.com. |
|
||||||
|
|
||||||
You should not run this container by itself (see |
|
||||||
[pod-charlesreid1](https://git.charlesreid1.com/docker/pod-charlesreid1.git)). |
|
||||||
|
|
||||||
See the documentation here: <https://pages.charlesreid1.com/d-gitea/> |
|
||||||
|
|
||||||
## TODO |
|
||||||
|
|
||||||
Organize the documentation better, there's a lot going on |
|
||||||
|
|
||||||
* Setup |
|
||||||
* Repo organization |
|
||||||
* Jinja/ansible |
|
||||||
* Gitea files |
|
||||||
* New instance |
|
||||||
* Restoring instance |
|
||||||
* Backing up instance |
|
||||||
|
|
||||||
## Quick Start |
|
||||||
|
|
||||||
### Before you begin |
|
||||||
|
|
||||||
Check `docker-compose.yml` and ensure the bind mounting of folders is |
|
||||||
set up to match what you want. Currently: |
|
||||||
|
|
||||||
* `d-gitea/custom/` directory maps to `/data/gitea` in the container |
|
||||||
* `d-gitea/data/` directory maps to `/app/gitea/data` |
|
||||||
|
|
||||||
To change this, modify the `docker-compose.yml` file in this repo |
|
||||||
or the `docker-compose.yml.j2` file in the pod-charlesreid1 repo. |
|
||||||
|
|
||||||
### Create app.ini |
|
||||||
|
|
||||||
The `app.ini` file is not stored directly in this repo, only a template file |
|
||||||
`app.ini.j2` is stored. You need to create an `app.ini` file from the template |
|
||||||
before beginning. |
|
||||||
|
|
||||||
To create an `app.ini` file from the template, populate the secret files at: |
|
||||||
|
|
||||||
* `internal_token.secret` |
|
||||||
* `secret_key.secret` |
|
||||||
|
|
||||||
Then run the `make_app_ini.sh` script: |
|
||||||
|
|
||||||
``` |
|
||||||
./make_app_ini.sh |
|
||||||
``` |
|
||||||
|
|
||||||
This will create an `app.ini` file from the template at `custom/conf/app.ini.j2`, |
|
||||||
and will put the new file in `custom/conf/app.ini`. |
|
||||||
|
|
||||||
### Running |
|
||||||
|
|
||||||
Start the container with `docker-compose up` if running standalone, or by starting |
|
||||||
the docker pod if running in a pod. |
|
||||||
|
|
||||||
## Links |
|
||||||
|
|
||||||
[documentation: d-gitea container](https://pages.charlesreid1.com/d-gitea/) |
|
||||||
|
|
||||||
[source code on git.charlesreid1.com: docker/d-gitea](https://git.charlesreid1.com/docker/d-gitea) |
|
||||||
|
|
||||||
[source code on github.com: charlesreid1-docker/d-gitea](https://github.com/charlesreid1-docker/d-gitea) (you are here) |
|
||||||
|
|
||||||
[gitea documentation - running gitea with docker](https://docs.gitea.io/en-us/install-with-docker/) |
|
||||||
|
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,13 @@ |
|||||||
|
/*! |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not |
||||||
|
* use this file except in compliance with the License. You may obtain a copy |
||||||
|
* of the License at: |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE |
||||||
|
* DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. |
||||||
|
* SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND |
||||||
|
* LIMITATIONS UNDER THE LICENSE. |
||||||
|
*/@font-face{font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 521 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||||||
|
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,i,n;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,t,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new i;function l(){var e,r=c.limit-c.cursor;c.cursor>=n&&(e=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var r,i=c.cursor;return function(){var r,i=c.cursor+3;if(n=c.limit,0<=i&&i<=c.limit){for(e=i;;){if(r=c.cursor,c.in_grouping(d,97,248)){c.cursor=r;break}if(c.cursor=r,r>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(n=c.cursor)<e&&(n=e)}}(),c.limit_backward=i,c.cursor=c.limit,function(){var e,r;if(c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,t=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-t,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,t=c.slice_to(t),c.limit_backward=r,c.eq_v_b(t)&&c.slice_del()):c.limit_backward=r),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||||||
|
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.jp=function(){this.pipeline.reset(),this.pipeline.add(e.jp.stopWordFilter,e.jp.stemmer),r?this.tokenizer=e.jp.tokenizer:(e.tokenizer&&(e.tokenizer=e.jp.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.jp.tokenizer))};var t=new e.TinySegmenter;e.jp.tokenizer=function(n){if(!arguments.length||null==n||null==n)return[];if(Array.isArray(n))return n.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(var i=n.toString().toLowerCase().replace(/^\s+/,""),o=i.length-1;o>=0;o--)if(/\S/.test(i.charAt(o))){i=i.substring(0,o+1);break}return t.segment(i).filter(function(e){return!!e}).map(function(t){return r?new e.Token(t):t})},e.jp.stemmer=function(e){return e},e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.jp.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.jp.stopWordFilter=function(t){if(-1===e.jp.stopWordFilter.stopWords.indexOf(r?t.toString():t))return t},e.jp.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}}); |
@ -0,0 +1 @@ |
|||||||
|
!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var i=Array.prototype.slice.call(arguments),t=i.join("-"),r="",n=[],s=[],p=0;p<i.length;++p)"en"==i[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[i[p]].wordCharacters,n.unshift(e[i[p]].stopWordFilter),n.push(e[i[p]].stemmer),s.push(e[i[p]].stemmer));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+t),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}}); |
@ -0,0 +1 @@ |
|||||||
|
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var e,i,t=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],o=[new r("dt",-1,-1),new r("vt",-1,-1)],s=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],a=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],m=[119,125,149,1],l=new n;this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var r,n,u,d,c=l.cursor;return function(){var r,n=l.cursor+3;if(i=l.limit,0<=n||n<=l.limit){for(e=n;;){if(r=l.cursor,l.in_grouping(a,97,248)){l.cursor=r;break}if(r>=l.limit)return;l.cursor=r+1}for(;!l.out_grouping(a,97,248);){if(l.cursor>=l.limit)return;l.cursor++}(i=l.cursor)<e&&(i=e)}}(),l.limit_backward=c,l.cursor=l.limit,function(){var e,r,n;if(l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,e=l.find_among_b(t,29),l.limit_backward=r,e))switch(l.bra=l.cursor,e){case 1:l.slice_del();break;case 2:n=l.limit-l.cursor,l.in_grouping_b(m,98,122)?l.slice_del():(l.cursor=l.limit-n,l.eq_s_b(1,"k")&&l.out_grouping_b(a,97,248)&&l.slice_del());break;case 3:l.slice_from("er")}}(),l.cursor=l.limit,n=l.limit-l.cursor,l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,l.find_among_b(o,2)?(l.bra=l.cursor,l.limit_backward=r,l.cursor=l.limit-n,l.cursor>l.limit_backward&&(l.cursor--,l.bra=l.cursor,l.slice_del())):l.limit_backward=r),l.cursor=l.limit,l.cursor>=i&&(d=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,(u=l.find_among_b(s,11))?(l.bra=l.cursor,l.limit_backward=d,1==u&&l.slice_del()):l.limit_backward=d),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||||||
|
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){if(o>=(_=t[s]).s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=(m=t[a]).s_size-1-l;_>=0;_--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-m.s[_])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var m;if(o>=(m=t[s]).s_size){if(this.cursor=n-m.s_size,!m.method)return m.result;var b=m.method();if(this.cursor=n-m.s_size,b)return m.result}if((s=m.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); |
@ -0,0 +1 @@ |
|||||||
|
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,t;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){var e,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new n;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var r,n=m.cursor;return function(){var r,n=m.cursor+3;if(t=m.limit,0<=n||n<=m.limit){for(e=n;;){if(r=m.cursor,m.in_grouping(o,97,246)){m.cursor=r;break}if(m.cursor=r,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)<e&&(t=e)}}(),m.limit_backward=n,m.cursor=m.limit,function(){var e,r=m.limit_backward;if(m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,r=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=r),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,106 +0,0 @@ |
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||||
;; My Amazing Gitea Config File |
|
||||||
;; |
|
||||||
;; charles reid |
|
||||||
;; march 2017 |
|
||||||
;; https://github.com/go-gitea/gitea/blob/master/conf/app.ini |
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||||
|
|
||||||
APP_NAME = {{ gitea_app_name }} |
|
||||||
RUN_USER = git |
|
||||||
RUN_MODE = prod |
|
||||||
|
|
||||||
[ui] |
|
||||||
DEFAULT_THEME = arc-green |
|
||||||
|
|
||||||
[database] |
|
||||||
DB_TYPE = sqlite3 |
|
||||||
HOST = |
|
||||||
NAME = |
|
||||||
USER = |
|
||||||
PASSWD = |
|
||||||
SSL_MODE = disable |
|
||||||
PATH = /data/gitea/gitea.db |
|
||||||
|
|
||||||
[repository] |
|
||||||
ROOT = /data/git/repositories |
|
||||||
PREFERRED_LICENSES = MIT License |
|
||||||
|
|
||||||
; This gets rid of the HTTP option to check out repos... |
|
||||||
DISABLE_HTTP_GIT = false |
|
||||||
|
|
||||||
[server] |
|
||||||
PROTOCOL = http |
|
||||||
DOMAIN = git.{{ server_name_default }} |
|
||||||
#CERT_FILE = /www/gitea/certs/cert.pem |
|
||||||
#KEY_FILE = /www/gitea/certs/key.pem |
|
||||||
SSH_DOMAIN = git.{{ server_name_default }} |
|
||||||
HTTP_PORT = 3000 |
|
||||||
HTTP_ADDR = 0.0.0.0 |
|
||||||
ROOT_URL = https://git.{{ server_name_default }} |
|
||||||
;ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ |
|
||||||
DISABLE_SSH = false |
|
||||||
; port to display in clone url: |
|
||||||
SSH_PORT = 222 |
|
||||||
; port for built-in ssh server to listen on: |
|
||||||
SSH_LISTEN_PORT = 22 |
|
||||||
OFFLINE_MODE = false |
|
||||||
|
|
||||||
; Upper level of template and static file path |
|
||||||
; default is the path where Gitea is executed |
|
||||||
;;;;STATIC_ROOT_PATH = /www/gitea/static |
|
||||||
[mailer] |
|
||||||
ENABLED = false |
|
||||||
|
|
||||||
[service] |
|
||||||
REGISTER_EMAIL_CONFIRM = false |
|
||||||
ENABLE_NOTIFY_MAIL = false |
|
||||||
DISABLE_REGISTRATION = true |
|
||||||
ENABLE_CAPTCHA = false |
|
||||||
REQUIRE_SIGNIN_VIEW = false |
|
||||||
|
|
||||||
[picture] |
|
||||||
DISABLE_GRAVATAR = true |
|
||||||
ENABLE_FEDERATED_AVATAR = false |
|
||||||
AVATAR_UPLOAD_PATH = /data/gitea/avatars |
|
||||||
|
|
||||||
[session] |
|
||||||
PROVIDER = file |
|
||||||
|
|
||||||
[log] |
|
||||||
MODE = file |
|
||||||
; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace" |
|
||||||
LEVEL = Info |
|
||||||
ROOT_PATH = /data/gitea/log |
|
||||||
|
|
||||||
; For "file" mode only |
|
||||||
[log.file] |
|
||||||
LEVEL = |
|
||||||
; This enables automated log rotate(switch of following options), default is true |
|
||||||
LOG_ROTATE = true |
|
||||||
; Max line number of single file, default is 1000000 |
|
||||||
MAX_LINES = 1000000 |
|
||||||
; Max size shift of single file, default is 28 means 1 << 28, 256MB |
|
||||||
MAX_SIZE_SHIFT = 28 |
|
||||||
; Segment log daily, default is true |
|
||||||
DAILY_ROTATE = true |
|
||||||
; Expired days of log file(delete after max days), default is 7 |
|
||||||
MAX_DAYS = 7 |
|
||||||
|
|
||||||
[cron.archive_cleanup] |
|
||||||
ENABLED = false |
|
||||||
|
|
||||||
[security] |
|
||||||
INSTALL_LOCK = true |
|
||||||
SECRET_KEY = {{ gitea_secret_key }} |
|
||||||
MIN_PASSWORD_LENGTH = 6 |
|
||||||
INTERNAL_TOKEN = {{ gitea_internal_token }} |
|
||||||
|
|
||||||
[other] |
|
||||||
SHOW_FOOTER_BRANDING = false |
|
||||||
; Show version information about Gitea and Go in the footer |
|
||||||
SHOW_FOOTER_VERSION = false |
|
||||||
; Show time of template execution in the footer |
|
||||||
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false |
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@ |
|||||||
<h2>hallo werld dis is de geeeeeet tea</h2> |
|
Before Width: | Height: | Size: 979 KiB |
@ -1,3 +0,0 @@ |
|||||||
<!-- |
|
||||||
<a class="item" href="{{AppSubUrl}}/hello.html">Hello World</a> |
|
||||||
--> |
|
@ -1,3 +0,0 @@ |
|||||||
{{template "base/head" .}} |
|
||||||
<meta http-equiv="Refresh" content="0; url=/explore/repos" /> |
|
||||||
{{template "base/footer" .}} |
|
@ -1,25 +0,0 @@ |
|||||||
version: "2" |
|
||||||
|
|
||||||
networks: |
|
||||||
gitea: |
|
||||||
external: false |
|
||||||
|
|
||||||
services: |
|
||||||
server: |
|
||||||
image: gitea/gitea:latest |
|
||||||
environment: |
|
||||||
- USER_UID=1000 |
|
||||||
- USER_GID=1000 |
|
||||||
restart: always |
|
||||||
networks: |
|
||||||
- gitea |
|
||||||
volumes: |
|
||||||
- "stormy_gitea_data:/data" |
|
||||||
- "./custom:/data/gitea" |
|
||||||
- "./data:/app/gitea/data" |
|
||||||
ports: |
|
||||||
- "3000:3000" |
|
||||||
- "222:22" |
|
||||||
|
|
||||||
volumes: |
|
||||||
stormy_gitea_data: |
|
@ -1,392 +0,0 @@ |
|||||||
# d-gitea |
|
||||||
|
|
||||||
Docker files for running gitea |
|
||||||
|
|
||||||
[documentation: d-gitea container](https://pages.charlesreid1.com/d-gitea/) (you are here) |
|
||||||
|
|
||||||
[source code on git.charlesreid1.com: d-gitea](https://git.charlesreid1.com/docker/d-gitea) |
|
||||||
|
|
||||||
[source code on github.com: charlesreid1-docker/d-gitea](https://github.com/charlesreid1-docker/d-gitea) |
|
||||||
|
|
||||||
[gitea documentation - running gitea with docker](https://docs.gitea.io/en-us/install-with-docker/) |
|
||||||
|
|
||||||
|
|
||||||
## Table of Contents |
|
||||||
|
|
||||||
* secrets |
|
||||||
* app.ini file |
|
||||||
* jinja templates |
|
||||||
* container directory structure |
|
||||||
* container data volume |
|
||||||
* git repositories |
|
||||||
* files mounted into container |
|
||||||
* using the `docker-compose.yml` file |
|
||||||
* notes on custom files |
|
||||||
* configuring gitea with `app.ini` |
|
||||||
* customizing gitea with custom files |
|
||||||
* backing up and restoring gitea |
|
||||||
|
|
||||||
## Secrets |
|
||||||
|
|
||||||
There are two secrets that must be set in the Gitea configuration file: |
|
||||||
the internal token and the secret key. |
|
||||||
|
|
||||||
The two secret values can be placed in two `*.secret` files: |
|
||||||
|
|
||||||
```plain |
|
||||||
internal_token.secret |
|
||||||
secret_key.secret |
|
||||||
``` |
|
||||||
|
|
||||||
The contents should be the value of the secret variable |
|
||||||
you wish to use in `custom/conf/app.ini`. |
|
||||||
|
|
||||||
These files are not tracked by git. |
|
||||||
|
|
||||||
## Jinja Templates |
|
||||||
|
|
||||||
The `app.ini` script is not stored directly in this repo, since it contains |
|
||||||
sensitive information. Instead, we store a Jinja template, `app.ini.j2`, which |
|
||||||
is rendered into a real `app.ini` file after variable substitutions, etc. |
|
||||||
|
|
||||||
Normally, we use this repo with Ansible, so we don't deal with the Jinja template |
|
||||||
ourselves. |
|
||||||
|
|
||||||
If you want to render the Jinja template into a real config file without using |
|
||||||
Ansible, use the `make_app_ini.sh` script: |
|
||||||
|
|
||||||
``` |
|
||||||
$ ./make_app_ini.sh |
|
||||||
``` |
|
||||||
|
|
||||||
(This requires the two secret files mentioned above to be present.) |
|
||||||
|
|
||||||
## Container Directory Structure |
|
||||||
|
|
||||||
The `custom/` dir in this folder maps to the `/data/gitea` volume |
|
||||||
inside the gitea container. |
|
||||||
|
|
||||||
For example, the `app.ini` configuration file will be mapped into |
|
||||||
the container at `/data/gitea/conf/app.ini`. |
|
||||||
|
|
||||||
## Container Data Volume |
|
||||||
|
|
||||||
This container expects to use a docker data volume |
|
||||||
to store the gitea custom configuration |
|
||||||
and the entire contents of all repositories. |
|
||||||
|
|
||||||
On the host machine, you can access named data volumes at |
|
||||||
`/var/lib/docker/volumes/gitea_gitea/_data` |
|
||||||
or copy files in and out of the container using `docker cp`. |
|
||||||
|
|
||||||
## Git Repositories |
|
||||||
|
|
||||||
### directory structure before adding repos to gitea |
|
||||||
|
|
||||||
Directory structure for host-mounted gitea directory |
|
||||||
before any repositories have been added to gitea: |
|
||||||
|
|
||||||
```plain |
|
||||||
gitea |
|
||||||
├── git |
|
||||||
│ └── repositories |
|
||||||
├── gitea |
|
||||||
│ ├── conf |
|
||||||
│ │ └── app.ini |
|
||||||
│ ├── gitea.db |
|
||||||
│ ├── indexers |
|
||||||
│ │ └── issues.bleve |
|
||||||
│ │ ├── index_meta.json |
|
||||||
│ │ └── store |
|
||||||
│ ├── lfs |
|
||||||
│ ├── log |
|
||||||
│ │ ├── gitea.log |
|
||||||
│ │ ├── http.log |
|
||||||
│ │ └── xorm.log |
|
||||||
│ └── sessions |
|
||||||
│ └── oauth2 |
|
||||||
└── ssh [error opening dir] |
|
||||||
|
|
||||||
11 directories, 7 files |
|
||||||
``` |
|
||||||
|
|
||||||
### directory structure after adding repos to gitea |
|
||||||
|
|
||||||
After adding a repository: |
|
||||||
|
|
||||||
```plain |
|
||||||
gitea |
|
||||||
├── git |
|
||||||
│ └── repositories |
|
||||||
│ └─e charlesreid1 |
|
||||||
│ └── oieruoweiur.git |
|
||||||
│ ├── branches |
|
||||||
│ ├── config |
|
||||||
│ ├── description |
|
||||||
│ ├── HEAD |
|
||||||
│ ├── hooks |
|
||||||
│ │ ├── applypatch-msg.sample |
|
||||||
│ │ ├── commit-msg.sample |
|
||||||
│ │ ├── post-receive |
|
||||||
│ │ ├── post-receive.d |
|
||||||
│ │ │ └── gitea |
|
||||||
│ │ ├── post-update.sample |
|
||||||
│ │ ├── pre-applypatch.sample |
|
||||||
│ │ ├── pre-commit.sample |
|
||||||
│ │ ├── prepare-commit-msg.sample |
|
||||||
│ │ ├── pre-push.sample |
|
||||||
│ │ ├── pre-rebase.sample |
|
||||||
│ │ ├── pre-receive |
|
||||||
│ │ ├── pre-receive.d |
|
||||||
│ │ │ └── gitea |
|
||||||
│ │ ├── pre-receive.sample |
|
||||||
│ │ ├── update |
|
||||||
│ │ ├── update.d |
|
||||||
│ │ │ └── gitea |
|
||||||
│ │ └── update.sample |
|
||||||
│ ├── info |
|
||||||
│ │ ├── exclude |
|
||||||
│ │ └── refs |
|
||||||
│ ├── objects |
|
||||||
│ │ ├── info |
|
||||||
│ │ │ └── packs |
|
||||||
│ │ └── pack |
|
||||||
│ └── refs |
|
||||||
│ ├── heads |
|
||||||
│ └── tags |
|
||||||
├── gitea |
|
||||||
│ ├── conf |
|
||||||
│ │ └── app.ini |
|
||||||
│ ├── gitea.db |
|
||||||
│ ├── indexers |
|
||||||
│ │ └── issues.bleve |
|
||||||
│ │ ├── index_meta.json |
|
||||||
│ │ └── store |
|
||||||
│ ├── lfs |
|
||||||
│ ├── log |
|
||||||
│ │ ├── gitea.log |
|
||||||
│ │ ├── http.log |
|
||||||
│ │ └── xorm.log |
|
||||||
│ └── sessions |
|
||||||
│ └── oauth2 |
|
||||||
└── ssh [error opening dir] |
|
||||||
|
|
||||||
25 directories, 29 files |
|
||||||
``` |
|
||||||
|
|
||||||
### Backing up git repositories |
|
||||||
|
|
||||||
Backing up git repositories associated with the gitea instance |
|
||||||
is a separate step from gitea dump (see above). |
|
||||||
|
|
||||||
Before backing up repositories, perform a gitea dump without the |
|
||||||
repositories included. |
|
||||||
|
|
||||||
All git repositories are stored in `/data/git/repositories/`. They are stored |
|
||||||
in the subdirectory `org-name/repo-name`. |
|
||||||
|
|
||||||
To back up all repositories, copy the folder `/data/git/repositories` from the |
|
||||||
gitea container. |
|
||||||
|
|
||||||
To restore all repositories, copy the folder `/data/git/repositories` into the |
|
||||||
gitea container. |
|
||||||
|
|
||||||
## Files Mounted Into Container |
|
||||||
|
|
||||||
The `d-gitea/custom/` directory is mounted into the container at `/data/gitea`. |
|
||||||
|
|
||||||
The `d-gitea/data/` directory is mounted into the container at `/app/gitea/data`. |
|
||||||
|
|
||||||
To make the custom configuration file, follow the instructions mentioned in |
|
||||||
the "Secrets" section. |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Using the `docker-compose.yml` File |
|
||||||
|
|
||||||
### Standalone |
|
||||||
|
|
||||||
This directory contains a docker-compose file that can be used to run |
|
||||||
a gitea server on port 3000. |
|
||||||
|
|
||||||
To get the gitea container up and running, |
|
||||||
|
|
||||||
```plain |
|
||||||
$ docker-compose up |
|
||||||
``` |
|
||||||
|
|
||||||
Now visit `<server-ip>:3000`. You will be presented with a configuration page. |
|
||||||
Set up the gitea instance. This will automatically populate the directory |
|
||||||
structure. See below for more info. |
|
||||||
|
|
||||||
Use this as a project seed to add gitea containers to other docker pods. |
|
||||||
|
|
||||||
### pod-charlesreid1 |
|
||||||
|
|
||||||
The main use of this repo is as a submodule in |
|
||||||
[pod-charlesreid1](https://github.com/charlesreid1-docker/pod-charlesreid1.git). |
|
||||||
|
|
||||||
This pod is set up by Ansible, which integrates well with the Jinja template approach. |
|
||||||
|
|
||||||
## Notes on Custom Files |
|
||||||
|
|
||||||
The settings in the `app.ini` file are documented [here](https://docs.gitea.io/en-us/config-cheat-sheet/). |
|
||||||
|
|
||||||
An extensive sample `app.ini` file is [here](https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample) (WARNING: this broke gitea). |
|
||||||
|
|
||||||
The existing gitea templates are in the gitea repo under [templates/](https://github.com/go-gitea/gitea/tree/master/templates). |
|
||||||
These can be modified as needed and placed in the `custom/templates/` directory. |
|
||||||
|
|
||||||
### custom templates directory |
|
||||||
|
|
||||||
The templates directory `d-gitea/custom/templates` contains template files. |
|
||||||
These are gitea templates that control how particular kinds of gitea pages look. |
|
||||||
For example, a template can be used to modify how the user page looks, or modify |
|
||||||
the layout of repository main pages. |
|
||||||
|
|
||||||
In the container, this will be at `/data/gitea/templates/`. |
|
||||||
|
|
||||||
### custom gitea pages |
|
||||||
|
|
||||||
The custom pages directory `d-gitea/custom/pages` contains one-off pages or static |
|
||||||
content that is hosted by the gitea instance, but not necessarily incorporated into |
|
||||||
the gitea site. |
|
||||||
|
|
||||||
For example, a custom "about me" page could be added as a static .html file, |
|
||||||
and it would be hosted at `git.charlesreid1.com/about`. |
|
||||||
|
|
||||||
In the container, this will be at `/data/gitea/pages/`. |
|
||||||
|
|
||||||
|
|
||||||
## Backing up and restoring gitea |
|
||||||
|
|
||||||
Running `gitea dump` command will dump files required for restoring an existing |
|
||||||
Gitea instance. Unfortunately, gitea's backup and restore functionality is an |
|
||||||
absolute dumpster fire. |
|
||||||
|
|
||||||
We do our best to walk through the process, but here is a summary: |
|
||||||
* On the old system: |
|
||||||
* Create a backup file `gitea-dump.zip` using the very specific `gitea dump` incantation that works |
|
||||||
* Move the backup file out of the gitea container |
|
||||||
* On the new system: |
|
||||||
* Unzip the backup file `gitea-dump.zip` |
|
||||||
* Put appropriate files in appropriate location |
|
||||||
* Use the table below to determine where in the repo the gitea dump files should go, |
|
||||||
and where they will be available inside the gitea container |
|
||||||
|
|
||||||
### Creating a Backup |
|
||||||
|
|
||||||
To create a gitea dump, connect to the docker container and get a bash shell as the user |
|
||||||
`git` via the docker exec command: |
|
||||||
|
|
||||||
``` |
|
||||||
# connect to gitea container |
|
||||||
docker exec -it --user git name_of_gitea_container /bin/bash |
|
||||||
``` |
|
||||||
|
|
||||||
This will give you a bash shell as the user `git`. Now create a gitea dump file |
|
||||||
(the gitea dump command requires you to be in `/app/gitea`, this assumes that the |
|
||||||
gitea executable is at the default location of `/app/gitea/gitea`): |
|
||||||
|
|
||||||
``` |
|
||||||
# necessary |
|
||||||
cd /app/gitea |
|
||||||
# create gitea dump |
|
||||||
/app/gitea/gitea dump --file gitea-dump.zip --skip-repository |
|
||||||
``` |
|
||||||
|
|
||||||
**IMPORTANT: The `--skip-repositories` flag means we are making the gitea dump |
|
||||||
way, way, way smaller, but it also means we need to back up and restore the |
|
||||||
repositories folder ourselves! (See below for instructions.)** |
|
||||||
|
|
||||||
Now copy the file out of the container, then remove it from the container: |
|
||||||
|
|
||||||
``` |
|
||||||
# copy gitea dump out of container |
|
||||||
docker cp name_of_gitea_container:/app/gitea/gitea-dump.zip . |
|
||||||
|
|
||||||
# remove gitea dump |
|
||||||
docker exec -it name_of_gitea_container rm /app/gitea/gitea-dump.zip |
|
||||||
``` |
|
||||||
|
|
||||||
### Contents of Dump File |
|
||||||
|
|
||||||
When the gitea dump file is unzipped, it will create the following files: |
|
||||||
|
|
||||||
* `app.ini` |
|
||||||
* `custom/` directory |
|
||||||
* `log/` directory (useless duplicate, already contained in `custom/` dir) |
|
||||||
* `data/` directory |
|
||||||
|
|
||||||
These files should map to the following locations in the docker container |
|
||||||
running the live gitea instance: |
|
||||||
|
|
||||||
``` |
|
||||||
gitea dump file: gitea live instance: |
|
||||||
---------------- -------------------- |
|
||||||
app.ini /data/gitea/conf/app.ini |
|
||||||
custom/ /data/gitea/ |
|
||||||
log/ (useless duplicate of custom/log/) |
|
||||||
data /app/gitea/data |
|
||||||
``` |
|
||||||
|
|
||||||
### Restoring a Backup |
|
||||||
|
|
||||||
To restore a backup, copy the following files from the gitea dump |
|
||||||
to the following locations inside this repository: |
|
||||||
|
|
||||||
``` |
|
||||||
gitea dump file: d-gitea repo location: |
|
||||||
---------------- ---------------------- |
|
||||||
app.ini d-gitea/custom/conf/app.ini |
|
||||||
custom/* d-gitea/custom/* |
|
||||||
data d-gitea/data |
|
||||||
``` |
|
||||||
|
|
||||||
(If you're running pod-charlesreid1, put these files in the |
|
||||||
specified location in the `d-gitea` submodule.) |
|
||||||
|
|
||||||
### Restoring repositories directory |
|
||||||
|
|
||||||
Note that when we created the gitea dump, we excluded the repositories themselves. |
|
||||||
This is because these will greatly inflate the size of our gitea dump and will make |
|
||||||
it much more difficult to store our backup files. |
|
||||||
|
|
||||||
Repository contents can be backed up separately as follows: |
|
||||||
|
|
||||||
* Log in to the old server |
|
||||||
* Back up the `/data/git/repositories` directory (copy and compress) |
|
||||||
* Copy the backup to the new server |
|
||||||
* Log in to the new server |
|
||||||
* Mount the `/data/git/repositories` folder |
|
||||||
|
|
||||||
Optionally, if you want to keep the repositories folder in its own location, |
|
||||||
modify `docker-compose.yml` to add the following line to the `gitea` container's |
|
||||||
`volumes` configuration: |
|
||||||
|
|
||||||
``` |
|
||||||
services: |
|
||||||
server: |
|
||||||
image: gitea/gitea:latest |
|
||||||
|
|
||||||
... |
|
||||||
|
|
||||||
volumes: |
|
||||||
- "/path/to/repositories:/data/git/repositories" |
|
||||||
|
|
||||||
... |
|
||||||
``` |
|
||||||
|
|
||||||
This should make it easier to manage, back up, and restore the repositories folder. |
|
||||||
|
|
||||||
### Database backups |
|
||||||
|
|
||||||
We opt for the SQLite backend for gitea, which means the database |
|
||||||
is kept in a flat file on disk called `/data/gitea/gitea.db`. |
|
||||||
|
|
||||||
The location of this file and the format of the database are specified |
|
||||||
in the config file in `d-gitea/custom/conf/app.ini`. |
|
||||||
|
|
||||||
This file should not be edited, instead change the Jinja template |
|
||||||
`d-gitea/custom/conf/app.ini.j2` and remake `app.ini` from the template. |
|
||||||
|
|
@ -0,0 +1,777 @@ |
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="en" class="no-js"> |
||||||
|
<head> |
||||||
|
|
||||||
|
<meta charset="utf-8"> |
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"> |
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||||
|
|
||||||
|
|
||||||
|
<link rel="canonical" href="https://pages.charlesreid1.com/d-gitea/"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="lang:clipboard.copy" content="Copy to clipboard"> |
||||||
|
|
||||||
|
<meta name="lang:clipboard.copied" content="Copied to clipboard"> |
||||||
|
|
||||||
|
<meta name="lang:search.language" content="en"> |
||||||
|
|
||||||
|
<meta name="lang:search.pipeline.stopwords" content="True"> |
||||||
|
|
||||||
|
<meta name="lang:search.pipeline.trimmer" content="True"> |
||||||
|
|
||||||
|
<meta name="lang:search.result.none" content="No matching documents"> |
||||||
|
|
||||||
|
<meta name="lang:search.result.one" content="1 matching document"> |
||||||
|
|
||||||
|
<meta name="lang:search.result.other" content="# matching documents"> |
||||||
|
|
||||||
|
<meta name="lang:search.tokenizer" content="[\s\-]+"> |
||||||
|
|
||||||
|
<link rel="shortcut icon" href="."> |
||||||
|
<meta name="generator" content="mkdocs-1.0, mkdocs-material-3.0.3"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<title>d-gitea</title> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="assets/stylesheets/application.451f80e5.css"> |
||||||
|
|
||||||
|
<link rel="stylesheet" href="assets/stylesheets/application-palette.22915126.css"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#7cb342"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="assets/javascripts/modernizr.1aa3b519.js"></script> |
||||||
|
|
||||||
|
|
||||||
|
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin> |
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono"> |
||||||
|
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style> |
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="assets/fonts/material-icons.css"> |
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/custom.css"> |
||||||
|
|
||||||
|
|
||||||
|
</head> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<body dir="ltr" data-md-color-primary="light-green" data-md-color-accent="light-green"> |
||||||
|
|
||||||
|
<svg class="md-svg"> |
||||||
|
<defs> |
||||||
|
|
||||||
|
|
||||||
|
</defs> |
||||||
|
</svg> |
||||||
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
||||||
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
||||||
|
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label> |
||||||
|
|
||||||
|
<a href="#d-gitea" tabindex="1" class="md-skip"> |
||||||
|
Skip to content |
||||||
|
</a> |
||||||
|
|
||||||
|
|
||||||
|
<header class="md-header" data-md-component="header"> |
||||||
|
<nav class="md-header-nav md-grid"> |
||||||
|
<div class="md-flex"> |
||||||
|
<div class="md-flex__cell md-flex__cell--shrink"> |
||||||
|
<a href="https://pages.charlesreid1.com/d-gitea" title="d-gitea" class="md-header-nav__button md-logo"> |
||||||
|
|
||||||
|
<i class="md-icon">input</i> |
||||||
|
|
||||||
|
</a> |
||||||
|
</div> |
||||||
|
<div class="md-flex__cell md-flex__cell--shrink"> |
||||||
|
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label> |
||||||
|
</div> |
||||||
|
<div class="md-flex__cell md-flex__cell--stretch"> |
||||||
|
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title"> |
||||||
|
|
||||||
|
|
||||||
|
<span class="md-header-nav__topic"> |
||||||
|
d-gitea |
||||||
|
</span> |
||||||
|
<span class="md-header-nav__topic"> |
||||||
|
Home |
||||||
|
</span> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="md-flex__cell md-flex__cell--shrink"> |
||||||
|
|
||||||
|
|
||||||
|
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label> |
||||||
|
|
||||||
|
<div class="md-search" data-md-component="search" role="dialog"> |
||||||
|
<label class="md-search__overlay" for="__search"></label> |
||||||
|
<div class="md-search__inner" role="search"> |
||||||
|
<form class="md-search__form" name="search"> |
||||||
|
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active"> |
||||||
|
<label class="md-icon md-search__icon" for="__search"></label> |
||||||
|
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"> |
||||||
|
 |
||||||
|
</button> |
||||||
|
</form> |
||||||
|
<div class="md-search__output"> |
||||||
|
<div class="md-search__scrollwrap" data-md-scrollfix> |
||||||
|
<div class="md-search-result" data-md-component="result"> |
||||||
|
<div class="md-search-result__meta"> |
||||||
|
Type to start searching |
||||||
|
</div> |
||||||
|
<ol class="md-search-result__list"></ol> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="md-flex__cell md-flex__cell--shrink"> |
||||||
|
<div class="md-header-nav__source"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://git.charlesreid1.com/docker/d-gitea" title="Go to repository" class="md-source" data-md-source=""> |
||||||
|
|
||||||
|
<div class="md-source__repository"> |
||||||
|
d-gitea |
||||||
|
</div> |
||||||
|
</a> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</nav> |
||||||
|
</header> |
||||||
|
|
||||||
|
<div class="md-container"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<main class="md-main"> |
||||||
|
<div class="md-main__inner md-grid" data-md-component="container"> |
||||||
|
|
||||||
|
|
||||||
|
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation"> |
||||||
|
<div class="md-sidebar__scrollwrap"> |
||||||
|
<div class="md-sidebar__inner"> |
||||||
|
<nav class="md-nav md-nav--primary" data-md-level="0"> |
||||||
|
<label class="md-nav__title md-nav__title--site" for="__drawer"> |
||||||
|
<a href="https://pages.charlesreid1.com/d-gitea" title="d-gitea" class="md-nav__button md-logo"> |
||||||
|
|
||||||
|
<i class="md-icon">input</i> |
||||||
|
|
||||||
|
</a> |
||||||
|
d-gitea |
||||||
|
</label> |
||||||
|
|
||||||
|
<div class="md-nav__source"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="https://git.charlesreid1.com/docker/d-gitea" title="Go to repository" class="md-source" data-md-source=""> |
||||||
|
|
||||||
|
<div class="md-source__repository"> |
||||||
|
d-gitea |
||||||
|
</div> |
||||||
|
</a> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<ul class="md-nav__list" data-md-scrollfix> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li class="md-nav__item md-nav__item--active"> |
||||||
|
|
||||||
|
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<label class="md-nav__link md-nav__link--active" for="__toc"> |
||||||
|
Home |
||||||
|
</label> |
||||||
|
|
||||||
|
<a href="." title="Home" class="md-nav__link md-nav__link--active"> |
||||||
|
Home |
||||||
|
</a> |
||||||
|
|
||||||
|
|
||||||
|
<nav class="md-nav md-nav--secondary"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||||
|
<ul class="md-nav__list" data-md-scrollfix> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#table-of-contents" title="Table of Contents" class="md-nav__link"> |
||||||
|
Table of Contents |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#secrets" title="Secrets" class="md-nav__link"> |
||||||
|
Secrets |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#container-directory-structure" title="Container Directory Structure" class="md-nav__link"> |
||||||
|
Container Directory Structure |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#container-data-volume" title="Container Data Volume" class="md-nav__link"> |
||||||
|
Container Data Volume |
||||||
|
</a> |
||||||
|
|
||||||
|
<nav class="md-nav"> |
||||||
|
<ul class="md-nav__list"> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#directory-structure-before-adding-repos-to-gitea" title="directory structure before adding repos to gitea" class="md-nav__link"> |
||||||
|
directory structure before adding repos to gitea |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#directory-structure-after-adding-repos-to-gitea" title="directory structure after adding repos to gitea" class="md-nav__link"> |
||||||
|
directory structure after adding repos to gitea |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#files-mounted-into-container" title="Files Mounted Into Container" class="md-nav__link"> |
||||||
|
Files Mounted Into Container |
||||||
|
</a> |
||||||
|
|
||||||
|
<nav class="md-nav"> |
||||||
|
<ul class="md-nav__list"> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#customconf-configuration-file" title="custom/conf configuration file" class="md-nav__link"> |
||||||
|
custom/conf configuration file |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#customtemplates-template-files" title="custom/templates template files" class="md-nav__link"> |
||||||
|
custom/templates template files |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#custompages-gitea-pages" title="custom/pages gitea pages" class="md-nav__link"> |
||||||
|
custom/pages gitea pages |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#using-the-docker-composeyml-file" title="Using the docker-compose.yml File" class="md-nav__link"> |
||||||
|
Using the docker-compose.yml File |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#notes-on-custom-files" title="Notes on Custom Files" class="md-nav__link"> |
||||||
|
Notes on Custom Files |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#backing-up-and-restoring-gitea" title="Backing Up and Restoring Gitea" class="md-nav__link"> |
||||||
|
Backing Up and Restoring Gitea |
||||||
|
</a> |
||||||
|
|
||||||
|
<nav class="md-nav"> |
||||||
|
<ul class="md-nav__list"> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#executive-summary" title="Executive Summary" class="md-nav__link"> |
||||||
|
Executive Summary |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ul> |
||||||
|
|
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc"> |
||||||
|
<div class="md-sidebar__scrollwrap"> |
||||||
|
<div class="md-sidebar__inner"> |
||||||
|
|
||||||
|
<nav class="md-nav md-nav--secondary"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<label class="md-nav__title" for="__toc">Table of contents</label> |
||||||
|
<ul class="md-nav__list" data-md-scrollfix> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#table-of-contents" title="Table of Contents" class="md-nav__link"> |
||||||
|
Table of Contents |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#secrets" title="Secrets" class="md-nav__link"> |
||||||
|
Secrets |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#container-directory-structure" title="Container Directory Structure" class="md-nav__link"> |
||||||
|
Container Directory Structure |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#container-data-volume" title="Container Data Volume" class="md-nav__link"> |
||||||
|
Container Data Volume |
||||||
|
</a> |
||||||
|
|
||||||
|
<nav class="md-nav"> |
||||||
|
<ul class="md-nav__list"> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#directory-structure-before-adding-repos-to-gitea" title="directory structure before adding repos to gitea" class="md-nav__link"> |
||||||
|
directory structure before adding repos to gitea |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#directory-structure-after-adding-repos-to-gitea" title="directory structure after adding repos to gitea" class="md-nav__link"> |
||||||
|
directory structure after adding repos to gitea |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#files-mounted-into-container" title="Files Mounted Into Container" class="md-nav__link"> |
||||||
|
Files Mounted Into Container |
||||||
|
</a> |
||||||
|
|
||||||
|
<nav class="md-nav"> |
||||||
|
<ul class="md-nav__list"> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#customconf-configuration-file" title="custom/conf configuration file" class="md-nav__link"> |
||||||
|
custom/conf configuration file |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#customtemplates-template-files" title="custom/templates template files" class="md-nav__link"> |
||||||
|
custom/templates template files |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#custompages-gitea-pages" title="custom/pages gitea pages" class="md-nav__link"> |
||||||
|
custom/pages gitea pages |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#using-the-docker-composeyml-file" title="Using the docker-compose.yml File" class="md-nav__link"> |
||||||
|
Using the docker-compose.yml File |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#notes-on-custom-files" title="Notes on Custom Files" class="md-nav__link"> |
||||||
|
Notes on Custom Files |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#backing-up-and-restoring-gitea" title="Backing Up and Restoring Gitea" class="md-nav__link"> |
||||||
|
Backing Up and Restoring Gitea |
||||||
|
</a> |
||||||
|
|
||||||
|
<nav class="md-nav"> |
||||||
|
<ul class="md-nav__list"> |
||||||
|
|
||||||
|
<li class="md-nav__item"> |
||||||
|
<a href="#executive-summary" title="Executive Summary" class="md-nav__link"> |
||||||
|
Executive Summary |
||||||
|
</a> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
</ul> |
||||||
|
</nav> |
||||||
|
|
||||||
|
</li> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</ul> |
||||||
|
|
||||||
|
</nav> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div class="md-content"> |
||||||
|
<article class="md-content__inner md-typeset"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h1 id="d-gitea">d-gitea<a class="headerlink" href="#d-gitea" title="Permanent link">¶</a></h1> |
||||||
|
<p>Docker files for running gitea</p> |
||||||
|
<p><a href="https://pages.charlesreid1.com/d-gitea/">documentation: d-gitea container</a> (you are here)</p> |
||||||
|
<p><a href="https://git.charlesreid1.com/docker/d-gitea">source code on git.charlesreid1.com: d-gitea</a></p> |
||||||
|
<p><a href="https://github.com/charlesreid1-docker/d-gitea">source code on github.com: charlesreid1-docker/d-gitea</a></p> |
||||||
|
<p><a href="https://docs.gitea.io/en-us/install-with-docker/">gitea documentation - running gitea with docker</a></p> |
||||||
|
<h2 id="table-of-contents">Table of Contents<a class="headerlink" href="#table-of-contents" title="Permanent link">¶</a></h2> |
||||||
|
<ul> |
||||||
|
<li>secrets</li> |
||||||
|
<li>container directory structure</li> |
||||||
|
<li>files mounted into container</li> |
||||||
|
<li>using the <code>docker-compose.yml</code> file</li> |
||||||
|
<li>configuring gitea with <code>app.ini</code></li> |
||||||
|
<li>customizing gitea with custom files</li> |
||||||
|
<li>backing up and restoring gitea</li> |
||||||
|
</ul> |
||||||
|
<h2 id="secrets">Secrets<a class="headerlink" href="#secrets" title="Permanent link">¶</a></h2> |
||||||
|
<p>There are two secrets to set in the <code>app.ini</code> before running gitea: |
||||||
|
the internal token and the secret key.</p> |
||||||
|
<p>These can be set in <code>*.secret</code> files:</p> |
||||||
|
<div class="codehilite"><pre><span></span>internal_token.secret |
||||||
|
secret_key.secret |
||||||
|
</pre></div> |
||||||
|
|
||||||
|
|
||||||
|
<p>The contents should be the value of the variable |
||||||
|
you wish to use in <code>custom/conf/app.ini</code>.</p> |
||||||
|
<p>These files are not tracked by git.</p> |
||||||
|
<h2 id="container-directory-structure">Container Directory Structure<a class="headerlink" href="#container-directory-structure" title="Permanent link">¶</a></h2> |
||||||
|
<p>The <code>custom/</code> dir in this folder maps to the <code>/data/gitea</code> volume |
||||||
|
inside the gitea container.</p> |
||||||
|
<p>For example, the <code>app.ini</code> configuration file will be mapped into |
||||||
|
the container at <code>/data/gitea/conf/app.ini</code>.</p> |
||||||
|
<h2 id="container-data-volume">Container Data Volume<a class="headerlink" href="#container-data-volume" title="Permanent link">¶</a></h2> |
||||||
|
<p>This container expects to use a docker data volume |
||||||
|
to store the gitea custom configuration |
||||||
|
and the entire contents of all repositories.</p> |
||||||
|
<p>On the host machine, you can access named data volumes at |
||||||
|
<code>/var/lib/docker/volumes/gitea_gitea/_data</code> |
||||||
|
or copy files in and out of the container using <code>docker cp</code>.</p> |
||||||
|
<h3 id="directory-structure-before-adding-repos-to-gitea">directory structure before adding repos to gitea<a class="headerlink" href="#directory-structure-before-adding-repos-to-gitea" title="Permanent link">¶</a></h3> |
||||||
|
<p>Directory structure for host-mounted gitea directory |
||||||
|
before any repositorieshave been added to gitea:</p> |
||||||
|
<div class="codehilite"><pre><span></span>gitea |
||||||
|
├── git |
||||||
|
│ └── repositories |
||||||
|
├── gitea |
||||||
|
│ ├── conf |
||||||
|
│ │ └── app.ini |
||||||
|
│ ├── gitea.db |
||||||
|
│ ├── indexers |
||||||
|
│ │ └── issues.bleve |
||||||
|
│ │ ├── index_meta.json |
||||||
|
│ │ └── store |
||||||
|
│ ├── lfs |
||||||
|
│ ├── log |
||||||
|
│ │ ├── gitea.log |
||||||
|
│ │ ├── http.log |
||||||
|
│ │ └── xorm.log |
||||||
|
│ └── sessions |
||||||
|
│ └── oauth2 |
||||||
|
└── ssh [error opening dir] |
||||||
|
|
||||||
|
11 directories, 7 files |
||||||
|
</pre></div> |
||||||
|
|
||||||
|
|
||||||
|
<h3 id="directory-structure-after-adding-repos-to-gitea">directory structure after adding repos to gitea<a class="headerlink" href="#directory-structure-after-adding-repos-to-gitea" title="Permanent link">¶</a></h3> |
||||||
|
<p>After adding a repository:</p> |
||||||
|
<div class="codehilite"><pre><span></span>gitea |
||||||
|
├── git |
||||||
|
│ └── repositories |
||||||
|
│ └─e charlesreid1 |
||||||
|
│ └── oieruoweiur.git |
||||||
|
│ ├── branches |
||||||
|
│ ├── config |
||||||
|
│ ├── description |
||||||
|
│ ├── HEAD |
||||||
|
│ ├── hooks |
||||||
|
│ │ ├── applypatch-msg.sample |
||||||
|
│ │ ├── commit-msg.sample |
||||||
|
│ │ ├── post-receive |
||||||
|
│ │ ├── post-receive.d |
||||||
|
│ │ │ └── gitea |
||||||
|
│ │ ├── post-update.sample |
||||||
|
│ │ ├── pre-applypatch.sample |
||||||
|
│ │ ├── pre-commit.sample |
||||||
|
│ │ ├── prepare-commit-msg.sample |
||||||
|
│ │ ├── pre-push.sample |
||||||
|
│ │ ├── pre-rebase.sample |
||||||
|
│ │ ├── pre-receive |
||||||
|
│ │ ├── pre-receive.d |
||||||
|
│ │ │ └── gitea |
||||||
|
│ │ ├── pre-receive.sample |
||||||
|
│ │ ├── update |
||||||
|
│ │ ├── update.d |
||||||
|
│ │ │ └── gitea |
||||||
|
│ │ └── update.sample |
||||||
|
│ ├── info |
||||||
|
│ │ ├── exclude |
||||||
|
│ │ └── refs |
||||||
|
│ ├── objects |
||||||
|
│ │ ├── info |
||||||
|
│ │ │ └── packs |
||||||
|
│ │ └── pack |
||||||
|
│ └── refs |
||||||
|
│ ├── heads |
||||||
|
│ └── tags |
||||||
|
├── gitea |
||||||
|
│ ├── conf |
||||||
|
│ │ └── app.ini |
||||||
|
│ ├── gitea.db |
||||||
|
│ ├── indexers |
||||||
|
│ │ └── issues.bleve |
||||||
|
│ │ ├── index_meta.json |
||||||
|
│ │ └── store |
||||||
|
│ ├── lfs |
||||||
|
│ ├── log |
||||||
|
│ │ ├── gitea.log |
||||||
|
│ │ ├── http.log |
||||||
|
│ │ └── xorm.log |
||||||
|
│ └── sessions |
||||||
|
│ └── oauth2 |
||||||
|
└── ssh [error opening dir] |
||||||
|
|
||||||
|
25 directories, 29 files |
||||||
|
</pre></div> |
||||||
|
|
||||||
|
|
||||||
|
<h2 id="files-mounted-into-container">Files Mounted Into Container<a class="headerlink" href="#files-mounted-into-container" title="Permanent link">¶</a></h2> |
||||||
|
<h3 id="customconf-configuration-file"><code>custom/conf</code> configuration file<a class="headerlink" href="#customconf-configuration-file" title="Permanent link">¶</a></h3> |
||||||
|
<p>The conf dir contains configuration files to configure how gitea works.</p> |
||||||
|
<p>The <code>app.ini</code> file needs to contain two secrets, |
||||||
|
which are scrubbed in <code>app.ini.sample</code>.</p> |
||||||
|
<p>The two secrets that are needed are:</p> |
||||||
|
<ul> |
||||||
|
<li>an "internal token" secret, contained in <code>internal_token.secret</code></li> |
||||||
|
<li>a "secret key" secret, contained in <code>secret_key.secret</code></li> |
||||||
|
</ul> |
||||||
|
<p>Use the <code>make_app_ini.sh</code> script to add the two secrets to the document. |
||||||
|
This will use sed to find/replace instances of the scrubbed secret, |
||||||
|
and will output the result to <code>custom/conf/app.ini</code>.</p> |
||||||
|
<div class="codehilite"><pre><span></span>./make_app_ini.sh |
||||||
|
</pre></div> |
||||||
|
|
||||||
|
|
||||||
|
<p>This generates <code>custom/conf/app.ini</code>.</p> |
||||||
|
<p>When the container is run, this file will be at <code>/data/gitea/conf/app.ini</code>.</p> |
||||||
|
<h2 id="customtemplates-template-files"><code>custom/templates</code> template files<a class="headerlink" href="#customtemplates-template-files" title="Permanent link">¶</a></h2> |
||||||
|
<p>The templates directory contains template files. These are gitea templates that |
||||||
|
control how particular kinds of gitea pages look. For example, a template can |
||||||
|
be used to modify how the user page looks, or modify the layout of repository |
||||||
|
main pages.</p> |
||||||
|
<p>In the container, this will be at <code>/data/gitea/templates/</code>.</p> |
||||||
|
<h2 id="custompages-gitea-pages"><code>custom/pages</code> gitea pages<a class="headerlink" href="#custompages-gitea-pages" title="Permanent link">¶</a></h2> |
||||||
|
<p>The pages directory contains one-off pages or static content that is |
||||||
|
hosted by gitea at the same domain (git.charlesreid1.com) but |
||||||
|
not necessarily incorporated into the gitea site.</p> |
||||||
|
<p>For example, a custom "about me" page could be added as a static .html file, |
||||||
|
and it would be hosted at <code>git.charlesreid1.com/about</code>.</p> |
||||||
|
<p>In the container, this will be at <code>/data/gitea/pages/</code>.</p> |
||||||
|
<h2 id="using-the-docker-composeyml-file">Using the <code>docker-compose.yml</code> File<a class="headerlink" href="#using-the-docker-composeyml-file" title="Permanent link">¶</a></h2> |
||||||
|
<p>This directory contains a docker-compose file that can be used to run |
||||||
|
a gitea server on port 3000.</p> |
||||||
|
<p>To get the gitea container up and running, </p> |
||||||
|
<div class="codehilite"><pre><span></span>$ docker-compose up |
||||||
|
</pre></div> |
||||||
|
|
||||||
|
|
||||||
|
<p>Now visit <code><server-ip>:3000</code>. You will be presented with a configuration page. |
||||||
|
Set up the gitea instance. This will automatically populate the directory |
||||||
|
structure. See below for more info.</p> |
||||||
|
<p>Use this as a project seed to add gitea containers to other docker pods.</p> |
||||||
|
<h2 id="notes-on-custom-files">Notes on Custom Files<a class="headerlink" href="#notes-on-custom-files" title="Permanent link">¶</a></h2> |
||||||
|
<p>The settings in the app.ini file are documented <a href="https://docs.gitea.io/en-us/config-cheat-sheet/">here</a>.</p> |
||||||
|
<p>An extensive sample app.ini file is <a href="https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample">here</a> (WARNING: this broke gitea).</p> |
||||||
|
<p>The existing gitea templates are in the gitea repo under <a href="https://github.com/go-gitea/gitea/tree/master/templates">templates/</a>. |
||||||
|
These can be modified as needed and placed in the <code>custom/templates/</code> directory.</p> |
||||||
|
<h2 id="backing-up-and-restoring-gitea">Backing Up and Restoring Gitea<a class="headerlink" href="#backing-up-and-restoring-gitea" title="Permanent link">¶</a></h2> |
||||||
|
<p>Fortunately, gitea provides dump functionality.</p> |
||||||
|
<p>Unfortunately, there is no restore functionality.</p> |
||||||
|
<p>See <a href="https://git.charlesreid1.com/docker/pod-charlesreid1/src/branch/master/utils-gitea">pod-charlesreid1/utils-gitea</a> |
||||||
|
for proper backup/restore scripts.</p> |
||||||
|
<h3 id="executive-summary">Executive Summary<a class="headerlink" href="#executive-summary" title="Permanent link">¶</a></h3> |
||||||
|
<p>Backup:</p> |
||||||
|
<ul> |
||||||
|
<li>create a backup target directory in the container</li> |
||||||
|
<li>create a gitea dump zip file using <code>gitea dump</code> command</li> |
||||||
|
<li>create a gitea avatars zip file</li> |
||||||
|
<li>copy everything in the backup target directory out of the container</li> |
||||||
|
<li>remove the backup target directory</li> |
||||||
|
</ul> |
||||||
|
<p>Restore:</p> |
||||||
|
<ul> |
||||||
|
<li>create a restore target directory in the container</li> |
||||||
|
<li>copy gitea dump and gitea avatars zip files into restore target dir</li> |
||||||
|
<li>unpack dump zip, unpack avatars zip</li> |
||||||
|
<li>unzip repositories zip (contained in dump zip)</li> |
||||||
|
<li>restore <code>repositories/</code> folder to <code>/data/git/repositories/</code></li> |
||||||
|
<li>(skip restoring <code>custom/</code> files, version control takes care of that)</li> |
||||||
|
<li>restore sqlite database using sql database dump</li> |
||||||
|
<li>restore avatars</li> |
||||||
|
<li>remove the restore target directory</li> |
||||||
|
</ul> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</article> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
|
||||||
|
|
||||||
|
<footer class="md-footer"> |
||||||
|
|
||||||
|
<div class="md-footer-meta md-typeset"> |
||||||
|
<div class="md-footer-meta__inner md-grid"> |
||||||
|
<div class="md-footer-copyright"> |
||||||
|
|
||||||
|
<div class="md-footer-copyright__highlight"> |
||||||
|
Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a> |
||||||
|
</div> |
||||||
|
|
||||||
|
powered by |
||||||
|
<a href="https://www.mkdocs.org">MkDocs</a> |
||||||
|
and |
||||||
|
<a href="https://squidfunk.github.io/mkdocs-material/"> |
||||||
|
Material for MkDocs</a> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</footer> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<script src="assets/javascripts/application.e72fd936.js"></script> |
||||||
|
|
||||||
|
<script>app.initialize({version:"1.0",url:{base:"."}})</script> |
||||||
|
|
||||||
|
<script src="search/main.js"></script> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
@ -1,36 +0,0 @@ |
|||||||
site_name: d-gitea |
|
||||||
site_url: https://pages.charlesreid1.com/d-gitea |
|
||||||
repo_name: d-gitea |
|
||||||
repo_url: https://git.charlesreid1.com/docker/d-gitea |
|
||||||
edit_uri: "" |
|
||||||
|
|
||||||
copyright: 'Copyright © 2018 <a href="https://charlesreid1.com">Charles Reid</a>, released under the <a href="https://opensource.org/licenses/MIT">MIT license</a>' |
|
||||||
|
|
||||||
docs_dir: docs |
|
||||||
site_dir: site |
|
||||||
extra_css: |
|
||||||
- css/custom.css |
|
||||||
theme: |
|
||||||
name: null |
|
||||||
custom_dir: 'mkdocs-material/material' |
|
||||||
palette: |
|
||||||
primary: 'light green' |
|
||||||
accent: 'light green' |
|
||||||
logo: |
|
||||||
icon: 'input' |
|
||||||
font: |
|
||||||
text: 'Roboto' |
|
||||||
code: 'Roboto Mono' |
|
||||||
nav: |
|
||||||
- 'Home': 'index.md' |
|
||||||
|
|
||||||
# Extensions |
|
||||||
markdown_extensions: |
|
||||||
- admonition |
|
||||||
- codehilite: |
|
||||||
guess_lang: false |
|
||||||
- toc: |
|
||||||
permalink: true |
|
||||||
|
|
||||||
|
|
||||||
strict: true |
|
@ -0,0 +1,94 @@ |
|||||||
|
function getSearchTermFromLocation() { |
||||||
|
var sPageURL = window.location.search.substring(1); |
||||||
|
var sURLVariables = sPageURL.split('&'); |
||||||
|
for (var i = 0; i < sURLVariables.length; i++) { |
||||||
|
var sParameterName = sURLVariables[i].split('='); |
||||||
|
if (sParameterName[0] == 'q') { |
||||||
|
return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function formatResult (location, title, summary) { |
||||||
|
return '<article><h3><a href="' + base_url + '/' + location + '">'+ title + '</a></h3><p>' + summary +'</p></article>'; |
||||||
|
} |
||||||
|
|
||||||
|
function displayResults (results) { |
||||||
|
var search_results = document.getElementById("mkdocs-search-results"); |
||||||
|
while (search_results.firstChild) { |
||||||
|
search_results.removeChild(search_results.firstChild); |
||||||
|
} |
||||||
|
if (results.length > 0){ |
||||||
|
for (var i=0; i < results.length; i++){ |
||||||
|
var result = results[i]; |
||||||
|
var html = formatResult(result.location, result.title, result.summary); |
||||||
|
search_results.insertAdjacentHTML('beforeend', html); |
||||||
|
} |
||||||
|
} else { |
||||||
|
search_results.insertAdjacentHTML('beforeend', "<p>No results found</p>"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function doSearch () { |
||||||
|
var query = document.getElementById('mkdocs-search-query').value; |
||||||
|
if (query.length > 2) { |
||||||
|
console.log('Searching with query: ' + query); |
||||||
|
if (!window.Worker) { |
||||||
|
displayResults(search(query)); |
||||||
|
} else { |
||||||
|
searchWorker.postMessage({query: query}); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// Clear results for short queries
|
||||||
|
displayResults([]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function initSearch () { |
||||||
|
var search_input = document.getElementById('mkdocs-search-query'); |
||||||
|
if (search_input) { |
||||||
|
search_input.addEventListener("keyup", doSearch); |
||||||
|
} |
||||||
|
|
||||||
|
var term = getSearchTermFromLocation(); |
||||||
|
if (term) { |
||||||
|
search_input.value = term; |
||||||
|
doSearch(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function onWorkerMessage (e) { |
||||||
|
if (e.data.results) { |
||||||
|
var results = e.data.results; |
||||||
|
displayResults(results); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!window.Worker) { |
||||||
|
console.log('Web Worker API not supported'); |
||||||
|
// load index in main thread
|
||||||
|
$.getScript(base_url + "/search/worker.js").done(function () { |
||||||
|
console.log('Loaded worker'); |
||||||
|
init(); |
||||||
|
}).fail(function (jqxhr, settings, exception) { |
||||||
|
console.error('Could not load worker.js'); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
// Wrap search in a web worker
|
||||||
|
var searchWorker = new Worker(base_url + "/search/worker.js"); |
||||||
|
searchWorker.postMessage({init: true}); |
||||||
|
searchWorker.onmessage = onWorkerMessage; |
||||||
|
} |
||||||
|
|
||||||
|
$(function() { |
||||||
|
var search_input = document.getElementById('mkdocs-search-query'); |
||||||
|
if (search_input) { |
||||||
|
search_input.addEventListener("keyup", doSearch); |
||||||
|
} |
||||||
|
|
||||||
|
var term = getSearchTermFromLocation(); |
||||||
|
if (term) { |
||||||
|
search_input.value = term; |
||||||
|
doSearch(); |
||||||
|
} |
||||||
|
}); |
File diff suppressed because one or more lines are too long
@ -0,0 +1,127 @@ |
|||||||
|
var base_path = 'function' === typeof importScripts ? '.' : '/search/'; |
||||||
|
var allowSearch = false; |
||||||
|
var index; |
||||||
|
var documents = {}; |
||||||
|
var lang = ['en']; |
||||||
|
var data; |
||||||
|
|
||||||
|
function getScript(script, callback) { |
||||||
|
console.log('Loading script: ' + script); |
||||||
|
$.getScript(base_path + script).done(function () { |
||||||
|
callback(); |
||||||
|
}).fail(function (jqxhr, settings, exception) { |
||||||
|
console.log('Error: ' + exception); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function getScriptsInOrder(scripts, callback) { |
||||||
|
if (scripts.length === 0) { |
||||||
|
callback(); |
||||||
|
return; |
||||||
|
} |
||||||
|
getScript(scripts[0], function() { |
||||||
|
getScriptsInOrder(scripts.slice(1), callback); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
function loadScripts(urls, callback) { |
||||||
|
if( 'function' === typeof importScripts ) { |
||||||
|
importScripts.apply(null, urls); |
||||||
|
callback(); |
||||||
|
} else { |
||||||
|
getScriptsInOrder(urls, callback); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function onJSONLoaded () { |
||||||
|
data = JSON.parse(this.responseText); |
||||||
|
var scriptsToLoad = ['lunr.js']; |
||||||
|
if (data.config && data.config.lang && data.config.lang.length) { |
||||||
|
lang = data.config.lang; |
||||||
|
} |
||||||
|
if (lang.length > 1 || lang[0] !== "en") { |
||||||
|
scriptsToLoad.push('lunr.stemmer.support.js'); |
||||||
|
if (lang.length > 1) { |
||||||
|
scriptsToLoad.push('lunr.multi.js'); |
||||||
|
} |
||||||
|
for (var i=0; i < lang.length; i++) { |
||||||
|
if (lang[i] != 'en') { |
||||||
|
scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
loadScripts(scriptsToLoad, onScriptsLoaded); |
||||||
|
} |
||||||
|
|
||||||
|
function onScriptsLoaded () { |
||||||
|
console.log('All search scripts loaded, building Lunr index...'); |
||||||
|
if (data.config && data.config.separator && data.config.separator.length) { |
||||||
|
lunr.tokenizer.separator = new RegExp(data.config.separator); |
||||||
|
} |
||||||
|
if (data.index) { |
||||||
|
index = lunr.Index.load(data.index); |
||||||
|
data.docs.forEach(function (doc) { |
||||||
|
documents[doc.location] = doc; |
||||||
|
}); |
||||||
|
console.log('Lunr pre-built index loaded, search ready'); |
||||||
|
} else { |
||||||
|
index = lunr(function () { |
||||||
|
if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { |
||||||
|
this.use(lunr[lang[0]]); |
||||||
|
} else if (lang.length > 1) { |
||||||
|
this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility
|
||||||
|
} |
||||||
|
this.field('title'); |
||||||
|
this.field('text'); |
||||||
|
this.ref('location'); |
||||||
|
|
||||||
|
for (var i=0; i < data.docs.length; i++) { |
||||||
|
var doc = data.docs[i]; |
||||||
|
this.add(doc); |
||||||
|
documents[doc.location] = doc; |
||||||
|
} |
||||||
|
}); |
||||||
|
console.log('Lunr index built, search ready'); |
||||||
|
} |
||||||
|
allowSearch = true; |
||||||
|
} |
||||||
|
|
||||||
|
function init () { |
||||||
|
var oReq = new XMLHttpRequest(); |
||||||
|
oReq.addEventListener("load", onJSONLoaded); |
||||||
|
var index_path = base_path + '/search_index.json'; |
||||||
|
if( 'function' === typeof importScripts ){ |
||||||
|
index_path = 'search_index.json'; |
||||||
|
} |
||||||
|
oReq.open("GET", index_path); |
||||||
|
oReq.send(); |
||||||
|
} |
||||||
|
|
||||||
|
function search (query) { |
||||||
|
if (!allowSearch) { |
||||||
|
console.error('Assets for search still loading'); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
var resultDocuments = []; |
||||||
|
var results = index.search(query); |
||||||
|
for (var i=0; i < results.length; i++){ |
||||||
|
var result = results[i]; |
||||||
|
doc = documents[result.ref]; |
||||||
|
doc.summary = doc.text.substring(0, 200); |
||||||
|
resultDocuments.push(doc); |
||||||
|
} |
||||||
|
return resultDocuments; |
||||||
|
} |
||||||
|
|
||||||
|
if( 'function' === typeof importScripts ) { |
||||||
|
onmessage = function (e) { |
||||||
|
if (e.data.init) { |
||||||
|
init(); |
||||||
|
} else if (e.data.query) { |
||||||
|
postMessage({ results: search(e.data.query) }); |
||||||
|
} else { |
||||||
|
console.error("Worker - Unrecognized message: " + e); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> |
||||||
|
<url> |
||||||
|
<loc>https://pages.charlesreid1.com/d-gitea/</loc> |
||||||
|
<lastmod>2018-08-11</lastmod> |
||||||
|
<changefreq>daily</changefreq> |
||||||
|
</url> |
||||||
|
</urlset> |
Binary file not shown.
Loading…
Reference in new issue