1 Commits

Author SHA1 Message Date
48690c04a4 Automated template extraction 2025-11-21 08:05:44 +00:00
38 changed files with 713 additions and 628 deletions

View File

@@ -4,8 +4,6 @@ docker_network_name:
TZ: TZ:
PUID: PUID:
PGID: PGID:
ansible_become_pass:
media_path:
# api # api
API_CONTACT_WEBHOOK: API_CONTACT_WEBHOOK:
@@ -54,6 +52,14 @@ MASTODON_ARE_PRIMARY:
# wings # wings
WINGS_URL: WINGS_URL:
WINGS_CONTAINER_DIR: WINGS_CONTAINER_DIR:
media_path:
# frigate
FRIGATE_RECORDINGS_PATH:
# plex
PLEX_CLAIM_TOKEN:
ansible_become_pass:
# glance # glance
GLANCE_PIHOLE_TOKEN: GLANCE_PIHOLE_TOKEN:
@@ -168,9 +174,3 @@ HELIUM_EXT_HMAC_SECRET:
PTERODACTYL_APP_URL: PTERODACTYL_APP_URL:
PTERODACTYL_MYSQL_PASSWORD: PTERODACTYL_MYSQL_PASSWORD:
PTERODACTYL_MYSQL_ROOT_PASSWORD: PTERODACTYL_MYSQL_ROOT_PASSWORD:
# frigate
FRIGATE_RECORDINGS_PATH:
# plex
PLEX_CLAIM_TOKEN:

View File

@@ -1,20 +0,0 @@
$ANSIBLE_VAULT;1.1;AES256
63396333353166316666616661613532383538393239303966633336363361613332343437376566
3265326538643839326262386165623639353130656164320a323536333037353664646163386335
33336631303336616636343538353865383531316561623166323762396262643930376231616638
6638613961313364390a366564343030633665646666626165383334356364623761383032633963
39393264353635626539393831323530366630343665623561653836303065633965316163386166
63353836333639363765616164383133623330653762333762623632653535623438313831653365
32393732306135323062666539663839656563306133393031643766626666323534626638653236
63613832333833626439653034366336633534323131356262396138373938383039336263356531
36323432653634366365663039336231343239626539393961636562366263653934613333633535
61613937336336323135376663336364386533366537626133316130353862633862336530633339
33663439663332653461643839353564333765646537363864653765303933393562383134316434
38333134646362663837653461646661633539623734316635383163313363653730653763326262
65326365383661306466663930646162343033383932633866383862626339366631633862346334
36366161636663653136383439333461366264383533346461613631623730326437376537373638
64323863333364613039613533393232373162346436613864336237336439353134313361653634
64366663303265386663623139636131383432343238306631333436373939393832616262393232
33376466613639396436396166363032653434653730643734356432653063303762333230323431
34313338303838346466666463376636323433663038363935633362656164383762343531633563
386432323237313039376531653362326337

View File

@@ -1,150 +1,113 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
37643962356232333837626335333837656531656363366365306436653930373333393939653239 38663262326664303464653331306266333862363635643761346638366633666563303035346662
6464373031336361323535383731396538323539646335610a396166353437663437633034323663 6230313164666332623438636464313435323532393636650a333039326661383864373838333634
38633966666230653963613661623333373430346135613039656531643664363531383266653463 34653135643737393966353932343066653166653339313939666161363735636634643466363036
3431613963653938640a363637613966323132303039313037653962623438656139386631363233 3630633764646438650a393562343335316363616564383733363233343463356633353837353138
34346561653037326566636138626664666461346433323230663235626265363235626364373532 65376435343730626466393062656233326330303565376639386332306265306266356634383830
61366533623135653134383064396366356164393666333763333532386163343532333032353334 32613432386561346634633334666365323061313833396364313465326664353064653237623136
30626635323565313735353964316139653835303631623738653033396561663839653237656635 31343762383838316161306565323432643630343537346166616666353738343034346233313266
31616663323164383365333837623537313332363065383430653138373062633335633834373161 62353933323432343564303633636532396439643937306366313333626430313639653162333364
32653230313839326165623563363161353934326264313461303966393833663465386265333233 36646463353964323139613339326462666334376132633834313537653761333832333436663738
33363038336562386238303366353261366233646438353439323064386264373832663534336331 35393939326530353064633333323139356234643031653130633665303434313365663238643434
32396264346662653661356665396539633633336631653738313131663639303662383463356339 31663630313036343939646631326239343361653238646636363234353062346534363039373637
61343131666536316636626432633266643139393639306239626662333335646164633738616363 31313562666133343732626438353062663863336638323037373361616665613831616165393835
31393964666438613161366665643036346562376139376362356636626462626431643331656634 32336334393739666366623933626265643964663831336337343632643732383264623534383964
35646237663931646264306433323737316434646331646363303165633938646437656137323337 34313030336339613934303637363964653064653231666139353836653734626338333331383961
63613131396364623234333433626336386630333461306232623632343630616163616161643734 39646331623636613332393663663135363139653663383764333433316430313136356433326235
38353036373134623934633337323335653438333163303539643239666164666435343134643035 35303962646463323534623263623730313166643232303566343135323537386635396165383539
38653166646632376161323065393463656566613434353962333265636135653939366135393263 64393165623466633936393232363730313233656139383935343561343236343763623232343736
64663737313166326238646138663330653334623930373035633262383334656631663236316363 39383765633662653434383965646461663730373864326561343265663838643339616539396364
31363134316462373637643833343030393536313335316261323332656363363032316631613236 38313566343836363530613336326262373736643566323866386565346363363333636262613331
62653034356539646165633335393665616237633030376462313234623035633662383739613662 38613065333465363931623462653732626633316638626632353338373636383835653165336666
34366364366636393264353737333832343035356664386239326332333138626662613962666462 62646133383639663934656332613666663031623530336362633234633534363738363664623236
37323463653435373864303934633336396566633066313239663364656638646234623236646436 62316332363432346534353336343561303066633965373130626664343935393833663363393062
65613632623566646330396130373639306161653264663161336531663939633739313663356231 30333739626636323839623663393666393239663562653333383066303130363638366566666532
36343765343862323864356166303630333538383433326436356136666164393861646661623139 65346361636537393335393330313635336665636638366530346335313761323035623666623734
34343731623562303135613035303730656565316532663030616463396330663839313961633035 30396531383064376661363363323161353132356164636132343531336337613837613931656136
32326635356232383638653834386632316235613332323861613739383335313066383739613263 64303034626261643635356165636463326565653035316335353730396431663261363333656265
31373537643630623866303333313735356633633162343365316337376366353734326363623063 38626664636637623866343138303131643462366639336237363566386235656438343138666237
65346365613936356332373063336338323438613366643634326136376238383830316635626231 61653164376663326663646631393666386630666531666465373433393734653737343765363964
66353966393539666434376436616162633462623636326139653461386432366464303334376237 64313337336539336664303262343333623161646135633039376637653932626432333533356532
30393331633431353532373463663933646262646433666565313663643964333765396633336134 35306561323464623762336432366530343661363037383939383035653237353466336531653434
33636166623337323061336563363131663461643633393930333339613865303466356465353231 36383530633661616564333230363633383665376139353836643334646262323938643139663138
31356630376664616232333633306636326130633638303539643633656266343634353733373633 33653766666233393332333134386631316535643163323362356539633932323738353636393164
36366266646632653964333537643865303535643265326537373366356361373765636136386439 66646466613864633631656565303038613639633534306438303731356232663332316633623361
66383734346566333931646363353633323765633461326633626333393439633166313635316436 39303262353565383636616131333032306531646566313066373231313730386331633435336133
31616436633231396164663233653961613630616463313261616533666437643232373562316634 30626564643965303131666234663630653237373566653633343662623864393138353265646333
34366164383639313134383134383962633964356162646631353064353264363932376661623534 34336338356163323139616234323137366365656662633931666534303439326636333562366530
65313363353363623831623265393463623066303234663733333432343231383937323136376339 35363266633334616463623635666632386338653432653832326636336337626437643061623638
35656539343531313936313137646133356666316630376534366534663335656164363737383963 61646561666162616330623333346230613965316461383034333734383763383635396433373335
33353530373935353230366166343364646335633236333766613665383930366437353763613339 37653362636132313139316336356264373763333361333630366535336339623166306663623433
61653161653165373965373434333138383638613734616166323133346466656636643163303566 63333338613261633163613865303962383238383963353530633136623362313561316533343737
35653331376464323331323337656630323639656434333364366230653432333537636566643261 66336231323763353964376339613531613939336238656364353536346436663464636637303337
30623632656338366266383962663864373863623438363830376361376134303436373465636632 39313066613164656431383162326562353036613165613635346639656233626439623939393663
38643263663437316333383431366365303437633264383239353438326631373133376539383638 66306136656236663766643738303738616230626534333132666331316439363136326264386635
32643666633965396666343239636361323635336338386438313065383263653063393436326434 64616337613639306536373366366235633766613033313464353538376363663239333930363139
31366636633436303835326639663830356466356432656134376161646632323134356230323364 37666231626334373132363863346232623866353032626138353838333764633738386166666265
65393663323138633638343638626434656466623563653939663665303161616631306337616537 38393461633832306465633130343634323763346464643262653330356337353534636566353935
64613365363966653964626138303935643835383763316634663561656432383436336135656131 36333936343130653861303432626135383438653134326162613833336261613839376161616136
38653962306530343933663038353738306261336463623635323861623937386463306363666338 31666436353361303438303735623139613063333162303566623431373031646434643766363335
30353462656135396135633037376561636133643834633966306365623938366238383439656531 32363835376438613163666330333732353432396661666632663633393965396531653830333737
63323534626364393761313835386636353335616166666131646136643839636439633161616331 63356238613537643033643765616561666163386364376236353031656465333661333830626230
38643264313433366335326563613339356161383663623864656434376532363966646434326633 32346431633464636663366364643239386135396235336663626335383663373761383165646262
31393163353163343139333039336631363839343631376463623866656132306161666537666364 37313330376336373462623266343632393637663066313531646333666531653132633164353266
62663033663838383134643339616631396637383565633930376262333263396463356133323831 37636238623637363166323731653739373764343965626530333834366233323435646339636233
66663866646536653064343663343938346332323863356430323430623538386136636237366436 39626164653331643036386130663539663532643232333338656661333130376537333261346135
39663237383364326164373263386435646434303736303931366134373964653566623135363532 34373565643535616333326333383231346162383032636132333166376163373761306337643235
61366464393032653031386636316661306565313036366562616233393064396432653636363434 61636363323761366236326139373763306561383331303563333461386130353039333862336363
32396335353233313435643032313065373465373635333134373635316664656162666262396430 65323532623538346638333036316430303130316366376632623133643933393466353162643335
34383933323731326238626234653266636563623661343437643263346365626465643833656564 37383836323631393664636262333839323336353835663138653061623037636262333432613131
66363130353931393861363731646430373937316265646633613531306563396431373737633562 62303162646133376263306361663161636131323030396164313435356164386239393032633061
33653137393761656339333034366436346534663338616562616636643762613462346232626161 33346438373036306365363935626539653930386638383265373733386366663036393637656264
64616436343663646233653138613230353432316435616333313236326162633239653964393562 61303235326462626630366335373561313730613163623339333630313561663636353366393564
66306230663038366230633262393936343435383864623238353935393061326661363132386561 33303861623038623135346164376636323661373431653962363332653766663438323664376561
35666163323332333637323363333534626330343831303132326231393630633539366635396630 65313835386464616361306438316434656331653632346330333131626536323064386664633430
32636162616330326237386332636339336237326266663761643933636365613030643539323635 63353062336630663935353838316366316138323037383566613166336138306262313766383630
64653664313337623438383131343430373038303333663330666333616533626437333433656530 66336163666262636435326231326437336333666265663434316635313430623437306230646534
33346461366231343763346165663432376233623963613265393033373832623736356635623238 33643039376230643163303562376261316163626436626363316234396263633864376331353230
30323230326331316537346133386630326135383534303636396639383437373764623835306635 66656531646366633163336636343665393838666166643966306636363462666361303839656433
63643836333334666231653164646566663063333361396431346665336236613164633566623732 37353061656162653336363333343631633865636566646534306231353064643336383365376335
37626561366636356538626533663134316362616464356438313333633134343433613033323035 66396339376666623561393731633462643330363331623934643935303563393463346563373964
64396538383833313461383136666163663262666261386664323533633938323439643036383737 63623063376365646663386431653533373739343962656236356461383930373366383163666432
33313330663833376463653439376639336534313833336161333336633965616366386433373237 65353664363565646235393134316562643230383962636136633866376534326165343864383736
61343661353166653362363830643935366662653330646431323665306239303435653864313664 62306333386636306330373562336137386338303836303365353834303239336464613966313638
31333332363335323563353835373938313031663037343861613232363436616138633336623730 38333437313635653866396435656239313535376461623663343663333466393136313936353831
33343630326461616635333265333430613433323362373134626538366139333530306235303736 66646465663632323866376330316266343033646466316564613261656666313634663735616535
32346537316163313766366663373438653233303031333136393835636631313932393631323138 37393664613033346234633163373965393763356661636437626263326666643934653931393931
37663534353032626262393965393232616431323661663030303062383066613564313335643631 66373338636463393536633231663564386561313231323463343638383630396362336239333437
34633365383564623034663537643832623836393936303765363065373734333031383162323330 39343635663830313234316538636131653765616636613631353432646163376338346565383038
65336239386664633936616433653833386336386131393962666537653235363638323465626431 39306631646563636130643530353865393337373066336666353732633161383933626635623735
34366138323835343830303832386539323362653761616366336435643832366438333331613331 63623736613538396635306633393030613434373433663563643065613935376230363935343563
65366264613262366438316266353763326434353565653861343234396638616464346466373531 31316639333664303361626661353034396138623864373164383362356666633763323333363936
33323961633461363135653537306461373532636166376333363737353038653236643462346362 32366635633162376436393738663535313338363665383566656634323932303834656639363566
62366631613966373636666665383165313763626430346266306163323137316531306532613232 33663637643866333535646662643339383339353934383738343138323466313130666563633433
32393564353531316464656162356139613237323139613337666532346537646365613464353739 61383033616338646665323166623461366635636666326365326666393739303963353365636662
33393962346465623863646333663037663361326236353063663962643461663838316566653434 64653132376239636630396430346462626136323734353631356238303838663563643433643833
37303064396230353664396539643231653664353230643733336439616537633339313535363662 34656635373431623639653062386562623539303938336334303238666565363137613638626339
37356137336139326161386532383230653931303230366534383439343232383337313065383964 61666439303339323061326337623435383662613761336165336361343762373935626131383135
36623563643530396364336435646338656538663432396462306538396565356664383330623238 39633562353339363936646263313763326366623833333530373032393537373539386636616532
38383930353762623637313139656439393662636237383633623236626438663132366562353261 34663963646234356136653261386138356638393335626365333263396232613361306239323439
63643736376262333336393165373534393835383836386461376563396133623231343434363237 61663937646561336637313831373730316635383564346536663533656130323863393566386261
66383036303233366365386266333366316236353533303331633663623161656532323535386137 37343563333035333233666362653765333037353636646265366235316163646430616635336534
62333039646462323638346632373137393035343064303562643033346462363938363265363063 63663330303535663237373466666162356236613137623663343262626431316363356439643734
64306238633563613535313464663238343861333166353730303831313836633662306432663131 33646537383963316336353132366639306136353566313038363366666261313730303837643434
31626534333364643832333539643663353763323639633565373639353131613463613737656434 35663638616333346365313939303636656361363634373837383965373932663565666434383636
62386134326438393565646562636333386639353430316637386361386161386165306665343932 65333138666466356334353837303838303831353063333336393335343033373539383662363832
66396363383830336266643130656665653330323334666363346539343462353963373264656530 31303834366531393436303834316139663533333836376136326364383333393164656164353630
66623166633439356638343837353764366364313764303937663134373434343066373537633266 64646535363231303137303732643863616237666562363763363265326131356361333961356133
31353865343465636561336538346137303130356132316232353533373837616563626633643138 63396638636330393938613839383061616166373865316536323835363565613937363161323631
32303136383765303637343561336265623634643334333930653639633964383564386338373037 39343865393861373136383763646438616537373866663466303165616461373365656130613661
32303930623839343064353432306566303533646239633335343464333434323664636435306431 38663734376639623966633239376134386239383638653730643439656333326532303535373735
65653837353036303735333830383438653530386331343961623339616664653530616236393562 63663233663963333661643734316337323263666531373665343561396631396563306161373964
35353764323334306265393331303837656536613636663166393336356637383165393365383665 62653236366136353463363735376434343061643732636533636634653363386336303034393266
33346337346566393066636464366333366538376161353336366232353063376562356239616362 34616263376537383230653263323962366164643939646366653635663735373939633532323138
37653630396636303933613161316561353532663965363465633636666364333234376638373734 64393637326131666262316639353337666632646662663935393037303335353762326163353931
63303635353365303536393534303861383761616638633635633732383137373537333933656238 34663535363232383232356635633963626637333132366337356537313964616434323261653936
30613564363832323164376231333131353132626439663866373432343563343632613163353237 35316462373631626438343538363533393964333463666566323135643165633863633331653765
30333332663935396137613633626634363063333364613336343166376236373939303032616662 36373861386232303739636438653735396538623336366236353238643065353732643136333561
39346366333261383636303438336237356563316333636234356639663731653334363935316337 37663336636138306335356630313231373732333936656231626537376564313064653433313337
62643736666365623063616636613266346630363365386161346339373164356165653461636232 62343763343036636432613534346461386532626139346164633738346361653634353636623831
63313162616366316331353532383338373430623832613935303430346164613936303335633936 31626566336234656661303466623364626261356331623235306265333937316539333539373133
31303136643735613635303735633835626262363637326231323161363031373564396266633465 38373532353734653337313834323037656431666362333333666237386334373063653530623831
30343464363439653162623737643363376234663162636262653534316638343361303664653239 66343065303761303035346664653761376335363334373166393861373236666565373131303539
35663763323761353035633334343038363066373365316463303766353266356165313265366663 32373431613532643236
66346433316534373938653261623930303633633630366664643761363237643831373238626133
62306661616439346438663532363232356638313134663737343066373736333164646432303631
35393837383665343336653766616263643563666165616631353836333565323165656264316332
36353961626637353939633539326137323461376632653435353665613832366530646265313130
62316366316566386666363964303538613935323936633461383231376161373632306434623962
32316332363364363366373739353838353236643334366236336565303633306266396432353961
64343863376337396134656132653431653764646466636165613936333838613132396636643932
33383236333034393165376532346566646238323661323561623030303238353439626333343663
38323733663538643666386537643533303031346264633138306439636236323336656336613766
35653433343932386237636633373635633265366163346439373733663338313662313038343063
38316164363433373964376463636162616464646462393534343734353861306630393330303531
36353263346432323666353463376430333166613466303435363666346164656232643430303363
35656237666564656264366632666464326530666637613764323762303964643138346433326233
38346230656164653530386436653461396563373938626537303563623136313033316135326161
62346139633462666661396639346464623532376535623239366333333038393330373838386532
36666265653331313130323662383933333034386538616133306634376565653936653664636131
30623839336238333537666662336431396633396362376630376361636565343732313262623065
65616138333538616635326639303863613462623163663664653263303139373138376134643165
34663933666166343135366562623861343037303364393562313635633465623463633164653031
62386332336633326339656663633630663762643430376262323531626137353838353764643939
36626565653339653365383337633865386165313538666635613738343139383338613239393866
39363634303533386633353234373736353633313636323231636331646363636164396530653566
35656462336532656666363333393335396663653064613761363565386561646463353363656463
38663161353433353936376336326132336533623837343230613737393439346632353766383939
35346135626632306233616332346230323663366634396165666362626130656531646462363865
63666266633937376237373837633237636638363333346437663037373339613062366435653062
36613836373962623930333733326463636666376132633463343366653365393963383564373564
63316431303165383263343330656361346165313938356431636563396161653533666339653762
37316331303764663366613738363862336236353763613661656666376139333635306331376263
64306565373438343134613531653938373338326161363634653339653864373861623939336439
63386535623230326237653064313038316163626166373135623533306562346665326137346637
38316566376463323663336665306538656430363638653362616530643639616266633362636539
38313132643538326132323566323361363138316664616431626435353435613937353134383061
38393663323164393737663133353732316461366634663564383239393436363965343237636537
62313833333464636662643838366434373464626165343934333236363232313037653661366631
39313438663565613233323937336130343861383034376664333631623432643834373138386230
37313235373239353630623262386564356433363730623831643066303831666266

3
hosts
View File

@@ -1,5 +1,4 @@
[ungrouped] [ungrouped]
jade ansible_host=172.16.0.25 ansible_user=alex jade ansible_host=fntz.net ansible_user=alex
jackson ansible_host=direct.jackson.alexav.gg ansible_user=root jackson ansible_host=direct.jackson.alexav.gg ansible_user=root
ash-1 ansible_host=ash-1.landite.games ansible_user=root
nas ansible_host=172.16.0.29 ansible_user=alex nas ansible_host=172.16.0.29 ansible_user=alex

View File

@@ -61,6 +61,12 @@
- name: Deploy Drop - name: Deploy Drop
import_tasks: tasks/drop.yml import_tasks: tasks/drop.yml
tags: drop_deploy tags: drop_deploy
- name: Deploy Gluetun
import_tasks: tasks/gluetun.yml
tags: gluetun_deploy
- name: Deploy QBittorrent
import_tasks: tasks/qbittorrent.yml
tags: qbittorrent_deploy
- name: Deploy Jackett - name: Deploy Jackett
import_tasks: tasks/jackett.yml import_tasks: tasks/jackett.yml
tags: jackett_deploy tags: jackett_deploy
@@ -103,12 +109,9 @@
- name: Deploy Owncloud - name: Deploy Owncloud
import_tasks: tasks/owncloud.yml import_tasks: tasks/owncloud.yml
tags: owncloud_deploy tags: owncloud_deploy
- name: Deploy Pelican - name: Deploy Wings
import_tasks: tasks/pelican.yml import_tasks: tasks/wings.yml
tags: pelican_deploy tags: wings_deploy
- name: Deploy Database
import_tasks: tasks/mariadb.yml
tags: mariadb_deploy
- hosts: nas - hosts: nas
@@ -131,11 +134,3 @@
- name: Deploy Wings - name: Deploy Wings
import_tasks: tasks/wings.yml import_tasks: tasks/wings.yml
tags: wings_deploy tags: wings_deploy
- hosts: ash-1
roles:
- role: traefik
tags: traefik_deploy
vars:
server: "ash-1"

View File

@@ -25,6 +25,12 @@
state: present state: present
when: build is defined when: build is defined
- name: Pull latest Docker image
docker_image:
name: "{{ image.name }}"
tag: "{{ image.tag }}"
source: pull
- name: Create Docker Network - name: Create Docker Network
docker_network: docker_network:
name: "{{ network_name }}" name: "{{ network_name }}"
@@ -33,19 +39,11 @@
- name: Create Docker Container - name: Create Docker Container
docker_container: docker_container:
name: "{{ name }}" name: "{{ name }}"
image: "{{ image.name }}:{{ image.tag }}"
command: "{{ command | default(omit) }}"
recreate: true recreate: true
restart_policy: unless-stopped restart_policy: unless-stopped
pull: "{{ build is not defined }}" networks: "{{ networks }}"
published_ports: "{{ published_ports | default(omit) }}"
network_mode: "{{ network_mode | default(omit) }}"
image: "{{ image.name }}:{{ image.tag }}"
etc_hosts: "{{ extra_hosts | default(omit) }}"
command: "{{ command | default(omit) }}"
networks: "{{ networks | default(omit) }}"
volumes: "{{ volumes | default(omit) }}" volumes: "{{ volumes | default(omit) }}"
env: "{{ env | default(omit) }}" env: "{{ env | default(omit) }}"
labels: "{{ labels | default(omit) }}" labels: "{{ labels | default(omit) }}"
healthcheck: "{{ healthcheck | default(omit) }}"
devices: "{{ devices | default(omit) }}"
mounts: "{{ mounts | default(omit) }}"
privileged: "{{ privileged | default(omit) }}"

View File

@@ -31,11 +31,6 @@
src: remote-dynamic.yml.j2 src: remote-dynamic.yml.j2
dest: "{{ data_dir }}/traefik/dynamic.yml" dest: "{{ data_dir }}/traefik/dynamic.yml"
when: server == "jackson" when: server == "jackson"
- name: Create Traefik Dynamic File (Remote 2)
template:
src: remote-ash-1.yml.j2
dest: "{{ data_dir }}/traefik/dynamic.yml"
when: server == "ash-1"
- name: Deploy Traefik Docker Container - name: Deploy Traefik Docker Container
docker_container: docker_container:

View File

@@ -48,13 +48,7 @@ http:
- webSecure - webSecure
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
wings:
rule: "Host(`wings.fntz.net`)"
service: wings
entryPoints:
- webSecure
tls:
certResolver: letsencrypt
services: services:
plex: plex:
@@ -81,7 +75,3 @@ http:
loadBalancer: loadBalancer:
servers: servers:
- url: "http://nas:8409/" - url: "http://nas:8409/"
wings:
loadBalancer:
servers:
- url: "http://jade:8090/"

View File

@@ -1,15 +0,0 @@
http:
routers:
wings:
rule: "Host(`ash-1.landite.games`)"
service: wings
entryPoints:
- webSecure
tls:
certResolver: letsencrypt
services:
wings:
loadBalancer:
servers:
- url: "http://5.161.219.50:8090"

View File

@@ -1,15 +1,18 @@
http: http:
middlewares:
landiteRedirect:
redirectRegex:
regex: ".*"
replacement: "https://alexav.gg/?ref=landite"
permanent: true
routers: routers:
wings: landite:
rule: "Host(`wings.landite.games`)" rule: "Host(`landite.games`)"
service: wings middlewares:
- landiteRedirect
service: noop@internal
entryPoints: entryPoints:
- webSecure - webSecure
tls: tls:
certResolver: letsencrypt certResolver: letsencrypt
services:
wings:
loadBalancer:
servers:
- url: "http://5.161.64.174:8090"

View File

@@ -21,10 +21,10 @@ def deploy(tag = None, host = None):
command = construct_command(tag, host) command = construct_command(tag, host)
if tag: if tag:
print(f"[MAIN] Deploying {tag}...") print(f"Deploying {tag}...\n")
else: else:
print(f"[MAIN] Deploying host {host}...") print(f"Deploying {host}...\n")
res = subprocess.run(command, shell=True) res = subprocess.run(command, shell=True, stdout=subprocess.DEVNULL)
return res.returncode == 0 return res.returncode == 0
@@ -75,9 +75,8 @@ def main():
deployed = [] deployed = []
failed = [] failed = []
for task in new_diff: for task in new_diff:
deployment = deploy(tag=task.split("/")[1]) deployment = deploy(tag=task)
if not deployment: if not deployment:
failed.append(task) failed.append(task)

View File

