# WindowsでDockerを用いPixelfedをビルドする

6 min read
Table of Contents

Pixelfed is 何?

オープンソースのInstagramで、Mastodonとか同様に分散型のアーキテクチャを使用している。

つまりFediverseの一部で、

Instagramの「より魅力的な(そして倫理的な)代替手段」

と言われていたりいなかったり。

Buildまでに結構手こずったのでやり方をメモしておく

結構というより、挫折しようかと思うほど手こずった。前提としてフロントエンドをメインとしているのでDockerの知識が乏しいというのが多分にある。

Dockerに慣れている人であれば、こんなもの朝飯前かもしれない。

Documentはこちら

Pixelfed Docs

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を使う方法なので、この方法で進めていく。

Terminal window
cp env.docker .env

上記コマンドで、env.docker.envにコピーする。

次に下記値を任意の値に変更する。

Terminal window
APP_NAME="PixelfedExample"
APP_DOMAIN="pixelfed.example.com"
ENFORCE_EMAIL_VERIFICATION="false"
INSTANCE_CONTACT_EMAIL="メールアドレス"
DB_PASSWORD="パスワード"

ちなみにAPP_DOMAINlocalhostとかにしようとしたけれど、バリデーションがあるしく、特定の形式のドメイン名にしか設定ができなかった。

APP_DOMAINの設定により、pixelfed.example.comでサービスを開けるようになる。

たぶんその設定はdocker\nginx\root\docker\templates\etc\nginx\conf.d\default.confに記述されている。

Terminal window
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の問題がすべて解決したら、アカウントを作成する。

Terminal window
docker compose exec -u www-data web php artisan user:create
Creating 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.crt
pixelfed\docker\nginx\ssl\nginx.key

無事Https接続ができるようになった。

ホットリロードが効かない

意気揚々とカスタマイズしようとして、ソース触っても画面が更新されない。

なんなら、

docker compose down
docker compose up -d

でも更新されず。

docker compose up --build -d

で更新されることが確認できた。

新たな問題なので解決に向けて調査していく(マウントの問題?)けど、ひとまずビルドできたのでOKとする。

追記

docker compose up --build -d

bladeが更新される。

npm run development
docker compose up --build -d

vueが適用される。

…、これが正しい運用方法なのかもしれない。

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments