とーますメモ

Ruby on Rails / Goなどの学習メモ

【Rbenv】Ubuntu18.04上で、Ruby 2.3.1がインストールできない

以下のコマンドでエラーが発生 $ rbenv install 2.3.1 ... ... /usr/include/openssl/x509.h:728:1: note: declared here DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) ^ Makefile:301: recipe for target 'ossl_x509crl.o' fail…

Vagrant × AnsibleでUbuntu18.04環境を設定してみる - Webサーバ編 -

全体像は、Webサーバ1台、DBサーバ1台をVagrantで設定し、Ansibleでそれぞれのサーバに設定を行う。 インストール 簡単な流れは 1)VirtualBoxをインストール 2)Vagrantをインストール 3)Vagrantfileを編集1)と2)については以下の記事のとおりに設…

【Ansible】defaultsとvarsの違いって?使い分ける方法を調べた

vars/main.ymlにも変数が書けることは知っていたが、Ansibleを使い始めてから、ずっとdefaults/main.ymlを使用していた。 ただどのように使い分けるのかは知らないのでいたので、調べた内容をこの記事にまとめてみた。色調べた結果、以下のサイトの説明が良…

ムームードメインからNamecheapにドメイン移管してみた。

現在、使用しているレジストラはムームードメインなのだが、できればSSL証明書取得も同じアカウントで管理したり、TTL設定などの細かい設定もしたかったので 経験がてら、ドメイン移管を初めてやってみることにした。 どのレジストラに移管するか? レジスト…

【Lightsail × WordPress】メール配信サービスのAmazon SESを使ってみた

基本的には以下のサイトの通りに設定すればOKだが、所々わかりにくい箇所があるので、自分なりにまとめる。 Amazon Lightsail の WordPress で E メール を有効にする | Lightsail ドキュメントちなみにWordPressは既にインストール済みであることと、SMTP設…

【Ubuntu】ユーザ管理の方法について、ちゃんと調べてみた

Linux上でユーザやグループを追加したり、権限を付与する方法については知っているが、プロダクション環境などのシビアな環境でのユーザ管理法についても学んで起きたいと思ったのでここに調べた内容を書き起こす。 ユーザ追加 ユーザ追加するコマンドは以下…

【PHP】エラーログが出たら、Slackに通知を送る設定

SwatchやLogwatchなんかを使うのが定番っぽいが Swatchは監視対象が複数ある場合は、複数のプロセスが常時立ち上がるのと 長い間更新されていないのが不安だったので断念。 Logwatchの場合は、別にこれでも良かったが、Postfixがデフォルトでインストールさ…

【PHP-FPM】適切なプロセス設定について

色んなサイトを見て知ったことは、適切な設定を行うためにはまず以下のことを知る必要があるということ。・使用可能なメモリ量 ・PHPプロセスが確保している平均メモリ量上記の内容を把握したのち、その内容をベースに以下の値を適切な値に設定する。・pm.ma…

【ApacheBench】使い方メモ

テスト対象のサーバにもインストールできるが、 テスト時はテスト対象とは別のホストから負荷テストを行う。 abはApacheに同梱されてはいますが、性能テストを実行する際には、測定対象のサーバの外部にあるホストからリモートで実行します。ローカルから実…

【Netdata】Ubuntu 18.04上にインストールした時のメモ

Netdata = リアルタイムリソース監視ツール何が良いかって、リアルタイムの状況がわかるっていうことと 閾値や頻度を適宜設定できるアラート機能が便利。Netdataの画面を開くとたくさんのセクションがあるが 大事なことはこのセクション毎の説明をしっかり読…

【fail2ban】WordPress用の独自フィルタ作成

以下のログに対応したものを作成する。・wp-login.phpに対してPOSTをリクエストを送っているもの※ 管理者のみがwp-login.phpするものなら良いが、不特定多数(woocommerceなど)が利用する場合は wpのフィルター機能と連携して作成するのが良いと思う。 fail…

【fail2ban】基本的な使い方

概要 Fail2banは、誤解を恐れずに言うと1)様々な種類のログファイルを監視して、 2)特定のパターンにマッチしたログ情報(主にアクセス元IP)を元に 3)アクション(主にiptablesで接続拒否)を行うためのツール。2)の特定のパターンにマッチさせる設…

【Nginx】OCSP Staplingについて

Nginxのエラーログを見てたら「OCSP_basic_verify() failed・・・」というエラーが出ていたので調べてみた。OCSP Staplingとは何か?の説明については以下のサイトの説明がわかりやすい。 OCSP Stapling nginx で OCSP Stapling (RapidSSL) | | 1Q77 How To …

【fail2ban】Ubuntu 18.04上で単純なsshdフィルターのみ使用しているのに、IPがbanされない現象

結論から言うとbackendに、pollingを指定していたのが原因だった。 ちなみにFail2banのバージョンは「v0.10.2」 backend: 対象のログについての指定。 auto, pyinotify, gamin, systemd, pollingの5つから選択可能。 systemdを選択すると、systemdのjournal…

Amazon LightsailでSSL設定をするときに注意すべき点

かなりハマった。 Amazon Lightsailには簡易ファイヤーウォールがあり、デフォルトだと22番と80番しか空いてないため ufwなどで443を開けてしまっていても、この簡易ファイヤーウォールのせいで、443が遮断されてしまう。注意してほしい。

【Chrome】httpのアドレスを入力してるのに、強制的にhttpsでリクエストされてしまう現象を止める方法

