Proxmoxで作った超便利な自宅サーバーのその後

# はじめに
約1年前に自宅サーバーの紹介をしました。なんといいね数は170超えと大反響でした。実はProxmoxの本なんかも書いて同人誌として販売もしていました。今回は、その後サーバーがどうなったのか、今後どうしていくのかを紹介します。


《1年前のサーバー》
https://qiita.com/stLuciano/items/49652543192f2402e7c8

# スペック
## メインマシン
| 項目 | 搭載品|
| -------- | -------- |
| CPU | Intel Core i5-10400F (6C12T) |
| RAM | DDR4-2666MHz 16x2=32GB |
| GPU | NVIDIA GeForce GTX 1660 Super |
| M/B | ASRock H570M-ITX/ac |
| SSD | 128(boot) + 500(VM) + 512(Windows)GB (256GBを500GBに交換)　|
| HDD | 1TB + 4TB + 4TB (500GBと4TBに交換)|
| Case | Fractal design Era-ITX silver |
| PSU | SFX-L 600W|

![IMG_20220304_151521_387.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/5f93771d-2f6b-7442-42b6-a81134007c58.jpeg)

スペック自体はあまり変えていません。変えた点としてはSSD、HDD、PSUです。以前、VM用に使用していた256GBのSSDは、破損率が16%になったため500GBの新品に交換。500GBのHDDは2010年からつかっており、ついにセクタ不良が発生したため、4TBのNAS用HDDに交換。冷却性能を上げるために電源をATXから小型のSFXに交換しました。

## バックアップサーバー
| 項目 | 搭載品                     |
| ---- | -------------------------- |
| Model| DELL OptiPlex 3050 Micro|
| CPU  | Intel Core i3-7100T (2C4T) |
| RAM  | DDR4-2400MHz 4x2=8GB       |
| GPU  | Intel HD 630               |
| SSD  | 128(boot)                  |
| HDD  | 4TB                        |

あれからバックアップサーバーを購入しました。メルカリで8000円でした。普通に使えてますし、消費電力が低いので結構あり。

# サーバーの中身
## CT/VM一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/1161b11c-6a81-9a7a-8eec-1198fce2e229.png)
はい。増えました。1年たち、様々なサーバーを構築してきました。

## 廃止したCT/VM
 | 名前 | 廃止理由|
| -------- | -------- |
| Suricata | CloudflareのゼロトラストとProxmoxのファイアウォールでカバーできると判断したため |
| hugo | WordPressにしたため |
| SoftEther |新しく買ったノートPCとの相性が悪く、使えないため|
| camera | pve v8.2からCTへのハードウェアパススルーに対応したため|

正直、Suricataとhugoに関しては面倒だったからが強いです。cameraについてはProxmoxのアップデートで問題が解消できたので、単純に使う理由がなくなりました。

## SDN
SDNはSoftware Defined Networkingの略で、直訳するとソフトウェアで定義されたネットワークです。Proxmox内部に仮想的なルーターとスイッチを用意して、疑似的なVLANを作成しました。詳しい説明は公式ドキュメントをご覧ください。
https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_pvesdn
一応、以下の手順に操作してsimpleゾーンを設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/eca8d935-43c5-ab1a-6e64-7730ae48b3b6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/8efd8777-01c2-7a45-341a-b5ad19b0760d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/a7bed3fe-fe4f-4851-bd71-463c3769af1f.png)

## 構築したサービスの紹介
構築したサーバーをVMID順に紹介していきます。以前紹介したものは省きます。