@@ -10,39 +10,21 @@ if os.path.exists(host_vars_path):
vaults = os.listdir(host_vars_path) vaults = os.listdir(host_vars_path)
# 1st run - extract ungrouped, global variables
for vault in vaults: for vault in vaults:
vault_path = os.path.join(host_vars_path, vault) vault_path = os.path.join(host_vars_path, vault)
vault_contents = subprocess.run(f'ansible-vault decrypt "{vault_path}" --vault-password-file ~/.vault_pass.txt --output -', shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) vault_contents = subprocess.run(f'ansible-vault decrypt "{vault_path}" --vault-password-file ~/.vault_pass.txt --output -', shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
stdout = vault_contents.stdout.strip().splitlines() stdout = vault_contents.stdout.strip().splitlines()
for line in stdout: for line in stdout:
if line.startswith("#"): if line.startswith("#") and line not in file_contents:
break file_contents += f"\n{line}\n"
elif line.split(":")[0] not in file_contents:
file_contents += f"{line.split(":")[0]}:\n"
# 2nd run - extract service-specific variables if ":" in line:
for vault in vaults: if line.split(":")[0] not in file_contents:
vault_path = os.path.join(host_vars_path, vault) file_contents += f'{line.split(":")[0]}:\n'
vault_contents = subprocess.run(f'ansible-vault decrypt "{vault_path}" --vault-password-file ~/.vault_pass.txt --output -', shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
stdout = vault_contents.stdout.strip().splitlines()
has_found_start = False with open(os.path.join(host_vars_path, 'all.template.yml'), 'w', encoding="utf8") as template_file:
for line in stdout: template_file.write(file_contents)
if has_found_start or line.startswith("#"): template_file.close()
if not has_found_start:
has_found_start = True
if line.startswith("#") and line not in file_contents:
file_contents += f"\n{line}\n"
if ":" in line:
if line.split(":")[0] not in file_contents:
file_contents += f'{line.split(":")[0]}:\n'
with open(os.path.join(host_vars_path, 'all.template.yml'), 'w', encoding="utf8") as template_file:
template_file.write(file_contents)
template_file.close()
print("Written to disk!") print("Written to disk!")

View File

@@ -13,8 +13,8 @@ def search_for_image(image_name):
data = yaml.safe_load(file) data = yaml.safe_load(file)
for key in data: for key in data:
if "vars" in key: if "docker_image" in key:
if image_name in key["vars"]["image"]["name"] or image_name == key["vars"]["image"]["name"]: if image_name in key["docker_image"]["name"]:
return f"{task.split(".")[0]}_deploy" return f"{task.split(".")[0]}_deploy"
def main(): def main():
@@ -29,36 +29,24 @@ def main():
for task in host['tasks']: for task in host['tasks']:
deployable_tags.append(task['tags']) deployable_tags.append(task['tags'])
if len(update_list["images"]) > 0: if len(update_list["images"]) <= 0:
already_deployed = [] print("No images to update!")
actually_updatable = [] else:
blacklist = [] print(f"Updating {update_list["metrics"]["updates_available"]} image(s)..\n")
for image in update_list["images"]: for image in update_list["images"]:
if image['result']['has_update']: if image['result']['has_update']:
if image in blacklist: if "remote_digest" in image["result"]["info"]:
print(f"[UPDATE] Ignoring '{image}' due to its blacklist") image_name = image["parts"]["repository"]
elif 'version_update_type' in image['result']['info'] and image['result']['info']['version_update_type'] != "major": ansible_tag = search_for_image(image_name)
actually_updatable.append({ 'reference': image['reference'], 'repository': image['parts']['repository'] })
elif 'type' in image['result']['info'] and image['result']['info']['type'] == "digest":
actually_updatable.append({ 'reference': image['reference'], 'repository': image['parts']['repository'] })
print(f"Redeploying {len(actually_updatable)} container(s)..") if ansible_tag and ansible_tag in deployable_tags:
for image in actually_updatable: print(f"Updating '{image_name}' ({ansible_tag})..")
ansible_tag = search_for_image(image['repository']) subprocess.run(f'docker image pull {image_name}', shell=True)
print(ansible_tag, image['reference']) subprocess.run(f'ANSIBLE_CONFIG=ansible.cfg ansible-playbook main.yml --tags {ansible_tag} --vault-password-file=~/.vault_pass.txt', shell=True)
if ansible_tag and ansible_tag in deployable_tags and ansible_tag not in already_deployed:
print(f'[UPDATE] Deploying {ansible_tag}..')
subprocess.run(f'ANSIBLE_CONFIG=ansible.cfg ansible-playbook main.yml --tags {ansible_tag} --vault-password-file=~/.vault_pass.txt', shell=True)
else:
print('[UPDATE] Could not find corresponding task, cleaning up..')
subprocess.run(f"docker image remove {image['reference']}", shell=True)
already_deployed.append(ansible_tag)
print("\nAll images updated, refreshing Cup") print("\nAll images updated, refreshing Cup")
requests.get("https://cup.fntz.net/api/v3/refresh") requests.get("https://cup.fntz.net/api/v3/refresh")
else:
print("No images to update!")
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -9,7 +9,7 @@
- "{{ data_dir }}/api/db" - "{{ data_dir }}/api/db"
image: image:
name: postgres name: postgres
tag: "17" tag: latest
networks: networks:
- name: api - name: api
volumes: volumes:
@@ -58,13 +58,6 @@
STEAM_API_KEY: "{{ API_STEAM_API_KEY }}" STEAM_API_KEY: "{{ API_STEAM_API_KEY }}"
CONTACT_WEBHOOK: "{{ API_CONTACT_WEBHOOK }}" CONTACT_WEBHOOK: "{{ API_CONTACT_WEBHOOK }}"
JWT_KEY: "{{ API_JWT_KEY }}" JWT_KEY: "{{ API_JWT_KEY }}"
DISCORD_PUBLIC_KEY: "{{ API_DISCORD_PUBLIC_KEY }}"
DISCORD_APP_ID: "{{ API_DISCORD_APP_ID }}"
DISCORD_BOT_TOKEN: "{{ API_DISCORD_BOT_TOKEN }}"
MINECRAFT_HOST: "{{ API_MINECRAFT_HOST }}"
MINECRAFT_USER: "{{ API_MINECRAFT_USER }}"
MINECRAFT_PASSWORD: "{{ API_MINECRAFT_PASSWORD }}"
MINECRAFT_DATABASE: "{{ API_MINECRAFT_DATABASE }}"
labels: labels:
traefik.enable: "true" traefik.enable: "true"
traefik.http.routers.aapi.rule: Host(`api.alexav.gg`) traefik.http.routers.aapi.rule: Host(`api.alexav.gg`)

View File

@@ -1,16 +1,29 @@
--- ---
- name: Deploy Drop Database - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/drop"
- "{{ data_dir }}/drop/db"
- "{{ data_dir }}/drop/app"
- name: Create Drop Network
docker_network:
name: drop
- name: Pull latest Drop Docker Image
docker_image:
name: ghcr.io/drop-oss/drop
tag: v0.3.3
source: pull
- name: Create Drop DB Container
docker_container:
name: drop_postgres name: drop_postgres
directories: image: postgres:14-alpine
- "{{ data_dir }}/drop" recreate: true
- "{{ data_dir }}/drop/db" restart_policy: unless-stopped
image:
name: postgres
tag: 14-alpine
network_name: drop
networks: networks:
- name: drop - name: drop
healthcheck: healthcheck:
@@ -26,16 +39,12 @@
POSTGRES_USER: "drop" POSTGRES_USER: "drop"
POSTGRES_DB: "drop" POSTGRES_DB: "drop"
- name: Deploy Drop - name: Create Drop Container
include_role: docker_container:
name: docker
vars:
name: drop name: drop
directories: image: ghcr.io/drop-oss/drop:latest
- "{{ data_dir }}/drop/app" recreate: true
image: restart_policy: unless-stopped
name: ghcr.io/drop-oss/drop
tag: latest
networks: networks:
- name: homelab - name: homelab
- name: drop - name: drop

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy Ersatz - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/ersatz"
- name: Pull latest Docker Image
docker_image:
name: ghcr.io/ersatztv/ersatztv
tag: latest
source: pull
- name: Create Docker Container
docker_container:
name: ersatztv name: ersatztv
directories: image: ghcr.io/ersatztv/ersatztv:latest
- "{{ data_dir }}/ersatz" recreate: true
image: restart_policy: unless-stopped
name: ghcr.io/ersatztv/ersatztv
tag: latest
devices: devices:
- /dev/dri/renderD128:/dev/dri/renderD128 - /dev/dri/renderD128:/dev/dri/renderD128
mounts: mounts:

View File

@@ -1,15 +1,24 @@
--- ---
- name: Deploy Frigate - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/frigate"
- name: Pull latest Frigate Docker Image
docker_image:
name: ghcr.io/blakeblackshear/frigate
tag: stable
source: pull
- name: Deploy Frigate Docker Container
docker_container:
name: frigate name: frigate
directories: image: ghcr.io/blakeblackshear/frigate:stable
- "{{ data_dir }}/frigate" recreate: true
image:
name: ghcr.io/blakeblackshear/frigate
tag: stable
privileged: true privileged: true
restart_policy: unless-stopped
published_ports: published_ports:
- "5000:5000" - "5000:5000"
- "8555:8555/tcp" - "8555:8555/tcp"

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy Gitea - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/gitea"
- name: Pull latest Gitea Docker Image
docker_image:
name: docker.gitea.com/gitea
tag: latest
source: pull
- name: Create Gitea Docker Container
docker_container:
name: gitea name: gitea
directories: image: docker.gitea.com/gitea:latest
- "{{ data_dir }}/gitea" restart_policy: unless-stopped
image: recreate: true
name: docker.gitea.com/gitea
tag: latest
networks: networks:
- name: "{{ docker_network_name }}" - name: "{{ docker_network_name }}"
volumes: volumes:

31
tasks/home-assistant.yml Normal file
View File

@@ -0,0 +1,31 @@
---
- name: Create folder structure
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ data_dir }}/homeassistant"
- name: Pull HA Docker Image
docker_image:
name: ghcr.io/home-assistant/home-assistant:stable
source: pull
- name: Deploy Home Assistant Container
docker_container:
name: home_assistant
image: ghcr.io/home-assistant/home-assistant:stable
recreate: true
restart_policy: unless-stopped
network_mode: host
privileged: true
volumes:
- "{{ data_dir }}/homeassistant:/config"
- "/etc/localtime:/etc/localtime"
- "/run/dbus:/run/dbus:ro"
labels:
traefik.enable: "true"
traefik.http.routers.ha.rule: Host(`ha.fntz.net`)
traefik.http.routers.ha.entrypoints: webSecure
traefik.http.routers.ha.tls.certresolver: letsencrypt
traefik.http.services.ha.loadbalancer.server.url: "http://{{ TRAEFIK_HOST_IP }}:8123"

