Compare commits
110 Commits
b9e2f8dcaa
...
template-e
| Author | SHA1 | Date | |
|---|---|---|---|
| a4978133b9 | |||
|
9f0a0bd2e4
|
|||
|
4589e17b4b
|
|||
|
cd0d0f2402
|
|||
|
b237e4a078
|
|||
|
1c35d3d826
|
|||
|
a990c7bc19
|
|||
|
59473e55f7
|
|||
|
42b310d47a
|
|||
|
6f87087dc3
|
|||
|
506121b0bb
|
|||
|
4694ada8f4
|
|||
|
07c2351b9f
|
|||
|
1d3ebb0fe0
|
|||
|
c713f2c8cd
|
|||
|
00024dda5b
|
|||
|
8a0d4af868
|
|||
|
2feb2a9cfb
|
|||
|
18a7d431ef
|
|||
|
20aacc0abd
|
|||
|
2ebafbedeb
|
|||
|
11ee38c3c1
|
|||
|
505f5581fb
|
|||
|
63e30189ec
|
|||
|
c538f4cb74
|
|||
|
6a8a0e8953
|
|||
|
4d717a95f6
|
|||
|
ab83831871
|
|||
|
fd6003aecc
|
|||
|
cee5c13c9b
|
|||
|
43af41dd21
|
|||
|
d1f35cc107
|
|||
|
3ce27245e8
|
|||
|
bd05d56bd2
|
|||
|
cbd1b74d0d
|
|||
|
507703d662
|
|||
|
f92b77f320
|
|||
|
fce4ce64f3
|
|||
|
9ae11acd83
|
|||
|
1da228edc6
|
|||
|
b7691ebfcf
|
|||
|
fab89d7e19
|
|||
|
b675eb19e8
|
|||
|
22bd7d36ca
|
|||
|
21564a9613
|
|||
|
c1f0098a98
|
|||
|
1920868835
|
|||
|
5e378243cc
|
|||
|
7c785bb3c6
|
|||
|
8a2f5034c8
|
|||
|
6c95392c51
|
|||
|
d4308a26d4
|
|||
|
4ddc186eae
|
|||
|
105b05e823
|
|||
|
8a7d901e2a
|
|||
|
cfe4b8d02c
|
|||
|
4adad675db
|
|||
|
45ba631a5e
|
|||
|
9c2dce07de
|
|||
|
f741ac8eef
|
|||
|
805d60a0de
|
|||
|
3706dd028e
|
|||
|
c5a6afc08e
|
|||
|
de7d226f26
|
|||
|
5e8b481197
|
|||
|
da90344e27
|
|||
|
4559d1c0ed
|
|||
|
1d3ee6d58e
|
|||
|
514adbc568
|
|||
|
fa8baad3f2
|
|||
|
f06832c50b
|
|||
|
84941c0e2c
|
|||
|
242378f0c7
|
|||
|
7261f29a7c
|
|||
|
7f10dfa67a
|
|||
|
e4fe271c36
|
|||
|
c168924364
|
|||
|
b7e64d12cd
|
|||
|
546105dbb6
|
|||
|
93669a4f08
|
|||
|
d2c0b599ee
|
|||
|
0aa92f67d4
|
|||
|
bc28106e44
|
|||
|
bb4e7464da
|
|||
| 887924a928 | |||
| 1178504d93 | |||
| 0772ea36d0 | |||
|
ecaf52f268
|
|||
|
a611529e05
|
|||
|
1e7330a1c2
|
|||
|
182b1cc6c3
|
|||
|
f8fbc95229
|
|||
|
04b3c8ae18
|
|||
|
68592c5e5d
|
|||
|
bcf0df52ea
|
|||
|
15901d2325
|
|||
|
dd3c1d0350
|
|||
|
120208ed43
|
|||
|
b433549587
|
|||
|
f292246a4f
|
|||
|
727e28051a
|
|||
|
389c764119
|
|||
|
0ed6b8b408
|
|||
| 93583a4c04 | |||
| 543acaed07 | |||
|
32e50b2307
|
|||
|
b4640b8764
|
|||
|
b8fbb21d2c
|
|||
|
c5d15a2f3f
|
|||
|
a8802492f1
|
26
.gitea/workflows/deploy-all.yml
Normal file
26
.gitea/workflows/deploy-all.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: Deploy All Containers
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
name: Prepare
|
||||||
|
runs-on: runner
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
echo "${{ secrets.SSH_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts
|
||||||
|
chmod 644 ~/.ssh/known_hosts
|
||||||
|
eval $(ssh-agent -s)
|
||||||
|
ssh-add <(echo "${{ secrets.SSH_KEY }}")
|
||||||
|
echo "HOST *" > ~/.ssh/config
|
||||||
|
echo "${{ secrets.VAULT_PASS }}" > ~/.vault_pass.txt
|
||||||
|
chmod 600 ansible.cfg
|
||||||
|
/usr/bin/ansible-playbook main.yml --vault-password-file ~/.vault_pass.txt
|
||||||
44
.gitea/workflows/write-new-template.yml
Normal file
44
.gitea/workflows/write-new-template.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
name: Create New Secrets Template
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "host_vars/**"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-pr:
|
||||||
|
name: Extract updated template
|
||||||
|
runs-on: runner
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run extraction script
|
||||||
|
run: |
|
||||||
|
echo "${{ secrets.VAULT_PASS }}" > ~/.vault_pass.txt
|
||||||
|
python3 scripts/extract_to_template.py
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
run: |
|
||||||
|
git config user.name "Service Account"
|
||||||
|
git config user.email "alex+homelab@alexav.gg"
|
||||||
|
git checkout -b template-extraction-${{ github.run_number }}
|
||||||
|
git add .
|
||||||
|
git commit -m "Automated template extraction"
|
||||||
|
git push origin template-extraction-${{ github.run_number }}
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
run: |
|
||||||
|
curl -X POST \
|
||||||
|
"https://git.alexav.gg/api/v1/repos/alex/homelab/pulls" \
|
||||||
|
-H "Authorization: token ${{ secrets.TOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"title": "Automated Template Extraction",
|
||||||
|
"body": "Updates the `all.template.yml` file with latest secrets for services",
|
||||||
|
"head": "template-extraction-${{ github.run_number }}",
|
||||||
|
"base": "main"
|
||||||
|
}'
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
[defaults]
|
[defaults]
|
||||||
inventory=inventories/hosts
|
inventory=hosts
|
||||||
host_key_checking=False
|
host_key_checking=False
|
||||||
interpreter_python=auto_silent
|
interpreter_python=auto_silent
|
||||||
@@ -1,9 +1,50 @@
|
|||||||
# global
|
ansible_user:
|
||||||
data_dir:
|
data_dir:
|
||||||
docker_network_name:
|
docker_network_name:
|
||||||
|
TZ:
|
||||||
|
|
||||||
|
# api
|
||||||
|
API_CONTACT_WEBHOOK:
|
||||||
|
API_JWT_KEY:
|
||||||
|
API_STEAM_API_KEY:
|
||||||
|
API_LASTFM_API_KEY:
|
||||||
|
API_DATABASE_URL:
|
||||||
|
API_POSTGRES_PASSWORD:
|
||||||
|
API_ADMIN_KEY:
|
||||||
|
|
||||||
|
# plausible
|
||||||
|
PLAUSIBLE_BASE_URL:
|
||||||
|
PLAUSIBLE_SECRET_KEY_BASE:
|
||||||
|
|
||||||
|
# owncloud
|
||||||
|
OWNCLOUD_APP_URL:
|
||||||
|
OWNCLOUD_DB_PASSWORD:
|
||||||
|
OWNCLOUD_DB_USER:
|
||||||
|
OWNCLOUD_DB_DATABASE:
|
||||||
|
OWNCLOUD_DB_HOST:
|
||||||
|
OWNCLOUD_ADMIN_USERNAME:
|
||||||
|
OWNCLOUD_ADMIN_PASSWORD:
|
||||||
|
|
||||||
|
# traefik
|
||||||
|
TRAEFIK_DASH_URL:
|
||||||
|
TRAEFIK_CF_API_EMAIL:
|
||||||
|
TRAEFIK_CF_API_KEY:
|
||||||
|
TRAEFIK_HOST_IP:
|
||||||
|
TRAEFIK_VIDEO_MACHINE:
|
||||||
|
TRAEFIK_ENABLE_DASH:
|
||||||
|
|
||||||
|
# fivem
|
||||||
|
FIVEM_LICENSE_KEY:
|
||||||
PUID:
|
PUID:
|
||||||
PGID:
|
PGID:
|
||||||
TZ:
|
media_path:
|
||||||
|
|
||||||
|
# frigate
|
||||||
|
FRIGATE_RECORDINGS_PATH:
|
||||||
|
|
||||||
|
# plex
|
||||||
|
PLEX_CLAIM_TOKEN:
|
||||||
|
ansible_become_pass:
|
||||||
|
|
||||||
# glance
|
# glance
|
||||||
GLANCE_PIHOLE_TOKEN:
|
GLANCE_PIHOLE_TOKEN:
|
||||||
@@ -45,11 +86,11 @@ GLUETUN_SERVER_HOSTNAMES:
|
|||||||
|
|
||||||
# immich
|
# immich
|
||||||
IMMICH_UPLOAD_LOCATION:
|
IMMICH_UPLOAD_LOCATION:
|
||||||
IMMICH_DB_DATA_LOCATION: /postgres
|
IMMICH_DB_DATA_LOCATION:
|
||||||
IMMICH_VERSION: release
|
IMMICH_VERSION:
|
||||||
IMMICH_DB_PASSWORD: postgres
|
IMMICH_DB_PASSWORD:
|
||||||
IMMICH_DB_USERNAME: postgres
|
IMMICH_DB_USERNAME:
|
||||||
IMMICH_DB_DATABASE_NAME: postgres
|
IMMICH_DB_DATABASE_NAME:
|
||||||
|
|
||||||
# jellyfin
|
# jellyfin
|
||||||
JELLYFIN_TV_PATH:
|
JELLYFIN_TV_PATH:
|
||||||
@@ -59,14 +100,8 @@ JELLYFIN_MUSIC_PATH:
|
|||||||
# navidrome
|
# navidrome
|
||||||
NAVIDROME_MUSIC_PATH:
|
NAVIDROME_MUSIC_PATH:
|
||||||
|
|
||||||
# nextcloud
|
|
||||||
NEXTCLOUD_POSTGRES_PASSWORD:
|
|
||||||
NEXTCLOUD_POSTGRES_DATABASE:
|
|
||||||
NEXTCLOUD_POSTGRES_USER:
|
|
||||||
NEXTCLOUD_POSTGRES_HOST:
|
|
||||||
|
|
||||||
# ntfy
|
# ntfy
|
||||||
NTFY_UPSTREAM_BASE_URL: https://ntfy.sh
|
NTFY_UPSTREAM_BASE_URL:
|
||||||
NTFY_BASE_URL:
|
NTFY_BASE_URL:
|
||||||
|
|
||||||
# nzbget
|
# nzbget
|
||||||
@@ -96,9 +131,6 @@ ROMM_SERVER_APPLICATION_URL:
|
|||||||
# servarr
|
# servarr
|
||||||
SERVARR_MEDIA_PATH:
|
SERVARR_MEDIA_PATH:
|
||||||
|
|
||||||
# syncthing
|
|
||||||
SYNCTHING_DATA_PATH:
|
|
||||||
|
|
||||||
# vaultwarden
|
# vaultwarden
|
||||||
VAULTWARDEN_DOMAIN:
|
VAULTWARDEN_DOMAIN:
|
||||||
|
|
||||||
@@ -108,5 +140,16 @@ GITEA_RUNNER_REGISTRATION_TOKEN:
|
|||||||
GITEA_RUNNER_NAME:
|
GITEA_RUNNER_NAME:
|
||||||
GITEA_RUNNER_LABELS:
|
GITEA_RUNNER_LABELS:
|
||||||
|
|
||||||
# grafana
|
# monitoring
|
||||||
GRAFANA_AUTH_ANONYMOUS_ENABLED:
|
GRAFANA_AUTH_ANONYMOUS_ENABLED:
|
||||||
|
|
||||||
|
# drop
|
||||||
|
DROP_GIANT_BOMB_API_KEY:
|
||||||
|
|
||||||
|
# obsidian
|
||||||
|
COUCHDB_USER:
|
||||||
|
COUCHDB_PASSWORD:
|
||||||
|
|
||||||
|
# helium
|
||||||
|
HELIUM_BASE_URL:
|
||||||
|
HELIUM_EXT_HMAC_SECRET:
|
||||||
@@ -1,105 +1,70 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
62643330653736373764393833363035323137393736633433346139333639663664303735373261
|
66306532353835666663633632373037633561613261613139306436626532656366336362343465
|
||||||
3531373434336335393763666437623039393165376462390a363439396662633661316232343336
|
3966653330313132663633663462363361373230623262370a623661366633623762656363616537
|
||||||
33326133336436663638303036386330613830333838383861633730616230336565316535613264
|
66323464363164323131663335313264396538313237303432653532393631306635666138316261
|
||||||
3766363466373364370a303934646532303033353130326264393634646562363132616437366432
|
3738653338316132640a643935646530393362346431653966643061643334316238333632346265
|
||||||
39303930643939363831373631366137373137393539303033316165633234666164376438306531
|
66633336316466356566336132626332623661316337613634373036646236363736376561643733
|
||||||
64363865653761386366653665666333643134336338333935363337303462636561623263303261
|
66383830386336653236633933623037316632326266363136613031373439383834653134336237
|
||||||
34303337346134373161316335666237323439303133313137666336393331366163633866323766
|
66363039316661353837383964363163353433383734656564313139383764346533313564616333
|
||||||
66373766373061643366323635346237343030356635613364643165373361343333383836633433
|
36336231363661326638373963393265323365636665653034373536663232353266656365656338
|
||||||
37353265623935323735306233316336373931613039616162393336326633643139313965363338
|
66313034646236356364323238326265633933346530393430373364393837376437623138306630
|
||||||
62353636303137353636396361316363626132666330363230373561653163623364303036663235
|
35306266643835316136323232393630336330346133313963646539636463323862306236653335
|
||||||
63323965666135393064333039396562373634383938613433333132333266336238366638346334
|
30356335366365356439653130376139616336346363656436356333333538373036313266353163
|
||||||
33366533326232376539353039373136303863373231346561666338386136656332343463633939
|
39306365303630636135373731366334623165363336383261386334313061356461303664343133
|
||||||
31616338316439373366326366353762313066356562613738366465343437666631373030646666
|
63383763633566393662623833346662366235323836353639306266383532333736386161393138
|
||||||
36666236373332363035336139616464666430343764613863343962616230316362353738373664
|
36666662306233306439386639666434353639343137653831343666393463323865316464396636
|
||||||
32343639666231386338396139353736313235646164613438303738356238303930653538353561
|
33646238363236303531323131613731343262353365306232343634313637613634626162363566
|
||||||
63323533333736616664353439613933323837646665303431633361373064326561653438333061
|
64326238383331316365343566623464383732653333326534636365386230343836396234396634
|
||||||
34663034306530613438373132356631616463306663313331656234613165353335393132366437
|
63646235356639363036313839643632333066653634323661313263313331393332656131393065
|
||||||
62326231653862613765643535623363366264363638623362376237373933326637653864383436
|
65303338323466383161333237643433303961613266623134383936663866363337653535326133
|
||||||
33383535356231303365316638356566373439346133653036326362373663343239383762323766
|
62323464636638643163313064373736353263356638666434333135656133336534343932613234
|
||||||
33303137363762306136383762323337333662326131346135633932313135353937346532316264
|
32356361346366316262383232653835396435333837633737356335353837336632376337616364
|
||||||
30613865363636623732383337376137383039376264313135653039306532353665343635643738
|
35616365633738366466623835653866663461393738396633343235316231636138333663383364
|
||||||
66656239373333323266383962666239346538343434353136306439326365323235626661613162
|
63376164646563353335333133333665396132343439363861623734336335356663393735313837
|
||||||
36353234643930663939373465383661303038316166326230333734326536303331396137623064
|
34323034336431643362313332633665653837353635303061376235306665336362323630376132
|
||||||
65366232623365303964363932666436353336316333623630646337616235626366613433303865
|
36313539326336656134633564343538636264623932626164366138653035343732396464633863
|
||||||
36643836626231333964653830376435643563613538666339326464383365663265616535626238
|
32613363383366326332383835316666366430623235636536353337373035386361373236363036
|
||||||
30616533663032323663643438656666626330633164663161626530306134306433373430336239
|
31353865333933356561623661353133353864643038626366666431313831353234653430396331
|
||||||
32363237313861373964316139613766356334313064346135343739353361376630386130626633
|
35653864633263613963333734636364366336613430623032666666666266613538663665623437
|
||||||
34613732383630646335653633313466313864326430663633353231653765356566353766333833
|
30643562333561626636646337626234653936616438623738623364653561396638383564333262
|
||||||
63316439383938663334323635633538396134343232626234363337353331643336303037343332
|
39323265346263366530643132303033343835353334373865373561613539613461343962316663
|
||||||
63386664653534366438633464316534643261366237393336396535323435656533643137343137
|
32636461316234313832313635636431326134323638646164396537383963326439633063313063
|
||||||
39356135623333316532353962333630663432393238333334386637663735646530626562613839
|
37353062616233323932343033376636613039343734336630303139616331626431616330396363
|
||||||
36333834363562363931343264646337343766303464366264316564313736656136376336626163
|
65623565653235303630383534343739346234316337343233366530313238623139666538363430
|
||||||
33373731623930656266623433613164396166323332643035643734353138626632376434323337
|
61613833663666386161356331656131356462376463373432316331626531393136393838313065
|
||||||
36306465663339363733393235653964646130396463356264663963366362653238386235623739
|
34323361323836323561633032663833343537663637346330326337363165306237616335333233
|
||||||
35613065366365333833643739376636333733396162666362393461616136653365326230386531
|
35656530303666633438303732623232383965633038616632633164663461393465336233643635
|
||||||
33653166313235653863346137626564336239656530386232636533396664353330663634373630
|
30363334646161363234393533663064363364343838396562626232383036623236343664313366
|
||||||
36626265373762313432333936303663646361353035336431346434306434383261656636336263
|
35646532383164393365343366633134393061633362303164393034653862653535613761356630
|
||||||
31363964343038626434613336663436383132343739393163356434333066386132353137666163
|
65633634393033653363373235323933333766306165326237636530663737393063623664343031
|
||||||
38346465303937633139363532653539383436396263613139636236363336336161393631656530
|
63643538366238363066666566333236653362633861346136663036373731626136383530356466
|
||||||
63393530333534353166646339613538323664633236383161396466376339323763313838316233
|
33326230303864353838333136373736373963386638663164363139386638396265626365356535
|
||||||
33616338323438623138383131393735396235623861323536613761643663393934353862326638
|
35396236306639316631366461373235326665643565326539333739393264373733363163366537
|
||||||
34643866626466663836333965376163653037386164366634623239653231623432616531386263
|
31656366343831616339393065323331636136346236386131306533383436356566633830623163
|
||||||
30366533306439633134333163316233656164306133323961366530666666336566363537626434
|
37303036663935376132323733353433306361383234343962633165616538626564653239393137
|
||||||
63633830363539373534663836353163306137613233366436613863346638363335373663333831
|
65346236656266383130323662636565643033663933346337663836643765656266623563656430
|
||||||
65396533626263383530353764376263643230656262363233336132316132656235663631663363
|
31386365646437306362643965653631373862623266303165386666626430663130666130323062
|
||||||
62303933616131336666336262663333376430383733333261393262623334353165633362653932
|
36326331313838316339653231666138616332653564323635356366316237313662353531336636
|
||||||
65623965323332353761323637343037396435616136343364323266303163336362366337303839
|
31666263313134656136663862303536366631663965343565646637663566656466646435613839
|
||||||
34346235333661613232623262626664363062653834383435666336336266343636666664363639
|
39656230616465653465316633373561343237356637643336373535653438656137323264643239
|
||||||
33386134633631306534303631613234393366373763626633323761386265666237636662653433
|
66363066666161316362383737333638336565613230306138343735633432356661386631383530
|
||||||
32313233393038383931303136633565313434623862643134353435333265306535313262343636
|
64353161396463313532336430613862396537643436396562633665613736663965356335313131
|
||||||
34646365623534373936626266613731643162366435306331336165383037613062346636666239
|
63303563383734353331656164313638386135343336346263643430323932366133306261663562
|
||||||
35396561653765653963313339353365396438313363336661643931633339653533653164626131
|
32633363373537626633373433396565363032323536336263373835653363323661663834333365
|
||||||
37326538383430353733386531383333623463663731643261346633343036393433333935366137
|
65636332383232653933363736363131653032666135373436663834656337653739333338636437
|
||||||
32373432326666383533623531383335313562363230373238333331306662633361323832633566
|
62613463626437306133333632663662303732376364663339306637653534396433643665353366
|
||||||
63613233393331373163343264633564646232636363333337383138663836393339663537333565
|
30633332383136306230613435346536323434666431653834333639343234613631323031643138
|
||||||
32323538623136376235386435663236626636393630653366343664356565383232363332313937
|
38613536336465656232336238653532636664313766633432363364613937323337653464616461
|
||||||
32653438393435373934393065666663323266343233316636343262336137313263323337353230
|
32653939386537663635653733336463303538333431303537323633623834623637666132613030
|
||||||
32383130643135663730623664633431663237613834333735346433333635336266616233393561
|
31666539353762346335643134333637366533313833383634356266653831663333393661353439
|
||||||
34646538653733343864356365336634653637643139323265623466313434653738626533383664
|
64353432393432333865306535643261376536663064323163393266373235623530626138316237
|
||||||
36386339393365366537323230346534376634333465306333666532316662363437633934346163
|
63333631396234326534386238623937626661663265383631386662383866636231646531633562
|
||||||
65376437623638336638623133363831373239623731373639333638366233653937616537643138
|
64323762616431663664613564366562303630313137353838323064333966323062643233353830
|
||||||
65613339306131313039616163393761383433613039386566346266363065376166373366613033
|
37363763666530643535666235383062646163626164353037346365366332366162636563313361
|
||||||
32626135366466643036306235626265353564663738656163666466326635386134323739333831
|
37343861373764653633393930316666613335393232663332323035386431326566663038613861
|
||||||
38313834663164663834666263343333383738636563386635663438313531616131666465623366
|
37303061653936636234363937623162313731353961343337356663623362306461636438333131
|
||||||
66356138383561626331313037306664653035323534616562643034663766666166303239323064
|
32376633663639333534396162383438373863633664383266626537343165396435346337343935
|
||||||
38666565636535633235393932663866316364623636316661376262663238656531353337366332
|
62623232646432346362623430363665353036376564323734346536393430336135306335613238
|
||||||
33346663373865333830633333383734346261643962613230633730326335313266386333356639
|
35633365333430626134353535623363396330343138616530613333633961303930623633663662
|
||||||
31363839363132623839626632646139363534326263653036616632633965623035626265633064
|
65313032353232653233346665616562363138333639323562653035646431313365623036393665
|
||||||
33643561383038383538343864666532313838643765373737633762643865306261646434623030
|
3363
|
||||||
65313037396165653538383061383338326535346134336464326439383030303338656465626239
|
|
||||||
64386363663633353566306265363732646130323765633833356565623635353062663935313939
|
|
||||||
37613733643032363064623461306639633234343564666538313133613433393161366331316533
|
|
||||||
37643166633935393833306362363436613637623635656364373036613564313261326439343366
|
|
||||||
34323132646166353361633632663937353931376438356562376539333961336662643165636363
|
|
||||||
34396165626537643232326162366337303039373739316333653933633235356263616364336238
|
|
||||||
39613739626234323366336466383433626262623436316538643666343031333161363730663430
|
|
||||||
30306238633164376135623232633563663034633737643263336536666532366336396232326435
|
|
||||||
30616333376239626664356237336366343737396662336338653031316536343966633363313866
|
|
||||||
65383237623535316631303234663263326634626562653562633430356537393561613162623165
|
|
||||||
66363633363538363338393834343464393566343161613730373439363332613931346336646166
|
|
||||||
31343361376664313662646332366365396164636131336332346236663531373837656432303035
|
|
||||||
38363435643430623132343166363265346163643530633536616164383233616432303138346635
|
|
||||||
31326130313936393039636565646566633931303833313165373538656631346234646232373266
|
|
||||||
64393233383161363238636238383033666633336432393562306533313235653964616464393634
|
|
||||||
63646339643533363264643935333438303536383966336336666666373739366432626335373166
|
|
||||||
33616266373439633134636633366466623836663865363337353563376239383633343165373438
|
|
||||||
34663239303336626234336236666435363331343261396666366337323133373832623665393565
|
|
||||||
31323233323561336135366231656238633864353933626465656134636332346566663033666137
|
|
||||||
64313936343365393961363963666435353936653633343666376334393562363532336437616662
|
|
||||||
32393230346335646361316133663166386534343066326132623135663634656262653335383534
|
|
||||||
38343264363234346234646437663562616630346431623535616131663634393765343134353035
|
|
||||||
37643031386465336430663831353534633833656538663764313638636161623134353665623736
|
|
||||||
31333739376666306264333731396366383335633166383733646136306437653031373732386466
|
|
||||||
38363966616537616661383561393931613662326535316232326166626232316333346662316562
|
|
||||||
37653436386663616361616434333336336665383537363530333465346431653962366439303738
|
|
||||||
31666230393961373330643762386439336134663337333736633233333835333563353566633166
|
|
||||||
36633233316333393731656638323161306536313036346139653337313939653064663466376239
|
|
||||||
31623633623932633632346135346633666163353863663934643736376239313262313533396233
|
|
||||||
37616233396663323764373165663935333633396634306437393364313566303332646630366566
|
|
||||||
62343539376533636537366535643166386565343234366532303230393366393037356363326233
|
|
||||||
64613832353934346462653366646564666161613739386332386636326634303131643633636235
|
|
||||||
39386132303830363265333031333264386532303132333434323536613235376566623035613837
|
|
||||||
65646232303462373766306139366261623338646463663830313134616562343966303662653361
|
|
||||||
33613763373235613833
|
|
||||||
|
|||||||
@@ -1,425 +1,209 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
31373965303265656439373665316439363231363639356266623537313937306633373266653434
|
62316431346466333036383039323736336662386634373664343961343732303963323361663530
|
||||||
6334326430343734333233653034356434343038373733610a663263326531653465316666383531
|
3038393463616438356133633430393535333335663236350a323064386662623762656138373763
|
||||||
34353262326634656261356330343830383432343033393935613232653063633230373562383039
|
36343534333364666466656138313034393239626435323163376239333662373538323530646663
|
||||||
6331643961656466390a343438323061653065386234313662336233356265623233326533653538
|
3961386133613637320a333536636263646133303231386663386237626430626439373435333233
|
||||||
32646166633139643139353233373537663538386239336635303065623737663732386162626264
|
66306661326232303032653066353433363839303630376237363538626537303765663065653336
|
||||||
32643031313230623564393839346339363733653461363539323335363334373765613332653534
|
33346335363733343938393335626661626431343134353164396533373562396332616262666362
|
||||||
39643965376138386563323831383937663038363966663030376463353562353138376435373165
|
62396662653461643331373664653735653563396330303165646233363266333562313532303164
|
||||||
39653964373433363935653066363062386537323837313362306538386631373530386134373237
|
63363566353336646664373633376331633465353037656332333562663731373463636133303637
|
||||||
65303166666231366533393564633438386531613534393432386639326237373364343631323564
|
32346231386463353864343465336333623136336663633531343830613935666535306131326666
|
||||||
36333566386166333963646535663030393866353832383035346538643264386462323363623437
|
30353866646264313536333165373638373034346230373738666531613934313762613131333634
|
||||||
37666363333566333137376233333833323835623364373535336266336466666431663863366634
|
36656566376535643833623631383539363163323933343662306365383732303764346665306363
|
||||||
37666263646165396136306163643665333930623330363238393863386535663238313039613166
|
39336162653734303062346335656431366636626262666639393162346430343737376233613761
|
||||||
65363637363964343463343865353339343033396338316132313432663534386634346265636335
|
38366263663062653332366137346235376261356666663331353430663836626339663064396461
|
||||||
30306336346462386236343739633165633337303330626238626265343962373836316630663163
|
65386431646435313038653131633531326631386436333361316233306465333533393163653437
|
||||||
61613539323834643063373962643762663938343230376335623735343731653139396361653166
|
38633765666362383236386130313961386266353463396138353439643232333965643062356334
|
||||||
36643763316638326336653139646431303933383162666133613463366533636139666236633535
|
37326136396133373061323366383631663165396564623631653362623438336464356633303538
|
||||||
36366537623735646132616532643831386462653333633132666265393635343131633139666266
|
64346435613736633839626561363161383435663333383133343030653835323131373937613435
|
||||||
38383736343234373437666436303631383331613461373461343339346566326338613137363230
|
31396661613534636138616336333538663835623531313835616266653662353262616162646431
|
||||||
35333863636462306362363163396562623935326538303662336365663030343066623261343431
|
34393366633433643536666230356635376332393632333531633139396432613463653030623564
|
||||||
65626434663638373362636538633631343734643432653464653964633731353039323434653365
|
64356232653337613535326661633539333663316566616133663338656139656639393538306332
|
||||||
63386262333766333638396133313763306336363262666262643364633666373834396635313438
|
65333036663563333733383439393332386137313437623834633231646433653233623037346535
|
||||||
38393435663330333935623131333737333338366534376661383665616639386134373234363164
|
62386262373032646230303764323138623332353236653461393838316663633033353339623132
|
||||||
33336562626266336536626335383438393732393165383030396237666466376531653665376633
|
39356438653366633464666638656630333438323936333035383764396334326637656238383932
|
||||||
38626463303264323866643031613366303235366661353134613438393463613333323033653438
|
36313165353534336666626664373033616132643536366335333466346631323262616239343564
|
||||||
37633564316136636133613866623138616364306237313232626130396134303230363735326132
|
38376135616264313461323739616663326631636431633937366534646366383430623062316537
|
||||||
61323536346465366638336231306662316262613734393866386131666466363639343930336234
|
37313536663139656235663335636665633634626237303365326665383965636265353262643362
|
||||||
39306135626162383966373434646363646366636565646235393934373034643764633233306233
|
65323963326430353362346235346434306133376334613831396635373936666565633232316465
|
||||||
36646662656637623165306262376561383761626230363735343464303063666365666235653762
|
61316135336633356534356363636130353837653435343032663361363335623164373835613364
|
||||||
63663535343933636333663136393161373563643730633336396565666531633764666639343965
|
64643365616165393436376263323439613637326434666639613164383066306365396463633633
|
||||||
39303862373532373236333261633166633764663161656536633261626632623034643434363736
|
32633332346335623831383734653838323436346463633435333530363036393838346231663932
|
||||||
36356236343638643164623162356231376639636635383062326566666234343038363032646265
|
38356663653066323966626137623334623739666463366166646636306638393638356332336630
|
||||||
30346363646530623764313933306566333262303561383634383131356461386562653465636362
|
39626534666235613237343634313933653931343831316137656439653266393663343930303462
|
||||||
64643631623762333033636362626538633132373735616639333364343461356234303563663936
|
34666266653162323231376564393662326430353965383364326337363333666562326262326233
|
||||||
34336464346162313063333866626136383566383634613031333165326330383632363338633733
|
36383733646362303330303934326533653365643538623039366265663931613031373862366634
|
||||||
62623832333032303666626664333564633466313437353462366365663262343531633432303435
|
31343835626430663962386532326666346261653236613132373535303937386535303432663766
|
||||||
65666130616663363966653431616439313366623830393662383437623037363438333838386337
|
37313932366562643933303434623234393765363464666362323635646462326438303333393132
|
||||||
62336132363339316438656564623237383735326464616530613631323339386562613631343839
|
32393735303039623135613033636532613763396362366565316536323933366631663765333033
|
||||||
38386362393339653533383232353237663431643536326235326134663834306234376366613366
|
34356536646339346130383338316162646530326239373235663632643034616331356533363234
|
||||||
61363631623364363636343861356361623038333363613361323865303964623034333762643034
|
32373365343435343561623265343237376265663039653634663538313062626633373238356262
|
||||||
38316137346664633139343337373538656336333438623337656135663663313662306635363838
|
64356431353936663536363362626165383662343835626238353036393235343034643465653663
|
||||||
64616532653966373866336364666338373463383963386331623463383463363532626365623162
|
30393861363965636436663732616165393231636235316533663264383265323763656536626166
|
||||||
36636366663762376136333065663835336531386235626233366135616362376334623530646635
|
32363562656266656331353262356435353030323330663032653930363437313934633265333861
|
||||||
38366436653465326633633131323137653466623964343632353766663131363866666239363962
|
33616531326633383237323231353866366531636437356230636330393533333331313566383138
|
||||||
35313831633462326564363933333931323638646231313639323933333537373433393439656439
|
38303562643435383736363036353138626561323530393736666236346639326162383638303165
|
||||||
32376665363964616637646165326365323935663530393666373433623362656433656332326238
|
39616361316632323936653734656264333764356431393635613833346434303861646264373337
|
||||||
62613336363863653866396661663063656631303064376339306138666466386434663465323866
|
31623435646463346630336235653762656561633035343332636135393464393332633139643761
|
||||||
37383761393361346661383032626265326265633138313466393339316536366664393363623366
|
66613964663862626664393133326638343336373962343566646231356261386339393162313438
|
||||||
38646431653163626330386362663765376533353432393730616336373033663939646230356630
|
38303036323132353132653633333064346338653566346437356633666565643730343763373137
|
||||||
63656664346665343733323565376634363134303830373064303935306362613039333731336562
|
36363432346633626336373934646635353264623834303431313466346536653839366661646636
|
||||||
66383165663565663436356639373562633364656364323366326363646337373735653033363732
|
30616461653938633562613536393864376230393262313663666634303566333766626435643333
|
||||||
34333664306465623164623961366132663362366362643661323635306461303165376664366334
|
63393461643266643538343132356130383262366463313132383239323838636361653638653437
|
||||||
65643261623336656361306233323966303131353762356365323533353431333865653464376664
|
61383936303836323931666164373963656138343962326135623565623930346136656566373335
|
||||||
39623662636230396463663131653037656366633738653961343761643032353761616164633139
|
35623132613663356430363139323936643137393337653438306361316464363734313135356362
|
||||||
38653135386538376266356532323938626266356266386434373162613338616539336237656564
|
34636566663636363933363462666635643135323631356262323635323932363035323763623734
|
||||||
37363033343933613632663331373862653236366135383432663333356164623061646137343532
|
34316637626263313734326466366364313732383465383062326137646262383130313365356463
|
||||||
30356137316237353662306564323732316635653439666463393231313738613134656232323037
|
38376565396339346463653833303361646430323636623830646233633362353838333131386461
|
||||||
33303664333431333561653238313530623838653565656663343636383961376339383835326636
|
64323464376361333239313739376436623830393937353934386339366339326439386564306434
|
||||||
38623535663439343035626330653937646234333339656162393735623661646339346362326462
|
66396136656463643462353663633233333931316532346162653961383334656337636261663266
|
||||||
64626439653939636432653361616633636565643538653139323639303439386535303538616465
|
39636331353566343966616166363066623561633837313062633038633137633264346663623730
|
||||||
39333532363362646432363939376432663338313632363636633033356534343938313439316638
|
31336438643536396134643338316637333562663639366133663637646236613963353966643938
|
||||||
64323930623535383332633961623334383366353665303839323837353537346431626662383566
|
30366364643165616435353062323330396631326137633034666330376633353466336230643466
|
||||||
35323934306232326666623934373464653939323738386533333934306263363538656135356630
|
36626366313639373331303734353862336665643962303837393164616266323433316665626436
|
||||||
61393661383036346166666434373538303739333336326337316435636363303831356361613336
|
31303137326331646539373863623638663839373461363135326132646632343764656538393035
|
||||||
31626437353263386564653763373130343639383738616464336439306632376138386561626135
|
30663833653236396563393634373364306536323965656331666465643762643036633866343139
|
||||||
36386262333164396135633165386539323039383531343434323739323938306433323761306639
|
33343438333137643733616530666466376563653535326261633933303539383032643439383030
|
||||||
38373434386535323161313039386232646239616633643161636134626464303032303661626662
|
32643033346463366335303663363339323866316437383366393731373034323763363562333033
|
||||||
33653336366331393834306664356238333066323835326631636432323266383631333830616633
|
35663464336636623835333632623166623163323237353831643666343564303632646539623461
|
||||||
65613939623231353965303530663466313137616561306563336535346535383264323761326436
|
61613864326438653935396434613761376234306261396262323732393338376339613866643639
|
||||||
63333462326133653433633931353734663437363331643933313561653138636530386238373136
|
36386537363536376135323862396363323062356161353638393063336466653437323838633862
|
||||||
34626466333537646261323430626661653830326533383635363166346162336464653164323438
|
62663738353235663230636639616638313237313638626334633061633535373733613734626665
|
||||||
32393539316363363265653433633466646662316665636636383262643530353331346639303930
|
38316464643035343261633466343238393632333530323562333066326334663932643337626530
|
||||||
32383333613435323036336564623537313338353137343438623439333561303466386132666330
|
32373366323364306236653465633964326539646265346466633730396236366638313032613363
|
||||||
33366330366661356365376631626666336336623731623165356163383336663431353761386136
|
32323332613562613835363433376562643431623266323131313031316163366137623434323030
|
||||||
64353862623830393934316637313263303162336263653431643737363161306361613564373838
|
34336234363861366435393532616466363631313535303264643765346631396564613432616363
|
||||||
39663064666437376235376234396437313866303561326661623864386639393230656531376361
|
64336364393563396132646166313163323666373638616136313061386561623338656538373033
|
||||||
64393233656432353637653839633933366232383735396236353862303337376532313532633132
|
38373166333762323065326464363134346335653236613530313235333864393265383633663637
|
||||||
64333230383366333164393238363135383362396336636335316530666533363934656335613632
|
32363134313230333039613137306135373964386230326561626137633133326463373935646239
|
||||||
32303730653833303661303935326631623364333039373031356638333665326664643733303663
|
35316536623932323135306233383332333832396338366561666565323462656666363834346431
|
||||||
33386237663430363962363333663433393637656665616363623638613763316537343563653330
|
61316139343634653538396233656262396466376263643236346438306630666534303337323565
|
||||||
35656334613765313238366335316634646532613239666364393030343661623862646366373461
|
61343636303564363132393236363333653263353061376330653534333762346130653561623039
|
||||||
33646663343734386435346434643362623135386434336133353065643966303066336532636531
|
66656135393864313934393233663738386430333534303432396534623831333363393439386135
|
||||||
63383964386336363733346137663862626430366364353261366162366235333965633866313033
|
35616436303439653132356530626138373934383962396564646237316665323538396666366437
|
||||||
30343336636631353464643764386633633739616134613765663137383635323361366638353734
|
30376339383233383664343965306534386166613964313534636261316537316637343631393836
|
||||||
37356130626631653736646265366131656462303965633066373335303736393562643463626362
|
30613761323964636433613036653631303434346633623166636139326637363537613833386165
|
||||||
39653832356536626166383235343037366537623933663165613163656334363730626363393332
|
34303032346137623736373563303464306232663066373931626532373639343535313830613135
|
||||||
65383234356232663733356664313737626535623834333037313237663065633639336332383462
|
66656261646465366366313436313139376136373939396330393464346365383730626466613530
|
||||||
61366663613432663632666664316230393032323362643664663539303466666239396535346635
|
36303663626337633735633636666164366237323635383664333938373362626164386233663165
|
||||||
37363464393963336435353636383032393862313062613961303635646464666161653738343339
|
30643432356433346536663932616530326339383736343036333663383039613132303263646236
|
||||||
34343332376166613631353234363764613035353163376631303733616137336366343731356664
|
38633939383866646534366663393434373464616165633335373034306133393666326439613761
|
||||||
32626237643464386364336137363832323636373333376438383261616632343234666130353431
|
65373661346661366437663236663236663632356466386564376163636636343666303535653661
|
||||||
63656131323838356331373764653861663862636239333836623962653430653033383433663361
|
66646465386133353539323863656131653238363633336239376131613531396336313562623331
|
||||||
34383462303864393665393833663433653862656230356536313538663766656335633435646635
|
66393466613461393931343765303565383730356131663533346133386337316431366461343731
|
||||||
33613232323335636331613932373036303630623338306335636331623164396237353335383237
|
38646562613462653733323163653062663332393438313238316530653165363762313537333961
|
||||||
33303961313139303033376134356431386464316561306531636364616635326663613862373366
|
39666635363534646232386538396530316232363130666231643363336361336339653461326236
|
||||||
63616562613737393032633934643461373365306430333439656138646639363333333839356238
|
61373932346234343537366433386335353636636666326164393364623035656530333036363632
|
||||||
66633638313737363165336363383038633836613261376335656438376634366533396664306463
|
30643836393939646139646134636362336332383836663862663935383536613031316135613137
|
||||||
65633831653561326436633764306635646333333065623637343732323162663663626633323031
|
62613065363265666165363732636437313536383037313863613937656437316331356630636161
|
||||||
62306461306232366631636264356337303137643266353165333635636238666331336465316666
|
37386335303237313365346134356266336330303134646339353432333062303931336639613365
|
||||||
32636562613831396533326162383832323963613133323830643037333630376463326263376564
|
64353431373862616363616330393034396630333232383661353533323034383762353062303538
|
||||||
32343538373035323966633038366436323364643664613232623038346262393864656337393835
|
62326433366439393030373163656332353636343432633133626139613535363063353263393761
|
||||||
31633863323266316131323932313264383631643162616361356462326262653862616436383738
|
65383238636564663061356561616430633033323233336530663335623538643466343165326434
|
||||||
39353832663434623362613765636535313736343532353338616666396266393436616565626361
|
35313835386566326138663736613838613064306238383063376530636362303938656364653436
|
||||||
61336463643837363434353031653961386130663539313939313634663135346230666530643235
|
32313364653439393132353961343264346231333732323537623065303839663939323466613834
|
||||||
63353532656634343634616531623835396430323337356138343463626335333263363238333935
|
30393138346632623236356130346538643934623762663538666432343065643465663164386564
|
||||||
61373939656466643034633364643963623934623035653265366263333739666363613833376337
|
39356565646566353830383338623939306161373437336230373166316530313331626139633039
|
||||||
61323330653366313433326336633939343133343565366339623337363237653265323263333731
|
32336535633839643532626632356464336533623766626233336335366639346666663931306536
|
||||||
32633333346633363032323065636232306232643238323164646261633630303831643862623133
|
64333239613736343534353663383232626638396438653262393835643138353466373936353234
|
||||||
31336134303466616364386539643535363335373035643563623839633633353837663766353037
|
39626439663463636237306630376231343537623262313635316164316539613231343565333532
|
||||||
63396133336638663530313262653863636665343033353362393135303666336261373937303135
|
66363539626638336637396532386437363438373530393165613434616162353561633839366533
|
||||||
30653165326238386636356132336634343561386533396465626637613039643362613638303866
|
35643265646439393563303433386432316663643165613065306461313939636133613733373138
|
||||||
32386231326137393065613966326463323934323736396230316166633565663637616637633332
|
31623965393466363831626135663335646661373136613934316532333964346230633238646539
|
||||||
35313166383233303233316162636630623238386263646338393662386530316530613862626336
|
38613732393135363430663334316162623330663865393234343730653434386462366234343332
|
||||||
33316239623632366362386265326533633732306566316436663539343335366563666430646136
|
39646636646630303964623662663437326161316635646361623833343136373333336463346230
|
||||||
39343863396333663932613163633839356133623864366132306232646635633932666635393132
|
61353830383364393137343134306665306633396632633634326339393331303231343461623364
|
||||||
30663930666134323738323766353562633637633939353834636639616237623133616633653064
|
32353131333133323939656637633664663437316666623438666335376264353637323562343935
|
||||||
39633964386336376131636532346265383532323965656265656630646436613530633934306462
|
32336261653664303965316132353764346663656466323464643434373736393462616166636162
|
||||||
65393933356336383439653362353266333136633164616362336162356161656364366238666534
|
66336563626536656533316165313735386334393533623038656664333438376536396264353030
|
||||||
39376162313530396435303466623735623863366535623061383330643335316634646533303332
|
35366532613733346366353366623630306630623130653331363165346338343832373338393765
|
||||||
37666136323165623865643562306430353938356664616534336362303631303234656662333761
|
30336130326639333334393338366362646235383635343139643136366630373761386438343130
|
||||||
63623737633939353736313936623338363262313466366239306534653362613538656461653036
|
38613831663533626632623632653934653635633366353130663538326538316636383262386433
|
||||||
66643238663436636330316563663835353966383666633334346532373164316633633461373430
|
34326163363136613861646438323132376139306533643765316435356363643235616365303932
|
||||||
64386537316131633066353137633431316530646663633835653532363332643161313032353164
|
65303737306339633330633937363638663337636538623535323637383761666461306363616338
|
||||||
37383933626234303065396133656137363262656633306335653965316632353235313362643065
|
63356364646463346437303665376266656466636265663864663163333032623836646533326437
|
||||||
39663964373437386539633266306566636438623035343630643463356566333537623865633936
|
34316131633031363966316238643163613838653061383734366631653733633438313038333432
|
||||||
65623633613233323361333330313938356332616237323638313261353062363661636634656134
|
36633963653366353431386261303264323931353465343333323339613138313562616464663931
|
||||||
62633862336264376631303037616539613466626139333462323735313238303933303165613162
|
37663636376633333033383666323161656234346261363536343134343566656530346433383766
|
||||||
31616632623231616564323762653139306532393361636566343733356661373931633264653165
|
61373166666530323637303737653733396333313335646666613936623630303262306565343239
|
||||||
33313763383237356636383931306364633461633632363631623338643563353537623837653235
|
35363639393138323062393436306466383831656638666232616466343065363464313333333162
|
||||||
37613566656130623930393039353435323135616537623561653837616361663832383430663434
|
32393539623737373231636235666233656132383966663964343161626563383965616161623666
|
||||||
35303163636335626634376339653136346134336439613934386364653532366630306431306330
|
31356461653264353239356433646132316462386161356330663932353461386339346530653232
|
||||||
32343430613336343766343064363036393961656263356562643834316261323563346138303864
|
33306566663061616133323230643930643030386633666133313132353436336135383336356563
|
||||||
34633062313562613531366262313566373539363165316465323964656131306163666265663265
|
32393838333532383637363531396234623038386665336363303731376461306630663761303139
|
||||||
32663633336632343932393031366438336336353866613563653432376138376363643834393238
|
64333130356538623032373839313864633561316565383434383962353738353666636366333765
|
||||||
37633862393732336331383935363966613561313839396237623533373963373432346338343962
|
34353334646365616234623031393339663666633765636432666666336261343761333733396534
|
||||||
32393665353534363839373636306636303539303961336262666630396163653265326165353438
|
65303064643535383866623363333162303333393461313964396365363666313134333033383233
|
||||||
35393462376437346233326465616535626461383130663862663439346462316234346261316538
|
63393837636161653031633066326662366366663636313666663834376332356336666530396263
|
||||||
33326661393131643039333561363662383365386462393833323139343963366339663436663766
|
66326634376365343635666130333936346133656263343463613763393738393862353934343237
|
||||||
33613162373966613332343535336165616662366332313332656634353936383063623538396164
|
61316437383830636264326564346535646635386562613466323832343665636630346462333863
|
||||||
32323962383138393433313166643135306439343365643966343937366133356261346235653465
|
32623537396538643964663936623031326265373066313637636232363364653538363064613262
|
||||||
30343566613935636434376665323361316363643730623064383434323632666561373462326262
|
62306561373133373532376366336637393131383233393036313161363563303666303339363230
|
||||||
33613431613064643134346364363732396161306134316630323338313961663634326638636131
|
65633263363064633837363362393632383966366337393030353132346465346463636535303062
|
||||||
61386639313633626262396635336132343336646133393238623862663231383762373635613862
|
37316665653230656363313937663636336336333136306536303861303439366531323266336662
|
||||||
64626261346135616534333764643037613130343236313465343438663165633663626430326335
|
62376339646334303233376134323065363938366162316461626566343235303761633132383433
|
||||||
66626637323463303438666537323335363332326538373163356330393630623363373337653836
|
66303435633336313961333734353236623536653739336164353037343334386163326432303031
|
||||||
37373438303936656131303563303464373837646466353961306364643234383132386630303361
|
37353630346164633766353365613662373936663265353962333566336238336533396639373839
|
||||||
32643236663065383163323832613166396432306632343037376336396236626663653666306639
|
62346564646261303762663366303939393963393134303730383038326562353837623130396439
|
||||||
61396536623266393934653631663162306435346434636565333838366132306631336264666433
|
66636535663137333535393864613464636334363132376562393531376132333230346632363230
|
||||||
37346164353932393034376436666432643432353664653462663837616139626362303566633334
|
32306363336638326235663466333236646130336539333533306236653861313465343661613235
|
||||||
31633761633761373863353432306231643530663565353739626465323265666339386461306239
|
32643633633832636336313431653134623234303534363838306337363164326531343061306264
|
||||||
36653961613937343662353438333666646332353836333362613162663034363366633566363932
|
62643033326137643461636534623965343161636437326165303536343135393163643734373936
|
||||||
62383330333166333365623261303364646361383337363237646236336134326232333363363239
|
61373237326663616461326462393431633765346330313136383030323736313533313662633438
|
||||||
65336635396164636436636435326265393334396464366430336630646266373732353563323065
|
30616335373732303931643131383732646261333432323537393736313438616336306439626535
|
||||||
35656435306365616432326534636666393963316130333230646438616564316434666637363032
|
65306137303464636330303765303663366436353063643434383631376462303530643836366632
|
||||||
30326437366530643336366532373537616434363565656231656233343765316163653431666331
|
64613730316439666462613534383561343632323832383336636535626163316535383833313834
|
||||||
64353661623038383266613362666666373466393332653937646532373738653232666263643162
|
61383433643637366561316665346335623135323361346532656139353261663531396464343638
|
||||||
30633165333036333234643534386138356234623537393335393433316339333931376662346535
|
65653137303664613562333661363636623533333735616231623139343661353866623864363533
|
||||||
33383233643330353136353934333332656639343462613332333264376363346266383862343862
|
62636131393364643938363463303465333430386564306531366436316365613063623866666666
|
||||||
34653736376361373163356130393738323365383462336164653762646466373535626431373539
|
65653261363562653363306331666566336462613661646264306361663835633162323032616236
|
||||||
62316462303333623336633531633332626364633962356434396665306133626638343266353438
|
33393663613762313033396136356339356538376633353837613366326634303438373036633362
|
||||||
30353032333764626531663433303665303861333730656634316166616636396631353661303837
|
30613361633037356633376336353539616134663561663462633336373836373736646363306165
|
||||||
36636135383730313931666138313336636637303233383331336638326332613433373161653365
|
33323935313131376531643733353965353761393532333835616534613062373237353932656234
|
||||||
33636534356236666138646365613937633666656536313361633231306137623831616164656135
|
35356538633032383961326562346161356231613564656336343039616339306335666563323464
|
||||||
33613432316337383064386563663837376461363932633732623865613463373738313131393939
|
31393961636330333966306332373837636135646465316235653533626261393865653932613930
|
||||||
35643562393634313030366534386134643362343966376433353966326334386565643962626335
|
32376539343530326138656361356238653238643830663636656435383634336562306339366330
|
||||||
30633364393130343366663161623263373466383864653964613663343363336662393961643833
|
37613663343837626661383235303238653533326436643236653034636139333630393934633462
|
||||||
64313664313361376332373633326635376166666564363437343066623165303134326430376365
|
39613365636262613736316530663732623837653134653133363032623931663933666262323035
|
||||||
61626133633432303564353266303062346233626633333564376265363739333433336637633634
|
38666662333835336464316434303436373663353333396162653333663234643139386332313762
|
||||||
30613837613735333437663063666138656535643239313664323232653463363538383431353034
|
30303365646236653362376464656165366536303331393935303936306639656331636261646530
|
||||||
63613664653862366262633930643661326237613663326230616337326237346330366130306336
|
39333332626565343964623136643734643664383662663133663431353161303639666437386638
|
||||||
63396131343632313562323035366435653639303162356563623731353438303362333232656561
|
37653332613865636666373634626466623638326237656663323734303363636334643430626533
|
||||||
33623839303038666239626366663237306164316466633062663664663663616362616565383535
|
39386437366430613737376433366539376637393963613137633162653130666535313363343437
|
||||||
65326532346262343438366366623534366261373338303463616264386130386165393839373462
|
39363232366136343937343131303438353837613335326437333166643336306638623665616439
|
||||||
66313364623634633066383063643235336130373663316362633234656236366461663332633331
|
65616662613331623137653539313462336138633739623036623264313835363435303262643031
|
||||||
37643866393935643961636338376462393161383862366362613561363565623631643634346239
|
65316236636432346562643262353663656364353536666138623437373334623131613238353763
|
||||||
39346666666163633162623462363936353563666330383739613462356231653661326363393162
|
61356664323066356533616563336231393432643038306464396664333236326332393161373963
|
||||||
39636136383835613463643666353561626638313533623664643166326235313634643465346263
|
32663435383363356563363134623736363966613834663933633963383463313335643036613633
|
||||||
63313765383739303163343638313236313261393463323135306166303538633063373831343835
|
63336661393531346534373231316537353539373738373433383666313435633433613031643538
|
||||||
63653564336334643863373534383037353135363564616136353133363566303861353464313432
|
36326135306139353032656230663734383437623439333031323163643230613866323535663162
|
||||||
39326238363362663834383566303632363939643337343039356562353336626461663932353137
|
37346161303935333966346565613234356331333031656431376238336438666239623032356435
|
||||||
62363063346164383163396163353365376532633562393931373539326632343933636166383463
|
36653235663664303235303933626163616363633866393337326430376335303736626561386231
|
||||||
30323161346238633131646233336330363637366633663864613165373231303732363739653264
|
34376563633963323565616136343765316365383538333765346365653432353261346533656661
|
||||||
63303433353933356534323037633237616432353937316535316639303864333339396561646362
|
30346433333639626234643630366638616563623133646666323061366530646264363566333530
|
||||||
31306231656136343531376365623335356632653764663063666339623266666562393235613138
|
32623161393733383036336238626236356361656633343732393438663937376163323865653366
|
||||||
62373734336233396461383930626461383634623764623035346230316133303233383034623963
|
34613035623230613362346337343535313139363636353536656131353139363835616236663863
|
||||||
30333864303136313866333736343865663438616261333232333365313961396134356461373866
|
62363666396338653732316133666536393663663030313531616437343761613637636233313431
|
||||||
65323764633632373837353461376332386239653134316363386131336663336131613036646332
|
36306566303832393136663963323836653561653664666661356461313131636435306632343836
|
||||||
31353532323538656136633133313064353231376230646439643436666536343665316134316335
|
64613839633264343239626430363632656162343233626330613538663362356561623965336232
|
||||||
64356536646631316363373866326131633163343038653863383065386635646132666363366266
|
66393432343132643039383138323733353463323263663239303233316366626437336531313562
|
||||||
66666130333830613139336331323565383566646237396538613066396335363835653238343733
|
31626561663962326431336138643438623836633262616533656434343436636134333066613065
|
||||||
62666130373632386536336531616331303064646561356366336635343139373261363738616332
|
66633663643632313436616533326163343733393035636433303336613463333532633066633565
|
||||||
66613234343261356465343734393132343236343734616438336165366663336338626136343661
|
38613932633632353434393433373738326166663764383765613136326630663434363764316431
|
||||||
62663239623339623537626365623436386365663534633065313463343163366462393764303866
|
35353562653363363533363538646336646666393564613933303066333033653965333033316163
|
||||||
34643636613061346438643337616338363961646538366536366433363664356438313736343833
|
61393666383935393261373335626262313661653639643830376265633562356638326336663432
|
||||||
31386465663263386635353834363666303661306239333435343234393737616664356534363062
|
35333936313866383432666239313630613661613433303330363539303462366237313533636263
|
||||||
64663261326336383863613134336438633436666537646437343235393234303465633331616431
|
63376331633865396639643530663237326338383535643930653233306166343834333061346463
|
||||||
39663666613462306630646464326632636436316434363037643264306637636362613933376366
|
61353734613765356165346437336137346639616561643238613565323938386161326139623861
|
||||||
62383061643938313834613762633939623965373235303066393361323035313831626335626566
|
31643866393765656263646663376638656237323532363935353961633361623862316431643861
|
||||||
66656161643964316431656535323065303434353463366465636235393265313762366562623663
|
36333339386266396132613066323834376265396563326261646561323434323639343561613161
|
||||||
36363565346462346630336636636462366138353139373461313831383234656438343638623233
|
38306464383031393633363764303930306163643365333532363138376365316239363361643962
|
||||||
61393861336566323465343432353536336566306533346563623364303565633566623839666638
|
30393333646233363564643661373865373034663131656331386631616466333166373331643963
|
||||||
35373565316663383464646639303037323662616562613962643135643932363262353338663134
|
64346234386338663464356165366461353365323737343165616439646463353661323534323331
|
||||||
35616665333266306438626637393439623532313333323836643466666363616538306138303637
|
66643931636631616331383065613334333262633639636164333165373237623235316434326531
|
||||||
39303262616531633631643737613332643937626365326133626165393432313739396665356463
|
30336663373437343264353032363737633838303034396561303035656234653333636366343463
|
||||||
35333838383331616566613838303533663564373338306263336463613638393331373531613766
|
30393966336664386434303764356531326665376230623830303237346261666162633864393866
|
||||||
33356632663936623234643033396662343566666133333664623764653765303730613233336466
|
63646332616135653138333437356565643333663730333263396466303234643331653836356431
|
||||||
66393533313766636161346566626565316361623035623464306137663031636439393936626234
|
37316434366533316132336238373833346165303062633866623033623037646461346263623734
|
||||||
35306139373139636339333733303730393434313531323339373835326165343061393963346238
|
62393039626239393435316538636433333634616161663833653564353637663864373264313530
|
||||||
38646562363766326666396664333632643464653663386437333035343465393162663830613666
|
30343533306335623130
|
||||||
38353332656331653364323434346331366334393636643265336464313536623838366635346161
|
|
||||||
62363937636333393133643336366230386630303237353236643333306162666636306464313831
|
|
||||||
35613332366532303832393135656166383265333361303735346635303139356334383832323466
|
|
||||||
63633762303831393866626531653365353164636536313861316665383431623332646531616534
|
|
||||||
61363534393434343131383037636362613464353730376330623764616633643730396231666433
|
|
||||||
39353061613533363463336561636237356561353837346464326638326539623965396639313738
|
|
||||||
32396161343466373334636464646166626139613365363038363330363238663839386564616532
|
|
||||||
65653034646338343434343138396263373534613766313033383934663165613863383365333962
|
|
||||||
36336338653336643064373733346234623039393531336436333337313532616333636162653666
|
|
||||||
33663066666434636663323162623435373164343961643639393637346463383136643865343830
|
|
||||||
37376136323466323162316333383463336564346135333637666338623038613138393864343132
|
|
||||||
62353533333363383664653233653032616530373436353035393635383765366630363935613730
|
|
||||||
39326639376234393132346334346166383961336639336137366532383366623135633562316331
|
|
||||||
37336165643439336132336431326161306263663264306632313766343066653833323038656437
|
|
||||||
34336566613234636162616134623539303439356363383464653864386331353865336266376131
|
|
||||||
66646338396336663234343165626237366264353230326230653964663965346636666466376263
|
|
||||||
63313564323166666236393266646533646464376139336464643636353732376166346234376361
|
|
||||||
30353931613137353530373030393430613664663461306261343962616636373231366264663237
|
|
||||||
38636463653036363061653566343531653535303238633464333833376634366462313962376137
|
|
||||||
62323164656131313762323030366364303831333965366136386130623563376363626439346531
|
|
||||||
33366664313637303365643231633733306637393165316132633136646265613231373836373639
|
|
||||||
35383335366461626362653730333538613530633038366263373139396562313063633562313430
|
|
||||||
34386362333663326437343161323366633030613762326136303933636464613564666261303736
|
|
||||||
64326364383238353135303933646164323961663835366665363039333161636461666532313138
|
|
||||||
34316639323231316135393864613633656366643437636536303463633434613533353165663863
|
|
||||||
39313438333033613938643439393031353761316538366361646564656531323362323061643866
|
|
||||||
37326630353264653230333332353963383834393063356636636630376463666365376161383633
|
|
||||||
34303636646631366539323931653334356662326462393464666265366566303966316231356466
|
|
||||||
63356162623735653364646465383665613333346236303135346333663037343161346262343532
|
|
||||||
36636265353663613837353932333030366234613539663864366464306635643066316537343666
|
|
||||||
63663064396339386362343639666131643830366361336533636633653265306530653632303937
|
|
||||||
37633032663937373934366430326665336266666537656234663233613235306336326535626262
|
|
||||||
66303164383062303839363231303464666266643536616536333832623561396132633236623566
|
|
||||||
33613362623065353265633433323362373734386230393339666364323232663864623366343433
|
|
||||||
39366166633439343364653231306662376230353462646537393965373066303561376461326638
|
|
||||||
30343565316633626466326661646637656232653738366362363434373565333563636431386634
|
|
||||||
35633661326365616136663637373265353363373162323437613433636466396237373530646534
|
|
||||||
33626563373033663264366439383139383762666632626335633261663336323634323732303264
|
|
||||||
63383732666363313938353534323039306331653863643338303239643064323439343033363534
|
|
||||||
38613266323865636136363936656666363036393866636164376365316235346239663739356461
|
|
||||||
35376236303134373939356435313838616238646165643034376334663535636464326238363932
|
|
||||||
65386664656537303663323634646634633539346563393961623937323331333630376664653232
|
|
||||||
38343039633264343934643161643431643739656535373030626534633835323061366164316339
|
|
||||||
34623564643064393937393562643766393365343133323030393663643536653931383364343632
|
|
||||||
34633461376632663765663164373631343537643563646633663533636366313933373230323037
|
|
||||||
66303435356635303865636130643934623634323763623530623865343166366439353965323162
|
|
||||||
38383539333237316564323431663635306436323565636466346432656137323336386132666639
|
|
||||||
63356562386264333230363931353233623465656535333136323538623637666464646330613165
|
|
||||||
66376630623531633364643763386631626339613632646562383765633932336637636265653830
|
|
||||||
66353339323936306539623665396436656562383835633464346562333063623233663134323336
|
|
||||||
37306236623637306162333433303732626362653933343437643939616238373239623061313435
|
|
||||||
33613762376136386661303630656631626466353661663936383430356337653163316536613732
|
|
||||||
32663838613163663535363263393233373663613031386136323437653130313330333738366535
|
|
||||||
39316633333137626131333464393636333861303562643839303961666163306538376539336662
|
|
||||||
32356139326337333232343263613437353961373139626533326262343637363535633931643436
|
|
||||||
35373638326132353737306461373436353637383434326164333164343034313039326463343935
|
|
||||||
38353836666538646531323238663430663162356131663433616233326462346433343463356664
|
|
||||||
39653564646237643062643466623165323036313638366161303937333766656539316237336536
|
|
||||||
34396236663835383539393161363439373732363439613961346433333261323032373266663434
|
|
||||||
61336464333865366466633834613262633634653037623264333435333166336335663735326139
|
|
||||||
38386162323933336263396636356661303035356339353630393733393363643863376534613431
|
|
||||||
37333136623530383261633463633030303365356261313735346236333565316461376230626364
|
|
||||||
38646336303533366634373662323530643533383064353966643738353537626332373338653161
|
|
||||||
32303836333766376361646165393166646536333861336263663334323637653935306161396636
|
|
||||||
31353833366537326265663834653864396435333930303434396234333137363034646538333062
|
|
||||||
35663562306161393830653863616661313039376235396132316338623064653232363830666439
|
|
||||||
32633336616237343234333763353764626430653534306663646331393539633631303264366532
|
|
||||||
32666164326666353466393539313234616138383637636230323562396332303964313037623239
|
|
||||||
39306365393333343265306630393839646365376263353262613736653535303864383235356135
|
|
||||||
64623361623332333330323137383966376364643637333434623138646665326137623935363333
|
|
||||||
33646232383237633161336237313439376365613361633937656138303265303135353132326462
|
|
||||||
38346663623733356639643336646664643131393134396239303163366462613233366362626130
|
|
||||||
39663264343031653836643237656432633938376136363737616632636234386331643631386266
|
|
||||||
38306466653263633737343432396164363639383533363139396538636666656266633562396264
|
|
||||||
65613135313563363634363431653031393634633330323964303364643833613336383532346366
|
|
||||||
32323163626636303432643665333564666335633630313837323562386664613038373165333364
|
|
||||||
38353933643130643730343266626563363566656462336636356637633435363461376263356335
|
|
||||||
61393134616165393134346335336432326336656231373336323333663538653539316364356665
|
|
||||||
64626265663237653965343463623138353336643032316263646538356538646562633337623431
|
|
||||||
66383432333362366331333139323631393039303333646339383065313535396434323235313439
|
|
||||||
36313266333363393130666536646438646633356634313032386136353263613632306161313738
|
|
||||||
33646634303738373933333562666462653138333334303564393131333238303466343135356266
|
|
||||||
36323563613937303364326132343965396231343333373633383737623162636362366537386264
|
|
||||||
37613438356332633839363263386361343561343638613833383236333965376666306362356364
|
|
||||||
38323532643232336461383239343665373938383238326534303263663361323034653139323565
|
|
||||||
35333830303635633064653939363431613562393661616565353235663531653261653439633163
|
|
||||||
38643236613661373634373131396632633630643063613661616131623734623136343638633162
|
|
||||||
31356230643433303133633465633638346135316632336632356364616362326638613166633166
|
|
||||||
34303165636239343033313731653232323730363761396238616238663566643062613236396639
|
|
||||||
31313166633435616139386565643437303437653139313831636334363235363839656266636230
|
|
||||||
63383066343036613036663039666131346264623761313032383264336635333734323166383462
|
|
||||||
33366536616166343235633838353063376463656366656564373235343136626538353662386635
|
|
||||||
64316632353739316666636664386563396637353838343632666434336234663363316633316466
|
|
||||||
34323332356238303261626563306161653665376266653838643765653733323333623438613666
|
|
||||||
33636534656238643932363239373964303036653038396338633965303736646436656666623234
|
|
||||||
30323065643933623638386262626131383666306432313335383138626637663061613835366134
|
|
||||||
39373162633735663035346534313436643030366532383965333338333539656163653433633432
|
|
||||||
62626365393731376439383563363333333961323661303333356362653761303861343439393663
|
|
||||||
35653266633330633838613265633863646139653964613235306365313864363633616631613262
|
|
||||||
37346665616630306539393762396438623862376533653530333930636137386636306430313662
|
|
||||||
62306334653262643765396632346533343635616161656331306637353863303836323233656433
|
|
||||||
66643932343932633163386432623739363365333261643833303534333538393231353937373231
|
|
||||||
34326532333531363735626234623132363934333331383133363864636137373132373837656165
|
|
||||||
37626461643065666234623666376238323265386263626431373736613734343033663039663963
|
|
||||||
64333531646237663933653634333238636664313666373362623264363832323261343830666664
|
|
||||||
38383934303633636365313362343935643830323032653838343565616339303366633037363938
|
|
||||||
32303637623331636537356464313531643032313465623966643833383735303563653232626632
|
|
||||||
38626666343832623638663761643561346363306139396336626335356639613363663064343030
|
|
||||||
36353138663434323832363465616232643330626266633933623637353031623637336532663062
|
|
||||||
30343336653539396233303039663430616461373435313430363337613934363637326164356439
|
|
||||||
65383337636333373333396534373761306365616663323432303538636138666666643835336261
|
|
||||||
66666136666262386465646262346437613734613532663638363539363264656632623661633064
|
|
||||||
34643136326636656566616666393537336535383566323831326233353263616232623539643633
|
|
||||||
63376236623139326232646537336533336564333264616161386232646535346432376365346131
|
|
||||||
39666535333435366634633233386537373764333166653865653531363364393462303531323561
|
|
||||||
34373431376461326437616632656534363731666565393933323135656232326265313533646631
|
|
||||||
65353035616263646338356436323966363062623263353561643665343139303039373739366565
|
|
||||||
36346632363461323539633239663237373863633132323739343438393530313631393833323233
|
|
||||||
63356238626566323266343138386161333061613838643964663330366365366236616661303533
|
|
||||||
33373037356162363035313031393863653561356133333036666239653339326234646561613431
|
|
||||||
38323461353662353564393032663037396439303635343437353736313538623166373262336534
|
|
||||||
36636434353665633236343265313839303837653665636631666338343639633138316239353463
|
|
||||||
39333866313337663864376263333037613833383538653165326461313864666433323061383332
|
|
||||||
30623761643765303035643836346139373461313137386163383764386531396465396138366166
|
|
||||||
38376330313430623763346338646135366133623862353237353334356434656138306639326234
|
|
||||||
36303635346137303932376462303739313831356137376436326636343233383964623832393735
|
|
||||||
35386534373235393139313133346166353732323364623139613263303865346264303933363833
|
|
||||||
38656163373966306236636635393963386337633865643439343762666134316566306666333466
|
|
||||||
30643762616433373834303061636239636663653463623830333537363765396564383666383233
|
|
||||||
62386538623432376638343734666531633636636161333738373865646461376466343031323865
|
|
||||||
65396562306435373931666561326334303330396539383062326365386532396431303236646334
|
|
||||||
62663137663162326634363537323364656238663138373830396331333137343531636133383663
|
|
||||||
39383038333535656331316664383534363434663635326632336439646565316261343362313065
|
|
||||||
62613734306663396439333932316331363131323665346564366562633164313864333562373663
|
|
||||||
63383637646435656366383965356130326564303439646531363839663466613736643161663834
|
|
||||||
62376266343031303965303735363563313737346534303261313535623566363532623062616239
|
|
||||||
32666537363836373262626338393230623632626261616663663463666338353937323139303839
|
|
||||||
64333464656266303161386633333165313931393931393366306633623035663238356564306133
|
|
||||||
32373037653462333762346163323566386539343263616665316334303466336264613266326631
|
|
||||||
33346536663338316466643839393536373064363161336131623935653666303262393761363764
|
|
||||||
30646239636530303065643334623636303437383866623737373937643537323361343936313165
|
|
||||||
37333131303366343133333038373831323239306564393364303734333535636138333736653232
|
|
||||||
63343636613662666531303261363865623737383935616438353538656439343665633532653636
|
|
||||||
63363835633639356463346633346263306566353062363439616265353432306539333562663136
|
|
||||||
39656262383033666666313933643531316163623366663361306263663764326333656231373864
|
|
||||||
39633339336262646639626435383639306338303237356637373035643432663965316635326636
|
|
||||||
35616430383862383534663836356266393864333839623932663161393331656661363662386137
|
|
||||||
62313032663565393065303233623662626464386365653862666664346135613535373232653264
|
|
||||||
66336365666534333435633535613935633862363065663639616164383266643132616661633936
|
|
||||||
63623139633834373133376464393238313236343233343132303464303532313464386433643664
|
|
||||||
66363463653236393033643837303862333863616332666166623636663662666563336566356661
|
|
||||||
65366564623063393039343365646130653465383064633261663662626661303931623964333163
|
|
||||||
61646365653566323861376231633366336364636632663431646335373435646439636238386136
|
|
||||||
38303262656265386664326330393234623434623364373461366632346133323632613039346666
|
|
||||||
61663233383430656362393466636564336163623836616134643064363437333535393731313030
|
|
||||||
66616364353737333565353138646638393637666334396331376639306637666331623733363039
|
|
||||||
33643762623430616566653535343963393961343166666165633432323864303830616262366333
|
|
||||||
30396565643135653465613337383130336635333331383765666530326365336132306164376561
|
|
||||||
62653631643565623365613637656562373534303534646462306536353339666465653466636233
|
|
||||||
33666461336462313839313862663734346637306433643262353565623838313035623961303465
|
|
||||||
35666232666234303837363535613261613863646439366363393335323332616363316262663863
|
|
||||||
34613634373234646264646562656363386361306336353862323537353462363631306661373339
|
|
||||||
38653438396136613962623332326634323161346234653130383933346537366433323231666539
|
|
||||||
31646439336139303834376132336264343733306338643062643032333630393265313663326633
|
|
||||||
65323136626130663331333137336238383866663832626164333964663966383536333032653565
|
|
||||||
39383536336264316130326165623131646665396363346261333363323162396431353638373932
|
|
||||||
30636566663537333738643334373633303937393438393766356262633834613965373039616234
|
|
||||||
64373139623961383233306535633938663931656530353739303161633739633034656537633438
|
|
||||||
64623330313932343633373535303764313339633835393839663430323664323961386665656665
|
|
||||||
63343763333162613931633431353636363039656532656131666465383435393861386364333831
|
|
||||||
64313836623138393335373933623631336163613138643166626264616263393663326562616435
|
|
||||||
31396463343335313633333830353064303165363137303631383035353063623737643937323034
|
|
||||||
39393464396532626561343735363638373364373539313064366534333262346638373233373838
|
|
||||||
31626431373439386231633665383738313163666236336464303363393361363166633565633539
|
|
||||||
62383233643330316463376464633233366566666434616137313634643632663462663630316537
|
|
||||||
32656436306564346163393366626662326537396438643361313237393761363566323161303639
|
|
||||||
66343230613461336531343739376634386464313562346332313930323933633463623366326238
|
|
||||||
65353436633632396130366532663263663238643835363637316635656339626537626132316363
|
|
||||||
31363030336364613965396664343666306137376233306362633365313763623864306238666235
|
|
||||||
33383062396632656530343432626537346532326662653933356133356363653266346366646163
|
|
||||||
66363535336533666364333930656235393364346264373665653364613438363039633261616264
|
|
||||||
37633731386362626466613538346636383634316430363332616666323639663838643261306634
|
|
||||||
36643864633533353834396532356339663266383061663638653765396564336566666537363632
|
|
||||||
63363563633437343931393633323433353764393731396366376266306135343639643932663232
|
|
||||||
39306338383863613265386330363933653633616261643334623233343838333062316237336637
|
|
||||||
61366563303066386532613261303466643130383338366538313635326562636235386539366436
|
|
||||||
38666233386230396334353032306335646339313631623334346461333833336430393637656166
|
|
||||||
66396439363233613865373035643839366630333938383263373266643438303331633735633234
|
|
||||||
39356364373434333563323566363935323063326436623137346165646262336438353866626637
|
|
||||||
39633939636361626635303663353233346263343430636362643131646537366561643138353562
|
|
||||||
33383539646339663435366133393364386532393334323261353939343465346535363637666537
|
|
||||||
33313966656666373931633836316535643964316132386536313766666137366637616139316462
|
|
||||||
34343861633539313033366632643439613835356562646232356436633139373566356435633535
|
|
||||||
66633963633135316261363464376461356431633433353863346530373963383765653466363936
|
|
||||||
30316466616231613537653834363665636136393333353534303531336662643133303631646433
|
|
||||||
35626435373137316666353136386437343633376435303161333563393238653538363539373330
|
|
||||||
30306266333266356631326239666565643736653730393134373565666634646130656235363763
|
|
||||||
31353237393132636434383932326664613461326336303339393463663930643365666362633164
|
|
||||||
30336539623032643131666130313234323337336666613234636465663737373434346530373832
|
|
||||||
66366330666530343831636465313330663735623662306533623438313831636631363565303235
|
|
||||||
36306536373163613632313062643439383231373734333637653637663661623163633035616434
|
|
||||||
38303162626664623336346439386565393564666239633563396535373139303462336234383664
|
|
||||||
34303532653837353438653134353165363232623937616630626662303639393762623731336532
|
|
||||||
61303832303464356238343535323732396430633135356139656232353036633765613834343362
|
|
||||||
61663466336362303066623064633464653131303333313566363634313431376562333862326363
|
|
||||||
34343739616666333666346665623330633232336564663037663037633532643135353666386236
|
|
||||||
63646463336532616634306566653636653739626632363561363562663263313738646464363031
|
|
||||||
38643664393631656432376461643233663732333164363632313239656535373866633137393666
|
|
||||||
36316338666634383331363639393965646535663736306332393365646662373936373833373438
|
|
||||||
34393538326136636162343565666566366164653432646635613131646539623161646636303564
|
|
||||||
62386461323933366230373664646361613336366561393534393462666166626137663338346133
|
|
||||||
61643038646365346665303230353563613239643563383235336531626433333935306561386231
|
|
||||||
31663832336139653462333265393830643535373136306164333530326134633038393435613136
|
|
||||||
32663439383234303933643734383837616133383134633863623336636163356566376161646363
|
|
||||||
36323032653462633462366363356463616336656533356266323066383839316663346238373666
|
|
||||||
62323362653063653739
|
|
||||||
|
|||||||
26
host_vars/nas.yml
Normal file
26
host_vars/nas.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
34633334666530383466643739336536363136366631613464383161656535656466616261663232
|
||||||
|
6237633664336364643136643738643563653637613136360a363431663336626432616538623435
|
||||||
|
35373839383830393334663037353262653763353935623332383534376436613161313934316338
|
||||||
|
3930623638356537630a616339653631666163376134343535313235363234356664366234663038
|
||||||
|
30376239633164643335336166663737346262313864626234663839333132386232346139666131
|
||||||
|
33633463353330343037306365666463653039643235333566663164313730663738663036623539
|
||||||
|
64636663613566656338636638383066353562306137376432346639316533303665613463333832
|
||||||
|
37313361623639653533343536616566613865353733656338633833666263323433306431633635
|
||||||
|
35393333346134333466323239666335613862663935353662373833343635393532633461653932
|
||||||
|
38303034613166336632376264313961336665303332306165636663306237653336316330376236
|
||||||
|
31313362616434663861333264306661653532316365306138333131643731346636646365353733
|
||||||
|
62366335643566636631633630336231353666363965623664376231363164313362366164333431
|
||||||
|
33323632366335646137666466316530613862373162376461623633333238616637373336333064
|
||||||
|
39303761353139656333663362303365316131646633303238623031386137656263646364373163
|
||||||
|
36336633323266393663336462626236353466353266656264343639303739313362313537396238
|
||||||
|
36303637386266386665663163633438633763386232313861653438303965393938656166656562
|
||||||
|
63373064396135346361633739663534666230356566366333636266643932316264343339303833
|
||||||
|
38313233643536356232363636306363333463323133656536366662323963643637343365643035
|
||||||
|
30393061343630633263303864336438653339323264396434623038363464366235626235326464
|
||||||
|
62623861333264616331396230383831346163303433653236663738396164643937643663363834
|
||||||
|
30316530623433313633653639363065343264353630613436393237363930326632343230343538
|
||||||
|
64356230316530353663663534343739376138653266323037336163386130623361613632393037
|
||||||
|
33376232666337316536613763623066653431303366656333646361613839323831623562613266
|
||||||
|
36323263616364653666343264303338373232343063313266653661323933656662386237323637
|
||||||
|
66666337356337343864613034633934656461653834306338313031366432353263
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
[jade]
|
[ungrouped]
|
||||||
jade ansible_host=fntz.net ansible_user=alex
|
jade ansible_host=fntz.net ansible_user=alex
|
||||||
|
|
||||||
[jackson]
|
|
||||||
jackson ansible_host=direct.jackson.alexav.gg ansible_user=root
|
jackson ansible_host=direct.jackson.alexav.gg ansible_user=root
|
||||||
|
nas ansible_host=172.16.0.29 ansible_user=alex
|
||||||
[nas]
|
|
||||||
nas ansible_host=nas.fntz.net ansible_user=alex
|
|
||||||
66
main.yml
66
main.yml
@@ -1,15 +1,12 @@
|
|||||||
- hosts: jade
|
- hosts: jade
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- role: caddy
|
- role: traefik
|
||||||
tags: caddy_deploy
|
tags: traefik_deploy
|
||||||
- role: gitea-runner
|
vars:
|
||||||
tags: gitea-runner_deploy
|
server: "jade"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Generate Caddyfile
|
|
||||||
import_tasks: roles/caddy/tasks/create.yml
|
|
||||||
tags: caddyfile_deploy
|
|
||||||
- name: Deploy Glance
|
- name: Deploy Glance
|
||||||
import_tasks: tasks/glance.yml
|
import_tasks: tasks/glance.yml
|
||||||
tags: glance_deploy
|
tags: glance_deploy
|
||||||
@@ -52,9 +49,9 @@
|
|||||||
- name: Deploy Romm
|
- name: Deploy Romm
|
||||||
import_tasks: tasks/romm.yml
|
import_tasks: tasks/romm.yml
|
||||||
tags: romm_deploy
|
tags: romm_deploy
|
||||||
- name: Deploy Nextcloud
|
- name: Deploy Owncloud
|
||||||
import_tasks: tasks/nextcloud.yml
|
import_tasks: tasks/owncloud.yml
|
||||||
tags: nextcloud_deploy
|
tags: owncloud_deploy
|
||||||
- name: Deploy Excalidraw
|
- name: Deploy Excalidraw
|
||||||
import_tasks: tasks/excalidraw.yml
|
import_tasks: tasks/excalidraw.yml
|
||||||
tags: excalidraw_deploy
|
tags: excalidraw_deploy
|
||||||
@@ -64,18 +61,9 @@
|
|||||||
- name: Deploy Immich
|
- name: Deploy Immich
|
||||||
import_tasks: tasks/immich.yml
|
import_tasks: tasks/immich.yml
|
||||||
tags: immich_deploy
|
tags: immich_deploy
|
||||||
- name: Deploy Jellyfin
|
|
||||||
import_tasks: tasks/jellyfin.yml
|
|
||||||
tags: jellyfin_deploy
|
|
||||||
- name: Deploy Navidrome
|
- name: Deploy Navidrome
|
||||||
import_tasks: tasks/navidrome.yml
|
import_tasks: tasks/navidrome.yml
|
||||||
tags: navidrome_deploy
|
tags: navidrome_deploy
|
||||||
- name: Deploy Monitoring Stack
|
|
||||||
import_tasks: tasks/monitoring.yml
|
|
||||||
tags: monitoring_deploy
|
|
||||||
- name: Deploy Syncthing
|
|
||||||
import_tasks: tasks/syncthing.yml
|
|
||||||
tags: syncthing_deploy
|
|
||||||
- name: Deploy Drop
|
- name: Deploy Drop
|
||||||
import_tasks: tasks/drop.yml
|
import_tasks: tasks/drop.yml
|
||||||
tags: drop_deploy
|
tags: drop_deploy
|
||||||
@@ -88,17 +76,31 @@
|
|||||||
- name: Deploy QBittorrent
|
- name: Deploy QBittorrent
|
||||||
import_tasks: tasks/qbittorrent.yml
|
import_tasks: tasks/qbittorrent.yml
|
||||||
tags: qbittorrent_deploy
|
tags: qbittorrent_deploy
|
||||||
|
- name: Deploy Jackett
|
||||||
|
import_tasks: tasks/jackett.yml
|
||||||
|
tags: jackett_deploy
|
||||||
|
- name: Deploy NFL Proxy
|
||||||
|
import_tasks: tasks/nfl-proxy.yml
|
||||||
|
tags: nfl-proxy_deploy
|
||||||
|
- name: Deploy Uptime Kuma
|
||||||
|
import_tasks: tasks/uptime-kuma.yml
|
||||||
|
tags: uptime-kuma_deploy
|
||||||
|
- name: Deploy CouchDB for obsidian
|
||||||
|
import_tasks: tasks/obsidian.yml
|
||||||
|
tags: obsidian_deploy
|
||||||
|
- name: Deploy Helium services
|
||||||
|
import_tasks: tasks/helium.yml
|
||||||
|
tags: helium_deploy
|
||||||
|
|
||||||
- hosts: jackson
|
- hosts: jackson
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- role: caddy
|
- role: traefik
|
||||||
tags: caddy_deploy
|
tags: traefik_deploy
|
||||||
|
- role: fivem
|
||||||
|
tags: fivem_deploy
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Generate Caddyfile
|
|
||||||
import_tasks: roles/caddy/tasks/create.yml
|
|
||||||
tags: caddyfile_deploy
|
|
||||||
- name: Deploy Gitea
|
- name: Deploy Gitea
|
||||||
import_tasks: tasks/gitea.yml
|
import_tasks: tasks/gitea.yml
|
||||||
tags: gitea_deploy
|
tags: gitea_deploy
|
||||||
@@ -111,6 +113,16 @@
|
|||||||
- name: Deploy Plausible
|
- name: Deploy Plausible
|
||||||
import_tasks: tasks/plausible.yml
|
import_tasks: tasks/plausible.yml
|
||||||
tags: plausible_deploy
|
tags: plausible_deploy
|
||||||
- name: Deploy Nextcloud
|
- name: Deploy Owncloud
|
||||||
import_tasks: tasks/nextcloud.yml
|
import_tasks: tasks/owncloud.yml
|
||||||
tags: nextcloud_deploy
|
tags: owncloud_deploy
|
||||||
|
|
||||||
|
- hosts: nas
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Deploy Plex
|
||||||
|
import_tasks: tasks/plex.yml
|
||||||
|
tags: plex_deploy
|
||||||
|
- name: Deploy Frigate
|
||||||
|
import_tasks: tasks/frigate.yml
|
||||||
|
tags: frigate_deploy
|
||||||
|
|||||||
29
readme.md
29
readme.md
@@ -1,6 +1,7 @@
|
|||||||
# Homelab IaC
|
# Homelab IaC
|
||||||
|
|
||||||
This repository hosts my homelab infrastructure setup, built using Ansible & Gitea Workflows.
|
This repository hosts my homelab infrastructure setup, built using Ansible & Gitea Workflows.
|
||||||
|
I primarily host this on my [Gitea](https://git.alexav.gg/alex/homelab) server, but it is mirrored to my GitHub account.
|
||||||
|
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
@@ -10,4 +11,30 @@ You'll need to install Ansible Playbook, either through APT or another avenue.
|
|||||||
sudo apt install ansible-core
|
sudo apt install ansible-core
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, configure your vaults using the variable templates provided & update the hosts file to match your hosts. After you've done so, you can simply run `ansible-playbook main.yml` & it will deploy all containers.
|
Once you've done so, configure the [hosts](./hosts) file to direct to your server(s). You'll need to deal with the SSH setup, alongside setting up the host variables for each service you want to use.
|
||||||
|
|
||||||
|
## Project setup
|
||||||
|
|
||||||
|
I have this project set up like so;
|
||||||
|
|
||||||
|
- **tasks/** - All of the playbooks for the services I deploy
|
||||||
|
- **roles/** - More comprehensive tasks, like FiveM which requires multiple JNinja templates
|
||||||
|
- **scripts/** - Any utility scripts, like the one used for deployment
|
||||||
|
- **host_vars/** - All host variables, containings variables for each service
|
||||||
|
- **main.yml** - Playbook that contains all the setup for the automated deployment
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
In my lab, I have a Git runner sitting on my local network. I use this to deploy changes to this repository across all of my machines.
|
||||||
|
|
||||||
|
The business logic for how this is done is in the `scripts/deploy_containers.py` script, which handles
|
||||||
|
|
||||||
|
- Deploying new containers
|
||||||
|
- Redeploying changed containers based on the Git diff
|
||||||
|
- Redeploying VPN-based containers that need to restart when Gluetun does
|
||||||
|
- Redeploying containers when secrets update
|
||||||
|
- Cleaning up containers/images when tasks are removed
|
||||||
|
|
||||||
|
This uses `tags` in [main.yml](./main.yml), structured as `{container}_deploy` - so if I update Immich, it will run ansible-playbook with the argument `--tags immich_deploy`.
|
||||||
|
|
||||||
|
When secrets for a specific host are detected as updated, it will run the deploy tasks for all containers that host has (`-l {host}`) to refresh environment variables.
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Create Caddyfile
|
|
||||||
template:
|
|
||||||
src: roles/caddy/templates/Caddyfile.j2
|
|
||||||
dest: "{{ data_dir }}/caddy/Caddyfile"
|
|
||||||
|
|
||||||
- name: Reload Caddyfile
|
|
||||||
command: docker exec -w /etc/caddy caddy caddy reload
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
---
|
|
||||||
- name: "Create file structure"
|
|
||||||
file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: directory
|
|
||||||
with_items:
|
|
||||||
- "{{ data_dir }}/caddy"
|
|
||||||
- "{{ data_dir }}/caddy/data"
|
|
||||||
- "{{ data_dir }}/caddy/certs"
|
|
||||||
|
|
||||||
- name: Create Dockerfile
|
|
||||||
template:
|
|
||||||
src: Dockerfile.j2
|
|
||||||
dest: "{{ data_dir }}/caddy/Dockerfile"
|
|
||||||
|
|
||||||
- name: Build Caddy Image
|
|
||||||
docker_image:
|
|
||||||
name: caddy
|
|
||||||
tag: "latest"
|
|
||||||
build:
|
|
||||||
path: "{{ data_dir }}/caddy"
|
|
||||||
dockerfile: "Dockerfile"
|
|
||||||
source: build
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Deploy Caddy Container
|
|
||||||
docker_container:
|
|
||||||
name: caddy
|
|
||||||
image: caddy:latest
|
|
||||||
recreate: true
|
|
||||||
restart_policy: unless-stopped
|
|
||||||
networks:
|
|
||||||
- name: "{{ docker_network_name }}"
|
|
||||||
env:
|
|
||||||
CLOUDFLARE_TOKEN: "{{ CADDY_CLOUDFLARE_TOKEN }}"
|
|
||||||
HOST_IP: "{{ CADDY_HOST_IP }}"
|
|
||||||
VIDEO_MACHINE: "{{ CADDY_VIDEO_MACHINE }}"
|
|
||||||
volumes:
|
|
||||||
- "{{ data_dir }}/caddy/data:/data"
|
|
||||||
- "{{ data_dir }}/caddy/certs:/etc/letsencrypt"
|
|
||||||
- "{{ data_dir }}/caddy/Caddyfile:/etc/caddy/Caddyfile"
|
|
||||||
published_ports:
|
|
||||||
- 80:80
|
|
||||||
- 443:443
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# Snippets
|
|
||||||
{% if caddy_snippets is defined %}
|
|
||||||
{% for snippet_name, snippet_content in caddy_snippets.items() %}
|
|
||||||
({{ snippet_name }}) {
|
|
||||||
{% for line in snippet_content %}
|
|
||||||
{{ line }}
|
|
||||||
{% endfor %}
|
|
||||||
}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
# Sites
|
|
||||||
{% for site in caddy_sites %}
|
|
||||||
{{ site.domains | join(', ') }} {
|
|
||||||
{% if site.tls is defined %}
|
|
||||||
tls {
|
|
||||||
{% if site.tls.dns is defined %}
|
|
||||||
dns {{ site.tls.dns.provider }} {{ site.tls.dns.token }}
|
|
||||||
{% endif %}
|
|
||||||
{% if site.tls.cert is defined %}
|
|
||||||
{{ site.tls.cert }} {{ site.tls.key }}
|
|
||||||
{% endif %}
|
|
||||||
}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% for matcher in site.matchers | default([]) %}
|
|
||||||
@{{ matcher.name }} {{ matcher.type }} {{ matcher.value }}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% for handler in site.handlers | default([]) %}
|
|
||||||
handle {% if handler.matcher is defined %}@{{ handler.matcher }} {% endif %}{
|
|
||||||
{% if handler.reverse_proxy is defined %}
|
|
||||||
reverse_proxy {{ handler.reverse_proxy }}
|
|
||||||
{% endif %}
|
|
||||||
{% if handler.import_tinyauth is defined %}
|
|
||||||
import tinyauth_forwarder *
|
|
||||||
{% endif %}
|
|
||||||
}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% if handler.default is defined %}
|
|
||||||
handle {
|
|
||||||
{% if handler.default.redir is defined %}
|
|
||||||
redir {{ handler.default.redir }}
|
|
||||||
{% else %}
|
|
||||||
respond 404
|
|
||||||
{% endif %}
|
|
||||||
}
|
|
||||||
{% endif %}
|
|
||||||
}
|
|
||||||
|
|
||||||
{% endfor %}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
FROM caddy:builder AS builder
|
|
||||||
RUN caddy-builder \
|
|
||||||
github.com/caddy-dns/cloudflare
|
|
||||||
FROM caddy:latest
|
|
||||||
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
|
|
||||||
71
roles/fivem/tasks/main.yml
Normal file
71
roles/fivem/tasks/main.yml
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/fivem"
|
||||||
|
- "{{ data_dir }}/fivem/server"
|
||||||
|
- "{{ data_dir }}/fivem/server-data"
|
||||||
|
|
||||||
|
- name: Check if FiveM has already been downloaded
|
||||||
|
stat:
|
||||||
|
path: "{{ data_dir }}/fivem/server/run.sh"
|
||||||
|
register: fivem_server
|
||||||
|
|
||||||
|
- name: Check if FiveM Config directory already exists
|
||||||
|
stat:
|
||||||
|
path: "{{ data_dir }}/fivem/server-data/server.cfg"
|
||||||
|
register: fivem_server_data
|
||||||
|
|
||||||
|
- name: Check if FiveM systemd service exists
|
||||||
|
stat:
|
||||||
|
path: "/etc/systemd/system/fivem.service"
|
||||||
|
register: fivem_systemd
|
||||||
|
|
||||||
|
- name: Download FiveM Linux Build
|
||||||
|
get_url:
|
||||||
|
url: https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/20944-eaa15781d4695bd97b050d848e34aac3607c6696/fx.tar.xz
|
||||||
|
dest: "{{ data_dir }}/fivem/server.tar.xz"
|
||||||
|
mode: 0755
|
||||||
|
when: not fivem_server.stat.exists
|
||||||
|
|
||||||
|
- name: Unpack FiveM Linux Build
|
||||||
|
unarchive:
|
||||||
|
src: "{{ data_dir }}/fivem/server.tar.xz"
|
||||||
|
dest: "{{ data_dir }}/fivem/server"
|
||||||
|
remote_src: yes
|
||||||
|
when: not fivem_server.stat.exists
|
||||||
|
|
||||||
|
- name: Clone FiveM Server Data
|
||||||
|
git:
|
||||||
|
repo: https://github.com/citizenfx/cfx-server-data.git
|
||||||
|
dest: "{{ data_dir }}/fivem/server-data"
|
||||||
|
when: not fivem_server_data.stat.exists
|
||||||
|
|
||||||
|
- name: Create FiveM server configuration
|
||||||
|
template:
|
||||||
|
src: server.cfg.j2
|
||||||
|
dest: "{{ data_dir }}/fivem/server-data/server.cfg"
|
||||||
|
when: not fivem_server_data.stat.exists
|
||||||
|
|
||||||
|
- name: Stop & remove FiveM systemd service
|
||||||
|
become: yes
|
||||||
|
shell: |
|
||||||
|
systemctl stop fivem.service &&
|
||||||
|
rm /etc/systemd/system/fivem.service
|
||||||
|
when: fivem_systemd.stat.exists
|
||||||
|
|
||||||
|
- name: Create FiveM systemd service
|
||||||
|
become: yes
|
||||||
|
template:
|
||||||
|
src: fivem.service.j2
|
||||||
|
dest: "/etc/systemd/system/fivem.service"
|
||||||
|
|
||||||
|
- name: Enable FiveM systemd service
|
||||||
|
become: yes
|
||||||
|
command: systemctl enable fivem.service
|
||||||
|
|
||||||
|
- name: Start FiveM systemd service
|
||||||
|
become: yes
|
||||||
|
command: systemctl start fivem.service
|
||||||
15
roles/fivem/templates/fivem.service.j2
Normal file
15
roles/fivem/templates/fivem.service.j2
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=FiveM Server
|
||||||
|
Documentation=https://git.alexav.gg/alex/homelab
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/usr/bin/tmux new-session -s fivem -d '/bin/sh {{data_dir}}/fivem/server/run.sh +exec server.cfg'
|
||||||
|
WorkingDirectory={{ data_dir }}/fivem/server-data
|
||||||
|
TimeoutSec=30
|
||||||
|
RestartSec=30
|
||||||
|
Restart=no
|
||||||
|
User=root
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
81
roles/fivem/templates/server.cfg.j2
Normal file
81
roles/fivem/templates/server.cfg.j2
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Only change the IP if you're using a server with multiple network interfaces, otherwise change the port only.
|
||||||
|
endpoint_add_tcp "0.0.0.0:30120"
|
||||||
|
endpoint_add_udp "0.0.0.0:30120"
|
||||||
|
|
||||||
|
# These resources will start by default.
|
||||||
|
ensure mapmanager
|
||||||
|
ensure chat
|
||||||
|
ensure spawnmanager
|
||||||
|
ensure sessionmanager
|
||||||
|
ensure basic-gamemode
|
||||||
|
ensure hardcap
|
||||||
|
ensure rconlog
|
||||||
|
|
||||||
|
# This allows players to use scripthook-based plugins such as the legacy Lambda Menu.
|
||||||
|
# Set this to 1 to allow scripthook. Do note that this does _not_ guarantee players won't be able to use external plugins.
|
||||||
|
sv_scriptHookAllowed 0
|
||||||
|
|
||||||
|
# Uncomment this and set a password to enable RCON. Make sure to change the password - it should look like set rcon_password "YOURPASSWORD"
|
||||||
|
#set rcon_password ""
|
||||||
|
|
||||||
|
# A comma-separated list of tags for your server.
|
||||||
|
# For example:
|
||||||
|
# - sets tags "drifting, cars, racing"
|
||||||
|
# Or:
|
||||||
|
# - sets tags "roleplay, military, tanks"
|
||||||
|
sets tags "default"
|
||||||
|
|
||||||
|
# A valid locale identifier for your server's primary language.
|
||||||
|
# For example "en-US", "fr-CA", "nl-NL", "de-DE", "en-GB", "pt-BR"
|
||||||
|
sets locale "root-AQ"
|
||||||
|
# please DO replace root-AQ on the line ABOVE with a real language! :)
|
||||||
|
|
||||||
|
# Set an optional server info and connecting banner image url.
|
||||||
|
# Size doesn't matter, any banner sized image will be fine.
|
||||||
|
#sets banner_detail "https://url.to/image.png"
|
||||||
|
#sets banner_connecting "https://url.to/image.png"
|
||||||
|
|
||||||
|
# Set your server's hostname. This is not usually shown anywhere in listings.
|
||||||
|
sv_hostname "Medal.tv Testing Server"
|
||||||
|
|
||||||
|
# Set your server's Project Name
|
||||||
|
sets sv_projectName "Medal.tv Testing Server"
|
||||||
|
|
||||||
|
# Set your server's Project Description
|
||||||
|
sets sv_projectDesc "A test server for QA"
|
||||||
|
|
||||||
|
# Set Game Build (https://docs.fivem.net/docs/server-manual/server-commands/#sv_enforcegamebuild-build)
|
||||||
|
#sv_enforceGameBuild 2802
|
||||||
|
|
||||||
|
# Nested configs!
|
||||||
|
#exec server_internal.cfg
|
||||||
|
|
||||||
|
# Loading a server icon (96x96 PNG file)
|
||||||
|
#load_server_icon myLogo.png
|
||||||
|
|
||||||
|
# convars which can be used in scripts
|
||||||
|
set temp_convar "hey world!"
|
||||||
|
|
||||||
|
# Remove the `#` from the below line if you want your server to be listed as 'private' in the server browser.
|
||||||
|
# Do not edit it if you *do not* want your server listed as 'private'.
|
||||||
|
# Check the following url for more detailed information about this:
|
||||||
|
# https://docs.fivem.net/docs/server-manual/server-commands/#sv_master1-newvalue
|
||||||
|
#sv_master1 ""
|
||||||
|
|
||||||
|
# Add system admins
|
||||||
|
add_ace group.admin command allow # allow all commands
|
||||||
|
add_ace group.admin command.quit deny # but don't allow quit
|
||||||
|
add_principal identifier.fivem:1 group.admin # add the admin to the group
|
||||||
|
|
||||||
|
# enable OneSync (required for server-side state awareness)
|
||||||
|
set onesync on
|
||||||
|
|
||||||
|
# Server player slot limit (see https://fivem.net/server-hosting for limits)
|
||||||
|
sv_maxclients 48
|
||||||
|
|
||||||
|
# Steam Web API key, if you want to use Steam authentication (https://steamcommunity.com/dev/apikey)
|
||||||
|
# -> replace "" with the key
|
||||||
|
set steam_webApiKey ""
|
||||||
|
|
||||||
|
# License key for your server (https://portal.cfx.re)
|
||||||
|
sv_licenseKey {{ FIVEM_LICENSE_KEY }}
|
||||||
56
roles/traefik/tasks/main.yml
Normal file
56
roles/traefik/tasks/main.yml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/traefik"
|
||||||
|
- "{{ data_dir }}/traefik/data"
|
||||||
|
- "{{ data_dir }}/traefik/config"
|
||||||
|
|
||||||
|
- name: Pull latest Traefik Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: traefik
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
|
# create static configuration for traefik
|
||||||
|
- name: Create Traefik Configuration
|
||||||
|
template:
|
||||||
|
src: config.yml.j2
|
||||||
|
dest: "{{ data_dir }}/traefik/traefik.yml"
|
||||||
|
|
||||||
|
# create dynamic provider files for each system
|
||||||
|
- name: Create Traefik Dynamic File (Local)
|
||||||
|
template:
|
||||||
|
src: local-dynamic.yml.j2
|
||||||
|
dest: "{{ data_dir }}/traefik/dynamic.yml"
|
||||||
|
when: server == "jade" or server == "nas"
|
||||||
|
- name: Create Traefik Dynamic File (Remote)
|
||||||
|
template:
|
||||||
|
src: remote-dynamic.yml.j2
|
||||||
|
dest: "{{ data_dir }}/traefik/dynamic.yml"
|
||||||
|
when: server == "jackson"
|
||||||
|
|
||||||
|
- name: Deploy Traefik Docker Container
|
||||||
|
docker_container:
|
||||||
|
name: traefik
|
||||||
|
image: traefik
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
command:
|
||||||
|
- --providers.file.directory=/config
|
||||||
|
published_ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
- "8080:8080"
|
||||||
|
env:
|
||||||
|
CF_API_EMAIL: "{{ TRAEFIK_CF_API_EMAIL }}"
|
||||||
|
CF_DNS_API_TOKEN: "{{ TRAEFIK_CF_API_KEY }}"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- "{{ data_dir }}/traefik/data:/data"
|
||||||
|
- "{{ data_dir }}/traefik/traefik.yml:/traefik.yml"
|
||||||
|
- "{{ data_dir }}/traefik/dynamic.yml:/dynamic.yml"
|
||||||
|
networks:
|
||||||
|
- name: "{{ docker_network_name }}"
|
||||||
32
roles/traefik/templates/config.yml.j2
Normal file
32
roles/traefik/templates/config.yml.j2
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
api:
|
||||||
|
dashboard: true
|
||||||
|
insecure: true
|
||||||
|
debug: false
|
||||||
|
entryPoints:
|
||||||
|
web:
|
||||||
|
address: ":80"
|
||||||
|
http:
|
||||||
|
redirections:
|
||||||
|
entryPoint:
|
||||||
|
to: websecure
|
||||||
|
scheme: https
|
||||||
|
webSecure:
|
||||||
|
address: ":443"
|
||||||
|
serversTransport:
|
||||||
|
insecureSkipVerify: true
|
||||||
|
providers:
|
||||||
|
docker:
|
||||||
|
exposedByDefault: false
|
||||||
|
network: homelab
|
||||||
|
file:
|
||||||
|
filename: /dynamic.yml
|
||||||
|
watch: true
|
||||||
|
certificatesResolvers:
|
||||||
|
letsencrypt:
|
||||||
|
acme:
|
||||||
|
email: {{ TRAEFIK_CF_API_EMAIL }}
|
||||||
|
storage: /data/acme.json
|
||||||
|
caServer: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
dnsChallenge:
|
||||||
|
provider: cloudflare
|
||||||
|
delayBeforeCheck: 10
|
||||||
60
roles/traefik/templates/local-dynamic.yml.j2
Normal file
60
roles/traefik/templates/local-dynamic.yml.j2
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
http:
|
||||||
|
routers:
|
||||||
|
plex:
|
||||||
|
rule: "Host(`tv.fntz.net`)"
|
||||||
|
service: plex
|
||||||
|
entryPoints:
|
||||||
|
- webSecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
jtraefik:
|
||||||
|
rule: "Host(`traefik-jackson.fntz.net`)"
|
||||||
|
service: jtraefik
|
||||||
|
entryPoints:
|
||||||
|
- webSecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
traefik:
|
||||||
|
rule: "Host(`traefik.fntz.net`)"
|
||||||
|
service: traefik
|
||||||
|
entryPoints:
|
||||||
|
- webSecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
nflproxy:
|
||||||
|
rule: "Host(`nfl.fntz.net`)"
|
||||||
|
service: nflproxy
|
||||||
|
entryPoints:
|
||||||
|
- webSecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
nvr:
|
||||||
|
rule: "Host(`nvr.fntz.net`)"
|
||||||
|
service: nvr
|
||||||
|
entryPoints:
|
||||||
|
- webSecure
|
||||||
|
tls:
|
||||||
|
certResolver: letsencrypt
|
||||||
|
|
||||||
|
|
||||||
|
services:
|
||||||
|
plex:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://172.16.0.29:32400"
|
||||||
|
jtraefik:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://jackson:8080/"
|
||||||
|
traefik:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://jade:8080/"
|
||||||
|
nflproxy:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://jade:5000/"
|
||||||
|
nvr:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://nas:5000/"
|
||||||
0
roles/traefik/templates/remote-dynamic.yml.j2
Normal file
0
roles/traefik/templates/remote-dynamic.yml.j2
Normal file
@@ -1,88 +1,117 @@
|
|||||||
import re
|
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
bracket_regex = r'\[([^\]]*)\]'
|
|
||||||
quote_regex = r'"([^"]*)"'
|
|
||||||
|
|
||||||
def git_diff():
|
def git_diff():
|
||||||
args = sys.argv
|
args = sys.argv
|
||||||
res = subprocess.run(f"git diff --name-only {args[1]} {args[2]}", capture_output=True, shell=True, text=True)
|
res = subprocess.run(f"git diff --name-only {args[1]} {args[2]}", capture_output=True, shell=True, text=True)
|
||||||
return res.stdout.strip().split("\n")
|
return [x for x in res.stdout.strip().split("\n") if "tasks/" in x or "roles/" in x or "host_vars" in x]
|
||||||
|
|
||||||
def construct_ansible_command(tag = None):
|
def construct_command(tag = None, host = None):
|
||||||
command = "ANSIBLE_CONFIG=ansible.cfg /usr/bin/ansible-playbook main.yml --vault-password-file ~/.vault_pass.txt"
|
command = f"ANSIBLE_CONFIG=ansible.cfg /usr/bin/ansible-playbook main.yml --vault-password-file ~/.vault_pass.txt"
|
||||||
|
|
||||||
|
if host:
|
||||||
|
command += f" -l {host}"
|
||||||
if tag:
|
if tag:
|
||||||
command += f" --tags {tag}"
|
command += f" --tags {tag}_deploy"
|
||||||
|
|
||||||
return command
|
return command
|
||||||
|
|
||||||
def run_deployment(tag = None):
|
def deploy(tag = None, host = None):
|
||||||
|
command = construct_command(tag, host)
|
||||||
|
|
||||||
if tag:
|
if tag:
|
||||||
command = construct_ansible_command(tag=tag)
|
print(f"Deploying {tag}...\n")
|
||||||
|
else:
|
||||||
|
print(f"Deploying {host}...\n")
|
||||||
|
res = subprocess.run(command, shell=True)
|
||||||
|
|
||||||
print(f"Running deployment for {tag}..")
|
return res.returncode == 0
|
||||||
res = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
||||||
lines = res.stdout.decode(encoding='utf-8').split("\n")
|
|
||||||
|
|
||||||
success = True
|
|
||||||
for ind, line in enumerate(lines):
|
|
||||||
if "fatal:" in line:
|
|
||||||
host = re.findall(bracket_regex, line)[0]
|
|
||||||
task_failed = re.findall(bracket_regex, lines[ind - 1])[0]
|
|
||||||
reason_failed = re.findall(quote_regex, line)
|
|
||||||
|
|
||||||
print("\n---------------------")
|
|
||||||
print(" Deployment failed!")
|
|
||||||
print(f" Task: {task_failed}")
|
|
||||||
print(f" Host: {host}")
|
|
||||||
print(f" Reason: {reason_failed[2].split(":")[1].strip()}")
|
|
||||||
print(line)
|
|
||||||
print("---------------------\n")
|
|
||||||
|
|
||||||
success = False
|
|
||||||
break
|
|
||||||
|
|
||||||
return success
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
tasks_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../tasks")
|
||||||
diff = git_diff()
|
diff = git_diff()
|
||||||
|
host_vars_changed_for = []
|
||||||
vpn_containers = [
|
vpn_containers = [
|
||||||
"tasks/qbittorrent.yml"
|
"tasks/qbittorrent.yml",
|
||||||
|
"tasks/jackett.yml"
|
||||||
]
|
]
|
||||||
|
|
||||||
print("Reloading Caddyfile..")
|
# because these containers rely on gluetun for network, they need to be recreated when gluetun is recreated
|
||||||
subprocess.run(construct_ansible_command(tag="caddyfile_deploy"), shell=True, stdout=subprocess.PIPE)
|
|
||||||
|
|
||||||
success = True
|
|
||||||
deployed = 0
|
|
||||||
|
|
||||||
# auto-heal any vpn-dependent containers
|
|
||||||
if "tasks/gluetun.yml" in diff:
|
if "tasks/gluetun.yml" in diff:
|
||||||
|
print("Gluetun detected in diff, queuing dependent containers for recreation")
|
||||||
for container in vpn_containers:
|
for container in vpn_containers:
|
||||||
if container not in diff:
|
if container not in diff:
|
||||||
print(f"Adding {container} to restart list as Gluetun is present..")
|
|
||||||
diff.append(container)
|
diff.append(container)
|
||||||
|
|
||||||
|
# when variables update for a host, recreate containers
|
||||||
for file in diff:
|
for file in diff:
|
||||||
if "tasks" in file:
|
if "host_vars" in file:
|
||||||
task_name = file.split("/")[1].split(".")[0] + "_deploy"
|
hostname = file.split("/")[1].split(".")[0]
|
||||||
state = run_deployment(tag=task_name)
|
print(f"Secret file for '{hostname}' changed, will recreate containers on host after deployment")
|
||||||
|
host_vars_changed_for.append(hostname)
|
||||||
|
|
||||||
if not state:
|
deployed = []
|
||||||
success = False
|
failed = []
|
||||||
break
|
for file in diff:
|
||||||
|
# separating these for now because roles will typically
|
||||||
|
# have a bunch of other things tied to them
|
||||||
|
if "roles/" not in file and "host_vars/" not in file:
|
||||||
|
task_name = file.split("/")[1].split(".")[0]
|
||||||
|
task_file_path = os.path.join(tasks_path, file.split("/")[1])
|
||||||
|
|
||||||
|
if not os.path.exists(task_file_path):
|
||||||
|
print(f"{task_name} doesn't exist, running cleanup")
|
||||||
|
res = subprocess.run(f"/usr/bin/docker container stop {task_name}", shell=True)
|
||||||
|
if res.returncode == 0:
|
||||||
|
subprocess.run(f"/usr/bin/docker container rm {task_name}", shell=True)
|
||||||
|
subprocess.run("/usr/bin/docker image prune -f", shell=True)
|
||||||
|
subprocess.run("/usr/bin/docker container prune -f", shell=True)
|
||||||
|
|
||||||
|
print(f"Cleaned up container {task_name}")
|
||||||
|
|
||||||
|
if "host_vars" not in file:
|
||||||
|
# deploy the task, regardless of its status
|
||||||
|
if "roles/" not in file:
|
||||||
|
if task_name not in deployed:
|
||||||
|
task = deploy(tag=task_name)
|
||||||
else:
|
else:
|
||||||
deployed += 1
|
task_name = file.split("/")[1]
|
||||||
|
|
||||||
if success and deployed > 0:
|
if task_name not in deployed:
|
||||||
|
task = deploy(tag=task_name)
|
||||||
|
|
||||||
|
if not task:
|
||||||
|
failed.append(task_name)
|
||||||
|
else:
|
||||||
|
deployed.append(task_name)
|
||||||
|
|
||||||
|
if len(host_vars_changed_for) > 0:
|
||||||
|
for host in host_vars_changed_for:
|
||||||
|
print(f"Redeploying containers on {host} due to host vars update")
|
||||||
|
task = deploy(host=host)
|
||||||
|
if task:
|
||||||
|
deployed.append(host)
|
||||||
|
else:
|
||||||
|
failed.append(host)
|
||||||
|
|
||||||
|
|
||||||
|
if len(failed) <= 0 and len(deployed) > 0:
|
||||||
print("\n---------------------")
|
print("\n---------------------")
|
||||||
print(" Deployment succeeded!")
|
print(" Deployment succeeded!")
|
||||||
print(f" Tasks: {", ".join(diff)}")
|
print(f" All tasks: {", ".join(deployed)}")
|
||||||
print("---------------------\n")
|
print("---------------------\n")
|
||||||
elif deployed == 0:
|
sys.exit(0)
|
||||||
print("Successful, no containers required deployment")
|
elif len(failed) > 0:
|
||||||
|
print("\n---------------------")
|
||||||
|
print(" Deployment failed!")
|
||||||
|
print(f" Failed tasks: {", ".join(failed)}")
|
||||||
|
print(f" All tasks: {", ".join(deployed)}")
|
||||||
|
print("---------------------\n")
|
||||||
|
sys.exit(1)
|
||||||
|
elif len(deployed) <= 0:
|
||||||
|
print("Successfully executed, no tasks required execution")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
30
scripts/extract_to_template.py
Normal file
30
scripts/extract_to_template.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
host_vars_path = os.path.abspath('host_vars')
|
||||||
|
file_contents = ""
|
||||||
|
|
||||||
|
if os.path.exists(host_vars_path):
|
||||||
|
if os.path.exists(os.path.join(host_vars_path, 'all.template.yml')):
|
||||||
|
os.remove(os.path.join(host_vars_path, 'all.template.yml'))
|
||||||
|
|
||||||
|
vaults = os.listdir(host_vars_path)
|
||||||
|
|
||||||
|
for vault in vaults:
|
||||||
|
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)
|
||||||
|
stdout = vault_contents.stdout.strip().splitlines()
|
||||||
|
|
||||||
|
for line in stdout:
|
||||||
|
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!")
|
||||||
@@ -18,9 +18,11 @@
|
|||||||
name: api
|
name: api
|
||||||
tag: "latest"
|
tag: "latest"
|
||||||
build:
|
build:
|
||||||
|
nocache: true
|
||||||
path: "{{ data_dir }}/api/app"
|
path: "{{ data_dir }}/api/app"
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
source: build
|
source: build
|
||||||
|
force_source: true
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Create API Network
|
- name: Create API Network
|
||||||
@@ -47,6 +49,7 @@
|
|||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/api/db:/var/lib/postgresql/data"
|
- "{{ data_dir }}/api/db:/var/lib/postgresql/data"
|
||||||
env:
|
env:
|
||||||
|
POSTGRES_USER: "api"
|
||||||
POSTGRES_PASSWORD: "{{ API_POSTGRES_PASSWORD }}"
|
POSTGRES_PASSWORD: "{{ API_POSTGRES_PASSWORD }}"
|
||||||
PGDATA: "/var/lib/postgresql/data/pgdata"
|
PGDATA: "/var/lib/postgresql/data/pgdata"
|
||||||
|
|
||||||
@@ -70,3 +73,9 @@
|
|||||||
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 }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.aapi.rule: Host(`api.alexav.gg`)
|
||||||
|
traefik.http.routers.aapi.entrypoints: webSecure
|
||||||
|
traefik.http.routers.aapi.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.aapi.loadbalancer.server.url: http://api:3000
|
||||||
|
|||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/code-server"
|
- "{{ data_dir }}/code-server"
|
||||||
|
|
||||||
|
- name: Pull latest Code Server Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: lscr.io/linuxserver/code-server
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Code Server Docker Container
|
- name: Create Code Server Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: codeserver
|
name: codeserver
|
||||||
@@ -23,3 +29,10 @@
|
|||||||
TZ: "{{ TZ }}"
|
TZ: "{{ TZ }}"
|
||||||
PUID: "{{ PUID }}"
|
PUID: "{{ PUID }}"
|
||||||
PGID: "{{ PGID }}"
|
PGID: "{{ PGID }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.code.rule: Host(`code.fntz.net`)
|
||||||
|
traefik.http.routers.code.entrypoints: webSecure
|
||||||
|
traefik.http.routers.code.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.code.loadbalancer.server.port: "8443"
|
||||||
|
traefik.http.routers.code.middlewares: tinyauth
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
---
|
---
|
||||||
|
- name: Pull latest Cup Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: ghcr.io/sergi0g/cup
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Cup Docker Container
|
- name: Create Cup Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: Cup
|
name: Cup
|
||||||
@@ -10,3 +16,10 @@
|
|||||||
- name: homelab
|
- name: homelab
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.cup.rule: Host(`cup.fntz.net`)
|
||||||
|
traefik.http.routers.cup.entrypoints: webSecure
|
||||||
|
traefik.http.routers.cup.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.cup.loadbalancer.server.port: "8000"
|
||||||
|
traefik.http.routers.cup.middlewares: tinyauth
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
---
|
---
|
||||||
|
- name: Pull latest Dashdot Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: mauricenino/dashdot
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Dashdot Docker Container
|
- name: Create Dashdot Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: dashdot
|
name: dashdot
|
||||||
@@ -9,3 +15,9 @@
|
|||||||
- name: homelab
|
- name: homelab
|
||||||
volumes:
|
volumes:
|
||||||
- "/:/mnt/host:ro"
|
- "/:/mnt/host:ro"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.dash.rule: Host(`stats.fntz.net`)
|
||||||
|
traefik.http.routers.dash.entrypoints: webSecure
|
||||||
|
traefik.http.routers.dash.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.dash.loadbalancer.server.port: "3001"
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
---
|
---
|
||||||
|
- name: Pull latest Dozzle Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: amir20/dozzle
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Dozzle Docker Container
|
- name: Create Dozzle Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: dozzle
|
name: dozzle
|
||||||
@@ -12,3 +18,10 @@
|
|||||||
env:
|
env:
|
||||||
DOZZLE_ENABLE_ACTIONS: "{{ DOZZLE_ACTIONS }}"
|
DOZZLE_ENABLE_ACTIONS: "{{ DOZZLE_ACTIONS }}"
|
||||||
DOZZLE_ENABLE_SHELL: "{{ DOZZLE_SHELL }}"
|
DOZZLE_ENABLE_SHELL: "{{ DOZZLE_SHELL }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.dz.rule: Host(`logs.fntz.net`)
|
||||||
|
traefik.http.routers.dz.entrypoints: webSecure
|
||||||
|
traefik.http.routers.dz.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.dz.loadbalancer.server.port: "8080"
|
||||||
|
traefik.http.routers.dz.middlewares: tinyauth
|
||||||
|
|||||||
@@ -12,11 +12,18 @@
|
|||||||
docker_network:
|
docker_network:
|
||||||
name: drop
|
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
|
- name: Create Drop DB Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: drop_postgres
|
name: drop_postgres
|
||||||
image: postgres:14-alpine
|
image: postgres:14-alpine
|
||||||
recreate: true
|
recreate: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- name: drop
|
- name: drop
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -35,8 +42,9 @@
|
|||||||
- name: Create Drop Container
|
- name: Create Drop Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: drop
|
name: drop
|
||||||
image: ghcr.io/drop-oss/drop:v0.3.0
|
image: ghcr.io/drop-oss/drop:latest
|
||||||
recreate: true
|
recreate: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- name: homelab
|
- name: homelab
|
||||||
- name: drop
|
- name: drop
|
||||||
@@ -46,3 +54,10 @@
|
|||||||
env:
|
env:
|
||||||
DATABASE_URL: "postgres://drop:drop@drop_postgres:5432/drop"
|
DATABASE_URL: "postgres://drop:drop@drop_postgres:5432/drop"
|
||||||
GIANT_BOMB_API_KEY: "{{ DROP_GIANT_BOMB_API_KEY }}"
|
GIANT_BOMB_API_KEY: "{{ DROP_GIANT_BOMB_API_KEY }}"
|
||||||
|
EXTERNAL_URL: "https://games.fntz.net"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.drop.rule: Host(`games.fntz.net`)
|
||||||
|
traefik.http.routers.drop.entrypoints: webSecure
|
||||||
|
traefik.http.routers.drop.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.drop.loadbalancer.server.port: "3000"
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
---
|
---
|
||||||
|
- name: Pull latest Excalidraw Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: excalidraw/excalidraw
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Excalidraw Docker Container
|
- name: Create Excalidraw Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: excalidraw
|
name: excalidraw
|
||||||
@@ -7,3 +13,9 @@
|
|||||||
recreate: true
|
recreate: true
|
||||||
networks:
|
networks:
|
||||||
- name: homelab
|
- name: homelab
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.draw.rule: Host(`draw.fntz.net`)
|
||||||
|
traefik.http.routers.draw.entrypoints: webSecure
|
||||||
|
traefik.http.routers.draw.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.draw.loadbalancer.server.port: "80"
|
||||||
|
|||||||
40
tasks/frigate.yml
Normal file
40
tasks/frigate.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
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
|
||||||
|
image: ghcr.io/blakeblackshear/frigate:stable
|
||||||
|
recreate: true
|
||||||
|
privileged: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
published_ports:
|
||||||
|
- "5000:5000"
|
||||||
|
- "8555:8555/tcp"
|
||||||
|
- "8555:8555/udp"
|
||||||
|
- "8554:8554"
|
||||||
|
devices:
|
||||||
|
- /dev/dri/renderD128:/dev/dri/renderD128
|
||||||
|
networks:
|
||||||
|
- name: "{{ docker_network_name }}"
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- "{{ data_dir }}/frigate:/config"
|
||||||
|
- "{{ FRIGATE_RECORDINGS_PATH }}:/media/frigate"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.frigate.rule: Host(`nvr.fntz.net`)
|
||||||
|
traefik.http.routers.frigate.entrypoints: webSecure
|
||||||
|
traefik.http.routers.frigate.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.frigate.loadbalancer.server.port: "5000"
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/gitea"
|
- "{{ 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
|
- name: Create Gitea Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: gitea
|
name: gitea
|
||||||
@@ -22,3 +28,9 @@
|
|||||||
env:
|
env:
|
||||||
USER_UID: "1000"
|
USER_UID: "1000"
|
||||||
USER_GID: "1000"
|
USER_GID: "1000"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.git.rule: Host(`git.alexav.gg`)
|
||||||
|
traefik.http.routers.git.entrypoints: webSecure
|
||||||
|
traefik.http.routers.git.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.git.loadbalancer.server.port: "3000"
|
||||||
|
|||||||
@@ -8,6 +8,12 @@
|
|||||||
- "{{ data_dir }}/glance/config"
|
- "{{ data_dir }}/glance/config"
|
||||||
- "{{ data_dir }}/glance/assets"
|
- "{{ data_dir }}/glance/assets"
|
||||||
|
|
||||||
|
- name: Pull latest Glance Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: glanceapp/glance
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Glance Docker Container
|
- name: Create Glance Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: glance
|
name: glance
|
||||||
@@ -25,3 +31,9 @@
|
|||||||
- "{{ data_dir }}/glance/config:/app/config"
|
- "{{ data_dir }}/glance/config:/app/config"
|
||||||
- "{{ data_dir }}/glance/assets:/app/assets"
|
- "{{ data_dir }}/glance/assets:/app/assets"
|
||||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.glance.rule: Host(`fntz.net`)
|
||||||
|
traefik.http.routers.glance.entrypoints: webSecure
|
||||||
|
traefik.http.routers.glance.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.glance.loadbalancer.server.port: "8080"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
docker_container:
|
docker_container:
|
||||||
name: gluetun
|
name: gluetun
|
||||||
image: qmcgaw/gluetun
|
image: qmcgaw/gluetun
|
||||||
|
recreate: true
|
||||||
capabilities:
|
capabilities:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
devices:
|
devices:
|
||||||
@@ -27,7 +28,7 @@
|
|||||||
published_ports:
|
published_ports:
|
||||||
- 8888:8888/tcp
|
- 8888:8888/tcp
|
||||||
- 8388:8388/tcp
|
- 8388:8388/tcp
|
||||||
- 8388:8388/ud
|
- 8388:8388/udp
|
||||||
env:
|
env:
|
||||||
VPN_SERVICE_PROVIDER: "{{ GLUETUN_VPN_SERVICE_PROVIDER }}"
|
VPN_SERVICE_PROVIDER: "{{ GLUETUN_VPN_SERVICE_PROVIDER }}"
|
||||||
VPN_TYPE: "wireguard"
|
VPN_TYPE: "wireguard"
|
||||||
@@ -36,3 +37,17 @@
|
|||||||
SERVER_COUNTRIES: "{{ GLUETUN_SERVER_COUNTRIES }}"
|
SERVER_COUNTRIES: "{{ GLUETUN_SERVER_COUNTRIES }}"
|
||||||
SERVER_CITIES: "{{ GLUETUN_SERVER_CITIES }}"
|
SERVER_CITIES: "{{ GLUETUN_SERVER_CITIES }}"
|
||||||
SERVER_HOSTNAMES: "{{ GLUETUN_SERVER_HOSTNAMES }}"
|
SERVER_HOSTNAMES: "{{ GLUETUN_SERVER_HOSTNAMES }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
|
||||||
|
traefik.http.routers.qbit.rule: Host(`qbit.fntz.net`)
|
||||||
|
traefik.http.routers.qbit.service: qbit
|
||||||
|
traefik.http.routers.qbit.entrypoints: webSecure
|
||||||
|
traefik.http.routers.qbit.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.qbit.loadbalancer.server.port: "8090"
|
||||||
|
|
||||||
|
traefik.http.routers.jackett.rule: Host(`jackett.fntz.net`)
|
||||||
|
traefik.http.routers.jackett.service: jackett
|
||||||
|
traefik.http.routers.jackett.entrypoints: webSecure
|
||||||
|
traefik.http.routers.jackett.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.jackett.loadbalancer.server.port: "9117"
|
||||||
|
|||||||
95
tasks/helium.yml
Normal file
95
tasks/helium.yml
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/helium"
|
||||||
|
|
||||||
|
- name: Clone latest services
|
||||||
|
git:
|
||||||
|
repo: git@git.alexav.gg:alex/helium-services.git
|
||||||
|
dest: "{{ data_dir }}/helium"
|
||||||
|
|
||||||
|
- name: Build NGINX image
|
||||||
|
docker_image:
|
||||||
|
name: helium_nginx
|
||||||
|
tag: "latest"
|
||||||
|
build:
|
||||||
|
args:
|
||||||
|
SERVICES_HOSTNAME: "{{ HELIUM_BASE_URL }}"
|
||||||
|
path: "{{ data_dir }}/helium/svc"
|
||||||
|
dockerfile: "{{ data_dir }}/helium/svc/nginx/Dockerfile"
|
||||||
|
source: build
|
||||||
|
force_source: yes
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Build Extension Proxy image
|
||||||
|
docker_image:
|
||||||
|
name: helium_ext_proxy
|
||||||
|
tag: "latest"
|
||||||
|
build:
|
||||||
|
path: "{{ data_dir }}/helium/svc/extension-proxy"
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
source: build
|
||||||
|
force_source: yes
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Build UBO image
|
||||||
|
docker_image:
|
||||||
|
name: helium_ubo
|
||||||
|
tag: "latest"
|
||||||
|
build:
|
||||||
|
path: "{{ data_dir }}/helium/svc/ubo"
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
source: build
|
||||||
|
force_source: yes
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create Helium Network
|
||||||
|
docker_network:
|
||||||
|
name: helium
|
||||||
|
|
||||||
|
- name: Create NGINX Container
|
||||||
|
docker_container:
|
||||||
|
name: helium_nginx
|
||||||
|
image: helium_nginx:latest
|
||||||
|
recreate: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
shm_size: "512M"
|
||||||
|
networks:
|
||||||
|
- name: helium
|
||||||
|
- name: homelab
|
||||||
|
mounts:
|
||||||
|
- type: tmpfs
|
||||||
|
target: /tmp
|
||||||
|
tmpfs_size: 5G
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.helium.rule: Host(`helium.fntz.net`)
|
||||||
|
traefik.http.routers.helium.entrypoints: webSecure
|
||||||
|
traefik.http.routers.helium.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.helium.loadbalancer.server.port: "80"
|
||||||
|
|
||||||
|
- name: Create UBO Proxy Container
|
||||||
|
docker_container:
|
||||||
|
name: helium_ubo
|
||||||
|
image: helium_ubo:latest
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
networks:
|
||||||
|
- name: helium
|
||||||
|
env:
|
||||||
|
UBO_PROXY_BASE_URL: "https://{{ HELIUM_BASE_URL }}/ubo"
|
||||||
|
|
||||||
|
- name: Create Extension Proxy Container
|
||||||
|
docker_container:
|
||||||
|
name: helium_ext_proxy
|
||||||
|
image: helium_ext_proxy:latest
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
networks:
|
||||||
|
- name: helium
|
||||||
|
env:
|
||||||
|
HMAC_SECRET: "{{ HELIUM_EXT_HMAC_SECRET }}"
|
||||||
|
PROXY_BASE_URL: "https://{{ HELIUM_BASE_URL }}/ext"
|
||||||
@@ -23,3 +23,9 @@
|
|||||||
- "{{ data_dir }}/homeassistant:/config"
|
- "{{ data_dir }}/homeassistant:/config"
|
||||||
- "/etc/localtime:/etc/localtime"
|
- "/etc/localtime:/etc/localtime"
|
||||||
- "/run/dbus:/run/dbus:ro"
|
- "/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"
|
||||||
|
|||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/homebridge"
|
- "{{ data_dir }}/homebridge"
|
||||||
|
|
||||||
|
- name: Pull latest Homebridge Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: homebridge/homebridge
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Homebridge Docker Container
|
- name: Create Homebridge Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: homebridge
|
name: homebridge
|
||||||
@@ -15,3 +21,10 @@
|
|||||||
recreate: true
|
recreate: true
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/homebridge:/homebridge"
|
- "{{ data_dir }}/homebridge:/homebridge"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.bridge.rule: Host(`bridge.fntz.net`)
|
||||||
|
traefik.http.routers.bridge.entrypoints: webSecure
|
||||||
|
traefik.http.routers.bridge.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.bridge.loadbalancer.server.url: "http://{{ TRAEFIK_HOST_IP }}:8581"
|
||||||
|
traefik.http.routers.bridge.middlewares: tinyauth
|
||||||
|
|||||||
@@ -33,16 +33,16 @@
|
|||||||
networks:
|
networks:
|
||||||
- name: immich
|
- name: immich
|
||||||
|
|
||||||
- name: Create Immich ML Docker Container
|
# - name: Create Immich ML Docker Container
|
||||||
docker_container:
|
# docker_container:
|
||||||
name: immich_machine_learning
|
# name: immich_machine_learning
|
||||||
image: ghcr.io/immich-app/immich-machine-learning:release
|
# image: ghcr.io/immich-app/immich-machine-learning:release
|
||||||
restart_policy: unless-stopped
|
# restart_policy: unless-stopped
|
||||||
recreate: true
|
# recreate: true
|
||||||
volumes:
|
# volumes:
|
||||||
- "{{ data_dir }}/immich/model-cache:/cache"
|
# - "{{ data_dir }}/immich/model-cache:/cache"
|
||||||
networks:
|
# networks:
|
||||||
- name: immich
|
# - name: immich
|
||||||
|
|
||||||
- name: Create Immich Server Docker Container
|
- name: Create Immich Server Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
@@ -61,3 +61,9 @@
|
|||||||
REDIS_HOSTNAME: "immich_redis"
|
REDIS_HOSTNAME: "immich_redis"
|
||||||
DB_PASSWORD: "{{ IMMICH_DB_PASSWORD }}"
|
DB_PASSWORD: "{{ IMMICH_DB_PASSWORD }}"
|
||||||
DB_USERNAME: "{{ IMMICH_DB_USERNAME }}"
|
DB_USERNAME: "{{ IMMICH_DB_USERNAME }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.img.rule: Host(`img.fntz.net`)
|
||||||
|
traefik.http.routers.img.entrypoints: webSecure
|
||||||
|
traefik.http.routers.img.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.img.loadbalancer.server.port: "2283"
|
||||||
|
|||||||
28
tasks/jackett.yml
Normal file
28
tasks/jackett.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/jackett"
|
||||||
|
|
||||||
|
- name: Pull latest Jackett Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: lscr.io/linuxserver/jackett
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
|
- name: Deploy Jackett Docker Container
|
||||||
|
docker_container:
|
||||||
|
name: jackett
|
||||||
|
image: lscr.io/linuxserver/jackett
|
||||||
|
recreate: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
network_mode: "container:gluetun"
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/jackett:/config"
|
||||||
|
- "{{ media_path}}/Downloads:/downloads"
|
||||||
|
env:
|
||||||
|
PUID: "{{ PUID }}"
|
||||||
|
PGID: "{{ PGID }}"
|
||||||
|
TZ: "{{ TZ }}"
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/jellyfin"
|
- "{{ 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
|
- name: Create Jellyfin Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: jellyfin
|
name: jellyfin
|
||||||
@@ -25,3 +31,9 @@
|
|||||||
PUID: "{{ PUID }}"
|
PUID: "{{ PUID }}"
|
||||||
PGID: "{{ PGID }}"
|
PGID: "{{ PGID }}"
|
||||||
TZ: "{{ TZ }}"
|
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"
|
||||||
|
|||||||
35
tasks/kavita.yml
Normal file
35
tasks/kavita.yml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/kavita"
|
||||||
|
|
||||||
|
- name: Pull latest Kavita Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: lscr.io/linuxserver/kavita
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
|
- name: Deploy Kavita Docker Container
|
||||||
|
docker_container:
|
||||||
|
name: kavita
|
||||||
|
image: lscr.io/linuxserver/kavita
|
||||||
|
recreate: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/kavita:/config"
|
||||||
|
- "{{ media_path }}/Books:/books"
|
||||||
|
env:
|
||||||
|
PUID: "{{ PUID }}"
|
||||||
|
PGID: "{{ PGID }}"
|
||||||
|
TZ: "{{ TZ }}"
|
||||||
|
networks:
|
||||||
|
- name: homelab
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.read.rule: Host(`read.fntz.net`)
|
||||||
|
traefik.http.routers.read.entrypoints: webSecure
|
||||||
|
traefik.http.routers.read.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.read.loadbalancer.server.port: "5000"
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Create folder structure
|
|
||||||
file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: directory
|
|
||||||
with_items:
|
|
||||||
- "{{ data_dir }}/monitoring"
|
|
||||||
- "{{ data_dir }}/monitoring/prometheus"
|
|
||||||
- "{{ data_dir }}/monitoring/grafana"
|
|
||||||
|
|
||||||
- name: Create Monitoring Docker Network
|
|
||||||
docker_network:
|
|
||||||
name: monitoring
|
|
||||||
|
|
||||||
- name: Create Grafana Docker Container
|
|
||||||
docker_container:
|
|
||||||
name: grafana
|
|
||||||
user: "{{ PUID }}"
|
|
||||||
image: grafana/grafana:latest
|
|
||||||
restart_policy: unless-stopped
|
|
||||||
recreate: true
|
|
||||||
networks:
|
|
||||||
- name: homelab
|
|
||||||
- name: monitoring
|
|
||||||
volumes:
|
|
||||||
- "{{ data_dir }}/monitoring/grafana:/var/lib/grafana"
|
|
||||||
env:
|
|
||||||
GF_AUTH_ANONYMOUS_ENABLED: "{{ GRAFANA_AUTH_ANONYMOUS_ENABLED }}"
|
|
||||||
|
|
||||||
- name: Copy Prometheus Config
|
|
||||||
template:
|
|
||||||
src: "prometheus.yml.j2"
|
|
||||||
dest: "{{ data_dir }}/monitoring/prometheus/config.yml"
|
|
||||||
mode: "0744"
|
|
||||||
|
|
||||||
- name: Create Prometheus Docker Container
|
|
||||||
docker_container:
|
|
||||||
name: prometheus
|
|
||||||
image: prom/prometheus:latest
|
|
||||||
restart_policy: unless-stopped
|
|
||||||
recreate: true
|
|
||||||
networks:
|
|
||||||
- name: homelab
|
|
||||||
- name: monitoring
|
|
||||||
volumes:
|
|
||||||
- "{{ data_dir }}/monitoring/prometheus:/prometheus"
|
|
||||||
- "{{ data_dir }}/monitoring/prometheus/config.yml:/etc/prometheus/prometheus.yml"
|
|
||||||
|
|
||||||
- name: Create CAdvisor Docker Container
|
|
||||||
docker_container:
|
|
||||||
name: cadvisor
|
|
||||||
image: gcr.io/cadvisor/cadvisor:latest
|
|
||||||
restart_policy: unless-stopped
|
|
||||||
recreate: true
|
|
||||||
privileged: true
|
|
||||||
networks:
|
|
||||||
- name: monitoring
|
|
||||||
devices:
|
|
||||||
- /dev/kmsg
|
|
||||||
volumes:
|
|
||||||
- "/:/rootfs:ro"
|
|
||||||
- "/var/run:/var/run:ro"
|
|
||||||
- "/sys:/sys:ro"
|
|
||||||
- "/var/lib/docker:/var/lib/docker:ro"
|
|
||||||
- "/dev/disk/:/dev/disk:ro"
|
|
||||||
|
|
||||||
- name: Create Node-Exporter Docker Container
|
|
||||||
docker_container:
|
|
||||||
name: node-exporter
|
|
||||||
image: prom/node-exporter:latest
|
|
||||||
restart_policy: unless-stopped
|
|
||||||
recreate: true
|
|
||||||
networks:
|
|
||||||
- name: monitoring
|
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/navidrome"
|
- "{{ data_dir }}/navidrome"
|
||||||
|
|
||||||
|
- name: Pull latest Navidrome Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: deluan/navidrome
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Navidrome Docker Container
|
- name: Create Navidrome Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: navidrome
|
name: navidrome
|
||||||
@@ -17,3 +23,9 @@
|
|||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/navidrome:/data"
|
- "{{ data_dir }}/navidrome:/data"
|
||||||
- "{{ NAVIDROME_MUSIC_PATH }}:/music:ro"
|
- "{{ NAVIDROME_MUSIC_PATH }}:/music:ro"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.music.rule: Host(`music.fntz.net`)
|
||||||
|
traefik.http.routers.music.entrypoints: webSecure
|
||||||
|
traefik.http.routers.music.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.music.loadbalancer.server.port: "4533"
|
||||||
|
|||||||
@@ -12,10 +12,16 @@
|
|||||||
docker_network:
|
docker_network:
|
||||||
name: nextcloud
|
name: nextcloud
|
||||||
|
|
||||||
|
- name: Pull latest Nextcloud Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: nextcloud
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Nextcloud DB Docker Container
|
- name: Create Nextcloud DB Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: nc_postgresql
|
name: nc_postgresql
|
||||||
image: postgres:16-alpine
|
image: postgres:17-alpine
|
||||||
restart_policy: unless-stopped
|
restart_policy: unless-stopped
|
||||||
recreate: true
|
recreate: true
|
||||||
networks:
|
networks:
|
||||||
@@ -40,3 +46,9 @@
|
|||||||
- name: nextcloud
|
- name: nextcloud
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/nextcloud/data:/var/www/html"
|
- "{{ 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"
|
||||||
|
|||||||
23
tasks/nfl-proxy.yml
Normal file
23
tasks/nfl-proxy.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/nfl-proxy"
|
||||||
|
|
||||||
|
- name: "Clone latest NFL-Proxy"
|
||||||
|
git:
|
||||||
|
repo: "git@git.alexav.gg:alex/nfl-proxy.git"
|
||||||
|
dest: "{{ data_dir }}/nfl-proxy"
|
||||||
|
|
||||||
|
- name: "Stop & remove existing PM2 containers"
|
||||||
|
ignore_errors: yes
|
||||||
|
shell: |
|
||||||
|
/home/alex/.nvm/versions/node/v24.4.0/bin/pm2 delete "nfl-proxy"
|
||||||
|
|
||||||
|
- name: "Start new PM2 container"
|
||||||
|
args:
|
||||||
|
chdir: "{{ data_dir }}/nfl-proxy"
|
||||||
|
shell: |
|
||||||
|
/home/alex/.nvm/versions/node/v24.4.0/bin/pm2 start --name="nfl-proxy" "venv/bin/activate && venv/bin/python main.py"
|
||||||
@@ -8,6 +8,12 @@
|
|||||||
- "{{ data_dir }}/ntfy/cache"
|
- "{{ data_dir }}/ntfy/cache"
|
||||||
- "{{ data_dir }}/ntfy/data"
|
- "{{ data_dir }}/ntfy/data"
|
||||||
|
|
||||||
|
- name: Pull latest Ntfy Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: binwiederhier/ntfy
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Ntfy Docker Container
|
- name: Create Ntfy Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: ntfy
|
name: ntfy
|
||||||
@@ -23,3 +29,8 @@
|
|||||||
env:
|
env:
|
||||||
UPSTREAM_BASE_URL: "{{ NTFY_UPSTREAM_BASE_URL }}"
|
UPSTREAM_BASE_URL: "{{ NTFY_UPSTREAM_BASE_URL }}"
|
||||||
BASE_URL: "{{ NTFY_BASE_URL }}"
|
BASE_URL: "{{ NTFY_BASE_URL }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.ntfy.rule: Host(`push.fntz.net`)
|
||||||
|
traefik.http.routers.ntfy.entrypoints: webSecure
|
||||||
|
traefik.http.routers.ntfy.tls.certresolver: letsencrypt
|
||||||
|
|||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/nzbget"
|
- "{{ 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
|
- name: Create NZBGet Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: nzbget
|
name: nzbget
|
||||||
@@ -23,3 +29,10 @@
|
|||||||
TZ: "{{ TZ }}"
|
TZ: "{{ TZ }}"
|
||||||
PUID: "{{ PUID }}"
|
PUID: "{{ PUID }}"
|
||||||
PGID: "{{ PGID }}"
|
PGID: "{{ PGID }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.nzb.rule: Host(`nzb.fntz.net`)
|
||||||
|
traefik.http.routers.nzb.entrypoints: webSecure
|
||||||
|
traefik.http.routers.nzb.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.nzb.loadbalancer.server.port: "6789"
|
||||||
|
traefik.http.routers.nzb.middlewares: tinyauth
|
||||||
|
|||||||
36
tasks/obsidian.yml
Normal file
36
tasks/obsidian.yml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/obsidian"
|
||||||
|
- "{{ data_dir }}/obsidian/data"
|
||||||
|
- "{{ data_dir }}/obsidian/etc"
|
||||||
|
|
||||||
|
- name: Pull Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: couchdb
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
|
- name: Create Docker Container
|
||||||
|
docker_container:
|
||||||
|
name: couchdb
|
||||||
|
image: couchdb:latest
|
||||||
|
recreate: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
networks:
|
||||||
|
- name: homelab
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/obsidian/data:/opt/couchdb/data"
|
||||||
|
- "{{ data_dir }}/obsidian/etc:/opt/couchdb/etc/local.d"
|
||||||
|
env:
|
||||||
|
COUCHDB_USER: "{{ COUCHDB_USER }}"
|
||||||
|
COUCHDB_PASSWORD: "{{ COUCHDB_PASSWORD }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.couch.rule: Host(`couch.fntz.net`)
|
||||||
|
traefik.http.routers.couch.entrypoints: webSecure
|
||||||
|
traefik.http.routers.couch.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.couch.loadbalancer.server.port: "5984"
|
||||||
93
tasks/owncloud.yml
Normal file
93
tasks/owncloud.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/owncloud"
|
||||||
|
- "{{ data_dir }}/owncloud/data"
|
||||||
|
- "{{ data_dir }}/owncloud/db"
|
||||||
|
- "{{ data_dir }}/owncloud/redis"
|
||||||
|
|
||||||
|
- name: Create Owncloud Docker Network
|
||||||
|
docker_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:
|
||||||
|
- name: owncloud
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/owncloud/db:/var/lib/mysql"
|
||||||
|
env:
|
||||||
|
MYSQL_ROOT_PASSWORD: "{{ OWNCLOUD_DB_PASSWORD }}"
|
||||||
|
MYSQL_DATABASE: "owncloud"
|
||||||
|
MYSQL_USER: "owncloud"
|
||||||
|
MYSQL_PASSWORD: "{{ OWNCLOUD_DB_PASSWORD }}"
|
||||||
|
MARIADB_AUTO_UPGRADE: "1"
|
||||||
|
command: "--max-allowed-packet=128M --innodb-log-file-size=64M"
|
||||||
|
healthcheck:
|
||||||
|
test: "CMD mysqladmin ping -u root --password={{ OWNCLOUD_DB_PASSWORD }}"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
- name: Create Owncloud Redis Container
|
||||||
|
docker_container:
|
||||||
|
name: oc_redis
|
||||||
|
image: redis:latest
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
networks:
|
||||||
|
- name: owncloud
|
||||||
|
command: "--databases 1"
|
||||||
|
healthcheck:
|
||||||
|
test: CMD redis-cli ping
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/owncloud/redis:/data"
|
||||||
|
|
||||||
|
- name: Create Owncloud Docker Container
|
||||||
|
docker_container:
|
||||||
|
name: owncloud
|
||||||
|
image: owncloud/server:10.15
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
networks:
|
||||||
|
- name: "{{ docker_network_name }}"
|
||||||
|
- name: owncloud
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/owncloud/data:/mnt/data"
|
||||||
|
env:
|
||||||
|
OWNCLOUD_DOMAIN: "{{ OWNCLOUD_APP_URL }}"
|
||||||
|
OWNCLOUD_TRUSTED_DOMAINS: "{{ OWNCLOUD_APP_URL }}"
|
||||||
|
OWNCLOUD_DB_TYPE: "mysql"
|
||||||
|
OWNCLOUD_DB_NAME: "owncloud"
|
||||||
|
OWNCLOUD_DB_USERNAME: "owncloud"
|
||||||
|
OWNCLOUD_DB_PASSWORD: "{{ OWNCLOUD_DB_PASSWORD }}"
|
||||||
|
OWNCLOUD_DB_HOST: "oc_database"
|
||||||
|
OWNCLOUD_ADMIN_USERNAME: "{{ OWNCLOUD_ADMIN_USERNAME }}"
|
||||||
|
OWNCLOUD_ADMIN_PASSWORD: "{{ OWNCLOUD_ADMIN_PASSWORD }}"
|
||||||
|
OWNCLOUD_MYSQL_UTF8MB4: "true"
|
||||||
|
OWNCLOUD_REDIS_ENBALED: "true"
|
||||||
|
OWNCLOUD_REDIS_HOST: "oc_redis"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.nc.rule: Host(`{{ OWNCLOUD_APP_URL }}`)
|
||||||
|
traefik.http.routers.nc.entrypoints: webSecure
|
||||||
|
traefik.http.routers.nc.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.nc.loadbalancer.server.port: "8080"
|
||||||
|
traefik.http.middlewares.limit.buffering.maxRequestBodyBytes: "1073741824"
|
||||||
|
traefik.http.routers.nc.middlewares: "limit"
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/pihole"
|
- "{{ data_dir }}/pihole"
|
||||||
|
|
||||||
|
- name: Pull latest PiHole Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: pihole/pihole
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create PiHole Docker Container
|
- name: Create PiHole Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: pihole
|
name: pihole
|
||||||
@@ -15,10 +21,16 @@
|
|||||||
networks:
|
networks:
|
||||||
- name: homelab
|
- name: homelab
|
||||||
published_ports:
|
published_ports:
|
||||||
- "{{ CADDY_HOST_IP }}:53:53/tcp"
|
- "{{ TRAEFIK_HOST_IP }}:53:53/tcp"
|
||||||
- "{{ CADDY_HOST_IP }}:53:53/udp"
|
- "{{ TRAEFIK_HOST_IP }}:53:53/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/pihole:/etc/pihole"
|
- "{{ data_dir }}/pihole:/etc/pihole"
|
||||||
env:
|
env:
|
||||||
FTLCONF_webserver_api_password: "{{ PIHOLE_FTLCONF_WEBSERVER_API_PASSWORD }}"
|
FTLCONF_webserver_api_password: "{{ PIHOLE_FTLCONF_WEBSERVER_API_PASSWORD }}"
|
||||||
TZ: "{{ TZ }}"
|
TZ: "{{ TZ }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.pihole.rule: Host(`pihole.fntz.net`)
|
||||||
|
traefik.http.routers.pihole.entrypoints: webSecure
|
||||||
|
traefik.http.routers.pihole.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.pihole.loadbalancer.server.port: "80"
|
||||||
|
|||||||
@@ -16,10 +16,16 @@
|
|||||||
docker_network:
|
docker_network:
|
||||||
name: metrics
|
name: metrics
|
||||||
|
|
||||||
|
- name: Pull latest Plausible Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: ghcr.io/plausible/community-edition
|
||||||
|
tag: v3.0.1
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Deploy Plausible Database Docker Container
|
- name: Deploy Plausible Database Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: metrics_postgres
|
name: metrics_postgres
|
||||||
image: postgres:16-alpine
|
image: postgres:17-alpine
|
||||||
restart_policy: unless-stopped
|
restart_policy: unless-stopped
|
||||||
recreate: true
|
recreate: true
|
||||||
volumes:
|
volumes:
|
||||||
@@ -76,3 +82,9 @@
|
|||||||
CLICKHOUSE_DATABASE_URL: "http://metrics_clickhouse:8123/plausible_events_db"
|
CLICKHOUSE_DATABASE_URL: "http://metrics_clickhouse:8123/plausible_events_db"
|
||||||
BASE_URL: "{{ PLAUSIBLE_BASE_URL }}"
|
BASE_URL: "{{ PLAUSIBLE_BASE_URL }}"
|
||||||
SECRET_KEY_BASE: "{{ PLAUSIBLE_SECRET_KEY_BASE }}"
|
SECRET_KEY_BASE: "{{ PLAUSIBLE_SECRET_KEY_BASE }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.metrics.rule: Host(`metrics.alexav.gg`)
|
||||||
|
traefik.http.routers.metrics.entrypoints: webSecure
|
||||||
|
traefik.http.routers.metrics.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.metrics.loadbalancer.server.port: "8000"
|
||||||
|
|||||||
32
tasks/plex.yml
Normal file
32
tasks/plex.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- "{{ data_dir }}/plex"
|
||||||
|
|
||||||
|
- name: Pull latest Plex Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: lscr.io/linuxserver/plex
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
|
- name: Deploy Plex Docker Container
|
||||||
|
docker_container:
|
||||||
|
name: plex
|
||||||
|
image: lscr.io/linuxserver/plex
|
||||||
|
network_mode: host
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
env:
|
||||||
|
PUID: "{{ PUID }}"
|
||||||
|
PGID: "{{ PGID }}"
|
||||||
|
TZ: "{{ TZ }}"
|
||||||
|
VERSION: "docker"
|
||||||
|
PLEX_CLAIM: "{{ PLEX_CLAIM_TOKEN }}"
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/plex:/config"
|
||||||
|
- "{{ media_path }}:/media"
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/pocketid"
|
- "{{ 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
|
- name: Create PocketID Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: pocketid
|
name: pocketid
|
||||||
@@ -21,3 +27,9 @@
|
|||||||
TRUST_PROXY: "{{ POCKETID_TRUST_PROXY }}"
|
TRUST_PROXY: "{{ POCKETID_TRUST_PROXY }}"
|
||||||
PUID: "{{ PUID }}"
|
PUID: "{{ PUID }}"
|
||||||
PGID: "{{ PGID }}"
|
PGID: "{{ PGID }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.oidc.rule: Host(`oidc.fntz.net`)
|
||||||
|
traefik.http.routers.oidc.entrypoints: webSecure
|
||||||
|
traefik.http.routers.oidc.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.oidc.loadbalancer.server.port: "1411"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
name: qbittorrent
|
name: qbittorrent
|
||||||
image: lscr.io/linuxserver/qbittorrent
|
image: lscr.io/linuxserver/qbittorrent
|
||||||
network_mode: "container:gluetun"
|
network_mode: "container:gluetun"
|
||||||
|
recreate: true
|
||||||
env:
|
env:
|
||||||
PUID: "{{ PUID }}"
|
PUID: "{{ PUID }}"
|
||||||
PGID: "{{ PGID }}"
|
PGID: "{{ PGID }}"
|
||||||
|
|||||||
@@ -10,6 +10,12 @@
|
|||||||
- "{{ data_dir }}/romm/config"
|
- "{{ data_dir }}/romm/config"
|
||||||
- "{{ data_dir }}/romm/db"
|
- "{{ data_dir }}/romm/db"
|
||||||
|
|
||||||
|
- name: Pull latest Romm Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: rommapp/romm
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Romm DB Docker Container
|
- name: Create Romm DB Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: romm-db
|
name: romm-db
|
||||||
@@ -61,3 +67,9 @@
|
|||||||
OIDC_CLIENT_SECRET: "{{ ROMM_OIDC_CLIENT_SECRET }}"
|
OIDC_CLIENT_SECRET: "{{ ROMM_OIDC_CLIENT_SECRET }}"
|
||||||
OIDC_REDIRECT_URL: "{{ ROMM_OIDC_REDIRECT_URL }}"
|
OIDC_REDIRECT_URL: "{{ ROMM_OIDC_REDIRECT_URL }}"
|
||||||
SERVER_APPLICATION_URL: "{{ ROMM_SERVER_APPLICATION_URL }}"
|
SERVER_APPLICATION_URL: "{{ ROMM_SERVER_APPLICATION_URL }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.emu.rule: Host(`emu.fntz.net`)
|
||||||
|
traefik.http.routers.emu.entrypoints: webSecure
|
||||||
|
traefik.http.routers.emu.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.emu.loadbalancer.server.port: "8080"
|
||||||
|
|||||||
@@ -9,6 +9,22 @@
|
|||||||
- "{{ data_dir }}/servarr/radarr_config"
|
- "{{ data_dir }}/servarr/radarr_config"
|
||||||
- "{{ data_dir }}/servarr/lidarr_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
|
- name: Deploy Radarr Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: radarr
|
name: radarr
|
||||||
@@ -21,6 +37,16 @@
|
|||||||
- "{{ NZBGET_DOWNLOADS_PATH }}:/downloads"
|
- "{{ NZBGET_DOWNLOADS_PATH }}:/downloads"
|
||||||
networks:
|
networks:
|
||||||
- name: homelab
|
- name: homelab
|
||||||
|
env:
|
||||||
|
PUID: "{{ PUID }}"
|
||||||
|
PGID: "{{ PGID }}"
|
||||||
|
TZ: "{{ TZ }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.radarr.rule: Host(`radarr.fntz.net`)
|
||||||
|
traefik.http.routers.radarr.entrypoints: webSecure
|
||||||
|
traefik.http.routers.radarr.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.radarr.loadbalancer.server.port: "7878"
|
||||||
|
|
||||||
- name: Deploy Sonarr Container
|
- name: Deploy Sonarr Container
|
||||||
docker_container:
|
docker_container:
|
||||||
@@ -32,8 +58,18 @@
|
|||||||
- "{{ data_dir }}/servarr/sonarr_config:/config"
|
- "{{ data_dir }}/servarr/sonarr_config:/config"
|
||||||
- "{{ SERVARR_MEDIA_PATH }}:/data"
|
- "{{ SERVARR_MEDIA_PATH }}:/data"
|
||||||
- "{{ NZBGET_DOWNLOADS_PATH }}:/downloads"
|
- "{{ NZBGET_DOWNLOADS_PATH }}:/downloads"
|
||||||
|
env:
|
||||||
|
PUID: "{{ PUID }}"
|
||||||
|
PGID: "{{ PGID }}"
|
||||||
|
TZ: "{{ TZ }}"
|
||||||
networks:
|
networks:
|
||||||
- name: homelab
|
- name: homelab
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.sonarr.rule: Host(`sonarr.fntz.net`)
|
||||||
|
traefik.http.routers.sonarr.entrypoints: webSecure
|
||||||
|
traefik.http.routers.sonarr.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.sonarr.loadbalancer.server.port: "8989"
|
||||||
|
|
||||||
- name: Deploy Lidarr Container
|
- name: Deploy Lidarr Container
|
||||||
docker_container:
|
docker_container:
|
||||||
@@ -41,9 +77,19 @@
|
|||||||
image: lscr.io/linuxserver/lidarr:latest
|
image: lscr.io/linuxserver/lidarr:latest
|
||||||
restart_policy: unless-stopped
|
restart_policy: unless-stopped
|
||||||
recreate: true
|
recreate: true
|
||||||
|
env:
|
||||||
|
PUID: "{{ PUID }}"
|
||||||
|
PGID: "{{ PGID }}"
|
||||||
|
TZ: "{{ TZ }}"
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/servarr/lidarr_config:/config"
|
- "{{ data_dir }}/servarr/lidarr_config:/config"
|
||||||
- "{{ SERVARR_MEDIA_PATH }}:/media"
|
- "{{ SERVARR_MEDIA_PATH }}:/media"
|
||||||
- "{{ NZBGET_DOWNLOADS_PATH }}:/downloads"
|
- "{{ NZBGET_DOWNLOADS_PATH }}:/downloads"
|
||||||
networks:
|
networks:
|
||||||
- name: homelab
|
- name: homelab
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.lidarr.rule: Host(`lidarr.fntz.net`)
|
||||||
|
traefik.http.routers.lidarr.entrypoints: webSecure
|
||||||
|
traefik.http.routers.lidarr.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.lidarr.loadbalancer.server.port: "8686"
|
||||||
|
|||||||
@@ -36,3 +36,9 @@
|
|||||||
env:
|
env:
|
||||||
TZ: "{{ TZ }}"
|
TZ: "{{ TZ }}"
|
||||||
TOKEN: "{{ API_ADMIN_KEY }}"
|
TOKEN: "{{ API_ADMIN_KEY }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.storage.rule: Host(`storage.alexav.gg`)
|
||||||
|
traefik.http.routers.storage.entrypoints: webSecure
|
||||||
|
traefik.http.routers.storage.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.storage.loadbalancer.server.port: "3001"
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
- name: Create folder structure
|
|
||||||
file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: directory
|
|
||||||
with_items:
|
|
||||||
- "{{ data_dir }}/syncthing"
|
|
||||||
|
|
||||||
- name: Deploy Syncthing Docker Container
|
|
||||||
docker_container:
|
|
||||||
name: syncthing
|
|
||||||
image: lscr.io/linuxserver/syncthing:latest
|
|
||||||
recreate: true
|
|
||||||
restart_policy: unless-stopped
|
|
||||||
networks:
|
|
||||||
- name: homelab
|
|
||||||
env:
|
|
||||||
PUID: "{{ PUID }}"
|
|
||||||
PGID: "{{ PGID }}"
|
|
||||||
TZ: "{{ TZ }}"
|
|
||||||
volumes:
|
|
||||||
- "{{ data_dir }}/syncthing:/config"
|
|
||||||
- "{{ SYNCTHING_DATA_PATH }}:/data"
|
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/tautulli"
|
- "{{ 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
|
- name: Create Tautulli Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: tautulli
|
name: tautulli
|
||||||
@@ -20,3 +26,9 @@
|
|||||||
PUID: "{{ PUID }}"
|
PUID: "{{ PUID }}"
|
||||||
PGID: "{{ PGID }}"
|
PGID: "{{ PGID }}"
|
||||||
TZ: "{{ TZ }}"
|
TZ: "{{ TZ }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.tt.rule: Host(`tt.fntz.net`)
|
||||||
|
traefik.http.routers.tt.entrypoints: webSecure
|
||||||
|
traefik.http.routers.tt.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.tt.loadbalancer.server.port: "8181"
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
---
|
---
|
||||||
|
- name: Pull latest Tinyauth Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: ghcr.io/steveiliop56/tinyauth
|
||||||
|
tag: v3
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Tinyauth Docker Container
|
- name: Create Tinyauth Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: tinyauth
|
name: tinyauth
|
||||||
@@ -21,3 +27,9 @@
|
|||||||
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 }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.tinyauth.rule: Host(`auth.fntz.net`)
|
||||||
|
traefik.http.routers.tinyauth.entrypoints: webSecure
|
||||||
|
traefik.http.routers.tinyauth.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.middlewares.tinyauth.forwardauth.address: http://tinyauth:3000/api/auth/traefik
|
||||||
|
|||||||
31
tasks/uptime-kuma.yml
Normal file
31
tasks/uptime-kuma.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
- name: Create folder structure
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
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
|
||||||
|
image: louislam/uptime-kuma
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
recreate: true
|
||||||
|
networks:
|
||||||
|
- name: homelab
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/uptime-kuma:/app/data"
|
||||||
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.status.rule: Host(`status.fntz.net`)
|
||||||
|
traefik.http.routers.status.entrypoints: webSecure
|
||||||
|
traefik.http.routers.status.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.status.loadbalancer.server.port: "3001"
|
||||||
@@ -6,6 +6,12 @@
|
|||||||
with_items:
|
with_items:
|
||||||
- "{{ data_dir }}/vaultwarden"
|
- "{{ data_dir }}/vaultwarden"
|
||||||
|
|
||||||
|
- name: Pull latest Vaultwarden Docker Image
|
||||||
|
docker_image:
|
||||||
|
name: vaultwarden/server
|
||||||
|
tag: latest
|
||||||
|
source: pull
|
||||||
|
|
||||||
- name: Create Vaultwarden Docker Container
|
- name: Create Vaultwarden Docker Container
|
||||||
docker_container:
|
docker_container:
|
||||||
name: vaultwarden
|
name: vaultwarden
|
||||||
@@ -18,3 +24,9 @@
|
|||||||
- "{{ data_dir }}/vaultwarden:/data"
|
- "{{ data_dir }}/vaultwarden:/data"
|
||||||
env:
|
env:
|
||||||
DOMAIN: "{{ VAULTWARDEN_DOMAIN }}"
|
DOMAIN: "{{ VAULTWARDEN_DOMAIN }}"
|
||||||
|
labels:
|
||||||
|
traefik.enable: "true"
|
||||||
|
traefik.http.routers.vw.rule: Host(`vw.fntz.net`)
|
||||||
|
traefik.http.routers.vw.entrypoints: webSecure
|
||||||
|
traefik.http.routers.vw.tls.certresolver: letsencrypt
|
||||||
|
traefik.http.services.vw.loadbalancer.server.port: "80"
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
global:
|
|
||||||
scrape_interval: 15s
|
|
||||||
evaluation_interval: 15s
|
|
||||||
|
|
||||||
scrape_configs:
|
|
||||||
# Prometheus itself
|
|
||||||
- job_name: "prometheus"
|
|
||||||
static_configs:
|
|
||||||
- targets: ["localhost:9090"]
|
|
||||||
|
|
||||||
# Node Exporter (system metrics)
|
|
||||||
- job_name: "node-exporter"
|
|
||||||
static_configs:
|
|
||||||
- targets: ["node-exporter:9100"]
|
|
||||||
|
|
||||||
# Docker metrics
|
|
||||||
- job_name: "cadvisor"
|
|
||||||
static_configs:
|
|
||||||
- targets: ["cadvisor:8083"]
|
|
||||||
Reference in New Issue
Block a user