プロコンの作品アップロード用サーバをさくらのVPSとNextcloudで構築した

#この記事はなに？
みやぎプロコンという小中学生向けのプログラムコンテストがあります。東北地方に在住の小中学生たちが作ったプログラムが集まり、優秀な作品に表彰がされるというワクワクなイベントなのですが、その作品アップロード用サーバを提供することになりました。
この記事ではそのサーバをどのように構築したかを紹介します。

[1.みやぎプロコンの紹介](#1-みやぎプロコンの紹介)
[2.サーバの要件](#2-サーバの要件)
[3.VPSでサーバ作成](#3-vpsでサーバ作成)
[4.セキュリティ対策](#4-セキュリティ対策)
[5.Nextcloudの設定](#5-nextcloudの設定)

#1. みやぎプロコンの紹介
みやぎプロコンのサイトを紹介します。ぜひ覗いてみてください。
https://miyagi-procon.jp/
2021年大会の応募期間は12/13から2022/1/11まで。過去大会の結果も掲載されています。

私が所属する[さくらインターネット](https://www.sakura.ad.jp/)はこのプロコンに協力し、小中学生たちが応募作品をアップロードするサーバを提供することになりました。

#2. サーバの要件
まずはどんなサーバを作るのか整理します。主催のみやぎプロコン実行委員会さんから以下のような要件を頂きました。

* エントリーフォームはみやぎプロコン実行委員会にて作成する
* エントリーフォームに登録した応募者にユーザIDとパスワードを発行する
* 応募者はそれらを利用してサーバにログインし作品をアップロードする
* ユーザは200件作成する

これらを実装するために[さくらのVPS](https://vps.sakura.ad.jp/)と[Nextcloud](https://nextcloud.com/)を採用しました。

#3. VPSでサーバ作成
ここではさくらのVPSでサーバを作成した過程を紹介します。OSとNextcloudのインストールをいっぺんに行います。

* ゾーン選択　さくらのVPSでは国内にあるゾーン3つからサーバを作成する地域を選べます。今回は大阪を選択。

|![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2324408/e3aff691-d7a3-baa8-d677-95582e5755be.jpeg)|
|:--|

* プラン選択　CPUは仮想4Core、メモリが4GB、ストーレージがSSD 200GBのプランを選択。もう少しスペックが低くても問題無いと思いますが念のため。

|![002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2324408/8cb27dd9-bc70-fb7b-a437-45a6a27d4cee.jpeg)|
|:--|

* インストールするOS　CentOS Stream8を選択。実はわたしStreamを利用するのが初めて:relaxed:

|![003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2324408/89edc198-1b33-43a8-528e-2adc78b508a6.jpeg)|
|:--|

* スタートアップスクリプト　Nextcloudを選択します。これがさくらのVPSを選択した一番の理由でして、OSのインストールと一緒にNextcloudの初期設定まで済ませてくれるんです。ラクチンです。

|![004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2324408/95f7f321-c421-0345-25b3-c0b82dc1bcc5.jpeg)|
|:--|

* サーバーへのSSHキー登録　あらかじめ作成しておいたSSHキーを登録します。

|![005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2324408/d8c32a41-078b-3d5c-a951-537b6e98344b.jpeg)|
|:--|

あとは支払い方法を選択して完了です。クレジットカードを選択すれば数分でNextcloud初期設定済みのサーバが作成されます。

#4. セキュリティ対策
このあとサーバにセキュリティ対策をいくつか行いました。

* 一般ユーザの作成（root以外のユーザ。普段はこちらでサーバを操作する）
* SSH接続用ポート番号の変更（デフォルトの22は怖いので使わない）
* firewalldのルール変更（必要な通信のみ許可）

細かな手順は省略しますが、ご興味ある方は以下を参考にしてみてください。
[サーバ作成直後に設定しておくべき初期セキュリティ設定](https://manual.sakura.ad.jp/vps/support/security/firstsecurity.html)

#5. Nextcloudの設定

いよいよNextcloudの設定です。まずはユーザを200件作成します。ブラウザからログインして利用できる設定画面でもユーザは作れますが、GUIで200件は辛いです。なのでCLIであるoccを使います。今回は以下のように利用しました。

```
export OC_PASS=(パスワード) && su -s /bin/sh -c '/var/www/html/nextcloud/occ user:add --password-from-env (ユーザID)' apache
```
:::note info
環境変数OC_PASS にパスワードを export
apache ユーザに su して occ を実行
user:add を使用してユーザIDを指定
:::

みやぎプロコン実行委員会さんからあらかじめ200件分のユーザIDとパスワードを頂いていたので、それらを代入して実行しました。仮にユーザIDが`test001`、パスワードが`password001`だとすると以下のように実行します。

```
export OC_PASS="password001" && su -s /bin/sh -c '/var/www/html/nextcloud/occ user:add --password-from-env test001' apache
```

次にクォータを設定しました。サーバのSSDは200GBですが、もし大容量のファイルがアップロードされディスクが溢れたら他の応募者が困ってしまいますからね。1ユーザがアップロードできる上限サイズを1GBにするため以下のように実行しました。対象のユーザIDが`test001`の場合の例です。

```
su -s /bin/sh -c '/var/www/html/nextcloud/occ user:setting test001 files quota 1G' apache
```
:::note info
apacheユーザに su して occ を実行
user:setting の files quota を使用してクォータを 1G に指定
:::

#おわりに
以上で作品アップロード用サーバの構築は完了です。とても簡単でした。たくさんの作品が集まるといいな～:blush:

|![20211219_000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2324408/6f038fea-efb7-a3c4-09ee-d3ba8cbfbc6b.jpeg)|
|:--|