Compare commits
1 Commits
testing
...
b77d148e6e
Author | SHA1 | Date | |
---|---|---|---|
b77d148e6e |
28
.github/workflows/vagrant.yml
vendored
28
.github/workflows/vagrant.yml
vendored
@@ -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
3
Vagrantfile
vendored
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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,32 @@ traefik:
|
|||||||
|
|
||||||
# nextcloud
|
# nextcloud
|
||||||
nextcloud:
|
nextcloud:
|
||||||
DOMAIN: cloud.local.krislamo.org
|
|
||||||
DB_PASSWD: password
|
DB_PASSWD: password
|
||||||
ADMIN_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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
|
@@ -37,26 +37,44 @@
|
|||||||
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: 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.DB_HOST | default(''host.docker.internal'') }}"
|
||||||
--database-host "{{ nextcloud.DB_HOST | default('host.docker.internal') }}"
|
--database-name "{{ nextcloud.DB_NAME | default(''nextcloud'') }}"
|
||||||
--database-name "{{ nextcloud.DB_NAME | default('nextcloud') }}"
|
--database-user "{{ nextcloud.DB_USER | default(''nextcloud'') }}"
|
||||||
--database-user "{{ nextcloud.DB_USER | default('nextcloud') }}"
|
--database-pass "{{ nextcloud.DB_PASSWD }}"
|
||||||
--database-pass "{{ nextcloud.DB_PASSWD }}"
|
--admin-user "{{ nextcloud.ADMIN_USER | default(''admin'') }}"
|
||||||
--admin-user "{{ nextcloud.ADMIN_USER | default('admin') }}"
|
--admin-pass "{{ nextcloud.ADMIN_PASSWD }}"'
|
||||||
--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 +82,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
|
||||||
|
@@ -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
|
|
Reference in New Issue
Block a user