Amazon Linux 上に LAMP 環境を構築してみたメモ

初めましての Amazon LinuxLAMP 環境を作ってみました。

オフィシャルのユーザガイドを見ながら進めたら良さそうです。

docs.aws.amazon.com

実行環境

作った環境

作業メモ

調べたこと

Repository として amzn-main と amzn-updates が設定されている。

$ yum repolist all
読み込んだプラグイン:priorities, update-motd, upgrade-helper
リポジトリー ID               リポジトリー名                                    状態
!amzn-main/latest             amzn-main-Base                                    有効: 5,934
amzn-main-debuginfo/latest    amzn-main-debuginfo                               無効
amzn-main-source/latest       amzn-main-source                                  無効
amzn-nosrc/latest             amzn-nosrc-Base                                   無効
amzn-preview/latest           amzn-preview-Base                                 無効
amzn-preview-debuginfo/latest amzn-preview-debuginfo                            無効
amzn-preview-source/latest    amzn-preview-source                               無効
!amzn-updates/latest          amzn-updates-Base                                 有効: 2,454
amzn-updates-debuginfo/latest amzn-updates-debuginfo                            無効
amzn-updates-source/latest    amzn-updates-source                               無効
epel/x86_64                   Extra Packages for Enterprise Linux 6 - x86_64    無効
epel-debuginfo/x86_64         Extra Packages for Enterprise Linux 6 - x86_64 -  無効
epel-source/x86_64            Extra Packages for Enterprise Linux 6 - x86_64 -  無効
epel-testing/x86_64           Extra Packages for Enterprise Linux 6 - Testing - 無効
epel-testing-debuginfo/x86_64 Extra Packages for Enterprise Linux 6 - Testing - 無効
epel-testing-source/x86_64    Extra Packages for Enterprise Linux 6 - Testing - 無効
repolist: 8,388

なので、何も考えずに PHP 7.3 を入れられる。

$ yum --showduplicates search php73
読み込んだプラグイン:priorities, update-motd, upgrade-helper
================================================== N/S matched: php73 ===================================================
php73-7.3.2-1.13.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-7.3.4-1.14.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-7.3.5-1.15.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-7.3.5-1.15.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-bcmath-7.3.2-1.13.amzn1.x86_64 : A module for PHP applications for using the bcmath library
php73-bcmath-7.3.4-1.14.amzn1.x86_64 : A module for PHP applications for using the bcmath library
php73-bcmath-7.3.5-1.15.amzn1.x86_64 : A module for PHP applications for using the bcmath library
:

最初はそんなこと知らなくて、Remi's RPM repository を入れたりして手間取ってました。ぎゃあ。

構築

ユーザガイドの内容(MySQL5.6+PHP7.0だった)を MySQL 5.7 + PHP7.3 に置き換えただけなので面白みはないです。

Laravel を動かす想定で、いくつかモジュールを追加しておきます。

docs.aws.amazon.com

sudo yum update -y

# Apache, MySQL, PHP のインストール
sudo yum install -y httpd24 mysql57-server php73 php73-mysqlnd php73-json php73-mbstring php73-pdo php73-xml php73-opcache

# /var/www 以下を ec2-user ユーザが操作できるようにする
sudo usermod -a -G apache ec2-user
sudo chown -R ec2-user:apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

# httpd の起動
sudo service httpd start
sudo chkconfig httpd on

# mysqld の起動
sudo service mysqld start
sudo chkconfig mysqld on

# mysql の設定
sudo mysql_secure_installation

メモリ512MBのインスタンスだと composer install などを実行したときにメモリが足りなくなることがあるので、swap領域を作っておきます。 こちらが参考になります。

aws.amazon.com

# スワップファイルの作成
# 512MBのインスタンスなので、推奨値に沿って1GBを作成
# 実メモリ以上のサイズは1度に作成できないので、128MB * 8 に分割して作成する
sudo dd if=/dev/zero of=/swapfile bs=128M count=8

# スワップ領域の作成と追加
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# スワップ領域が追加されたことを確認
swapon -s

# 起動時にスワップ領域が有効になるように
sudo sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab"

あとは、composer をインストールしたり、 composer create-project したり、Apacheの設定を見直したり、MySQLに一般ユーザを追加などしたらよさそうです。

