NextCloud を導入した
カレンダーアプリをセルフホストしたいなと思い色々と調べていたところ、NextCloud をホストするのが楽という結論になったので NextCloud を導入しました。
前提
- ポートを開放したくないので Cloudflare Tunnel を使います
- せっかく Cockpit で podman の管理ができるので podman-compose を使って管理します
導入方法
正直、書かなくても5分で終わる内容ですが、書かないと尺が持たないので書きます。
docker-compose.yml
を書く
適当な名前のディレクトリを作成して GitHub に書いてあるやつを書きます。MYSQL_ROOT_PASSWORD
と MYSQL_PASSWORD
はパスワードジェネレーターでも使って適当に設定してください。
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
podman-compose up -d
で試しに起動して、起動できることが確認できたら podman-compose down
で落とします。
systemctl で自動起動するようにする
podman は docker と違ってデーモンを持たないので、systemd を使って起動してあげる必要があります。今回はユーザー管理下のデーモンを作成して自動起動します。
まず、以下の内容で ~/.config/systemd/user/nextcloud.service
にデーモンを作成します。この記事を読んでいる人はなーのドッペルゲンガーじゃないはずなので、ユーザー名の部分は自分の名前に置き換えてください。
[Unit]
Description=service for nextcloud
[Service]
Restart=always
ExecStart=/usr/bin/podman-compose -f /home/nan1sa/nextcloud/docker-compose.yml up
ExecStop=/usr/bin/podman-compose -f /home/nan1sa/nextcloud/docker-compose.yml down
[Install]
WantedBy=default.target
デーモンを作成したら読み込み直して起動します。ユーザーがログインしなくても自動で起動するように linger
も有効化します。
$ systemctl --user daemon-reload
$ systemctl --user enable --now nextcloud
$ sudo loginctl enable-linger nan1sa
Cloudflare Tunnel の設定をする
cloudflared
は導入済みと仮定します。ログインしてトンネル掘ってサービスを登録します。既に使っている人は適当に無視してください。
# cloudflared tunnel login
# cloudflared tunnel create トンネルの名前 # ここで UUID が出てくるのでメモる
# cloudflared tunnel route dns UUID ドメイン
# mkdir /etc/cloudflared/
# vim /etc/cloudflared/config.yml # ファイルの内容は後述
# cloudflared service install
# systemctl restart cloudflared
config.yml
の中身はこんなのです。
tunnel: UUID
credentials-file: /root/.cloudflared/UUID.json
ingress:
- hostname: ドメイン
service: http://127.0.0.1:8080
- service: http_status:404
ブラウザでアクセスする
設定したドメインにアクセスして初期設定画面が表示されれば完了です。もし表示されなかったら頑張ってください。
クライアントでログインできない場合の解決方法
SSL 周りで不都合があるらしく、このままだとスマホアプリやパソコン用同期アプリでログインができないのでログインをできるようにします。
$ podman cp nextcloud_app_1:/var/www/html/config/config.php ./
$ vim config.php # 設定ファイルに 'overwriteprotocol' => 'https' を追加する
$ podman cp config.php nextcloud_app_1:/var/www/html/config/
$ podman exec -it nextcloud_app_1 chown www-data:www-data /var/www/html/config/config.php
$ podman exec -it nextcloud_app_1 chmod 755 /var/www/html/config/config.php
まとめ
クラウドストレージのアプリなのになぜかノートアプリだったりメールクライアントだったりカレンダーアプリだったりが使えるの便利すぎる。