2022年7月4日月曜日

YouPHPTube こと AVideo を docker で構築する

YouPHPTube こと AVideo を docker で構築する

概要

AVideo は Netflix や Youtube のような Web インタフェースを持つビデオ共有サイトを簡単に構築できるツールです
今回は macOS 上で docker を使って構築する方法を紹介します

いくつかバグがあるので手動で修正しながら勧めます

環境

  • macOS 11.6.7
  • docker 20.10.12
  • AVideo 11.6

コードclone

  • git clone --depth 1 https://github.com/WWBN/AVideo.git

MYSQL_RANDOM_ROOT_PASSWORD の書き換え

  • cd AVideo
  • nkf -Lu --overwrite docker-compose.yml
  • vim docker-compose.yml
MYSQL_RANDOM_ROOT_PASSWORD: "yes"

entrypoint の改行コードをLFに変換

  • nkf -Lu --overwrite deploy/docker-entrypoint
standard_init_linux.go:228: exec user process caused: no such file or directory

対策です

イメージのビルドと起動

  • docker-compose up -d

DB のパスワードの確認

  • docker-compose logs database| grep 'GENERATED ROOT PASSWORD'

MYSQL_RANDOM_ROOT_PASSWORD を yes にしたのでランダムに生成されたパスワードを確認します

初期設定

https://localhost にアクセスすると初期設定のページが表示されます
以下を設定しましょう

  • Contact E-mail・・・好きなメールアドレスを設定
  • System Admin password・・・admin ユーザのログインパスワードを設定
  • Confirm System Admin password・・・上記と同じ
  • Database Host・・・「database」にする、今回は docker で起動しているためコンテナ名を設定します
  • Database Password・・・先程確認した MariaDB のパスワードを設定します

記載したら Install ボタンを押しましょう

動作確認

設定が完了すると以下のページになるのでメインページに移動します

メインページに移動して以下が表示されれば OK です
まだ動画も何もないので以下のようになります

最後に

次回はいろいろと使ってみたいと思います

参考サイト

2022年6月30日木曜日

Gitlab CI でスケジュール実行する方法

Gitlab CI でスケジュール実行する方法

概要

Gitlab CI で cron のようにスケジュール実行する方法を紹介します

環境

  • Gitlab ee 15.0.3

方法

  1. CI/CI -> Schedules

  1. New schedule

  1. スケジュールを設定 -> Save pipeline schedule

2022年6月28日火曜日

MinIO の gateway s3 を docker-compose で動かす

MinIO の gateway s3 を docker-compose で動かす

概要

この記事の docker-compose 版を紹介します

環境

  • macOS 11.6.7
  • docker 20.10.12
  • minio RELEASE.2022-06-25T15-50-16Z.fips

docker-compose.yml

version: '3'
services:
  minio:
    image: quay.io/minio/minio:latest
    ports:
      - "9100:9100"
      - "9000:9000"
    container_name: minio
    command:
      'gateway s3 https://jp-east-1.storage.api.nifcloud.com:443 --console-address ":9100"'
    environment:
      MINIO_ROOT_USER: 'AKIxxx'
      MINIO_ROOT_PASSWORD: 'xxx'

2022年6月27日月曜日

Flask-SQLAlchemy で外部キー制約のある親レコードが削除されたときに参照元の子レコードも削除する方法

Flask-SQLAlchemy で外部キー制約のある親レコードが削除されたときに参照元の子レコードも削除する方法

概要

cascade delete を使います

環境

  • macOS 11.6.7
  • Python 3.10.2
    • Flask-SQLAlchemy 2.5.1

サンプルコード

user = db.relationship("User", backref="address", cascade="delete")

user 側 (親) のレコードを削除した場合に address 側 (子) のレコードも削除してくれます

参考サイト

2022年6月24日金曜日

Flask-SQLAlchemy でテーブルを結合して検索する方法

Flask-SQLAlchemy でテーブルを結合して検索する方法

概要

テーブル間は外部キー制約が必要です

環境

  • macOS 11.6.7
  • Python 3.10.2
  • Flask-SQLAlchemy 2.5.1

サンプルコード

def join_test(self,
              name: str,
              city: str):
    return User.query.join(Address).filter(Address.city == city,
                                           User.name == name).one()

join 構文を使うことで外部キー制約のあるテーブル同士を結合して検索することができます
filter 内ではどちらのテーブルに対しても条件を記載することができるようになります

最後に