### Cloudflare Tunnel
以前、省いたCloudflare Tunnelの構築方法を紹介します。Cloudflare Tunnelを使用すれば、ポート開放をせずにVPN接続やウェブサイトの公開ができます。
#### アカウント設定
1. CloudflareのダッシュボードからZero Trustにアクセスします。アカウントがない場合は作成してください。
1. 初めてZero Trustにアクセスする場合は、チーム名などの各種設定を済ませてください。プランはFreeで問題ありませんが、Freeでもクレカ情報を求められます。
1. ユーザー設定を行います。「Setting」→「WARP Client」を選択し、「Device enrollment permissions」の「Manage」を選択します。
1. 「Add a rule」を選択し、VPNにログインさせるユーザーのメールアドレスを登録します。「Rule name」には適当なルールの名前を入力し、「Rule action」は「Allow」にします。「Include Selector」は「Emails」を選択し、「Value」にメールアドレスを入力します。複数入力も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/54aeae28-4d0c-f3d0-e7b5-80542a43294d.png)
#### トンネル構築
1. ProxmoxのCTを用意します。
1. Cloudflare Zero Trust ダッシュボードにアクセスします。
3.	「Networks」→「Tunnels」にある「Create a tunnel」をクリックします。
4.	「Select your connector」はそのまま「Cloudflared」を選択して「Next」をクリックします。
5.	「Name your tunnel」にお好きなトンネルの名前を入力し「Save Tunnel」をクリックします。名前は適当に「Tunnel」でも構いません。
6.	「Choose your environment」は1. で用意したマシンの環境を選択します。UbuntuテンプレートでCTを作成した場合は「Debian」→「64-bit」です。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/7324507f-885f-439d-d415-2766b4cc21be.png)
7.	表示された「Install and run a connector」の「If you don’t have cloudflared installed on your machine」と書かれたコマンドをすべてコピーし、1. で作成したマシンにまるまるコピペして実行します。
8.	少し時間がかかりますが、エラーが表示されなければ成功です。
9.	「Next」をクリックして、公開および共有設定を行います。「Public hostnames」はWebサイト公開、「Private networks」はVPNのネットワーク設定です。どちらか一つのみの設定もでき、あとから変更できます。

#### サイト公開（Public hostnames）
**サイト公開にはCloudflareにドメインが登録されている必要があります。**
写真のように、サブドメインとドメインを入力し、ローカルネットワークにあるサービスのタイプとIPを入力すればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/e60e7826-a96b-b0e5-f1c5-9a863ce8c91a.png)

#### トンネル除外設定
1. ここままでは何もVPN接続できないので、許可するIPを設定します。
1. 「Setting」→「WARP Client」→「Device setting」の中に「Default」が作成されているはずです。それをクリックし、「Configure」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/be9064fa-1323-ec8d-e561-9c52b9f0205d.png)
1. 「Split Tunnels」の欄で「Include IPs and domains」が選択されているかを確認して、「Manage」をクリックします。
1. 「Selector」を「IP Address」にして、公開およびVPNを許可するIPアドレスを入力します。「Value」にIPアドレス、もしくはIPアドレス範囲を指定します。
例えば、192.168.10.5だけを許可する場合は192.168.10.5/32、192.168.10.1～255まで許可する場合は192.168.10.0/24と入力します。「Save destination」を押せば設定完了です。
（/32に関しては、書かなくとも自動で指定されます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/7da2ab93-846c-1204-6bef-5f949f9d740a.png)



#### VPN設定（Private networks）
1. VPN接続するネットワークIPアドレス範囲を「CIDR」に入力します。トンネルサーバーが「192.168.1.100」にあり、範囲（サブネットマスク）が「/24」の場合は、「CIDR」に「192.168.1.0/24」と書きます。
1. VPN接続したいマシンのブラウザのアドレスバーに`1.1.1.1`と入力してアクセスし、アプリケーションをインストールします。
1. アプリの設定を開き、歯車マークから環境設定、アカウントにある「Zero Trustにログイン」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/0446dd72-fd3f-4813-958a-5f72ac383850.png)
1. 開いたウィンドウにチーム名を入力し、開いたブラウザに設定したメールアドレスを入力し、ワンタイムパスワードを取得します。
1. メールが届いたら、メールに記載されているワンタイムパスワードをブラウザに入力すれば、アプリが起動します。
8.	アプリの「WARP」という表記が「Zero Trust」になるので、スイッチをオンにすればVPN接続が完了し、外出先からでもサーバーにアクセスできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/91e88db2-bb8b-fd58-6b1e-21958b3e91f7.png)

 



