# WindowsでDockerを用いPixelfedをビルドする
Table of Contents
Pixelfed is 何?
オープンソースのInstagramで、Mastodonとか同様に分散型のアーキテクチャを使用している。
つまりFediverseの一部で、
Instagramの「より魅力的な(そして倫理的な)代替手段」
と言われていたりいなかったり。
Buildまでに結構手こずったのでやり方をメモしておく
結構というより、挫折しようかと思うほど手こずった。前提としてフロントエンドをメインとしているのでDockerの知識が乏しいというのが多分にある。
Dockerに慣れている人であれば、こんなもの朝飯前かもしれない。
Documentはこちら
Envの作成
まず戸惑ったのが、Envがたくさんあることで
.env.docker.env.example.env.testing
どれを使えばいいのかわからなかった。
いろいろ調べた結果env.dockerを使うっぽいことが判明した。
この時点でDocsに書いてあることと少し違うので、これが正しいのかわからない。
By default Pixelfed comes with a .env.example file for production deployments, and a .env.testing file for debug deployments. You’ll need to rename or copy one of these files to .env regardless of which environment you’re working on.
とはいえ、動いたのがenv.dockerを使う方法なので、この方法で進めていく。
cp env.docker .env上記コマンドで、env.dockerを.envにコピーする。
次に下記値を任意の値に変更する。
APP_NAME="PixelfedExample"APP_DOMAIN="pixelfed.example.com"ENFORCE_EMAIL_VERIFICATION="false"INSTANCE_CONTACT_EMAIL="メールアドレス"DB_PASSWORD="パスワード"ちなみにAPP_DOMAINをlocalhostとかにしようとしたけれど、バリデーションがあるしく、特定の形式のドメイン名にしか設定ができなかった。
APP_DOMAINの設定により、pixelfed.example.comでサービスを開けるようになる。
たぶんその設定はdocker\nginx\root\docker\templates\etc\nginx\conf.d\default.confに記述されている。
server { listen 80 default_server;
server_name {{ getenv "APP_DOMAIN" }};これだけだと自身の指定したドメインとIPアドレスの紐づけが完了されていないので、hostsファイルを修正して紐づけを行っていく。
C:\Windows\System32\drivers\etc\hostsを開き、末尾に
127.0.0.1 pixelfed.example.comと追記する。
Dockerを立ち上げる
docker compose up -dコマンドでDockerを起動する。
上手くいかないときは、
docker compose logs --followでログを確認して修正していく。
今回は認証キーがログに記載されていたいので、
docker compose exec web php artisan passport:keysでKeyを作成する。
そしてDockerの問題がなくなるまで根気強く付き合っていく。
アカウントを作成する
Dockerの問題がすべて解決したら、アカウントを作成する。
docker compose exec -u www-data web php artisan user:createCreating a new user...
Name: > name_id
Username: > username
Email: > email
Password: >
Confirm Password: >
Make this user an admin? (yes/no) [no]: > yes
Manually verify email address? (yes/no) [no]: > yes
Are you sure you want to create this user? (yes/no) [no]: > yes
Created new user!これで一通り設定完了したので、pixelfed.example.comにアクセスすると、トップページが表示させる。
証明書 (nginx.crt) と秘密鍵 (nginx.key) を作成 する
最後にhttpsで接続できるように、証明書を作成する。
mkdir -p docker/nginx/ssl && openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout docker/nginx/ssl/nginx.key -out docker/nginx/ssl/nginx.crt -subj "//C=JP/ST=Tokyo/L=Tokyo/O=Dev/CN=pixelfed.example.com"で、下記2ファイルが作成される。
pixelfed\docker\nginx\ssl\nginx.crtpixelfed\docker\nginx\ssl\nginx.key無事Https接続ができるようになった。
ホットリロードが効かない
意気揚々とカスタマイズしようとして、ソース触っても画面が更新されない。
なんなら、
docker compose downdocker compose up -dでも更新されず。
docker compose up --build -dで更新されることが確認できた。
新たな問題なので解決に向けて調査していく(マウントの問題?)けど、ひとまずビルドできたのでOKとする。
追記
docker compose up --build -dでbladeが更新される。
npm run developmentdocker compose up --build -dでvueが適用される。
…、これが正しい運用方法なのかもしれない。