クエリが複雑になるとスロークエリの原因にもなるので複雑な join は避けるようにしましょう

参考サイト

2022年6月23日木曜日

間違って実行したコマンドを訂正して実行してくれる thefuck を試す

間違って実行したコマンドを訂正して実行してくれる thefuck を試す

概要

タイポなどでコマンドミスしたり権限がなくてコマンドエラーになった場合に再度コマンドを実行せず fuck と実行すると正しいコマンドを実行してくれるツールです
今回は実際にどんな感じで動作するのか試してみました

環境

  • macOS 11.6.7
  • Python 3.10.2
  • thefuck

インストール

  • brew install thefuck
  • eval $(thefuck --alias)

とりあえず試す

puthon とタイポしたあとに fuck するとコマンドを正しく作成し直してから実行してくれます

% puthon
zsh: command not found: puthon
% fuck
python [enter/↑/↓/ctrl+c]
Python 3.9.13 (main, May 24 2022, 21:28:44) 
[Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

どうやって動作しているのか

ルールを記載することでルールに習って新しいコマンドを生成してくれます

なので対応していないコマンドや独自のコマンドがある場合は自分で追加することができます

独自のルールを作成してみる

~/.config/thefuck/rules 配下にルールファイルを作成することで独自のルールを作成できます
今回は hoge という存在しないコマンドをタイプしたあとに fuck すると ls コマンドの結果を返すルールを作成してみます

  • mkdir -p ~/.config/thefuck/rules
  • vim ~/.config/thefuck/rules/hoge_ls.py
import re
from thefuck.shells import shell

# enabled_by_default = True
# requires_output = True
# priority = 1

regex = re.compile(r'fuga')


def match(command):
    return bool(regex.findall(command.script))


def get_new_command(command):
    return "ls"

独自ルールを作成するときのポイント

match でなかなか目的の結果を補足できないケースが多かったので一旦 True を必ず返却するようにして print デバッグなど使ってみましょう

もし他のルールで補足されると独自ルールに回ってこないので priority を小さくすることでルールの評価を優先できるので優先度を上げてみましょう

参考サイト

最後に

パッケージの名前があれですが便利に使えるツールかなと思います
リバースサーチに慣れている場合は fuck に切り替えるのが大変かもしれません

あとはプロダクション環境などでは逆に誤って実行してしまうケースもあるので使わないほうがいいかもしれません

2022年6月22日水曜日

Gmail で独自ドメインを使ってメールを送受信する方法

Gmail で独自ドメインを使ってメールを送受信する方法

概要

Gmail で独自ドメインを使ってメールを送受信する方法を紹介します
基本的には自分のドメインの DNS サーバの MX レコードを登録するだけです
事前に GoogleWorkspace の申し込みと管理者ユーザの作成が必要になります (参考)

環境

  • macOS 11.6.7
  • Google Workspace

コンソールにログイン

まずは GoogleWorkspace のコンソールにログインしましょう

MXレコードを設定する

まだの場合はクイックスタート用のリンクがあるのでここから設定するのが簡単です

有効化をクリックします

MX レコードを DNS に設定する前に注意文が表示されます
いろいろ書いてありますが既存の MX レコードを書き換える場合にはタイミングによってメールが送受信できないので注意してくださいということが書いてあります
新規で MX レコードを登録する場合は問題ありません

DNSの管理画面の一般的な操作方法が記載されています
DNSレコードの設定はお使いのDNSサービスによって異なるので各自で設定画面に移動してください
「次へ: 手順2に移動」を選択します

追加するレコードの情報が記載されたページに遷移します

下にスクロールするとレコード情報があるのでここに記載されている5つのMXレコードを登録します

自分はお名前comのDNSサーバを使っているので以下のような感じで登録しました

設定を反映して以下のような完了画面になれば OK です
GoogleWorkspace が MX レコードを引けるようになれば OK です
うまく設定が完了しない場合は dig などでレコードが引けるようになっているか確認しましょう

  • dig your-domain.com mx

動作確認

GoogleWorkspace に登録したユーザに適当にメールを送信してみましょう
ちゃんと Gmail でメールが確認できれば OK です

注意事項

今回は新規で MX レコードを登録しましたがすでに使用しているメールサーバなどがあり MX レコードがある場合は切り替え時の注意が必要です
具体的には参考サイトにある Google の公式サイトを見てほしいのですが切り替えのタイミングによってはメールが届かないことがあります

参考サイト