View File

@@ -1,15 +1,24 @@
--- ---
- name: Deploy Homebridge - name: Create Folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/homebridge"
- name: Pull latest Homebridge Docker Image
docker_image:
name: homebridge/homebridge
tag: latest
source: pull
- name: Create Homebridge Docker Container
docker_container:
name: homebridge name: homebridge
directories: image: homebridge/homebridge:latest
- "{{ data_dir }}/homebridge:/homebridge" restart_policy: unless-stopped
image:
name: homebridge/homebridge
tag: latest
network_mode: host network_mode: host
recreate: true
volumes: volumes:
- "{{ data_dir }}/homebridge:/homebridge" - "{{ data_dir }}/homebridge:/homebridge"
labels: labels:

View File

@@ -1,16 +1,34 @@
--- ---
- name: Deploy Immich DB - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/immich"
- "{{ data_dir }}/immich/model-cache"
- "{{ data_dir }}/immich/db"
- name: Pull latest Immich Server Docker Image
docker_image:
name: ghcr.io/immich-app/immich-server
tag: v2.1.0
source: pull
- name: Create Immich Redis Docker Container
docker_container:
name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
restart_policy: unless-stopped
recreate: true
networks:
- name: immich
- name: Create Immich DB Docker Container
docker_container:
name: immich_postgres name: immich_postgres
directories: image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
- "{{ data_dir }}/immich" restart_policy: unless-stopped
- "{{ data_dir }}/immich/model-cache" recreate: true
- "{{ data_dir }}/immich/db"
image:
name: ghcr.io/immich-app/postgres
tag: 14-vectorchord0.4.3-pgvectors0.2.0
volumes: volumes:
- "{{ data_dir }}/immich/db:/var/lib/postgresql/data" - "{{ data_dir }}/immich/db:/var/lib/postgresql/data"
env: env:
@@ -20,27 +38,13 @@
POSTGRES_INITDB_ARGS: "--data-checksums" POSTGRES_INITDB_ARGS: "--data-checksums"
networks: networks:
- name: immich - name: immich
network_name: immich
- name: Deploy Immich Redis - name: Create Immich Server Docker Container
include_role: docker_container:
name: docker name: immich_server
vars: image: ghcr.io/immich-app/immich-server:v2.1.0
name: immich_redis restart_policy: unless-stopped
image: recreate: true
name: docker.io/valkey/valkey
tag: 8-bookworm
networks:
- name: immich
- name: Deploy Immich Server
include_role:
name: docker
vars:
name: immich
image:
name: ghcr.io/immich-app/immich-server
tag: v2.1.0
networks: networks:
- name: homelab - name: homelab
- name: immich - name: immich

39
tasks/jellyfin.yml Normal file
View File

@@ -0,0 +1,39 @@
---
- name: Create folder structure
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ data_dir }}/jellyfin"
- name: Pull latest Jellyfin Docker Image
docker_image:
name: lscr.io/linuxserver/jellyfin
tag: latest
source: pull
- name: Create Jellyfin Docker Container
docker_container:
name: jellyfin
image: lscr.io/linuxserver/jellyfin:latest
restart_policy: unless-stopped
recreate: true
networks:
- name: homelab
published_ports:
- 8096:8096
volumes:
- "{{ data_dir }}/jellyfin:/config"
- "{{ JELLYFIN_TV_PATH }}:/data/tvshows"
- "{{ JELLYFIN_MOVIE_PATH }}:/data/movies"
- "{{ JELLYFIN_MUSIC_PATH }}:/data/music"
env:
PUID: "{{ PUID }}"
PGID: "{{ PGID }}"
TZ: "{{ TZ }}"
labels:
traefik.enable: "true"
traefik.http.routers.jf.rule: Host(`jf.fntz.net`)
traefik.http.routers.jf.entrypoints: webSecure
traefik.http.routers.jf.tls.certresolver: letsencrypt
traefik.http.services.jf.loadbalancer.server.port: "8096"

View File

@@ -1,39 +0,0 @@
---
- name: Deploy MariaDB Database
include_role:
name: docker
vars:
name: mariadb
directories:
- "{{ data_dir }}/db"
image:
name: mariadb
tag: latest
published_ports:
- "3306:3306"
volumes:
- "{{ data_dir }}/db:/var/lib/mysql"
- "{{ data_dir }}/db/etc:/etc/mysql"
env:
MYSQL_USER: "root"
MYSQL_ROOT_PASSWORD: "{{ GLOBAL_POSTGRES_PASSWORD }}"
- name: Deploy PHPMyAdmin
include_role:
name: docker
vars:
name: phpmyadmin
image:
name: phpmyadmin
tag: latest
networks:
- name: "{{ docker_network_name }}"
env:
PMA_HOST: "{{ PMA_HOST }}"
PMA_PORT: "{{ PMA_PORT }}"
labels:
traefik.enable: "true"
traefik.http.routers.pma.rule: Host(`pma.landite.games`)
traefik.http.routers.pma.entrypoints: webSecure
traefik.http.routers.pma.tls.certresolver: letsencrypt
traefik.http.services.pma.loadbalancer.server.port: "80"

54
tasks/nextcloud.yml Normal file
View File

@@ -0,0 +1,54 @@
---
- name: Create folder structure
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ data_dir }}/nextcloud"
- "{{ data_dir }}/nextcloud/data"
- "{{ data_dir }}/nextcloud/db"
- name: Create Nextcloud Docker Network
docker_network:
name: nextcloud
- name: Pull latest Nextcloud Docker Image
docker_image:
name: nextcloud
tag: latest
source: pull
- name: Create Nextcloud DB Docker Container
docker_container:
name: nc_postgresql
image: postgres:17-alpine
restart_policy: unless-stopped
recreate: true
networks:
- name: nextcloud
volumes:
- "{{ data_dir }}/nextcloud/db:/var/lib/postgresql/data"
env:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_PASSWORD: "{{ NEXTCLOUD_POSTGRES_PASSWORD }}"
POSTGRES_DATABASE: "{{ NEXTCLOUD_POSTGRES_DATABASE }}"
POSTGRES_USER: "{{ NEXTCLOUD_POSTGRES_USER }}"
POSTGRES_HOST: "{{ NEXTCLOUD_POSTGRES_HOST }}"
- name: Create Nextcloud Docker Container
docker_container:
name: nextcloud
image: nextcloud
restart_policy: unless-stopped
recreate: true
networks:
- name: "{{ docker_network_name }}"
- name: nextcloud
volumes:
- "{{ data_dir }}/nextcloud/data:/var/www/html"
labels:
traefik.enable: "true"
traefik.http.routers.nc.rule: Host(`{{ NEXTCLOUD_APP_URL }}`)
traefik.http.routers.nc.entrypoints: webSecure
traefik.http.routers.nc.tls.certresolver: letsencrypt
traefik.http.services.nc.loadbalancer.server.port: "80"

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy NZBGet - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/nzbget"
- name: Pull latest NZBGet Docker Image
docker_image:
name: lscr.io/linuxserver/nzbget
tag: latest
source: pull
- name: Create NZBGet Docker Container
docker_container:
name: nzbget name: nzbget
directories: image: lscr.io/linuxserver/nzbget:latest
- "{{ data_dir }}/nzbget" restart_policy: unless-stopped
image: recreate: true
name: lscr.io/linuxserver/nzbget
tag: latest
networks: networks:
- name: homelab - name: homelab
volumes: volumes:

