100
126

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【自宅サーバ・個人開発】Mini PCをサーバ化してCI/CD導入してみた 前編

Last updated at Posted at 2025-10-12

概要

大学生の時に私用のMini PCを購入しましたが、その後Macを購入したこともあり、使う機会が激減しました。
最近、そのままではもったいないと思い、勉強用にサーバ化することにしました。
今回はその手順とGitHub Actionsを利用したCI/CDを導入したことについてまとめようと思います.

環境

Mini PC:Minisforum UM680 Slim/UM870 Slim
検証用PC:MacBook Pro M1
USBメモリ:なんでもOK.最低でも10GBくらいあればOK.
ISOファイル:Ubuntu Server 24.04 LTS
マウス・キーボード:なんでもOK.Mini PCに直接ログインして操作するときに必要

Mini PCは当時何も知らずに買いましたが,そこそこスペックがいいやつだそうです(5万円くらいで販売中).
用途にもよりますが,個人開発の範囲内ならもっと安くてもいいと思います.

MiniPCをサーバ化した後は有線LANでインターネットと繋いでいます.

MiniPCをサーバ化

OSのインストール

こちらの記事を参考にしました

OSのインストールまで行います.

ipアドレスを固定化する

固定しておくと後でsshをするときに楽です.
先ほどの資料のIPの設定と基本は同じですが,configファイルの内容は以下にしました

/etc/netplan/99_config.yaml
network:
    version: 2
    ethernets:
      eno1:
        dhcp4: false
    bridges: 
      br0:
        interfaces:
          - eno1
        dhcp4: false
        addresses:
          - 192.168.11.2/24
        routes:
          - to: default
            via: 192.168.11.1
        nameservers:
          addresses:
            - 192.168.11.1
            - 8.8.8.8
            - 1.1.1.1

簡単に上のコードを説明

  • ethernets:L2レイヤーのネットワーク.LANのこと.
    • eno1:このMini PCのNIC.このMini PCのネットワークの玄関口.
      • dhcp4: false:動的にipを割り当てる機能であるdhcpを無効にしている
  • bridges:NICをまとめて,それらを繋げる設定.
    • br0:ブリッジの名前
      • interfaces:ブリッジでまとめたいNICを指定
      • addresses:ここで固定化したいipアドレスを指定.
      • routes:ここにはルータのipアドレスを設定
      • nameservers:DNSについての設定

Macの人は左上のアップルマーク>システム設定>Wi-Fiをクリックすると自分のPCとルータのipを調べられます.
スクリーンショット 2025-10-12 22.17.32.png

最後にネットワークの設定の反映を忘れずに.

sudo netplan apply

SSHの設定

先ほどの資料の手順通りに進めてもいいですが,
SSHだとパスワード認証ではなく,秘密鍵・公開鍵認証方式を使うこともあります.
一般的には公開鍵方式が安全で,業務でもこちらが使われることが多いです.

認証方法を設定したあとは以下のコマンドでPCからアクセスできます.

ssh shunsuke@192.168.11.2

192.168.11.2は先ほど固定化したipアドレスです.

以後はMini PCに直接ログインして作業する必要はなく,SSHで同じLAN内の自分のPCからアクセスできます.

VMを構築

ここからはサーバの中にVMを構築します.
CI/CDを導入するのが目的なので,CI用とCD用で二つ構築しますが,以下ではCI用のVMを構築します.
以下の記事を参考にしました.

VM構築に必要な仮想化ソフト

Ubuntu上で使用できるKVMを利用しました.
詳しくは先ほどの資料を参考にしてください.

必要なパッケージのインストール

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

インストール確認

sudo systemctl status libvirtd

“active (running)” になっていればOK。

仮想化が使えるか確認:

virsh list --all

空の一覧が出れば問題なし。

Cloud Initを利用したVMの構築

Cloud Initを使うと初期設定を事前に設定した上でVMを構築することができます.

ISOイメージのダウンロード

イメージをダウンロードしたいフォルダに移動してからダウンロードを実施します.

mkdir -p ~/vm-images
cd ~/vm-images
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

後でMini PCからVMにSSHするための鍵も作成しておきます

ssh-keygen -t ed25519 -C "ci-cd@minipc"

-C以降は適当で大丈夫です.

Cloud Initに使用する設定ファイルの作成

Cloud Initの初期設定をファイルにまとめることができます.
最終的なディレクトリ構造はこんな感じ

├── vm-images
│   ├── ci-seed.iso
│   ├── ci-server.qcow2
│   └── noble-server-cloudimg-amd64.img
└── vm-seed
    └── ci
        ├── meta-data
        └── user-data
mkdir -p ~/vm-seed/ci
cd ~/vm-seed/ci
sudo vi user-data
  • user-data
user-data
#cloud-config
hostname: ci-server

password: (任意のパスワード設定)
chpasswd: {expire: False}
ssh_pwauth: True
ssh_authorized_keys:
  - (公開鍵(.pub)をコピペ)