所感

  • CentOS6ベーズなAmazonLinuxでも Repository が設定されているので、サクッと構築できて幸せ
  • nginx でも試したい。
  • インスタンス立ち上げてから構築完了まで10分ぐらいでできちゃうので、初めてのサーバ構築の勉強とかに向いているかも。
    • yumで何でも入れられるそんな環境どこにでもあると思ったら大間違いと言われそうだけど、Repository追加したりソースビルドするのが目的ではないのでいいんじゃないかと。
  • AWS CLI と組み合わせてワンライナーでほぼ構築までできそう。
  • Lightsail でも Amazon Linux2 が使えるようになるといいなー。

Amazon Lightsail に GitLab Runner をワンライナーで構築する

はじめに

gitlab.com で CI/CD の検証をしているとき、SharedRunner が混雑していて待たされるときがあります。

Amazon Lightsail に GitLab Runner のインスタンスを立てて、自分のプロジェクトで使えるようにしてみました。

手順

以下のコマンドを実行します。

aws lightsail create-instances \
  --instance-names runner \
  --blueprint-id ubuntu_18_04 \
  --bundle-id nano_2_0 \
  --region ap-northeast-1 \
  --availability-zone ap-northeast-1a \
  --user-data 'curl -L https://get.docker.com | bash && \
      curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash && \
      apt-get install -y -qq gitlab-runner && \
      gitlab-runner register \
      --non-interactive \
      --url "https://gitlab.com/" \
      --registration-token "XXXXXXXXXX" \
      --name "lightsail" \
      --executor "docker" \
      --docker-image "alpine:latest" \
      --tag-list "lightsail" \
      --run-untagged \
      --locked="false" '

--user-data には、インスタンス作成時に実行するコマンドを指定できます。ここでは次の内容を指定しています。

  • docker のインストール
  • gitlab-runner のインストール
  • gitlan-runner を gitlab.com に登録

作成する Lightsail インスタンスのスペックや、gitlab-runner の登録内容は適宜変えてよいでしょう。

5分ほど待つと、自分のプロジェクトで使えるようになります。

f:id:u9bo:20190706153104p:plain:w500

起動しない場合は、作成した Lightsail インスタンスSSH接続し、次の場所のログを確認します。

/var/log/cloud-init-output.log

なお、 --user-data に指定したスクリプトはすべてroot権限で実行されます。そのため sudo をつける必要はありません。

参考文献

GitLab Runner を Docker Machine の Generic ドライバを使って構築する

はじめに

GitLab Runner を使った CI/CD を行っています。 GitLab Runner を実行するサーバには、現在はクラウドサービスを利用せず、オンプレミスサーバ(という名の余っているPC)を使っています。

GitLab Runner を稼働させる物理PCを増やせば一度に実行できるジョブを増やせるのですが、増設作業と管理が面倒だなーと思っていました。 具体的には GitLab Runner を増設するときには、1台ごとに次の作業を行っています。

  1. サーバOSのセットアップ
  2. Docker のインストール
  3. GitLab Runner のインストール
  4. GitLab に GitLab Runner を登録する
  5. GitLab Runner の設定を調整する

一回セットアップしてしまえば、あとはほぼ安定して稼働してくれるのですが、GitLab Runner の設定値を変更したい場合には、各サーバで作業しなくてはならず煩わしく感じていました。

これらの問題に対して、GitLab Runner では Autoscaling GitLab Runner という機能を提供しています。 これを使うと必要なリソースに応じて EC2 や Kubernetes 上に用意したリソースを割り当てることができます。

今回は、オンプレ(という名の余っているPC)で気軽に増設と管理がしたかったので、Docker Machine の Generic ドライバで管理しているリモートの Docker Engine に対して GitLab Runner を設定してみます。

検証環境

次の3台のサーバを用意しました。 GitLab Runner と Docker Machine をインストールした master サーバと、Docker Engine をインストールした node サーバ2台を用意しました。

f:id:u9bo:20190331201316p:plain:w300

Docker Machine の generic ドライバを利用して、Docker Machine をインストールした master サーバから、node サーバ2台を操作します。

http://docs.docker.jp/machine/drivers/generic.html

  • GitLab Runner サーバ(ホスト名: master)
    • Ubuntu Server 18.04 LTS
    • GitLab Runner
    • Docker Engine
    • Docker Machine
  • Docker Engine サーバ(ホスト名: node1, node2)
    • Ubuntu Server 18.04 LTS
    • Docker Engine
続きを読む

冬休みと秋葉原

