1 Commits

Author SHA1 Message Date
28806de6e4 testing 2024-03-09 00:40:18 -05:00
10 changed files with 96 additions and 136 deletions

View File

@@ -8,17 +8,11 @@ on:
jobs: jobs:
homelab-ci: homelab-ci:
runs-on: macos-13 runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
with:
detached: true
limit-access-to-actor: true
- name: Cache Vagrant boxes - name: Cache Vagrant boxes
uses: actions/cache@v3 uses: actions/cache@v3
with: with:
@@ -27,23 +21,19 @@ jobs:
restore-keys: | restore-keys: |
${{ runner.os }}-vagrant- ${{ runner.os }}-vagrant-
- name: Install Tools
run: brew install nmap tree
- name: Install VirtualBox
run: brew install --cask virtualbox
- name: Install Vagrant
run: brew install --cask vagrant
- name: Install Ansible - name: Install Ansible
run: brew install ansible run: brew install ansible@7
- name: Software Versions - name: Software Versions
run: | run: |
printf "VirtualBox "; vboxmanage --version printf "VirtualBox "
vboxmanage --version
vagrant --version vagrant --version
export PATH="/usr/local/opt/ansible@7/bin:$PATH"
ansible --version ansible --version
- name: Vagrant Up with Dockerbox Playbook - name: Vagrant Up with Dockerbox Playbook
run: ./scripts/github-vagrant.sh run: |
export PATH="/usr/local/opt/ansible@7/bin:$PATH"
PLAYBOOK=dockerbox vagrant up
vagrant ssh -c "docker ps"

3
Vagrantfile vendored
View File

@@ -36,7 +36,6 @@ Vagrant.configure("2") do |config|
config.vm.provider :virtualbox do |vbox| config.vm.provider :virtualbox do |vbox|
vbox.cpus = VAGRANT_CPUS vbox.cpus = VAGRANT_CPUS
vbox.memory = VAGRANT_MEM vbox.memory = VAGRANT_MEM
vbox.gui = true
end end
# Provision with Ansible # Provision with Ansible
@@ -44,6 +43,6 @@ Vagrant.configure("2") do |config|
ENV['ANSIBLE_ROLES_PATH'] = File.dirname(__FILE__) + "/roles" ENV['ANSIBLE_ROLES_PATH'] = File.dirname(__FILE__) + "/roles"
ansible.compatibility_mode = "2.0" ansible.compatibility_mode = "2.0"
ansible.playbook = "dev/" + PLAYBOOK + ".yml" ansible.playbook = "dev/" + PLAYBOOK + ".yml"
ansible.raw_arguments = ["--diff", "-vvvv"] ansible.raw_arguments = ["--diff"]
end end
end end

View File

@@ -5,8 +5,11 @@
- host_vars/dockerbox.yml - host_vars/dockerbox.yml
roles: roles:
- base - base
- proxy
- docker - docker
- mariadb - mariadb
- traefik - traefik
- nextcloud - nextcloud
- proxy # - jenkins
# - prometheus
# - nginx

View File

@@ -23,17 +23,18 @@ docker_compose_deploy:
# Traefik # Traefik
- name: traefik - name: traefik
url: https://github.com/krislamo/traefik url: https://github.com/krislamo/traefik
version: d62bd06b37ecf0993962b0449a9d708373f9e381 version: e03268af4cf942c47cba66c2112628dbcad1b756
path: docker-compose.web.yml
enabled: true enabled: true
accept_newhostkey: true # Consider verifying manually instead accept_newhostkey: true
trusted_keys: trusted_keys:
- FBF673CEEC030F8AECA814E73EDA9C3441EDA925 - FBF673CEEC030F8AECA814E73EDA9C3441EDA925
env: env:
DASHBOARD: true ENABLE: true
# Nextcloud # Nextcloud
- name: nextcloud - name: nextcloud
url: https://github.com/krislamo/nextcloud url: https://git.krislamo.org/kris/nextcloud
version: fe6d349749f178e91ae7ff726d557f48ebf84356 version: a2e38cec703839211e11dc8347b4cdd62fa6f24d
env: env:
DATA: ./data DATA: ./data
@@ -43,6 +44,33 @@ traefik:
# nextcloud # nextcloud
nextcloud: nextcloud:
DOMAIN: cloud.local.krislamo.org DB_NAME: nextcloud
DB_USER: nextcloud
DB_PASSWD: password DB_PASSWD: password
ADMIN_PASSWD: password
# nextcloud
#nextcloud_version: stable
#nextcloud_admin: admin
#nextcloud_pass: password
#nextcloud_domain: cloud.local.krislamo.org
#nextcloud_dbversion: latest
#nextcloud_dbpass: password
# jenkins
jenkins_version: lts
jenkins_domain: jenkins.local.krislamo.org
# prometheus (includes grafana)
prom_version: latest
prom_domain: prom.local.krislamo.org
grafana_version: latest
grafana_domain: grafana.local.krislamo.org
prom_targets: "['10.0.2.15:9100']"
# nginx
nginx_domain: nginx.local.krislamo.org
nginx_name: staticsite
nginx_repo_url: https://git.krislamo.org/kris/example-website/
nginx_auth: admin:$apr1$T1l.BCFz$Jyg8msXYEAUi3LLH39I9d1 # admin:admin
nginx_version: latest

View File

@@ -17,10 +17,6 @@
line: "bind-address = {{ ansible_facts.docker0.ipv4.address }}" line: "bind-address = {{ ansible_facts.docker0.ipv4.address }}"
notify: restart_mariadb notify: restart_mariadb
- name: Flush handlers to ensure MariaDB restarts immediately
ansible.builtin.meta: flush_handlers
tags: restart_mariadb
- name: Allow database connections from Docker - name: Allow database connections from Docker
community.general.ufw: community.general.ufw:
rule: allow rule: allow

View File

@@ -1,25 +0,0 @@
- name: Set Nextcloud's Trusted Proxy
ansible.builtin.command: >
docker exec --user www-data "{{ nextcloud_name }}"
php occ config:system:set trusted_proxies 0 --value="{{ traefik_name }}"
register: nextcloud_trusted_proxy
changed_when: "nextcloud_trusted_proxy.stdout == 'System config value trusted_proxies => 0 set to string ' ~ traefik_name"
listen: install_nextcloud
- name: Set Nextcloud's Trusted Domain
ansible.builtin.command: >
docker exec --user www-data "{{ nextcloud_name }}"
php occ config:system:set trusted_domains 0 --value="{{ nextcloud.DOMAIN }}"
register: nextcloud_trusted_domains
changed_when: "nextcloud_trusted_domains.stdout == 'System config value trusted_domains => 0 set to string ' ~ nextcloud.DOMAIN"
listen: install_nextcloud
- name: Preform Nextcloud database maintenance
ansible.builtin.command: >
docker exec --user www-data "{{ nextcloud_name }}" {{ item }}
loop:
- "php occ maintenance:mode --on"
- "php occ db:add-missing-indices"
- "php occ db:convert-filecache-bigint"
- "php occ maintenance:mode --off"
listen: install_nextcloud

View File

@@ -5,17 +5,17 @@
- name: Create Nextcloud database - name: Create Nextcloud database
community.mysql.mysql_db: community.mysql.mysql_db:
name: "{{ nextcloud.DB_NAME | default('nextcloud') }}" name: "{{ nextcloud.DB_NAME }}"
state: present state: present
login_unix_socket: /var/run/mysqld/mysqld.sock login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Create Nextcloud database user - name: Create Nextcloud database user
community.mysql.mysql_user: community.mysql.mysql_user:
name: "{{ nextcloud.DB_USER | default('nextcloud') }}" name: "{{ nextcloud.DB_USER }}"
password: "{{ nextcloud.DB_PASSWD }}" password: "{{ nextcloud.DB_PASSWD }}"
host: '%' host: '%'
state: present state: present
priv: "{{ nextcloud.DB_NAME | default('nextcloud') }}.*:ALL" priv: "{{ nextcloud.DB_NAME }}.*:ALL"
login_unix_socket: /var/run/mysqld/mysqld.sock login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Start Nextcloud service and enable on boot - name: Start Nextcloud service and enable on boot
@@ -32,31 +32,54 @@
- name: Wait for Nextcloud to become available - name: Wait for Nextcloud to become available
ansible.builtin.wait_for: ansible.builtin.wait_for:
host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}" #debug:
delay: 10 #host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}"
#var: nextcloud_info.container.NetworkSettings
port: 80 port: 80
- name: Check Nextcloud status - name: Check Nextcloud status
ansible.builtin.command: > ansible.builtin.command: "docker exec --user www-data {{ nextcloud_name }}
docker exec --user www-data "{{ nextcloud_name }}" php occ status php occ status"
register: nextcloud_status register: nextcloud_status
changed_when: false changed_when: false
- name: Check status return
debug:
var: nextcloud_status.stderr[:26]
- name: Install Nextcloud - name: Install Nextcloud
ansible.builtin.command: > ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_name }}
docker exec --user www-data {{ nextcloud_name }} php occ maintenance:install
php occ maintenance:install --database "mysql"
--database "mysql" --database-host "{{ nextcloud_dbcontainer }}"
--database-host "{{ nextcloud.DB_HOST | default('host.docker.internal') }}" --database-name "{{ nextcloud_dbname }}"
--database-name "{{ nextcloud.DB_NAME | default('nextcloud') }}" --database-user "{{ nextcloud_dbuser }}"
--database-user "{{ nextcloud.DB_USER | default('nextcloud') }}" --database-pass "{{ nextcloud_dbpass }}"
--database-pass "{{ nextcloud.DB_PASSWD }}" --admin-user "{{ nextcloud_admin }}"
--admin-user "{{ nextcloud.ADMIN_USER | default('admin') }}" --admin-pass "{{ nextcloud_pass }}"'
--admin-pass "{{ nextcloud.ADMIN_PASSWD }}"
register: nextcloud_install register: nextcloud_install
when: nextcloud_status.stderr[:26] == "Nextcloud is not installed" when: nextcloud_status.stderr[:26] == "Nextcloud is not installed"
changed_when: nextcloud_install.stdout == "Nextcloud was successfully installed"
notify: install_nextcloud - name: Set Nextcloud's Trusted Proxy
ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }}
php occ config:system:set trusted_proxies 0
--value="{{ traefik_name }}"'
when: nextcloud_install.changed
- name: Set Nextcloud's Trusted Domain
ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }}
php occ config:system:set trusted_domains 0
--value="{{ nextcloud_domain }}"'
when: nextcloud_install.changed
- name: Preform Nextcloud database maintenance
ansible.builtin.command: "docker exec --user www-data {{ nextcloud_container }} {{ item }}"
loop:
- "php occ maintenance:mode --on"
- "php occ db:add-missing-indices"
- "php occ db:convert-filecache-bigint"
- "php occ maintenance:mode --off"
when: nextcloud_install.changed
- name: Install Nextcloud background jobs cron - name: Install Nextcloud background jobs cron
ansible.builtin.cron: ansible.builtin.cron:
@@ -64,3 +87,8 @@
minute: "*/5" minute: "*/5"
job: "/usr/bin/docker exec -u www-data nextcloud /usr/local/bin/php -f /var/www/html/cron.php" job: "/usr/bin/docker exec -u www-data nextcloud /usr/local/bin/php -f /var/www/html/cron.php"
user: root user: root
- name: Remove Nextcloud's CAN_INSTALL file
ansible.builtin.file:
path: "{{ nextcloud_root }}/config/CAN_INSTALL"
state: absent

View File

@@ -1 +0,0 @@
cached_dhparams_pem: /vagrant/scratch/dhparams.pem

View File

@@ -10,19 +10,6 @@
state: started state: started
enabled: true enabled: true
- name: Check for cached dhparams.pem file
ansible.builtin.stat:
path: "{{ cached_dhparams_pem }}"
register: dhparams_file
- name: Copy cached dhparams.pem to /etc/ssl/
ansible.builtin.copy:
src: "{{ cached_dhparams_pem }}"
dest: /etc/ssl/dhparams.pem
mode: "600"
remote_src: true
when: dhparams_file.stat.exists
- name: Generate DH Parameters - name: Generate DH Parameters
community.crypto.openssl_dhparam: community.crypto.openssl_dhparam:
path: /etc/ssl/dhparams.pem path: /etc/ssl/dhparams.pem

View File

@@ -1,45 +0,0 @@
#!/bin/bash
# Defaults
TIMEOUT=600
ELAPSED=0
INITIAL_SLEEP=60
SLEEP_DURATION=30
SSH_AVAILABLE=0
DEBUG_ID="[homelab-ci]"
# Run Vagrant Up in the background
PLAYBOOK=dockerbox vagrant up &
VAGRANT_UP_PID=$!
# Initial delay
echo "$DEBUG_ID Waiting for VM to start..."
sleep $INITIAL_SLEEP
# Loop until timeout or breaks
while [[ $ELAPSED -lt $TIMEOUT ]]; do
VAGRANT_SSH_CONFIG=$(mktemp)
vagrant ssh-config > "$VAGRANT_SSH_CONFIG"
echo "$DEBUG_ID SSH config at $VAGRANT_SSH_CONFIG"
cat "$VAGRANT_SSH_CONFIG"
echo "$DEBUG_ID Vagrant status"
vagrant status
# SSH attempt
set -x
ssh -vvv -F "$VAGRANT_SSH_CONFIG" default 'cat /etc/os-release' && set +x; break \
|| echo "$DEBUG_ID SSH connection failed, retrying in $SLEEP_DURATION seconds..."
set +x
# Sleep and start again
sleep $SLEEP_DURATION
((ELAPSED+=SLEEP_DURATION))
done
# Success?
if [[ $SSH_AVAILABLE -ne 1 ]]; then
echo "$DEBUG_ID Timeout reached without successful SSH connection."
fi
# Ensure the Vagrant up process completes
wait $VAGRANT_UP_PID