これでサーバにログインしたときには
ユーザ名:ubuntu
パスワード:設定したパスワード
でログインすることができます.

また,SSHもipを固定した後すぐに使えるようになります.

user-dataについて余談(飛ばしてOK)

ユーザ名,パスワードを任意に設定する方法もあります.

user-data
#cloud-config
hostname: ci-server

users:
  - name: hogehoge
    gecos: Ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: sudo
    shell: /bin/bash
    lock_passwd: false
    passwd: (任意のパスワード)
    ssh_authorized_keys:
      - (公開鍵をコピペ)

chpasswd:
  list: |
    hogehoge:設定したパスワード
  expire: false

ssh_pwauth: true

sudo: ALL=(ALL) NOPASSWD:ALLはsudoを使用するときのパスワードを無効にします.
今回は個人開発でインターネットに公開してないのでこの設定にしていますが,公開する場合はパスワードを設定することを推奨します.

  • meta-data
sudo vi meta-data

ホスト名とidを設定します.

meta-data
instance-id: ci-server-001
local-hostname: ci-server

ISOイメージを作成

cd ~
mkdir vm-images
cd vm-images
genisoimage -output ci-seed.iso -volid cidata -joliet -rock ~/vm-seed/ci/user-data ~/vm-seed/ci/meta-data

genisoimageでISOイメージを作成しています.完了するとci-seed.isoが作成されます.

  • 差分ディスクの作成
qemu-img create -f qcow2 -b ~/vm-images/noble-server-cloudimg-amd64.img -F qcow2 ~/vm-images/ci-server.qcow2

ダウンロードしたゲストイメージを元に,差分ディスク(要はコピーだけど,実態は大元との差分のみを保存している)を作成

ディスクサイズupしておく.vmにdockerなどさまざまなパッケージを入れるため.

qemu-img resize ~/vm-images/ci-server.qcow2 20G

VMを立ち上げる

virt-install --name ci-server --ram 2018 --vcpus 2 --disk path=~/vm-images/ci-server.qcow2,size=20 --disk path=~/vm-images/ci-seed.iso,device=cdrom --import --graphics none --os-variant ubuntu24.04 --network bridge=br0

今まで作成したISOイメージ,差分ディスクを指定してVMを立ち上げる.

  • ログイン
    先ほどuser-dataで設定したユーザ名,パスワードを入力.
  • ネットワークの設定
    /etc/netplan/50-cloud-init.yamlが自動生成されている.
    このファイルを書き換える
50-cloud-init.yaml
network:
  version: 2
  ethernets:
    enp1s0:
      dhcp4: no
      addresses:
        - 192.168.11.50/24
      routes:
        - to: default
          via: 192.168.11.1
      nameservers:
        addresses:
          - 192.168.11.1
          - 8.8.8.8
          - 1.1.1.1

先ほどMini PCの設定と比べると,Bridgesの設定がない.
ipは固定化する.

  • ネットワークの設定を反映する
sudo netplan apply
  • cloud-initがネットワークの設定を上書きしないようにする
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<EOF
network: {config: disabled}
EOF

※これを設定しないと再起動時に設定がリセットされることがある

  • ホストが再起動したときに自動的に起動
virsh autostart cd-server

検証

これで設定が一通り設定が終わったので,sshなどの検証をしていく.

VMから抜けるためには以下のコマンドを実行

exit

この画面になったら,control+]を入力する
スクリーンショット 2025-10-13 0.08.33.png

  • コマンドの検証
virsh list -all -> 起動しているVMを確認
virsh console <サーバ名> -> サーバにログイン
virsh shutdown cd-server -> サーバをシャットダウン
virsh start cd-server -> サーバを起動
virsh undefine cd-server -> サーバを削除

最後のサーバの削除以外のコマンドを実行する.

  • SSHの検証
    先ほど固定化したipでsshをする
ssh ユーザ名@192.168.11.50

これでサーバにログインできるか確かめたら,CI用サーバは完了.
CD用の構築は「Cloud Initに使用する設定ファイルの作成」以下をもう一度名前を変えてする.

CIの導入

ここまでで2台のVMサーバを構築しました.
このあとはCIを導入します.

使用するサービス

GitHub Actons:Github上で使用できるワークフロー(定義済みの処理と条件の組み合わせ)を自動化するサービス.
self-hosted runner:自分でサーバを用意して,ワークフローに使用できるサービス.

Github Actionsの導入

先ほど作成したCI用のサーバをGitHub Actionsに導入していきます.

こちらの資料を参考に進めていきます.

GitHub上に空のリポジトリを作成する.

private,publicどちらでもOK

CI用サーバをRunnerとして登録

先ほどのの「セルフホステッドランナーの構築」を参考にRunnerとしてCI用サーバを登録する.
これ通りに進めれば問題なくできるはず.

まとめ

今回はPCをサーバ化してGitHub ActionsのRunnerに登録するところまで進めました.
次回は実際にWebアプリケーションをCI/CDで実装したいと思います.

100
126
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
100
126

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?