ただの日記です。 冬休みなのでお仕事から離れてひさびさに好きなことを思う存分やったらリフレッシュできました。

第2回 98祭

ビンテージPCが好きです。 とくに、30年前〜20年前ほど前に一世を風靡したNECのPC-98x1シリーズが大変好きです。 何が好きなのかは語ると長くなるので割愛しますが、おおよそ日本独自の設計起動音が好きです。 収集欲と改造欲がすさまじいのですが、実用性は全くないので最近は我慢しておりました。

そんななか秋葉原で「第2回 98祭」が開催されておりましたので行きました。

akiba-pc.watch.impress.co.jp

往年の大スターが集結していて大変に感動したのと、好きな機種(そして持ってない)があったのと、非常に良心的なプライス(英世2枚)だったので ついうっかり買ってしまいそうになったのですが、家族から確実に怒られるので買いませんでした。独身じゃない抑止力ってすごいです。

あ、ただ、100円でこれまた古いMacintosh用のソフトをいくつか買いました。ですが、帰省の時に持って帰るのを忘れたのでまだ遊んでいません。

テレビを録画するPC

自宅にはBD/HDDレコーダがあるのですが、最近は不思議な力で録画予約の権利と空容量を取られてしまうので別の環境で録画することにしました。 新しいレコーダとかnasneとかも考えたのですが、勉強もかねてPCで録画することにしました。

いまのデスクトップPC(の体をしたサーバマシン)で録画できるようにしようかなと思ったのですが、録画中に再起動できないのも嫌な気がして別のPCを用意することにしました。 といってもそこまで予算がないので秋葉原でいろいろ見繕って、Haswell世代(第4世代)の中古PCとKabylake世代(第7世代)のアウトレットPCで悩みました(ここ楽しいお時間)

HaswellだとCore i5、KabylakeだとCeleronで、ここはHaswellでしょ感が強かったのですが、今更2014年代のPCを買うのもどんなもんだと思って、 2017年製のKabylakeなCeleronマシンにしました。CPUがIntel Quick Sync Video(QSV) に対応していると、非力なCeleronでもエンコードがそこそこ高速というのも決め手でした。

スペックはこんな感じになりました。諭吉2枚でおつりが来ました。

  • Intel Celeron G3930 (2M Cache, 2.90GHz, 2Core)
  • 4GB DDR4-2400
  • 1TB HDD
  • OSなし

全体的にもっさり感は否めないのですが、まあ録画ができれば良いので不満が出てきたら手を入れればいいやーと思っています。 OSなしモデルだったので、Linuxにしてみよっかなーとも思ったのですが、Windows 8.1が余っていたのでそれを入れました。インストール後にWindows 10 のインストーラを起動してみたら何事もなかったかのように10にアップグレードできました。

あと一緒に録画用のボードなども買ったのですがこちらは至って普通なので割愛。

結論:ゆるふわに楽しんだ!

Windows ノート PC を買うときに確認したいこと

ひさびさに、Windows の ノート PC を見繕う機会があったので、よく確認する項目と意外と忘れそうな項目の備忘録。

一般的なご家庭で5年くらいは戦えそうな要件をベースで。

よく確認する項目

  • CPU
    • Core i3 以上(まあでも i5 は欲しいよね)
  • 主記憶
    • 4 GB 以上(まあでも 8 GB は欲しいよね)
    • 増設できるタイプか、オンボード
  • 補助記憶
    • SSD 128 GB 以上(まあでも256 GB は欲しいよね)
    • SATA か M.2 か
  • ディスプレイのサイズ
    • お好み
  • ディスプレイの解像度
    • Full HD(1920×1080)は欲しいな・・・
    • HD(1366x768)だと Excel とか左右並べたエディタが辛い
  • Microsoft Office の有無
    • Personal だと PowerPoint は付属しない
    • Home and Business だと付属
    • 学生の場合は、Office 365 Education で無償で使えたりするよ

まあ、忘れる項目

もろもろ

  • 重量
    • 2 kg 以上は辛い
  • バッテリーでの稼働時間
    • お好みで。

OS

Home でできないこと

比較表:https://www.microsoft.com/ja-jp/windows/compare

がいらなければ、Home でもよさそう。

