Raspberry Pi 4でサーバー

Raspberry Pi 4でおうちサーバーを組んでみた。

なんかいろいろひっかかったのでメモ。

今までのサーバーはUbuntuにアプリを直接インストールしていたが、最近の流行のDockerで簡単管理を目指す方針。

  • Docker registry
  • git のサーバー
  • 個人的サーバーその1
  • 個人的サーバーその2

まずはこの4つを使えるように検討。

うちのデータのバックアップ体制は基本git。個人的に書いたソースコード関連はもちろんだけど、各種請求書などもダウンロードしたりスキャンしてデジタル化してgitでぽいぽい。いろんな取扱説明書もデジタル化。バックアップはpullするというかpushするというか。

最近でかいファイルでもgitのパフォーマンスがどうにかなるという話を聞いたので写真や音楽関連のファイルもgitにならないか考えてるくらい。このへんはバージョン管理というよりもただバックアップが楽ってだけなんだけど。

/var/opt配下にサーバー関連のデータを集めておいて、いっぺんにバックアップ取れるようにする。

OS

Rasbperry PiでもDockerが使えることを確認。Ubuntuもつかえるようなので、Ubuntuを採用。arm64、64bit。

で、Raspberry Pi Imager v1.5のOS選択の一覧に、Ubuntu Server 20.04.02 LTS arm64があるのでそれを選択してMicroSDを作ると、ブートしない。ごにょごにょすればブートするらしいが、面倒なので却下。(2021年3月1日現在)

20.10 arm64だと一発で起動する。

Docker, Docker-composeのインストール

sudo apt update
sudo apt upgrade
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb https://download.docker.com/linux/ubuntu groovy stable"
sudo apt install docker-ce docker-compose

groovyは20.10から来ている名称。

Dockerは使えるけど、DockerHubに上がっているイメージでx64やx86は見つかるけど、arm64が結構ないことが発覚。うーん。自前でイメージ作るか。

gitのインストール

apt install git

xrdpとsshdも入れた。

Visual Studio codeのインストール

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | apt-key add -
sudo add-apt-repository "deb https://packages.microsoft.com/repos/code stable main"
sudo apt install apt-transport-https
sudo apt update
sudo apt install code

Visual Studio codeのおかげで、ようやくemacsの呪縛から逃れられそうです。コンソールはまだ駄目だけど。。。。

Docker registry

Docker registryはいろいろGUIを見たんだけど、いまいちよくわからなかったので、結局デフォのregistry:2。Visual Studio CodeからアクセスするからGUIいらん。

docker run -d -e REGISTRY_STORAGE_DELETE_ENABLED=true -p 5000:5000 --restart=always --name registry -v /var/opt/dockerRegistry:/var/lib/registry registry:2

これで上がることを確認したのであとでdocker compose対応に。

gitのサーバー

gitのサーバーは最初gitlab-ceを頑張ろうとしたんだけど、どうにもこうにもうまくいかない。途中で面倒になって方針変更。giteaのほうが簡単じゃん。mergeリクエストまわりとCI/CD関連が違うけど、あとで考えればいいや。

docker run -d -e USER_UID=1000 -e USER_GID=1000 -p 3000:3000 --restart=always --name gitea -v /var/opt/gitea:/data -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro gitea/gitea:latest

これで上がることを確認して、セットアップ。UIDやGIDは適宜変更してください。DBはお好みのsqliteで。あとでdocker compose対応にする。

この二つのサーバーが上がると、個人的サーバーその1とその2を上げる作業が楽になる。

個人的サーバーその1

vue.jsで自作したアプリのサーバー。ということでnpm-http-serverなるDocker imageを作成。っていってもnpmとhttp-serverをインストールしただけのDocker image。こいつをbaseにアプリのDocker imageを作成するとする。

最初、Windows x86-64上でクロスコンパイルじゃないけど、arm64用のDocker imageを作成しようとして、うまくいかなかったので、Raspberry Pi上で作成。

FROM ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
apt-get install -y npm && \
npm install -g http-server

その流れで個人的サーバーその1のビルドもRaspberry Pi上で行い、そのまま個人的サーバーその1のDocker image作成まで。

そのせいで結局、Rasbperry Piにnpm関連から全部いれる羽目に。

個人的サーバーその2

NetCoreで自作したアプリのサーバー。NetCoreのラインタイムが入ったDocker imageはDocker Hubにありそうなんだけどarm64版が見つけられなかったので、自前で作成。

FROM ubuntu:latest

ENV DOTNET_ROOT=/opt/dotnet
ENV PATH=$PATH:/opt/dotnet
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

RUN apt-get update && \
apt-get install -y wget && \
mkdir -p /opt/dotnet && \
wget -qO- https://download.visualstudio.microsoft.com/download/pr/2e5353f1-8818-4d87-af94-0e5cec730b40/58172cde97795b55bcfc7177dbcf3c68/dotnet-sdk-5.0.201-linux-arm64.tar.gz | tar zxf - -C /opt/dotnet

なんかもっと簡単に入りそうなんだけど、まぁ動いてるからいいや。ランタイムじゃなくてSDKだけど。。。。

これは、5.0.201用なので、アップデートが来たら修正の必要がある。

こいつをベースに個人的サーバーその2のDocker imageを作成。なぜかDotnet CoreアプリのビルドもRaspberry Pi上でできるようにDotNetCoreSDKをRaspberry Piにもいれる。どーせCI/CDするときに必要だし。

できあがったDockerfileやらはぽいぽいgitサーバーへ。Docker imageはDocker registryへ。

最後にdocker-composeで一発どんで起動できるようにする。

で、気が付いた。docker-compose upするのにDocker registryに依存してるじゃん。2発どんです。

今後の課題

もしかして、Windows x86-64上でarm64用のDocker imageがうまく作れなかったのってbaseイメージの指定が悪かったからじゃないかと。Raspberry Pi上にはSDK関連をいれたくないんだけどなぁ。デバッグするときに結局必要なのかなぁ。要調査。

2発どんはちょっとぶさいくなので検討。無理かなぁ。

Gitteaのmerge RQ関連のお勉強。

GitteaのCI/CD関連(Drone?)のお勉強。

CI/CDをRaspberry Piでやるとして、arm64用が必要な場合とx86-64用が必要な場合とで、どうやって切り分けようか検討。

ちなみに個人的サーバーその1は、Webブラウザ用Youtubeの連続再生アプリ、個人的サーバーその2は、とある動画のDLNAプロキシ(GoogleTVで見たい)です。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください