From 265f3b859e362a675f32c7b5909de3024c36c4e7 Mon Sep 17 00:00:00 2001 From: Bastian de Byl Date: Sat, 2 Oct 2021 17:01:42 -0400 Subject: [PATCH 1/3] CU-1newj99 Added motion camera deployment to home server --- ansible/deploy_home.yml | 2 + ansible/roles/motion/defaults/main.yml | 6 + ansible/roles/motion/handlers/main.yml | 6 + ansible/roles/motion/meta/main.yml | 3 + ansible/roles/motion/tasks/deps.yml | 7 + ansible/roles/motion/tasks/main.yml | 3 + ansible/roles/motion/tasks/motion.yml | 26 +++ ansible/roles/motion/templates/motion.conf.j2 | 171 ++++++++++++++++++ ansible/vars/vault.yml | Bin 2645 -> 3098 bytes 9 files changed, 224 insertions(+) create mode 100644 ansible/roles/motion/defaults/main.yml create mode 100644 ansible/roles/motion/handlers/main.yml create mode 100644 ansible/roles/motion/meta/main.yml create mode 100644 ansible/roles/motion/tasks/deps.yml create mode 100644 ansible/roles/motion/tasks/main.yml create mode 100644 ansible/roles/motion/tasks/motion.yml create mode 100644 ansible/roles/motion/templates/motion.conf.j2 diff --git a/ansible/deploy_home.yml b/ansible/deploy_home.yml index 689a69f..57b2fb5 100644 --- a/ansible/deploy_home.yml +++ b/ansible/deploy_home.yml @@ -11,3 +11,5 @@ - role: drone - role: nfs tags: nfs + - role: motion + tags: motion diff --git a/ansible/roles/motion/defaults/main.yml b/ansible/roles/motion/defaults/main.yml new file mode 100644 index 0000000..df8a412 --- /dev/null +++ b/ansible/roles/motion/defaults/main.yml @@ -0,0 +1,6 @@ +--- +deps: [ + motion +] + +motion_target_dir: "{{ nfs_root }}/motion" diff --git a/ansible/roles/motion/handlers/main.yml b/ansible/roles/motion/handlers/main.yml new file mode 100644 index 0000000..6c9fc00 --- /dev/null +++ b/ansible/roles/motion/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: restart_motion + become: true + service: + name: motion + state: restarted diff --git a/ansible/roles/motion/meta/main.yml b/ansible/roles/motion/meta/main.yml new file mode 100644 index 0000000..d8bd180 --- /dev/null +++ b/ansible/roles/motion/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - role: nfs diff --git a/ansible/roles/motion/tasks/deps.yml b/ansible/roles/motion/tasks/deps.yml new file mode 100644 index 0000000..3eab821 --- /dev/null +++ b/ansible/roles/motion/tasks/deps.yml @@ -0,0 +1,7 @@ +--- +- name: install motion + become: true + pacman: + name: "{{ deps }}" + state: present + tags: deps diff --git a/ansible/roles/motion/tasks/main.yml b/ansible/roles/motion/tasks/main.yml new file mode 100644 index 0000000..be6c254 --- /dev/null +++ b/ansible/roles/motion/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- import_tasks: deps.yml +- import_tasks: motion.yml diff --git a/ansible/roles/motion/tasks/motion.yml b/ansible/roles/motion/tasks/motion.yml new file mode 100644 index 0000000..ad81238 --- /dev/null +++ b/ansible/roles/motion/tasks/motion.yml @@ -0,0 +1,26 @@ +--- +- name: create motion directory + become: true + file: + path: "{{ motion_target_dir }}" + state: directory + owner: "{{ nfs_user }}" + group: "{{ nfs_group }}" + mode: 0755 + +- name: template motion config + become: true + template: + src: templates/motion.conf.j2 + dest: /etc/motion/motion.conf + mode: 0644 + backup: true + notify: + - restart_motion + +- name: enable (now) motion.service + become: true + service: + name: motion.service + state: started + enabled: true diff --git a/ansible/roles/motion/templates/motion.conf.j2 b/ansible/roles/motion/templates/motion.conf.j2 new file mode 100644 index 0000000..993d09b --- /dev/null +++ b/ansible/roles/motion/templates/motion.conf.j2 @@ -0,0 +1,171 @@ +# Rename this distribution example file to motion.conf +# +# This config file was generated by motion 4.3.2 +# Documentation: /usr/share/doc/motion/motion_guide.html +# +# This file contains only the basic configuration options to get a +# system working. There are many more options available. Please +# consult the documentation for the complete list of all options. +# + +############################################################ +# System control configuration parameters +############################################################ + +# Start in daemon (background) mode and release terminal. +daemon on + +# Start in Setup-Mode, daemon disabled. +setup_mode off + +# File to store the process ID. +; pid_file value + +# File to write logs messages into. If not defined stderr and syslog is used. +; log_file value + +# Level of log messages [1..9] (EMG, ALR, CRT, ERR, WRN, NTC, INF, DBG, ALL). +log_level 6 + +# Target directory for pictures, snapshots and movies +target_dir {{ motion_target_dir }} + +# Video device (e.g. /dev/video0) to be used for capturing. +; videodevice /dev/video0 + +# Parameters to control video device. See motion_guide.html +; vid_control_params value + +# The full URL of the network camera stream. +netcam_url rtsp://{{ motion_user }}:{{ motion_pass }}@{{ motion_hostname }}:{{ motion_port }}/mpeg4/media.amp + +# Name of mmal camera (e.g. vc.ril.camera for pi camera). +; mmalcam_name value + +# Camera control parameters (see raspivid/raspistill tool documentation) +; mmalcam_control_params value + +############################################################ +# Image Processing configuration parameters +############################################################ + +# Image width in pixels. +width 3840 + +# Image height in pixels. +height 2160 + +# Maximum number of frames to be captured per second. +framerate 20 + +# Text to be overlayed in the lower left corner of images +text_left NatureCam + +# Text to be overlayed in the lower right corner of images. +text_right %Y-%m-%d\n%T-%q + +############################################################ +# Motion detection configuration parameters +############################################################ + +# Always save pictures and movies even if there was no motion. +emulate_motion off + +# Threshold for number of changed pixels that triggers motion. +threshold 165900 + +# Noise threshold for the motion detection. +; noise_level 32 + +# Despeckle the image using (E/e)rode or (D/d)ilate or (l)abel. +despeckle_filter EedDl + +# Number of images that must contain motion to trigger an event. +minimum_motion_frames 1 + +# Gap in seconds of no motion detected that triggers the end of an event. +event_gap 60 + +# The number of pre-captured (buffered) pictures from before motion. +pre_capture 3 + +# Number of frames to capture after motion is no longer detected. +post_capture 0 + +############################################################ +# Script execution configuration parameters +############################################################ + +# Command to be executed when an event starts. +; on_event_start value + +# Command to be executed when an event ends. +; on_event_end value + +# Command to be executed when a movie file is closed. +; on_movie_end value + +############################################################ +# Picture output configuration parameters +############################################################ + +# Output pictures when motion is detected +picture_output off + +# File name(without extension) for pictures relative to target directory +picture_filename %Y%m%d%H%M%S-%q + +############################################################ +# Movie output configuration parameters +############################################################ + +# Create movies of motion events. +movie_output on + +# Maximum length of movie in seconds. +movie_max_time 60 + +# The encoding quality of the movie. (0=use bitrate. 1=worst quality, 100=best) +movie_quality 45 + +# Container/Codec to used for the movie. See motion_guide.html +movie_codec mkv + +# File name(without extension) for movies relative to target directory +movie_filename %t-%v-%Y%m%d%H%M%S + +############################################################ +# Webcontrol configuration parameters +############################################################ + +# Port number used for the webcontrol. +webcontrol_port 8080 + +# Restrict webcontrol connections to the localhost. +webcontrol_localhost on + +# Type of configuration options to allow via the webcontrol. +webcontrol_parms 0 + +############################################################ +# Live stream configuration parameters +############################################################ + +# The port number for the live stream. +stream_port 8081 + +# Restrict stream connections to the localhost. +stream_localhost on + +############################################################## +# Camera config files - One for each camera. +############################################################## +; camera /usr/etc/motion/camera1.conf +; camera /usr/etc/motion/camera2.conf +; camera /usr/etc/motion/camera3.conf +; camera /usr/etc/motion/camera4.conf + +############################################################## +# Directory to read '.conf' files for cameras. +############################################################## +; camera_dir /usr/etc/motion/conf.d diff --git a/ansible/vars/vault.yml b/ansible/vars/vault.yml index 6993c23eda7f18329bafeca8162a1d11998edead..3c3bca973558e1bf9fb676585d735743d5578793 100644 GIT binary patch literal 3098 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 oRi9*2{!CN+6>2F(6Hq)$ literal 2645 zcmV-b3aa%0M@dveQdv+`0209wl(;8Ck}>g13o3f;<@G7U+T(#e1TB!tz zOvYghna0Jxr-mq2B=8qr)u(Ah@on^L8<82iq>zMm6W~tQ_)Wku#!fVVPJm5qiBbUK z{dFyB&^QqC=R~{PL$!;{7Y=ytt|(5UuyOHFFH|cw#{?Qs83XDivkGelDEGOCPuCM} z;j9oP$Z*sTqXNDk-SIBF3BBJ?faWbUqJ0zuYgc14=BH_G03qO*VLNXb_d5Cw{y0_Z zO0pxD6*D{7WlucTSbHBf_Z*iJxR!yyhrdJpSu=vER|guR*V-_G|Fz=*62~>P(0IGn zRY5jkSW-x*tp(SpKxH|p&G{mJO!)G(*ZLZUON?e79C^%%AY1vrRo4dg7hi7MHF^9k08gijStZ8vJ_$y?2JHqh@NJzI^k28~%x6mTQK}#8fO{IZNI=uW~ z4l{V{PROJ}A}D~WjSgfuiv2+8?SR)459~=;8EB^ICe2ZloRH8KM_!@ww$xE`qNi|ND|N+P;>HJsU|XN&tQE_epP1U9%i~%FY()9FgsZ!}WEKJ}_BA#3%2b z|3y`riIJM{S=nC0KddkMrZhkblETKHWD-1o>hqm}Y6ot*lPgYx(1JMbE!S3zxcc~T5=*p>Wk!Jn=eM~1j9(S|Oz z`cj?$f7k01f_YS5Z+CD+ND=A0`XX~_0oTGSqhIWfa)hp1WaKsm3p@5SK!i5jE87v76&gG*I)5r0i$y^R8r$6`7Y05wYx!Vs0 z!Ft0}*Mx($Os{RCq zsu8Av?w^#<C~Tbdl_epbY?h{Cw+jh6ao$ z0CO}JdMPrGO`>3P8pubU_eEgSVG7So8b-s!*A?Rj5Em`lg>G; zEV3d{6rz;88uW!&yC|~|Jzdgfq6FM)Mq!sMlFZe!%ldq6Am!^soZ&#GN=hIp(Ca(>9JAqi6QC-mFct;kV6J7+t z>ffGnEUB=mzsj#1Mrf(1B2($gn{C`0uhV1s^O?f(K=iPnIH@VO7DL4wCR{(Ou==Z? z_bgtb5vRtq0+El5%Rqg344V%Yfz8GI19zvJ5|sQVPp+X@@1)#2>yz@FPMD{+P6fs*PrY> z6?%I{uc=HXudxi5=lBNXT+NPr%4HKp`cExk=&5+j7g6icS~uxKKbdBr?wt*2dw8eS zSv^MCS!iu2QYlsOf;+mCyah4fJTZyjuod{&*~f?D&o)4o@%x0u2i%Np@f7kul(vW~ z*bW(b$klb{#OsL_&rs*wcgEt?8B=P8z*0L8+j7e(_tf%TOIiE&XZZB{`CE9~3qzTk zeTE`t_*;1waIgzX0#c>3CY)byvbxWrckTsje z%IscjBa*s$s?}U+!kG~m59LbuZ`#(Z%BM)gj z0FiEy4~Yv++bKcZ_UR&EQ2$nZ|LZCOGS>`L8rREDyW2t{{+A!hJ;}issTlN|{~6?3 zw01ikaau=_>^%GsdW^1|`R}8R~<6g8z{)H21ni z)#dURB&37^cstST3*ju?qzu4`9n@31B}6?VO+>9X%HE4J5m6kgBJ+xUD5Zml|1S4_ zXL<#_xwScoY826Zrw3Jiu*lcjqgBJ(rKFsaLs)6l+!i`#yudxF`My!&VoV>fb}v|= zmI~C)Iw{wNQ><6387?_w+wG(Cr-d5AaeyF2jJlBNLsap(TIV&8M-+CCHw%;5RNj~= z;XI4M)ZIEB7c8J{BjiIsFkCFo^Ox#HC*}PEWtvI+sx8lTmZ*Q=NRdTTZ#(N~{TZ+^ zD%`Kxoz2A03N{_FoBqLv%=UFH%^kO#7AYbqTSqq@?B0|xenRdmHRmHk)!qRt30g}u5;d~D;QgPBw2WHh$WIlyb!^(E z4N?@sU=VD*T)JR$qnNn*1MlVAzUDs8x}j@}V#X&tw&mpaL62lDWGlR=W1RDq3$?QhDTN7#X0}{(Cr0(3MaMJ^EE&L31ydd3Nqj$oMfvWbHBxyMcFT| D3TYFt From cc834df161bf6192c30331d4691b1cfda82396b5 Mon Sep 17 00:00:00 2001 From: Bastian de Byl Date: Sun, 28 Nov 2021 16:38:52 -0500 Subject: [PATCH 2/3] added partkeepr, motion, and relevant secrets --- ansible/deploy_home.yml | 2 + ansible/roles/common/defaults/main.yml | 1 + ansible/roles/http/defaults/main.yml | 1 + ansible/roles/http/tasks/http.yml | 2 + .../nginx/sites/home.bdebyl.net.conf.j2 | 2 +- .../nginx/sites/parts.bdebyl.net.conf.j2 | 22 +++++ ansible/roles/motion/tasks/motion.yml | 31 ++++++- ansible/roles/motion/templates/motion.conf.j2 | 12 +-- .../templates/motion.service.override.j2 | 2 + ansible/roles/partkeepr/meta/main.yml | 3 + ansible/roles/partkeepr/tasks/main.yml | 77 ++++++++++++++++++ ansible/roles/pihole/defaults/main.yml | 5 ++ ansible/roles/pihole/meta/main.yml | 3 + ansible/roles/pihole/tasks/deps.yml | 11 +++ ansible/roles/pihole/tasks/main.yml | 3 + ansible/vars/vault.yml | Bin 3098 -> 3293 bytes 16 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 ansible/roles/http/templates/nginx/sites/parts.bdebyl.net.conf.j2 create mode 100644 ansible/roles/motion/templates/motion.service.override.j2 create mode 100644 ansible/roles/partkeepr/meta/main.yml create mode 100644 ansible/roles/partkeepr/tasks/main.yml create mode 100644 ansible/roles/pihole/defaults/main.yml create mode 100644 ansible/roles/pihole/meta/main.yml create mode 100644 ansible/roles/pihole/tasks/deps.yml create mode 100644 ansible/roles/pihole/tasks/main.yml diff --git a/ansible/deploy_home.yml b/ansible/deploy_home.yml index 57b2fb5..109832e 100644 --- a/ansible/deploy_home.yml +++ b/ansible/deploy_home.yml @@ -13,3 +13,5 @@ tags: nfs - role: motion tags: motion + - role: partkeepr + tags: partkeepr \ No newline at end of file diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml index d9a1cda..42e8843 100644 --- a/ansible/roles/common/defaults/main.yml +++ b/ansible/roles/common/defaults/main.yml @@ -20,3 +20,4 @@ services: - fail2ban - iptables - nginx + - systemd-timesyncd diff --git a/ansible/roles/http/defaults/main.yml b/ansible/roles/http/defaults/main.yml index eba3a34..41ab50e 100644 --- a/ansible/roles/http/defaults/main.yml +++ b/ansible/roles/http/defaults/main.yml @@ -7,6 +7,7 @@ deps: [ ci_server_name: ci.bdebyl.net home_server_name: home.bdebyl.net +parts_server_name: parts.bdebyl.net install_path: /usr/share nginx_path: /etc/nginx diff --git a/ansible/roles/http/tasks/http.yml b/ansible/roles/http/tasks/http.yml index a357025..73a6f9f 100644 --- a/ansible/roles/http/tasks/http.yml +++ b/ansible/roles/http/tasks/http.yml @@ -37,6 +37,7 @@ loop: - "{{ ci_server_name }}.http.conf" - "{{ home_server_name }}.conf" + - "{{ parts_server_name }}.conf" notify: restart_nginx tags: http @@ -48,5 +49,6 @@ state: link loop: - "{{ ci_server_name }}.http.conf" + - "{{ parts_server_name }}.conf" notify: restart_nginx tags: http diff --git a/ansible/roles/http/templates/nginx/sites/home.bdebyl.net.conf.j2 b/ansible/roles/http/templates/nginx/sites/home.bdebyl.net.conf.j2 index f7fd258..5c61136 100644 --- a/ansible/roles/http/templates/nginx/sites/home.bdebyl.net.conf.j2 +++ b/ansible/roles/http/templates/nginx/sites/home.bdebyl.net.conf.j2 @@ -1,6 +1,6 @@ geo $whitelisted { default 0; - 192.168.1.1/24 1; + 192.168.1.0/24 1; } server { diff --git a/ansible/roles/http/templates/nginx/sites/parts.bdebyl.net.conf.j2 b/ansible/roles/http/templates/nginx/sites/parts.bdebyl.net.conf.j2 new file mode 100644 index 0000000..dfd4b67 --- /dev/null +++ b/ansible/roles/http/templates/nginx/sites/parts.bdebyl.net.conf.j2 @@ -0,0 +1,22 @@ +geo $whitelisted { + default 0; + 192.168.1.0/24 1; +} + +upstream partkeepr { + server localhost:8081; +} + +server { + listen 80; + server_name {{ parts_server_name }}; + + if ($whitelisted = 0) { + return 302 $scheme://bdebyl.net$request_uri; + } + + location / { + proxy_pass http://partkeepr; + proxy_connect_timeout 1s; + } +} diff --git a/ansible/roles/motion/tasks/motion.yml b/ansible/roles/motion/tasks/motion.yml index ad81238..4be23e5 100644 --- a/ansible/roles/motion/tasks/motion.yml +++ b/ansible/roles/motion/tasks/motion.yml @@ -1,4 +1,13 @@ --- +- name: give motion user nfs permissions + become: true + user: + name: motion + groups: "{{ nfs_group }}" + append: true + notify: + - restart_motion + - name: create motion directory become: true file: @@ -6,7 +15,7 @@ state: directory owner: "{{ nfs_user }}" group: "{{ nfs_group }}" - mode: 0755 + mode: 0777 - name: template motion config become: true @@ -18,9 +27,25 @@ notify: - restart_motion +- name: create motion systemd override directory + become: true + file: + path: /etc/systemd/system/motion.service.d/ + state: directory + mode: 0644 + +- name: template motion systemd override + become: true + template: + src: templates/motion.service.override.j2 + dest: /etc/systemd/system/motion.service.d/override.conf + mode: 0644 + notify: + - restart_motion + - name: enable (now) motion.service become: true service: name: motion.service - state: started - enabled: true + state: stopped + enabled: false diff --git a/ansible/roles/motion/templates/motion.conf.j2 b/ansible/roles/motion/templates/motion.conf.j2 index 993d09b..1249a58 100644 --- a/ansible/roles/motion/templates/motion.conf.j2 +++ b/ansible/roles/motion/templates/motion.conf.j2 @@ -37,7 +37,7 @@ target_dir {{ motion_target_dir }} ; vid_control_params value # The full URL of the network camera stream. -netcam_url rtsp://{{ motion_user }}:{{ motion_pass }}@{{ motion_hostname }}:{{ motion_port }}/mpeg4/media.amp +netcam_url rtsp://{{ motion_hostname }}:{{ motion_port }}/h264?username={{ motion_user }}&password={{ motion_pass }} # Name of mmal camera (e.g. vc.ril.camera for pi camera). ; mmalcam_name value @@ -87,10 +87,10 @@ minimum_motion_frames 1 event_gap 60 # The number of pre-captured (buffered) pictures from before motion. -pre_capture 3 +pre_capture 80 # Number of frames to capture after motion is no longer detected. -post_capture 0 +post_capture 300 ############################################################ # Script execution configuration parameters @@ -123,16 +123,16 @@ picture_filename %Y%m%d%H%M%S-%q movie_output on # Maximum length of movie in seconds. -movie_max_time 60 +movie_max_time 30 # The encoding quality of the movie. (0=use bitrate. 1=worst quality, 100=best) movie_quality 45 # Container/Codec to used for the movie. See motion_guide.html -movie_codec mkv +movie_codec mp4 # File name(without extension) for movies relative to target directory -movie_filename %t-%v-%Y%m%d%H%M%S +movie_filename %Y%m%d-%H_%M_%S ############################################################ # Webcontrol configuration parameters diff --git a/ansible/roles/motion/templates/motion.service.override.j2 b/ansible/roles/motion/templates/motion.service.override.j2 new file mode 100644 index 0000000..78422bb --- /dev/null +++ b/ansible/roles/motion/templates/motion.service.override.j2 @@ -0,0 +1,2 @@ +[Service] +User={{ nfs_user }} diff --git a/ansible/roles/partkeepr/meta/main.yml b/ansible/roles/partkeepr/meta/main.yml new file mode 100644 index 0000000..3f81c4b --- /dev/null +++ b/ansible/roles/partkeepr/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - role: http diff --git a/ansible/roles/partkeepr/tasks/main.yml b/ansible/roles/partkeepr/tasks/main.yml new file mode 100644 index 0000000..d019e82 --- /dev/null +++ b/ansible/roles/partkeepr/tasks/main.yml @@ -0,0 +1,77 @@ +--- +- name: create required partkeepr volumes + docker_volume: + name: "{{ item }}" + with_items: + - parkeepr-web-vol + - partkeepr-conf-vol + - partkeepr-data-vol + - partkeepr-db-vol + +- name: create partkeepr-db container + diff: false + docker_container: + name: partkeepr-db + image: mariadb:10.0 + recreate: false + restart: true + restart_policy: on-failure + restart_retries: 3 + env: + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' + MYSQL_DATABASE: partkeepr + MYSQL_USER: partkeepr + MYSQL_PASSWORD: partkeepr + volumes: + - partkeepr-db-vol:/var/lib/mysql + + + # 'PARTKEEPR_AUTHENTICATION_PROVIDER': 'PartKeepr.Auth.WSSEAuthenticationProvider' + # 'PARTKEEPR_CACHE_DOCTRINE': 'array' + # 'PARTKEEPR_CACHE_DUNGLAS': False + # 'PARTKEEPR_DATABASE_DRIVER': 'pdo_mysql' + # 'PARTKEEPR_DATABASE_HOST': 'database' + # 'PARTKEEPR_DATABASE_NAME': 'partkeepr' + # 'PARTKEEPR_DATABASE_PORT': 3306 + # 'PARTKEEPR_DATABASE_USER': 'partkeepr' + # 'PARTKEEPR_DATABASE_PASS': 'partkeepr' + # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTCANONICALFORM': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTDOMAINNAME': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTDOMAINNAMESHORT': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTFILTERFORMAT': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_BASEDN': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_BINDREQUIRESDN': False + # 'PARTKEEPR_FR3D_LDAP_DRIVER_HOST': '127.0.0.1' + # 'PARTKEEPR_FR3D_LDAP_DRIVER_OPTREFERRALS': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_PASSWORD': NULL + # 'PARTKEEPR_FR3D_LDAP_DRIVER_PORT': 389 + # 'PARTKEEPR_FR3D_LDAP_DRIVER_USESSL': False + # 'PARTKEEPR_FR3D_LDAP_DRIVER_USESTARTTLS': False + # 'PARTKEEPR_FR3D_LDAP_DRIVER_USERNAME': NULL + # 'PARTKEEPR_FR3D_LDAP_USER_ATTRIBUTE_EMAIL': 'email' + # 'PARTKEEPR_FR3D_LDAP_USER_ATTRIBUTE_USERNAME': 'samaccountname' + # 'PARTKEEPR_FR3D_LDAP_USER_BASEDN': 'dc=example,dc=com' + # 'PARTKEEPR_FR3D_LDAP_USER_ENABLED': False + # 'PARTKEEPR_FR3D_LDAP_USER_FILTER': NULL + # 'PARTKEEPR_LOCALE': 'en' + # 'PARTKEEPR_MAILER_AUTH_MODE': NULL + # 'PARTKEEPR_MAILER_ENCRYPTION': NULL + # 'PARTKEEPR_MAILER_HOST': NULL + # 'PARTKEEPR_MAILER_PASSWORD': NULL + # 'PARTKEEPR_MAILER_PORT': 25 + # 'PARTKEEPR_MAILER_TRANSPORT': NULL + # 'PARTKEEPR_MAILER_USER': NULL + # 'PARTKEEPR_AUTH_MAX_USERS': 'unlimited' + # 'PARTKEEPR_CATEGORY_PATH_SEPARATOR': ' ➤ ' + # 'PARTKEEPR_CRONJOB_CHECK': True + # 'PARTKEEPR_FILESYSTEM_DATA_DIRECTORY': '%kernel.root_dir%/../data/' + # 'PARTKEEPR_FILESYSTEM_QUOTA': False + # 'PARTKEEPR_MAINTENANCE': false + # 'PARTKEEPR_MAINTENANCE_MESSAGE': NULL + # 'PARTKEEPR_MAINTENANCE_TITLE': NULL + # 'PARTKEEPR_OCTOPART_APIKEY': NULL + # 'PARTKEEPR_PARTS_INTERNALPARTNUMBERUNIQUE': False + # 'PARTKEEPR_PARTS_LIMIT': False + # 'PARTKEEPR_USERS_LIMIT': False + # 'PARTKEEPR_SECRET': 'OJBKOJIKNONAJENLBJJNLFIDPDGKDIED' + # volumes: \ No newline at end of file diff --git a/ansible/roles/pihole/defaults/main.yml b/ansible/roles/pihole/defaults/main.yml new file mode 100644 index 0000000..26a6ab1 --- /dev/null +++ b/ansible/roles/pihole/defaults/main.yml @@ -0,0 +1,5 @@ +--- +deps: [ + php-sqlite, + php-fpm +] diff --git a/ansible/roles/pihole/meta/main.yml b/ansible/roles/pihole/meta/main.yml new file mode 100644 index 0000000..3f81c4b --- /dev/null +++ b/ansible/roles/pihole/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - role: http diff --git a/ansible/roles/pihole/tasks/deps.yml b/ansible/roles/pihole/tasks/deps.yml new file mode 100644 index 0000000..323b55c --- /dev/null +++ b/ansible/roles/pihole/tasks/deps.yml @@ -0,0 +1,11 @@ +--- +- name: install pi-hole-server + command: yay -S --noconfirm pi-hole-server + args: + creates: /bin/pihole + +- name: install pi-hole-server dependencies + become: true + pacman: + name: "{{ deps }}" + state: present diff --git a/ansible/roles/pihole/tasks/main.yml b/ansible/roles/pihole/tasks/main.yml new file mode 100644 index 0000000..736d254 --- /dev/null +++ b/ansible/roles/pihole/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- import_tasks: deps.yml +- import_tasks: php.yml diff --git a/ansible/vars/vault.yml b/ansible/vars/vault.yml index 3c3bca973558e1bf9fb676585d735743d5578793..511ae70da2ed2e5962e92712700ae4352fbb8419 100644 GIT binary patch literal 3293 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 b_-r`eg!fMTNnan2VG*=45p|@i_#Ap_V=8$D literal 3098 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 oRi9*2{!CN+6>2F(6Hq)$ From 421bcdc91e724961b0d5263f847df38aafc05393 Mon Sep 17 00:00:00 2001 From: Bastian de Byl Date: Tue, 18 Jan 2022 17:45:27 -0500 Subject: [PATCH 3/3] added partkeepr --- ansible/roles/partkeepr/tasks/main.yml | 113 +++++++++++++------------ 1 file changed, 59 insertions(+), 54 deletions(-) diff --git a/ansible/roles/partkeepr/tasks/main.yml b/ansible/roles/partkeepr/tasks/main.yml index d019e82..780b2d2 100644 --- a/ansible/roles/partkeepr/tasks/main.yml +++ b/ansible/roles/partkeepr/tasks/main.yml @@ -3,20 +3,26 @@ docker_volume: name: "{{ item }}" with_items: - - parkeepr-web-vol - - partkeepr-conf-vol - - partkeepr-data-vol - - partkeepr-db-vol + - partkeepr-web-vol + - partkeepr-conf-vol + - partkeepr-data-vol + - partkeepr-db-vol + +- name: create partkeepr network + docker_network: + name: "partkeepr" - name: create partkeepr-db container diff: false - docker_container: + docker_container: name: partkeepr-db image: mariadb:10.0 recreate: false restart: true restart_policy: on-failure restart_retries: 3 + networks: + - name: "partkeepr" env: MYSQL_RANDOM_ROOT_PASSWORD: 'yes' MYSQL_DATABASE: partkeepr @@ -25,53 +31,52 @@ volumes: - partkeepr-db-vol:/var/lib/mysql +- name: create partkeepr container + diff: false + docker_container: + name: partkeepr + image: mhubig/partkeepr:latest + recreate: false + restart: true + restart_policy: on-failure + restart_retries: 3 + networks: + - name: "partkeepr" + volumes: + - partkeepr-db-conf-vol:/var/www/html/app/config + - partkeepr-db-data-vol:/var/www/html/data + - partkeepr-db-web-vol:/var/www/html/web - # 'PARTKEEPR_AUTHENTICATION_PROVIDER': 'PartKeepr.Auth.WSSEAuthenticationProvider' - # 'PARTKEEPR_CACHE_DOCTRINE': 'array' - # 'PARTKEEPR_CACHE_DUNGLAS': False - # 'PARTKEEPR_DATABASE_DRIVER': 'pdo_mysql' - # 'PARTKEEPR_DATABASE_HOST': 'database' - # 'PARTKEEPR_DATABASE_NAME': 'partkeepr' - # 'PARTKEEPR_DATABASE_PORT': 3306 - # 'PARTKEEPR_DATABASE_USER': 'partkeepr' - # 'PARTKEEPR_DATABASE_PASS': 'partkeepr' - # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTCANONICALFORM': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTDOMAINNAME': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTDOMAINNAMESHORT': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_ACCOUNTFILTERFORMAT': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_BASEDN': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_BINDREQUIRESDN': False - # 'PARTKEEPR_FR3D_LDAP_DRIVER_HOST': '127.0.0.1' - # 'PARTKEEPR_FR3D_LDAP_DRIVER_OPTREFERRALS': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_PASSWORD': NULL - # 'PARTKEEPR_FR3D_LDAP_DRIVER_PORT': 389 - # 'PARTKEEPR_FR3D_LDAP_DRIVER_USESSL': False - # 'PARTKEEPR_FR3D_LDAP_DRIVER_USESTARTTLS': False - # 'PARTKEEPR_FR3D_LDAP_DRIVER_USERNAME': NULL - # 'PARTKEEPR_FR3D_LDAP_USER_ATTRIBUTE_EMAIL': 'email' - # 'PARTKEEPR_FR3D_LDAP_USER_ATTRIBUTE_USERNAME': 'samaccountname' - # 'PARTKEEPR_FR3D_LDAP_USER_BASEDN': 'dc=example,dc=com' - # 'PARTKEEPR_FR3D_LDAP_USER_ENABLED': False - # 'PARTKEEPR_FR3D_LDAP_USER_FILTER': NULL - # 'PARTKEEPR_LOCALE': 'en' - # 'PARTKEEPR_MAILER_AUTH_MODE': NULL - # 'PARTKEEPR_MAILER_ENCRYPTION': NULL - # 'PARTKEEPR_MAILER_HOST': NULL - # 'PARTKEEPR_MAILER_PASSWORD': NULL - # 'PARTKEEPR_MAILER_PORT': 25 - # 'PARTKEEPR_MAILER_TRANSPORT': NULL - # 'PARTKEEPR_MAILER_USER': NULL - # 'PARTKEEPR_AUTH_MAX_USERS': 'unlimited' - # 'PARTKEEPR_CATEGORY_PATH_SEPARATOR': ' ➤ ' - # 'PARTKEEPR_CRONJOB_CHECK': True - # 'PARTKEEPR_FILESYSTEM_DATA_DIRECTORY': '%kernel.root_dir%/../data/' - # 'PARTKEEPR_FILESYSTEM_QUOTA': False - # 'PARTKEEPR_MAINTENANCE': false - # 'PARTKEEPR_MAINTENANCE_MESSAGE': NULL - # 'PARTKEEPR_MAINTENANCE_TITLE': NULL - # 'PARTKEEPR_OCTOPART_APIKEY': NULL - # 'PARTKEEPR_PARTS_INTERNALPARTNUMBERUNIQUE': False - # 'PARTKEEPR_PARTS_LIMIT': False - # 'PARTKEEPR_USERS_LIMIT': False - # 'PARTKEEPR_SECRET': 'OJBKOJIKNONAJENLBJJNLFIDPDGKDIED' - # volumes: \ No newline at end of file +- name: create partkeepr-cron container + diff: false + docker_container: + name: partkeepr-cron + image: mhubig/partkeepr:latest + entrypoint: [] + command: bash -c "crontab /etc/cron.d/partkeepr && cron -f" + recreate: false + restart: true + restart_policy: on-failure + restart_retries: 3 + volumes: + - partkeepr-db-conf-vol:/var/www/html/app/config:ro + - partkeepr-db-data-vol:/var/www/html/data + - partkeepr-db-web-vol:/var/www/html/web + +- name: create partkeepr container + diff: false + docker_container: + name: partkeepr + image: mhubig/partkeepr:latest + recreate: false + restart: true + restart_policy: on-failure + restart_retries: 3 + networks: + - name: "partkeepr" + ports: + - "8081:80" + volumes: + - partkeepr-db-conf-vol:/var/www/html/app/config + - partkeepr-db-data-vol:/var/www/html/data + - partkeepr-db-web-vol:/var/www/html/web