以下参考 How to stop an automatic redirect from “http://” to “https://” in Chrome - Super Userchrome://net-internals/#hstsを開いて、 「Delete domain security policies」の項目に、対象のURLを入力して、Deleteボタンを押せば強制的にhttpsリクエ…

【Ansible】Ubuntu 18.04でのMySQL設定

MySQLの設定ファイルであるmy.cnfの場所の確認方法 $ mysql --help | grep my.cnf /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 左から順に読み込まれる。 Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.c…

【Ansible】Githubのプライベート・リポジトリからGit cloneができない!!!

結論から言うと以下の流れで解決。1)ssh-agentの設定 2)ansible.cfgの設定 3)ansible taskの設定 1) ssh-agentの設定 以下のサイトにまとまっているので、そのとおりに対応。 qiita.comこの設定を行うことで、ssh接続時のパスフレーズ入力を省略する…

【Ansible】Nginx + Gunicornの設定

Nginx + Gunicorn + Flaskの環境構築を行った際のメモ。流れは、Client => Nginx => Gunicorn => FlaskNginxとGunicornの接続については以下のサイトが参考になった。 Nginx + Gunicorn + Django + Aurora (MySQL) の本番環境をAnsible Playbookで構成する -…

【Git】中身だけをcloneする方法

以下のように「.」を追記するだけ。 $ git clone [git_url] . ただし、git cloneを行うディレクトリは「空」である必要がある。

【SSH】VPS上でGithubからPullするときの設定

CI/CDの設定とかは、とりあえず忘れて単純にGithubにSSH経由で接続して、リポジトリをPullするまでの設定 ちなみに以下の環境があり、ローカルでの秘密鍵(id_rsa)と公開鍵(id_rsa.pub)がある前提。[開発マシン(Mac)] [本番サーバ] [Github]いろんなサイトを…

【Flask】HTTPS環境で、Ajaxを使用するページを開いたら、エラーが出た。

件名の通り、以下のようなエラーが出た The page at 'URL' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'URL'. This request has been blocked; the content must be served over HTTPS.原因はスラッシュ漏れ。FlaskもDjango…

【MySQL】SQLAlchemy内でMySQLの全文検索を試めしてみた

MySQLの設定は以下を参考 thoames.hatenadiary.jp 検索対象のインデックスがつけられる単語の最小長と最大長の設定 InnoDBなら「innodb_ft_min_token_size」、MyISAMなら「ft_min_word_len」で最小長を設定 InnoDBなら「innodb_ft_max_token_size」、MyISAM…

【Ruby】MacでRailsが突然動かなくなった話

原因が何だったのか定かではないが、 恐らくXcode関係かbrew関係のコマンドを弄ったかが原因で Railsを起動しようとしたところ以下のようなエラーが表示された。 $ bundle exec rails s ... LoadError - library not found for class Digest::SHA1 -- digest…

【Ruby】Rubyバージョンが影響して、小数点計算が合わなくなることがある

以下の記事を見るとどうやらrubyのバージョンが2.4未満だとround関数が正しい値を返さないことがあるらしい。 irb(main):001:0> 1024.975.round(2) => 1024.97 irb(main):002:0> 1023.975.round(2) => 1023.98 Ruby - roundで四捨五入にならない場合の理由を…

【Rails】Quickbooks Web Connector(QBWC)を使って、RailsとQuickBooks Desktopを接続してみた

中小企業会計ソフトの分野で、日本ではfreeeやマネーフォワードが普及しているが 海外ではQuickbooksが広く普及している。 このQuickbooks内に外部からデータをRailsアプリ経由で追加することで入力作業を省き、業務効率を上げようという話になった。前提と…

【Python】Flaskの本番環境について調べてみた

Flaskにはbuilt-inサーバがついているので、開発には全く困らないが 公式サイトを見ると以下のように記述があるので、本番環境は別に構築する必要がある。 While lightweight and easy to use, Flask’s built-in server is not suitable for production as i…

【Vue.js】v-forの配列を削除すると、最後の行が消される問題

v-forで配列内をループで回して、表示させており その中で以下のように、削除を行う機能を実装したのだが 削除すると選択した行が消されず、最後の行が消されるという変な現象が発生した。[HTML] <tbody> <tr is="sample-component" v-for="(item, index) in items" v-bind:index="index" v-bind:item="item" :key="index" v-on:remove="remove_item" ></tr> </tbody> [JS] this.items.splice(index, 1);原因を調べてみると…

【Vue.js】v-forの配列を削除すると、最後の行が消される問題

v-forで配列内をループで回して、表示させており その中で以下のように、削除を行う機能を実装したのだが 削除すると選択した行が消されず、最後の行が消されるという変な現象が発生した。[HTML] <tbody> <tr is="sample-component" v-for="(item, index) in items" v-bind:index="index" v-bind:item="item" :key="index" v-on:remove="remove_item" ></tr> </tbody> [JS] this.items.splice(index, 1);原因を調べてみると…

【Vue.js】v-forの配列を削除すると、最後だけが消されていく問題

v-forで配列内をループで回して、表示させており その中で以下のように、削除を行う機能を実装したのだが 削除すると選択した行が消されず、最後の行が消されるという変な現象が発生した。[HTML] <tbody> <tr is="sample-component" v-for="(item, index) in items" v-bind:index="index" v-bind:item="item" :key="index" v-on:remove="remove_item" ></tr> </tbody> [JS] this.items.splice(index, 1);原因を調べてみると…