個人で市民参加のための政治参加プラットフォームDecidimのインスタンスを建てた話

# 背景
https://note.com/empm/n/n401d7f995524

↑にも書いた通り、産休に入って時間ができたので、以前から政策評価とか、政治参加を可能にするcivic tech的なものに興味があったので、Decidimに手を出してみた。DecidimそのものはOSSだが、国内だと一般社団法人 Code For Japanが自治体など向け（?）にDecidimを提供しているようだが、とりあえず個人でサイトを立ち上げてみる。

Decidimがどんなものが触ってみたい人はオンラインのデモもある　※スペイン語なのでちょっとビビるけど　→　https://try.decidim.org/

今回作ったサイトはこちら ※レンタルサーバー代がかかるようになったらcloseするかも

https://suginami-unofficial.com/?locale=ja

# 断り書き
筆者は元々はソフトウェアエンジニアとして新卒で採用されたものの、産休に入る直前はデータサイエンティストやML Opsに関する業務がメインだったため、業務外でレンタルサーバーを借りてサービスを運用するのは実は初めてなので、下記の手順書の中には間違っていたり不正確な記述がありえる。発見された方はコメントでお知らせいただけるとうれしい。

# 公式ドキュメント
ローカルでDecidimのインスタンスを動かすだけならばともかく、プロダクション環境でDecidimをインストールするためのドキュメントは結構探すのが大変だった。

試行錯誤の末、[Decidim installation script](https://platoniq.github.io/decidim-install/script/)を参考にするとうまくいった。
レンタルサーバーとしては、[Install Decidim on Ubuntu 20.04](https://platoniq.github.io/decidim-install/decidim-focal/)の記述を参考に、DigitalOceanを利用した。上記リンクから新規ユーザ登録すると60日間有効な$200 creditが手に入るので当面実験する分には十分そう。業務外でレンタルサーバーを利用するのは初めての経験だが、AWSと比べて機能が絞り込まれているからなのか、DigitalOceanはシンプルなUIで結構使いやすい印象。

# 詳細な手順
- まずはDigitalOceanで4Gのメモリを持つdroplet(仮想マシン)を作成する
  - [Install Decidim on Ubuntu 20.04](https://platoniq.github.io/decidim-install/decidim-focal/)に記述通りメモリを1Gではなく4Gにしたのは、[チャットルーム](http://chat.decidim.org/)　で質問したところメモリが足りないとbundle installするときやnpm installするときに失敗するよとアドバイスしてくれた人がいたため
  - imageとしてはUbuntu 20.04を選択。Ubuntu 18.04 にするとRubyのバージョンとかで後段の処理で失敗した...
```
wget -O install-decidim.sh https://raw.githubusercontent.com/Platoniq/decidim-install/master/script/install-decidim.sh
chmod +x install-decidim.sh
./install-decidim.sh -h
./install-decidim.sh my-decidim
# rootとして実行すんなと怒られる
```
- [Initial Server Setup with Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-20-04)に従って`sammy`の代わりに`decidim`というユーザを作成してスクリプトを実行
- 結構待つとインストールが終わるので、system adminとしてログインして、適切なorganizationを作成
- [Basic configuration of Decidim](https://platoniq.github.io/decidim-install/basic-config/)に従って`Email configuration`と`Enabling SSL (with Let’s encrypt)`を済ませる
  - `Setting up Oauth authentication`以降はまだできていない 
- 結局実行したコマンドをまとめると
```
wget -O install-decidim.sh https://raw.githubusercontent.com/Platoniq/decidim-install/master/script/install-decidim.sh
chmod +x install-decidim.sh
./install-decidim.sh my-decidim
vim my-decidim/config/application.yml #4行追加
cd my-decidim/
vim config/initializers/decidim.rb
sudo vim /etc/sysctl.conf
sudo sysctl -p
sudo passenger-config restart-app ~/my-decidim
```
- ここでエラー
- 途中でつまった気もするが[How To Secure Nginx with Let's Encrypt on Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04)をみて解決できた記憶...
- ドメイン名を購入し、[Point to DigitalOcean Nameservers From Common Domain Registrars](https://docs.digitalocean.com/tutorials/dns-registrars/)　を参考にnameserverなどの設定をする ※IONOSの旧名称の1&1の説明に従う
  - 初めてのユーザーは最初の1年1ドルだったので[IONOS](https://www.ionos.com/domains/domain-names)を利用することに
  - [独自ドメインにDigitalOcean DNSを使用する](https://flat-kids.net/2020/12/14/%E7%8B%AC%E8%87%AA%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%ABdigitalocean-dns%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B/) の説明もわかりやすかった
  - とりあえずAレコードが反映されるまで一晩待った
```
sudo apt install -y python3-certbot-nginx
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
sudo ufw status

sudo certbot --nginx -d suginami-unofficial.com # これは自分で契約したドメイン
```
# 日本語化
- [Advanced configuration of Decidim
](https://platoniq.github.io/decidim-install/advanced-config/)を参考に
```
vim ~/my-decidim/config/initializers/decidim.rb #:ja 追加
cd my-decidim/
bin/rails c

# データベース操作画面で
o=Decidim::Organization.find(1)
o.available_locales
o.available_locales += ["ja"]
o.default_locale = "ja"
o.save!

sudo passenger-config restart-app ~/my-decidim
```

# 今後のTODO
- https://platoniq.github.io/decidim-install/basic-config/#setting-up-oauth-authentication を設定してtwitterとかでログインできるようにしたい...