ⓐ 프로젝트 정보
- Copyright ©️ 2026 https://github.com/analog-green/minimal_minimal_homelab
- Licensed under the MIT License.
1) Env: wsl, ubuntu
Tested: Ubuntu-24.04, Ubuntu-22.04
2) Home Lab 사이즈인 devOps세팅으로 프로그래밍&설계에 집중 할 시간을 확보.
3) DevOps에 유용한 자동화 스크립트를 공개 템플릿으로 제공.
4) Port number rule
21xx: Plan tool+@ 22xx: Coding tool+@ 23xx: Build tool+@
1xxxx: dev-test 2xxxx: qa-test 4xxxx: live(public)
5) Encoding: UTF-8- Initial Contributor: MTG
- Edit: 2026-09-25 (UTC+9)
- Version: 0.9.2
- ASCII art: http://patorjk.com/software/taag (Coder Mini, Straight)
ⓑ 기능 소개
- 원터치로 토이프로젝트 개발환경 구축: 기획, 코딩, 문서처리, 빌드, 배포 등등에 엄선된 범용성이 높은 툴들을 WSL에서 한번 설치완료.
- 반자동 백업 1종과 수동 백업 1종: wsl부팅직후 데몬 서비스를 통한 요일별 백업, 백업 스크립트 수동 실행
- WSL환경에서 사용 및 수정이 용이한 쉘 스크립트
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp이나C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup에 start_service_wsl.bat를 저장
- 아래의 예시를 보고 리눅스 시스템 파일들을 수정하고서 터미널을 재접속.
- 중간에 실수했다고요? 파워쉘이나 다른 CMD에서
wsl --unregister Ubuntu-24.04로 새출발. 디지털의 장점이죠. - wsl이 이미 갖춰진 상태이면
3. Insatll로 진행가능.
ⓐ 설치 with Ubuntu 24.04
PS C:\Users\Administrator> wsl --install -d Ubuntu-24.04
다운로드 중: Ubuntu 24.04 LTS
... ... ...
Create a default Unix user account: minimal_homelab
New password:
Retype new password:ⓑ 계정그룹 및 권한 처리
sudo를 쓸때마다 패스워드 입력하는 수고로움이 줄어드는 과정도 포함.- 26.04일 경우,
newgrp sudo부분을sudo apt update && sudo apt install -y util-linux-extra;sg sudo -c "true"으로 실행
minimal_homelab@dummy_host_name:~$ sudo usermod -aG sudo $USER
[sudo] password for minimal_homelab:
minimal_homelab@dummy_host_name:~$ newgrp sudo
minimal_homelab@dummy_host_name:~$ echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers > /dev/nullⓒ sudo vi /etc/wsl.conf
[boot]
systemd=true
[user]
default=minimal_homelab
[network]
hostname=ubuntu24
generateHostname=falseⓓ (호스트명 변경)
minimal_homelab@dummy_host_name:~$ cat /etc/hostname
dummy_host_name
minimal_homelab@dummy_host_name:~$ echo "ubuntu24" | sudo tee /etc/hostname;sudo hostnamectl set-hostname "ubuntu24";
ubuntu24
minimal_homelab@dummy_host_name:~$ cat /etc/hostname
ubuntu24ⓔ sudo vi /etc/hosts
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1 localhost
127.0.1.1 ubuntu24.localdomain ubuntu24
... ... ...ⓕ (새 터미널로)
- root로도 확인하고 싶다?
wsl -d Ubuntu-24.04 -u root
PS C:\Users\Administrator> wsl --shutdown
PS C:\Users\Administrator> wsl -d Ubuntu-24.04
minimal_homelab@ubuntu24:/mnt/c/Users/Administrator$ cd ~;pwd
/home/minimal_homelab- git패키지 설치를 안 하는쪽으로 하고싶다?
wget -qO- https://github.com/analog-green/minimal_homelab/archive/refs/heads/main.tar.gz | tar -xz;cd minimal_homelab-main/in_wsl
minimal_homelab@ubuntu24:~$ sudo apt install -y git;
minimal_homelab@ubuntu24:~$ sudo git clone --depth 1 https://github.com/analog-green/minimal_homelab.git;cd minimal_homelab/in_wsl;minimal_homelab@ubuntu24:~$ sudo bash install.sh(optional) oracle initialization
$ docker exec -it oracle bash
bash-4.4$ ls
admin audit cfgtoollogs container-entrypoint.sh createAppUser createDatabase diag healthcheck.sh oraInventory oradata product resetPassword
bash-4.4$ sqlplus / as sysdba
SQL*Plus: Release 23.26.2.0.0 - Production on Sun Aug 2 12:29:06 2026
Version 23.26.2.0.0
Copyright (c) 1982, 2026, Oracle. All rights reserved.
Connected to:
Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free
Version 23.26.2.0.0
SQL> ALTER USER SYSTEM IDENTIFIED BY "your 'admin pw' OR minimalHomelab";
User altered.
SQL> ALTER USER SYSTEM ACCOUNT UNLOCK;
User altered.
SQL> EXIT;
Disconnected from Oracle AI Database 26ai Free Release 23.26.2.0.0 - Develop, Learn, and Run for Free
Version 23.26.2.0.0minimal_homelab@ubuntu24:/dev_minimal_homelab/data$ pwd;ls -al
/dev_minimal_homelab/data
total 56
drwxr-xr-x 14 999 systemd-journal 4096 Aug 6 21:54 .
drwxr-xr-x 4 minimal_homelab minimal_homelab 4096 Aug 6 21:40 ..
drwxr-xr-x 3 minimal_homelab minimal_homelab 4096 Aug 6 21:53 jenkins
drwxr-xr-x 5 999 systemd-journal 4096 Aug 6 21:47 mariadb
drwxr-xr-x 2 999 systemd-journal 4096 Aug 6 21:46 mariadb_conf
drwxr-xr-x 2 999 systemd-journal 4096 Aug 6 21:51 memcached
drwxr-xr-x 3 999 systemd-journal 4096 Aug 6 21:51 mongodb
drwxr-xr-x 13 999 systemd-journal 4096 Aug 6 21:53 onedev
drwxr-xr-x 4 999 systemd-journal 4096 Aug 6 21:43 openproject
drwxr-xr-x 4 54321 54321 4096 May 31 05:56 oracle
drwxr-xr-x 4 999 systemd-journal 4096 Aug 6 21:46 planka
drwxr-xr-x 3 999 systemd-journal 4096 Aug 6 21:54 portainer
drwxr-xr-x 3 999 systemd-journal 4096 Aug 6 21:50 postgres
drwxr-xr-x 3 999 systemd-journal 4096 Aug 6 21:51 redis- 호환성을 위해 tar.gz 기준으로 처리.
ⓐ sudo vi /etc/systemd/system/backup-on-boot.service
- 네트워크가 준비된 후에 실행되도록 설정
gzip -5옵션으로 처리됨
[Unit]
Description=Run Custom Backup Script on Boot
After=network.target docker.service
[Service]
Type=oneshot
ExecStart=/backup/backup_homelab.sh "by_service"
StandardError=append:/backup/daemon_stderr.log
User=root
Group=root
[Install]
WantedBy=multi-user.targetⓑ 데몬 서비스 등록
sudo systemctl daemon-reload;
sudo systemctl enable backup-on-boot.service;
sudo systemctl start backup-on-boot.service;- install.sh을 1번 이상 실행해서, 관련된 파일과 경로가 존재해야.
gzip -7옵션으로
minimal_homelab@ubuntu24:~$ sudo bash /backup/backup_homelab.sh
Take a break time - pause oracle mongodb
o... ... ...-r-- 1 root root 847812632 Sep 24 21:29 /backup/Thursday-H2128.tar.gz
-rw-r--r-- 1 root root 809M Sep 24 21:29 /backup/Thursday-H2128.tar.gz
... ... ...
Manual backup: Thursday-H2128.tar.gz- ID: admin
- PW: 영문 소문자, 영문 대문자, 숫자, 특수문자가 전부 포함되어야
- 아래의 과정이 번거롭다면,
sudo docker exec -i openproject /app/bin/rails runner -e production "u = User.find_by(login: 'admin'); u.password = 'my_new_force_PW2026'; u.password_confirmation = 'my_new_force_PW2026'; u.force_password_change = false; u.save!"에서 my_new_force_PW2026 부분을 원하는 PW로
minimal_homelab@ubuntu24:~$ docker exec -it openproject /app/bin/rails console -e production
... ... ...
open-project(prod):001> u = User.find_by(login: 'admin')
=>
... ... ...
admin: true,
... ... ...
open-project(prod):002> u.password = 'my_new_force_PW2026'
=> "my_new_force_PW2026"
open-project(prod):003> u.password_confirmation = 'my_new_force_PW2026'
=> "my_new_force_PW2026"
open-project(prod):004> u.force_password_change = false
=> false
open-project(prod):005> u.save!
=> true
open-project(prod):006> exit- openproject 백업 기능을 통해
openproject.sql가 생성되는데, 첨부 파일이 존재함에도 단일 SQL 파일인 점으로 보아 바이너리(BLOB) 로 테이블에 저장으로 추정. - 아래의 명령어를 통해 openproject의 백업메뉴로 접속하거나 수동으로 접속후, 백업토근 발급등을 거쳐서
openproject-backupYYYYMMDD-xxx-xxxxxx.zip를 다운로드
minimal_homelab@ubuntu24:~$ cmd.exe /c start http://$(hostname -I | awk '{print $1}'):2100/admin/backups- openproject 웹페이지에서 받은
openproject-backupYYYYMMDD-xxx-xxxxxx.zip를 wsl 디렉토리에서 압축해제
(예시:/home/minimal_homelab/openproject.sql) - 만약을 위해 기존 data폴더는 사본을 만듭니다.
sudo cp -r /dev_minimal_homelab/data/openproject /dev_minimal_homelab/data/openproject_prev
sudo docker exec -i openproject psql -h 127.0.0.1 -U postgres -d postgres -c "ALTER DATABASE openproject WITH ALLOW_CONNECTIONS false;"
sudo docker exec -i openproject psql -h 127.0.0.1 -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'openproject' AND pid <> pg_backend_pid();"
sudo docker exec -i openproject psql -h 127.0.0.1 -U postgres -d postgres -c "DROP DATABASE IF EXISTS openproject;"
sudo docker exec -i openproject psql -h 127.0.0.1 -U postgres -d postgres -c "CREATE DATABASE openproject OWNER postgres;"
sudo docker exec -i openproject psql -h 127.0.0.1 -U postgres -d openproject < /home/minimal_homelab/openproject.sql
sudo chown -R 1000:1000 /dev_minimal_homelab/data/openproject/assets
sudo docker exec -it openproject /app/bin/rails db:migrate -e production;sudo docker exec -it openproject /app/bin/rails db:migrate RAILS_ENV=production;
sudo docker exec -i openproject /app/bin/rails runner -e production "u = User.find_by(login: 'admin'); u.password = 'my_new_force_PW2026'; u.password_confirmation = 'my_new_force_PW2026'; u.force_password_change = false; u.save!"
docker restart openproject- install.sh과 uninstall.sh 실행시, 일정한 구간마다
log.log와docker.log에 로그가 저장된다.