### PowerDNS
DNSサーバーです。フルリゾルバを入れており、データベースにない場合は1.1.1.1へ接続されるようにしています。構築方法は、他の方の記事がわかりやすいので省きます。PowerDNSにした理由は、SDNとPowerDNSを接続して、自動でドメイン生成ができるからです。

### Portfolio
僕のポートフォリオサイトです。WordPressで構築しました。ProxmoxのCTテンプレートの中には「Turnkey Linux」というサーバーのパッケージの入ったテンプレートがあります。その中にWordPressがあったのでそれにしました。理由は単純で楽だから。
構築方法は、Proxmoxのテンプレートから「turnkey-wordpress」というテンプレートがあるので、これでCTを構築するだけです。注意点としては、初回起動時に設定するDBとwordpressパスワードは、数字、英字の大文字、小文字、記号のうち3つを使う必要があるので注意してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/0b796098-bdb8-11f0-930d-5dfc6984bf0c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/617bdacb-076b-32a3-197a-cbe4ca1cc95c.png)
もし、Cloudflare Tunnelを使用してサイトを公開する場合は、画像がうまく反映されないので設定を変更します。構築後、ブラウザのアドレスバーに`Server-IP/wp-admin/options.php`と入力しアクセスします。すると、普段は変更できない裏設定が表示されるので、以下の点を変更してください。
- 「upload_path」を「./wp-content/uploads」に変更してください。
- 「upload_url_path」にYour-Domainをサイト公開で設定したものに変更して`https://Your-Domain/wp-content/uploads`と入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/a1e716e0-a23e-958e-48aa-7efc9427705f.png)

### Website.Wordpress
サークルのウェブサイトです。実は以前はシステム工学研究会として活動していましたが、技術同人誌プロジェクトの参加者が2人のみだったので、独立してサークルを作りました。これはそのウェブサイトです。これもWordPressのテンプレートから作成しました。ただし、ローカルIP以外は管理画面へ行けないようにしています。見てくれると嬉しいです。

https://www.stluciano-server.net/

### Nextcloud
NextcloudはOSSのクラウドストレージです。Dockerを使えば簡単に作れるので面白いです。LDAPでユーザ管理を行い、Cloudflare Tunnelで公開しています。Nextcloudの構築方法、および設定方法は長くなりそうなので、別の機会で紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/138fafcb-2099-8f2c-adfe-569b3a6697cc.png)

### ONLYOFFICE
OSSのオンラインオフィスソフトウェアです。Nextcloud上でオフィスソフトをいじれるようにしています。実は、Nextcloudにはオフィスソフトが入ってはいます。ですが、使える機能が少なく、正直使いづらいです。サークルメンバーから、これだけは入れてほしいとせがまれて頑張っていれました。入れてよかったです。これも別の機会に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/b270a10f-7923-0f47-4a66-568eae97d0ec.png)

### PowerDNS-Admin
PowerDNSをGUIで操作できるツールです。なぜかDNSサーバーと同じマシンで使うと認識しなかったので、仕方なくCTを分けています。Dockerで構築しました。おそらく、ローカルホストを読み取るときに、Docker内のネットワークのローカルホストを見に行っているんだろうと思います

### LDAP
LDAPはLightweight Directory Access Protocolの略で、ネットワーク機器やユーザーID、パスワードを一括で管理してくれるツールです。これもTurnkey Linuxのテンプレートから作成できます。特徴として、テンプレートにはLDAPをGUIで編集するツールがすでに入っているので、楽ではあります（日本語に対応していませんが・・・）。
![スクリーンショット 2024-12-09 125108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/7dd60742-c6cf-feaf-4aab-643f20686408.png)

### mino31web
サークルメンバーが構築した実験CTです。