View File

@@ -1,16 +1,25 @@
--- ---
- name: Deploy Obsidian - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
name: obsidian with_items:
directories: - "{{ data_dir }}/obsidian"
- "{{ data_dir }}/obsidian" - "{{ data_dir }}/obsidian/data"
- "{{ data_dir }}/obsidian/data" - "{{ data_dir }}/obsidian/etc"
- "{{ data_dir }}/obsidian/etc"
image: - name: Pull Docker Image
name: couchdb docker_image:
tag: latest name: couchdb
tag: latest
source: pull
- name: Create Docker Container
docker_container:
name: couchdb
image: couchdb:latest
recreate: true
restart_policy: unless-stopped
networks: networks:
- name: homelab - name: homelab
volumes: volumes:

View File

@@ -1,18 +1,30 @@
--- ---
- name: Deploy Owncloud Database - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
name: owncloud_database with_items:
image: - "{{ data_dir }}/owncloud"
name: mariadb - "{{ data_dir }}/owncloud/data"
tag: latest - "{{ data_dir }}/owncloud/db"
directories: - "{{ data_dir }}/owncloud/redis"
- "{{ data_dir }}/owncloud"
- "{{ data_dir }}/owncloud/data" - name: Create Owncloud Docker Network
- "{{ data_dir }}/owncloud/db" docker_network:
- "{{ data_dir }}/owncloud/redis" name: owncloud
network_name: "owncloud"
- name: Pull latest Owncloud Docker Image
docker_image:
name: owncloud/server
tag: "10.15"
source: pull
- name: Create Owncloud DB Docker Container
docker_container:
name: oc_database
image: mariadb:latest
restart_policy: unless-stopped
recreate: true
networks: networks:
- name: owncloud - name: owncloud
volumes: volumes:
@@ -30,14 +42,12 @@
timeout: 5s timeout: 5s
retries: 5 retries: 5
- name: Deploy Owncloud Redis - name: Create Owncloud Redis Container
include_role: docker_container:
name: docker name: oc_redis
vars: image: redis:latest
name: owncloud_redis restart_policy: unless-stopped
image: recreate: true
name: redis
tag: latest
networks: networks:
- name: owncloud - name: owncloud
command: "--databases 1" command: "--databases 1"
@@ -49,14 +59,12 @@
volumes: volumes:
- "{{ data_dir }}/owncloud/redis:/data" - "{{ data_dir }}/owncloud/redis:/data"
- name: Deploy Owncloud - name: Create Owncloud Docker Container
include_role: docker_container:
name: docker
vars:
name: owncloud name: owncloud
image: image: owncloud/server:10.15
name: owncloud/server restart_policy: unless-stopped
tag: 10.16 recreate: true
networks: networks:
- name: "{{ docker_network_name }}" - name: "{{ docker_network_name }}"
- name: owncloud - name: owncloud

View File

@@ -1,32 +0,0 @@
---
- name: Deploy Pelican Panel
include_role:
name: docker
vars:
name: Pelican
directories:
- "{{ data_dir }}/pelican"
image:
name: ghcr.io/pelican-dev/panel
tag: latest
volumes:
- "pelican-data:/pelican-data"
- "pelican-logs:/var/www/html/storage/logs"
- "{{ data_dir }}/pelican/Caddyfile:/etc/caddy/Caddyfile"
etc_hosts:
- "host.docker.internal:host-gateway"
networks:
- name: "{{ docker_network_name }}"
env:
XDG_DATA_HOME: /pelican-data
TRUSTED_PROXIES: "172.21.0.0/16"
APP_URL: "https://{{ PELICAN_APP_URL }}"
ADMIN_EMAIL: "{{ PELICAN_EMAIL }}"
PUID: "{{ PUID }}"
PGID: "{{ PGID }}"
labels:
traefik.enable: "true"
traefik.http.routers.pelican.rule: Host(`panel.landite.games`)
traefik.http.routers.pelican.entrypoints: webSecure
traefik.http.routers.pelican.tls.certresolver: letsencrypt
traefik.http.services.pelican.loadbalancer.server.port: "80"

View File

@@ -1,19 +1,28 @@
--- ---
- name: Deploy PiHole - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/pihole"
- name: Pull latest PiHole Docker Image
docker_image:
name: pihole/pihole
tag: latest
source: pull
- name: Create PiHole Docker Container
docker_container:
name: pihole name: pihole
directories: image: pihole/pihole:latest
- "{{ data_dir }}/pihole" restart_policy: unless-stopped
image: recreate: true
name: pihole/pihole
tag: latest
published_ports:
- "53:53/tcp"
- "53:53/udp"
networks: networks:
- name: homelab - name: homelab
published_ports:
- "{{ TRAEFIK_HOST_IP }}:53:53/tcp"
- "{{ TRAEFIK_HOST_IP }}:53:53/udp"
volumes: volumes:
- "{{ data_dir }}/pihole:/etc/pihole" - "{{ data_dir }}/pihole:/etc/pihole"
env: env:

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy PocketID - name: Create Folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/pocketid"
- name: Pull latest PocketID Docker Image
docker_image:
name: ghcr.io/pocket-id/pocket-id
tag: v1
source: pull
- name: Create PocketID Docker Container
docker_container:
name: pocketid name: pocketid
directories: image: ghcr.io/pocket-id/pocket-id:v1
- "{{ data_dir }}/pocketid" restart_policy: unless-stopped
image: recreate: true
name: ghcr.io/pocket-id/pocket-id
tag: v1
networks: networks:
- name: homelab - name: homelab
volumes: volumes:

View File

@@ -64,7 +64,7 @@
restart_policy: unless-stopped restart_policy: unless-stopped
networks: networks:
- name: pterodactyl - name: pterodactyl
- name: "{{ docker_network_name }}" - name: homelab
volumes: volumes:
- "{{ data_dir }}/pterodactyl/nginx:/etc/nginx/http.d" - "{{ data_dir }}/pterodactyl/nginx:/etc/nginx/http.d"
- "{{ data_dir }}/pterodactyl/logs:/app/storage/logs" - "{{ data_dir }}/pterodactyl/logs:/app/storage/logs"
@@ -83,7 +83,7 @@
TRUSTED_PROXIES: "*" TRUSTED_PROXIES: "*"
labels: labels:
traefik.enable: "true" traefik.enable: "true"
traefik.http.routers.panel.rule: Host(`{{ PTERODACTYL_APP_URL }}`) traefik.http.routers.panel.rule: Host(`panel.fntz.net`)
traefik.http.routers.panel.entrypoints: webSecure traefik.http.routers.panel.entrypoints: webSecure
traefik.http.routers.panel.tls.certresolver: letsencrypt traefik.http.routers.panel.tls.certresolver: letsencrypt
traefik.http.services.panel.loadbalancer.server.port: "80" traefik.http.services.panel.loadbalancer.server.port: "80"

View File

