Skip to content

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. Info

ⓐ 프로젝트 정보

 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

ⓑ 기능 소개

  • 원터치로 토이프로젝트 개발환경 구축: 기획, 코딩, 문서처리, 빌드, 배포 등등에 엄선된 범용성이 높은 툴들을 WSL에서 한번 설치완료.
  • 반자동 백업 1종과 수동 백업 1종: wsl부팅직후 데몬 서비스를 통한 요일별 백업, 백업 스크립트 수동 실행
  • WSL환경에서 사용 및 수정이 용이한 쉘 스크립트

2. start_service_wsl.bat

  • C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp이나 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup에 start_service_wsl.bat를 저장

3. WSL

  • 아래의 예시를 보고 리눅스 시스템 파일들을 수정하고서 터미널을 재접속.
  • 중간에 실수했다고요? 파워쉘이나 다른 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

4. Insatll

1) download

  • 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;

2) install

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.0
minimal_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

5. Backup

  • 호환성을 위해 tar.gz 기준으로 처리.

1) 데몬 서비스 백업

ⓐ 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;

2) 수동

  • 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

6. Tip

1) openproject PW 분실

  • 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

2) openproject 백업 및 복구

  • 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

3) etc.

  • install.sh과 uninstall.sh 실행시, 일정한 구간마다 log.log와 docker.log에 로그가 저장된다.