キーボード

  • Enter キーの右側に function キーがあってもよいか(重要
    • HP はよくついている・・・
    • 「しゅたたた、たーん」って Enter キーを押したつもりが、PageUpキー を押していたりする
    • 法人モデルだと選べたりする
  • 左側の ctrl キーと fn キー の並び(重要
    • 左端が fn なのは、NECLenovoPanasonic
    • 左端が ctrl なのは、富士通Dell
    • 慣れるまでしんどいので、気にしたいポイント
    • だけど、左側の fn と ctrlキーは、大抵の場合 BIOS で入れ替えられる。無理ならレジストリからでも書き換えられる。
  • カーソルキーの←→の上に PageUp / PageDown がついていてもよいか(重要
    • Latitude / ThinkPad はついている
  • 半角/全角キーの位置
    • Let's note は ESC の右側に合ったりする・・・

液晶のタイプ

  • グレア(光沢)かノングレア(マット)か
  • パネルタイプは、IPS > VA > TN の順で高級。大抵は、TNパネル・・・だよね。
  • 200 dpi以上(Macでいうとこの Retina)か否か

この辺買ったらいいんじゃなーいんって、よく良く思う PC

エンジニアが嫌になったら情シスになりたいって密かに思ってるよ(だってPCばらしたいしOSの初期設定好きなんだもん)

Mac の JIS キーボードでバックスラッシュ \ を入力したい

はじめに

最近の Mac の JIS キーボードでバックスラッシュ \ を入力するためには option + ¥ を押す必要がありました。PHPStorm 使いの僕、ああしんどい。

これまでこれを実現するには、 Karabiner-Elements で Complex Modifications 用の設定ファイルを書かないといけないようでした。

結論

  1. Karabiner-Elements をインストール
  2. https://pqrs.org/osx/karabiner/complex_modifications/#swap_yen_and_backslash_jis で設定ファイルを import
  3. Karabiner-Elements で Complex Modifications の「Change ¥ to Alt+¥」と「Change Alt+¥ to ¥」をEnable にする

以上!幸せ!

過程

ここを読んで、ああ自分で設定ファイルつくらないとなのね。と察しました。

github.com

いろいろ見ていったら、設定ファイルのプルリクがでておりました。 20時間前・・・

github.com

大変助かりました、、、ありがとうございます。

Dialogflow で LINE BOT を作ってみました

はじめに

DialogflowGoogle が提供する Google Assistant のアプリを作れるツール。

Webhookを使った初めてのアシスタント向けアプリ - ビットコイン情報

こちらのチュートリアルを参考に作ってみたのですが,コーディングなしに簡単にできてしまって, ことばのチューニングもできてしまって・・・と,感動してしました。

このチュートリアルで作成したアプリを拡張して,
今回は,Dialogflow の連携機能のひとつである,Line Messaging API との連携をやってみました。

やったこと

Dialogflow の連携機能について

なんだか気になる項目が沢山あります・・・

f:id:u9bo:20180321131503p:plain

今回は LINE を試してみました。

Line Messaging API (Channel)の登録

https://developers.line.me/console/register/messaging-api/provider/ から登録します。
困ったら,こちらのガイド( Messaging APIを利用するには )が参考になりそうです。

特筆すべき点として,

  • プロバイダー名を変更したい場合は,別途プロバイダーを作成する
  • プランは,Developer Trial を選択

あたりでしょうか。サクサク進めていくと Channel の登録が完了します。

Channel の設定

メッセージ送受信設定

  • アクセストークン(ロングターム)を発行
  • Webhook送信:利用する
  • WebhookURL:※後で設定します

LINE@機能の利用

  • 自動応答メッセージ:利用しない

LINEアプリへのQRコード

設定が終わったら,LINEで友達になっておきましょう。

Dialogflow との連携

Dialogflow に 先ほど作成した Channel の情報を登録していきます。
入力する値は以下のとおりです。

  • Channel ID : 基本情報の Channel ID
  • Channel Secret : 基本情報の Channel Secret
  • Channel Access Token : メッセージ送受信設定のアクセストークン(ロングターム)

f:id:u9bo:20180321140633p:plain

入力が終わったら,Webhook URL をコピーして,メッセージ送受信設定→ WebhookURL に入力します。

f:id:u9bo:20180321140715p:plain

最後に Dialogflow で START ボタンをクリックして,BOTを有効にします。

動作確認

Channel の メッセージ送受信設定→ WebhookURL で接続確認をクリックしてみましょう。成功しましたと表示されたらOKです。

実際に動かしてみた

動かしてみました。いい感じ。