@@ -1,17 +1,36 @@
--- ---
- name: Deploy Radarr - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/servarr"
- "{{ data_dir }}/servarr/sonarr_config"
- "{{ data_dir }}/servarr/radarr_config"
- "{{ data_dir }}/servarr/lidarr_config"
- name: Pull latest Radarr Docker Image
docker_image:
name: lscr.io/linuxserver/radarr
tag: latest
source: pull
- name: Pull latest Sonarr Docker Image
docker_image:
name: lscr.io/linuxserver/sonarr
tag: latest
source: pull
- name: Pull latest Lidarr Docker Image
docker_image:
name: lscr.io/linuxserver/lidarr
tag: latest
source: pull
- name: Deploy Radarr Container
docker_container:
name: radarr name: radarr
directories: image: lscr.io/linuxserver/radarr:latest
- "{{ data_dir }}/servarr" restart_policy: unless-stopped
- "{{ data_dir }}/servarr/sonarr_config" recreate: true
- "{{ data_dir }}/servarr/radarr_config"
- "{{ data_dir }}/servarr/lidarr_config"
image:
name: lscr.io/linuxserver/radarr
tag: latest
volumes: volumes:
- "{{ data_dir }}/servarr/radarr_config:/config" - "{{ data_dir }}/servarr/radarr_config:/config"
- "{{ SERVARR_MEDIA_PATH }}:/media" - "{{ SERVARR_MEDIA_PATH }}:/media"
@@ -29,14 +48,12 @@
traefik.http.routers.radarr.tls.certresolver: letsencrypt traefik.http.routers.radarr.tls.certresolver: letsencrypt
traefik.http.services.radarr.loadbalancer.server.port: "7878" traefik.http.services.radarr.loadbalancer.server.port: "7878"
- name: Deploy Sonarr - name: Deploy Sonarr Container
include_role: docker_container:
name: docker
vars:
name: sonarr name: sonarr
image: image: lscr.io/linuxserver/sonarr:latest
name: lscr.io/linuxserver/sonarr restart_policy: unless-stopped
tag: latest recreate: true
volumes: volumes:
- "{{ data_dir }}/servarr/sonarr_config:/config" - "{{ data_dir }}/servarr/sonarr_config:/config"
- "{{ SERVARR_MEDIA_PATH }}:/data" - "{{ SERVARR_MEDIA_PATH }}:/data"
@@ -54,14 +71,12 @@
traefik.http.routers.sonarr.tls.certresolver: letsencrypt traefik.http.routers.sonarr.tls.certresolver: letsencrypt
traefik.http.services.sonarr.loadbalancer.server.port: "8989" traefik.http.services.sonarr.loadbalancer.server.port: "8989"
- name: Deploy Lidarr - name: Deploy Lidarr Container
include_role: docker_container:
name: docker
vars:
name: lidarr name: lidarr
image: image: lscr.io/linuxserver/lidarr:latest
name: lscr.io/linuxserver/lidarr restart_policy: unless-stopped
tag: latest recreate: true
env: env:
PUID: "{{ PUID }}" PUID: "{{ PUID }}"
PGID: "{{ PGID }}" PGID: "{{ PGID }}"

View File

@@ -1,20 +1,34 @@
--- ---
- name: Deploy Storage API - name: "Create file structure"
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/storage-api"
- "{{ data_dir }}/storage-api/app"
- "{{ data_dir }}/storage-api/files"
- name: "Clone latest Storage API"
git:
repo: git@git.alexav.gg:alex/storage-api.git
dest: "{{ data_dir }}/storage-api/app"
- name: "Build Storage API Docker Image"
docker_image:
name: storage-api name: storage-api
directories: tag: "latest"
- "{{ data_dir }}/storage-api"
- "{{ data_dir }}/storage-api/app"
- "{{ data_dir }}/storage-api/files"
image:
name: storage-api
tag: latest
build: build:
git: path: "{{ data_dir }}/storage-api/app"
repo: git@git.alexav.gg:alex/storage-api.git dockerfile: Dockerfile
dest: "{{ data_dir }}/storage-api/app" source: build
state: present
- name: Deploy Storage API Container
docker_container:
name: storage_api
image: storage-api:latest
recreate: true
restart_policy: unless-stopped
networks: networks:
- name: "{{ docker_network_name }}" - name: "{{ docker_network_name }}"
volumes: volumes:

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy Tautulli - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/tautulli"
- name: Pull latest Tautulli Docker Image
docker_image:
name: ghcr.io/tautulli/tautulli
tag: latest
source: pull
- name: Create Tautulli Docker Container
docker_container:
name: tautulli name: tautulli
directories: image: ghcr.io/tautulli/tautulli
- "{{ data_dir }}/tautulli" restart_policy: unless-stopped
image: recreate: true
name: ghcr.io/tautulli/tautulli
tag: latest
networks: networks:
- name: homelab - name: homelab
volumes: volumes:

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy Termix - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/termix"
- name: Pull latest Termix Docker Image
docker_image:
name: ghcr.io/lukegus/termix
tag: latest
source: pull
- name: Create Termix Docker Container
docker_container:
name: termix name: termix
directories: image: ghcr.io/lukegus/termix:latest
- "{{ data_dir }}/termix" restart_policy: unless-stopped
image: recreate: true
name: ghcr.io/lukegus/termix
tag: latest
networks: networks:
- name: homelab - name: homelab
volumes: volumes:

View File

@@ -1,16 +1,18 @@
--- ---
- name: Deploy Tinyauth - name: Pull latest Tinyauth Docker Image
include_role: docker_image:
name: docker name: ghcr.io/steveiliop56/tinyauth
vars: tag: v4
source: pull
- name: Create Tinyauth Docker Container
docker_container:
name: tinyauth name: tinyauth
image: image: ghcr.io/steveiliop56/tinyauth:v4
name: ghcr.io/steveiliop56/tinyauth restart_policy: unless-stopped
tag: v4 recreate: true
networks: networks:
- name: homelab - name: homelab
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
env: env:
USERS: "{{ TINYAUTH_USERS }}" USERS: "{{ TINYAUTH_USERS }}"
SECRET: "{{ TINYAUTH_SECRET }}" SECRET: "{{ TINYAUTH_SECRET }}"
@@ -26,6 +28,8 @@
OAUTH_WHITELIST: "{{ TINYAUTH_OAUTH_WHITELIST }}" OAUTH_WHITELIST: "{{ TINYAUTH_OAUTH_WHITELIST }}"
APP_TITLE: "{{ TINYAUTH_APP_TITLE }}" APP_TITLE: "{{ TINYAUTH_APP_TITLE }}"
BACKGROUND_IMAGE: "{{ TINYAUTH_BACKGROUND_IMAGE }}" BACKGROUND_IMAGE: "{{ TINYAUTH_BACKGROUND_IMAGE }}"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
labels: labels:
traefik.enable: "true" traefik.enable: "true"
traefik.http.routers.tinyauth.rule: Host(`auth.fntz.net`) traefik.http.routers.tinyauth.rule: Host(`auth.fntz.net`)

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy Uptime Kuma - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/uptime-kuma"
- name: Pull latest Uptime Kuma Docker Image
docker_image:
name: louislam/uptime-kuma
tag: latest
source: pull
- name: Create Uptime Kuma Docker Container
docker_container:
name: uptime-kuma name: uptime-kuma
directories: image: louislam/uptime-kuma
- "{{ data_dir }}/uptime-kuma" restart_policy: unless-stopped
image: recreate: true
name: louislam/uptime-kuma
tag: latest
networks: networks:
- name: homelab - name: homelab
volumes: volumes:

View File

@@ -1,14 +1,23 @@
--- ---
- name: Deploy Vaultwarden - name: Create folder structure
include_role: file:
name: docker path: "{{ item }}"
vars: state: directory
with_items:
- "{{ data_dir }}/vaultwarden"
- name: Pull latest Vaultwarden Docker Image
docker_image:
name: vaultwarden/server
tag: latest
source: pull
- name: Create Vaultwarden Docker Container
docker_container:
name: vaultwarden name: vaultwarden
directories: image: vaultwarden/server:latest
- "{{ data_dir }}/vaultwarden" restart_policy: unless-stopped
image: recreate: true
name: vaultwarden/server
tag: latest
networks: networks:
- name: homelab - name: homelab
volumes: volumes: