megutech

自身の備忘録として主にWEBサーバー周りの技術について投稿しています。

S3バケットを別アカウントへ移設

ダウンタイムなしにS3のアカウントを移設したかったのですが、巷の情報では1回のみのsyncで済ませており、ちょっと困ったので備忘録。 他との違いとしてはs3:GetObjectTaggingの追加がかなめ。 手順 移設用IAMユーザー 移設先のアカウントで以下のポリシーを…

KusanagiでNginxが何度も再起動する

Nginxのログを見ていると何度も再起動が行われていました。 幸い動作に影響は無かったものの、ひどいときには数分に一回レベルで再起動が起こるので原因を調査しました。 原因 Kusanagiはデフォルトでmonitが動いています。 monitの設定でNginxで500番台が計…

Next.jsでBOTからのアクセス時に500になる

本番稼働中のNext.js アプリケーションのログを眺めていると、稀にエラーを吐いていました。 環境 Key Val Node.js 20.9.0 Next.js 13.4.13 エラーの内容 - error Failed to handle request for / TypeError: fetch failed at Object.fetch (node:internal/d…

ruby-handlebarsのプレースホルダーに日本語を使いたい

handlebarsって便利ですよね。 さてプレースホルダー {{hoge}} に日本語を使いたい場面などありませんか? ありませんか。まあ普通はそうです。 しかし私にはそんなタイミングがあったのです。 handlebars.rbでは使えたのですが、さすがにこれはもう古すぎで…

PostgreSQLのシーケンスがずれた!

開発中色々いじっていたらシーケンスがずれた、なんてことは数年に一度くらい経験したりしないでしょうか? そんな時にぱっと直したいときは、以下を流し込めばOKです。 DO $$ DECLARE r RECORD; s text := 'public'; BEGIN FOR r IN SELECT tablename FROM …

Rspecテストで同時アクセスによる排他テストを行う

商品購入に同時にアクセスがあった場合、在庫数がマイナスにならないようにテストしておきたい。 そんなテストをしたいタイミングが多々あるのではないでしょうか? その際テーブルロックを利用して排他制御を行っていた場合、何も考えずにrspecでThreadを使…

Ruby on RailsでInstagram Graph APIを使いたい

Ruby on Rails上でInstagram Graph APIを使う情報が少なかったので、はまりポイントも併せて備忘録を残していく。 環境 Service Version Ruby 3.2.2 Ruby on Rails 7.0.4 devise 4.9.2 omniauth-oatuh2 1.3.1 omniauth-rails_csrf_protection 0.1.2 omniauth…

JavaScriptで日本語入力の文字数制限を行いたい

テキストエリアの入力文字数制限をしたいとき、change eventを拾って入力値をチェックするだけだと、変換を伴う文字入力の際に期待した動きにならなった。 環境 jsなら何でもいいんですが、今回私はreactを使ったのでreact versionを記載します。 Service Ve…

GroverでHTMLをPDFに変換したら日本語が文字化けして豆腐になっちゃった件

環境 Service Version OS Amazon Linux 2 Ruby 3.0.2 Ruby on Rails 7.0.3 grover 1.1.1 原因 Groverで使用しているpuppeteerにて日本語化対応が必要だった。 対応 日本語フォントを入れましょう。 $ sudo yum install ipa-gothic-fonts ipa-mincho-fonts ip…

Ruby on RailsでreCAPTCHA Enterprise を使いたい

無料版と有料版のreCAPTCHAとがありますが、使い方は一緒かと思ったら違ってちょっと大変だったお話。 環境 Service Version Ruby 2.7.4 Ruby on Rails 6.1 recaptcha 5.8.1 前提 Gemはrecaptchaを使います。 通常のreCAPTCHAなら下記用意しておけば、後はド…

Devise OmniAuthでサービス先へリダイレクトする前にごにょごにょしたい

OmniAuth、ほとんど何もしなくてもOAuthを実装出来て便利ですよね。 でもサービス側へリダイレクトする直前にごにょごにょしたいことってありませんか? ありませんか。そうですよね、普通は。。 まあ今回は普通じゃなかったんです。リダイレクト直前にちょ…

削除したActiveStorageへのアクセスは404にしたい

画像の更新などによりActiveStorageのBlobが削除されたにもかかわらず、URLがキャッシュされていたなどの理由により削除された画像にアクセスが来た場合、下記エラーが報告される。 ActiveRecord::RecordNotFoundactive_storage/blobs#show Couldn't find Ac…

ActiveStorageの画像ファイルなどを、アンカー要素のdownload属性でダウンロードさせたい

ActiveStorageのservice_urlのdispositionオプションがデフォルトで:inlineなため、画像やpdfのアンカーにdownload属性をつけていても、ブラウザ上で開いてしまう。 これをダウンロードさせたい。 環境 Service Version Ruby 2.7.2 Ruby on Rails 6.0.3.4 S3…

送信サーバーと同一ドメインの受信サーバー宛にメールが送信できない

送信サーバーは Amazon Lightsail 、受信サーバーはムームーメールという環境でlLightsailからメール送信ができなくなった。 元々AWSのメール送信制限に引っかかりメールが送信できなくなっており、その調査で /etc/postfix/main.cf はいじっていたのでその…

FPDIでPDF1.5以降の圧縮されたファイルを何とかしたい

FPDIで色々していたら This PDF document probably uses a compression technique which is not supported by the free parser shipped with FPDI.というエラーが。 どうやらPDF1.5以降の圧縮されたPDFの回答は無償版のFPDIではできないとのこと。 んじゃラ…

PHPでコマンド実行しようとしたら日本語が消失した

PHP

PHPでコマンドを実行する時はOSコマンドインジェクション対策としてescapeshellcmdやescapeshellargなどでエスケープすることが多いと思うが、その際にマルチバイト文字が含まれているとマルチバイト文字が空文字に変換されてしまって困った。 環境 Service …

Safariでは206 Partial Contentに対応していないとVideoタグでmp4が再生できない

S3に保存されたmp4動画をPHPを経由して配信していたのだが、iOS/MacのSafariだと再生できない事が判明した。 原因はVideoタグなどのリソースはRangeヘッダーを付けてリクエストが投げられるのだが、ここで正しく206 Partial Contentを返してあげないとSafari…

無停止でCentOS7 on EC2のEBSストレージを拡張する

遅ればせながら今回の案件で初めてEC2を触ることに。 そこでまずはステージング環境を作ろうとごにょごにょしてたら、ディスクを8GiBで作成してしましました。 ステージング環境とはいえもう少し欲しかったのでディスクを拡張しようとしたらAWSではなんと無…

Laravel6でMinIOを使う

Laravelではドキュメント通りに必要なパッケージをインストールすればS3はすぐに使うことができるようになる。 ただ開発環境はMinIOで代用したい場合などは、少し工夫が必要となる。 というのもバケット指定方法が違うのだ。 ということで config/filesystem…

S3互換のMinIOをCentOS7にインストールする

S3を使ったサービスを開発したいが、開発中は課金が発生してほしくない。 そんなわがままなあなたにMinIOが答えてくれるだろう。 今回はこのMinIOをCentOS7にインストールし、起動スクリプトを書くまでを記す。 ユーザーの追加 $ sudo useradd minio -s /sbi…

Can't resolve 'fs'

browser向けjsの環境構築中、環境によって変えたい値を.envで管理したいという事でdotenv-webpackをインストールしたのだが、bundle作成時にエラーが出てつまったので共有をしておく。 環境 Package Ver webpack 4.41.0 webpack-cli 3.3.9 webpack-dev-serve…

npm runに引数を渡そうとしてはまった話

npm run script にコマンドライン上でオプションを付ける方法が分からず20分くらいはまり、腹が立ったので今後のために残しておく。 経緯 とあるプロジェクトをcloneしてきてwebpack-dev-serverを立てようとしたとき、webpack.config.jsにデフォルトで記述さ…

ムームーメールから送信したメールが迷惑メールに振り分けられる

ムームードメインとムームーメールを使っていると、ムームーメールからの送信メールで Received-SPF: softfail になっていた。 という事でDNSにspf設定を追加してあげる。 DNSにSPF設定追加 ムームードメインのコントロールパネルからムームーDNSを選択し、…

CentOS7にFFMpeg4をインストールする

CentOS7にFFMpeg4をインストールする記事はちょこちょこあるものの、上手く入らないことが多いのでちゃんと入った方法を残しておく。 環境 Service Version CentOS 7.5 リポジトリの追加 2020.09.08 リポジトリがSSL対応したようなので修正 $ yum-config-man…

ソースインストールのPHPにImageMagickをインストールする

php

インストール 必要なパッケージをインストールしてimagickをインストール $ sudo yum install autoconf ImageMagick ImageMagick-devel $ cd /usr/local/php/current/bin $ sudo ./pecl install imagick php.iniに追記 /usr/local/php/current/lib/php.ini e…

Laravel mixのVue.jsをTypeScriptにしていく

はじめに Node.js案件でTypeScriptを使ったところ便利すぎてほれ込んだので、Laravel mixで使っていたvueもTypeScript化していく事に。 とはいえ新規案件ならともかく既にある程度の大きさになっているので少しずつTypeScript化していく。 前提 Service Ver …

さくらVPSで建てたApache2.4にに外部から接続が出来なかった件

はじめに WEBサーバーとして利用していたさくらVPSのサーバーのOSをクリーンインストールしてCentOS7を入れることに。 さくさくっとサービスを立てていき、いざ外部から接続テストをしてみると繋がらない。 今まで何度もさくらVPSでWEBサーバーは立てている…

Muninのログファイルが肥大化

Muninを眺めているとディスクの使用量が一カ月で50%を超える緊急事態に。 放置していれば来月にはディスクがパンパンで動かなくなるので調べてみたらMuninのログファイルがやったら目ったら大きい。。。 Munin見て気付いた結果「原因お前かよ!」といったお…

ソースインストールのApacheにモジュールを追加する

今回はwebsocketのリバースプロキシとしてApacheを使いたかったので、mod_proxy_wstunnel をインストールする。 mod_soの確認 Apacheに後からモジュールを追加するためのモジュールが存在するかを確認する。 入っていない場合はApacheを再インストールする必…

CentOS7にDKIM設定をして迷惑メール対策

初めに {} 内は適宜環境に合わせて読み替えてください。 環境 CentOS7.6 + Postfix 2.10.1 OpenDKIMのインストール $ yum install --enablerepo=epel opendkim 暗号化キーの作成 $ mkdir /etc/opendkim/keys/{DOMAINNAME.com} $ opendkim-genkey -D /etc/ope…