### GROWI
GROWIはOSSのウィキソフトウェアです。いわゆるesaです。サークル内で使用するために構築しました。注意事項として、CPUがAVXに対応している必要があり、CTでは構築できず、VMも物理マシンが古すぎると構築できませんでした（CTは方法あるかも？）。
AVXはIntel第2世代CPUから導入された、対応アプリケーションの処理能力を高める拡張命令です。GROWIはMongo DBを使用しており、このDBはAVXを使用します。ProxmoxはIntel第5世代CPUのエミュレートができるので問題ありませんが、物理CPUが古すぎるとQEMUがCPUをエミュレートできず、VMが起動しません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/fc440b73-e698-8da5-133b-4fc74356ce30.png)

#### インストール
1. Proxmoxで**VM**を作成し、ストレージ設定まで設定します。ストレージは64GB以上が推奨です。(32でやったらすぐに埋まりました。)
1. CPUの設定の種別を「x86-64-v3」に変更して2コア以上割り当てます。
1. OSをインストールします。
1. DockerとDocker Composeをインストールします。Ubuntu Serverは以下のコマンドでインストールできます。
~~~terminal
$ sudo snap install docker docker-compose
~~~
1. 以下のコマンドらを使ってGROWIをインストールし、アクセスできるように設定を変更します。gitクローンしたあと、ファイルに移動し、設定ファイルをnanoでもvimでもいいので開きます。
~~~terminal
$ git clone https://github.com/weseek/growi-docker-compose.git growi
$ cd growi/
$ sudo nano docker-compose.yml
~~~
1. 開いたファイルを以下のように変更します。
~~~terminal
ports:
- 127.0.0.1:3000:3000    # localhost only by default

《↓↓変更後》
ports:
- 3000:3000
~~~
1. compose upをして起動させ、Webブラウザを開いて`Server-IP:3000`でアクセスしログインできれば成功です。
~~~terminal
$ sudo docker-compose up
~~~

### NAS.N-data
ユーザーが共有するNASです。個人用のNASと分けるために構築しました。容量は1TBです。

# サーバーの予定
実は1月にサーバーのアップグレードを予定しています。スペックは以下の通りです。
### メインノード
| 項目 | 搭載品                               |
| ---- | ------------------------------------ |
| CPU  | Intel Core i5-10400F (6C12T)         |
| RAM  | DDR4-3200MHz 16x2=32GB               |
| GPU  | NVIDIA GeForce GTX 1660 Super        |
| M/B  | ASRock H570M-ITX/ac                  |
| SSD  | 128(boot) + 500(VM) + 512(Windows)GB |
| HDD  | 1TB + 4TB                      |
| Case | Fractal design Era-ITX silver        |
| PSU  | Fractal design L-SFX 650W GOLD       |
| 用途 | Proxmox メインクラスタノード         |


### セカンドノード
| 項目 | 搭載品                         |
| ---- | ------------------------------ |
| CPU  | Intel Core i9-10900F (10C20T)  |
| RAM  | DDR4-2666MHz 8x4=32GB          |
| GPU  | NVIDIA GeForce RTX 3060Ti      |
| M/B  | ASRock H470m Pro4              |
| SSD  | 1TB(boot) + 512GB(VM)            |
| HDD  | 4TB                            |
| Case | Antec CX200M                   |
| PSU  | ATX 600W Bronze                |
| 用途 | Proxmox セカンドクラスタノード |

メインノードについては変わりません。大きな違いは、マシンを1機追加します。
スペックはCore i9-10900FでGPUはRTX 3060Tiとかなりの高スペックです。これを使って、サークルメンバーが使えるVDIや画像生成AIサーバーなどを構築していきたいと考えています。

# おわりに
今の構成はこんな感じです。今後は、Cephまでは使えないですが、Corosyncクラスタを活用していきたいなと思っています。それ用にルーターを先輩からいただきました（1GbEなので足りるか不安ですが・・・）。そして、画像生成AIサーバーだったり、Active Directoryで動作するリモートWindows11を用意したいなと思っています。今後も**逸般の誤家庭**を目指していきますｗ