2017年3月9日木曜日
Cisco NexusスイッチにおいてLACPでLAGを組む際のTips
データセンター向けスイッチのCisco Nexusスイッチシリーズ。
標準化されているリンクアグリケーション方式として、LACPを採用する場合、以下の仕様があるので注意。
LAGのチャネルから外れたリンクはIndividual状態となり、通信が可能となる。
Down状態から復旧した際に、LinkUP後~チャネルメンバーに参加してLAGを構成するまでの間、
一次的に、Loop構成になる。
Loop構成になると予期せぬ事象や、通信断が発生するため、以下の設定が必要。
Port-channelのinterfaceに対して
# lacp suspend-individual
上記の設定により、Port-Channelから外れたLinkはIndividual状態ではなく、suspend状態になる。
suspend状態はトラフィックの転送を不可の状態にし、Loop構成となることを防ぐ。
LinkUpと同時にLAGのメンバーに参加する。
Nexusシリーズの最近のOSだとほぼデフォルト実装。
EOSLレベルの昔のOSだと機能自体が無かったりするので、要注意。
デフォルト実装しているスイッチは、show run上では表示されない為、show run all等で確認する。
2017年3月8日水曜日
Laravel 5.4+MariaDBでログイン実装
過去の記事でLaravel環境のセットアップをしました(参照: http://kusanokai.blogspot.jp/2017/03/laradocklaravel_5.html)。
今回は、Laravelを用いたログインの実装について進めたいと思います。
ほぼ、コードを書かずにユーザ登録、ログイン、パスワードリセットができてしまいました・・。
とても便利ですね。
最近だと、クライアントサイドはJavascriptに任せて、サーバ側はAPIを提供するのみ、となっているパターンも多いので、次回はAPIの使用を検討してみたいと思います。
今回は、Laravelを用いたログインの実装について進めたいと思います。
[環境]
- PHP 7.0.9
- Laravel 5.4.15
- MariaDB 10.1.21
[手順]
- 新規Laravelプロジェクトの作成(「logintest」という名前で作成しています)
- DBの準備 使用するDBについて準備しておきます。
- LaravelプロジェクトのDB設定 Laravelプロジェクト、.envファイルのDB設定を変更しておきます。
- migrateファイルの確認 Laravelでは、新しくプロジェクトを作成した時点でユーザ用のmigrateファイルができています。
- 試しにmigrate migrateファイルからmigrateを実行するには、下記のコマンドを実行します。
- AppServiceProvider.phpに設定追加 対策としては、「./app/Providers/AppServiceProvider.php」に設定を追加します。
- 再度migrate いけるはず。
- Laravelのmake:auth機能でログイン機能の作成 Laravel 5.2からはmake:authってのが使えるようなので、それ使います。
- Routeの確認 なにやらいっぱいRouteができてるのが確認できます。
- 試しにログイン http://localhost/registerへアクセスすると・・・、ユーザ作成が可能です。
$ composer create-project laravel/laravel logintest
laradockでデフォルトで環境構築した場合は、rootユーザ(パスワード:root)、
もしくは、homestead(パスワード:secret)が使えます。
laradockでmariadbを構築した場合は、まずmariadbコンテナに入ります。
$ docker exec -it laradock_mariadb_1 /bin/bash
mariadbへログイン。
# mysql -h localhost -uroot -proot
ログイン後、適当にDBを作成します。
MariaDB [(none)]> CREATE DATABASE logintest;
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=logintest
DB_USERNAME=root
DB_PASSWORD=root
laradockで環境を作った場合は、DB_HOSTをmariadbにしておきます。DB_USERNAMEとDB_PASSWORDは2で使用したユーザ/パスワードを使用。
・./database/migrations/2014_10_12_000000_create_users_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
・./database/migrations/2014_10_12_100000_create_password_resets_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token')->index();
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
ユーザやパスワードリセットの設定が入っています。とりあえず、このまま使うことにして、DBに反映させてみます。
(laradockで環境構築した場合は、workspaceコンテナから実行)
# php artisan migrate
結果、エラー。。
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key
length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key
length is 767 bytes
Laravel5.4から絵文字対応でutf8mb4サポートしたことで、mariaDBか古いバージョンのMySQLで引っかかるらしいです。https://laravel-news.com/laravel-5-4-key-too-long-error
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
(以下省略)
(laradockで環境構築した場合は、workspaceコンテナから実行)
# php artisan make:auth
Authentication scaffolding generated successfully.
# php artisan route:list
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index | web,auth |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
実はこれでできています。ログイン画面に行って(http://localhost/login)、ログインID/パスワードを入力。
ログインできることが確認できます。
ほぼ、コードを書かずにユーザ登録、ログイン、パスワードリセットができてしまいました・・。
とても便利ですね。
最近だと、クライアントサイドはJavascriptに任せて、サーバ側はAPIを提供するのみ、となっているパターンも多いので、次回はAPIの使用を検討してみたいと思います。
2017年3月5日日曜日
LaradockでLaravel開発環境を整える
とある件で、Laravelを使った開発を行う機会があったので、開発環境を整備しました。
一応、OSX(Sierra)及びWindows 10 Proで検証済です。
[前提条件]
[手順]
とりあず、これでLaravelで開発できる環境ができました。
Dockerはあまり使ったことがなかったのですが、サクッと環境を共有できるのは良さそうです。
一応、OSX(Sierra)及びWindows 10 Proで検証済です。
[前提条件]
- git導入済
- Docker導入済
- ネット環境あり
[手順]
- 適当に作業用のフォルダを作成して移動。
- gitでlaradockをcloneして移動。
- docker-composeでとりあえず、workspaceを立ち上げる。
- workspaceの確認。
- workspaceへ入ってみる。
- workspaceからlaravelプロジェクトを作成してみる。プロジェクト名は適当にlaraveltestを指定しています。
- 一旦workspaceから抜け、docker-composeを停止。
- docker-compose.ymlの設定を一部変更する。 ・docker-compose.yml(変更後)
- Apache2およびmariadbを指定して、docker-composeの起動
- 接続確認として「http://localhost/」にアクセスしてみる。
$ mkdir work
$ cd work
$ git clone https://github.com/laradock/laradock
$ cd laradock
$ docker-compose up -d workspace
workspaceってなんじゃい、って感じですが、Composerで何かをインストールしたり、Laravelコマンドを実行したりする場合は、workspace環境から実行するようです。
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------
laradock_applications_1 /true Exit 0
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
問題なく立ち上がってそうです。
$ docker exec -it laradock_workspace_1 /bin/bash
root@1258840ba9fe:/var/www#
「-i」が対話型(interactive)、「-t」が擬似ttyに接続する、というオプションのようですが、雰囲気sshでログインするような感じです。
また、workspaceコンテナの「/var/www」のフォルダと1で作成した作業用のフォルダがリンクしていることがわかります。
root@1258840ba9fe:/var/www# composer create-project laravel/laravel laraveltest
workspaceコンテナの「/var/www」のフォルダと作業用のフォルダがリンクされているため、プロジェクトを作ると、1で作成した作業用フォルダからも参照できることが確認できます。ソースコード書くときは、普通にホストWindowsかホストMac側からプロジェクト内のソースコードを変更すれば、適用される感じ、ということですね。
root@1258840ba9fe:/var/www# exit
$ docker-compose stop
version: '2'
services:
### Applications Code Container #############################
applications:
image: tianon/true
volumes:
- ../laraveltest:/var/www
(以下略)
「- ../:/var/www」あたりの所を、「- ../laraveltest:/var/www」に変更します。(作成したプロジェクト名に応じて適宜変更してください。)
docker-compose up -d apache2 mariadb
そこそこ時間かかります。LaradockにはApache2やmariadb以外にも、nginxであったりMySQL等色々なイメージが含まれているので、必要に応じて指定してください。
とりあず、これでLaravelで開発できる環境ができました。
Dockerはあまり使ったことがなかったのですが、サクッと環境を共有できるのは良さそうです。
2017年1月24日火曜日
コミュニケーションツールのSlackを使ってみよう!
開発チームでのコミュニケーションツールとして、「Slack」をご紹介します。
既に多くの人が利用している、もしくは知っているかもしれませんが、
まだ知らない人、これから開発を始める人、等に向けた記事です。
使っていて特にメリットと感じる部分を3つご紹介します。
①開発でよく使われる他ツールとの連携が充実。
②コードをそのままスニペットとして投稿できる。
③マルチデバイスに対応。
それぞれ一つ一つ、簡単に説明していきます。
①開発でよく使われる他ツールとの連携が充実。
開発では、紹介しているSlackというコミュニケーションツールの他にも、
タスク管理やコードの変更管理などの様々な用途に合わせたツールを使用します。
例えば、タスク管理用のツール「Trello」と連携しています。
誰かがカードを追加、更新したり、タスクに設定した期限が近くなったりすると、
Slackに通知をしてくれるような連携機能があります。
他にも、「Bitbucket」などの変更管理ツールなんかとも連携しているので、
メンバー内の作業進捗や、コードの変更をまとめて追うことができます。
②コードをそのままスニペットとして投稿できる。
「スニペットとは、一般的には「切れ端」「断片」という意味の英語である。」
特にコードの一部を共有するときに非常に便利です。
Skypeなどを使っていると、インデントがガタガタなこともありますが、
Slackは何の言語かを指定することができ、また、単純に貼り付けるだけで投稿できます。
それをファイルとしてダウンロードしたり、編集したりすることも可能です。
③マルチデバイスに対応。
Windows、MacのPCでの使用はもちろんのこと、
iPhoneやAndroidなどのスマートフォンでもインストールして利用できます。
様々なデバイスで使えるので、状況に合わせて幅広く活用できます。
〜最後に〜
開発だけでなく、様々なコミュニティでも
コミュニケーションツールとして活用できます。
5GB以内などの制限はありますが、制限範囲内であれば無料ですので、
お試しで使ってみてはいかがでしょうか。
Slack
https://slack.com/
2017年1月23日月曜日
AWS上のインスタンス作成手順
AWS上のインスタンス作成手順をさくっとメモ
①AWSの登録
12ヶ月無料枠があるのでおすすめ
②VPCの作成
ホーム画面からネットワーキングのVPCを選択
左ダッシュボードからVPC>VPCの作成>以下の設定で作成
ネームタグ:適当
CIDRブロック:適当なプライベートアドレスセグメント
⇒サブネット作るので、一旦/16で作成
テナンシー:デフォルト
③VPC内にサブネットを作成
左ダッシュボードからサブネット>サブネットの作成>以下の設定で作成
ネームタグ:適当
VPC:②で作成したVPCネームを指定
アベイラビリティゾーン:指定なし
CIDRブロック:②で作成したアドレスより小さいセグメント
⇒/16より小さい/24で作成
④インターネットゲートウェイの作成
左ダッシュボードからインターネットゲートウェイ
>インターネットゲートウェイの作成
ネームタグ:適当
作成後の状態がdetachedなため、②にアタッチする。
(上部ボタンから選択or右クリック)
状態がattachedになってVPCに②が表示される事を確認。
念のため作成したGWのIDをメモorコピーしとく。
⑤ルートテーブル追加
左ダッシュボードからルートテーブル
②で作ったVPCのルートテーブルを選択し、
分割された下のウインドウでルートタブを開く
編集>別ルートの追加>以下入力して保存
送信先:0.0.0.0/0
ターゲット:④で作成したGWを指定
※自動で補完されるはずだが、さっきコピーしたIDをペースト。
終了後に一旦AWSホームまで戻る。
⑥EC2インスタンスの作成
コンピューティングのEC2を選択
インスタンスの作成ボタンがあれば選択
なければ、左ダッシュボードからインスタンス>インスタンスの作成
詳細は後で設定可能だが、各ステップを順番に設定する。
AMIの選択:OSは適当(今回はAmazonLinuxで作成)
インスタンスタイプ:t2.micro(無料枠)
インスタンスの設定:ネットワークとサブネットを指定、他デフォルト
ストレージ:デフォルトの設定のまま
インスタンスのタグ付け:なんか適当に入力
セキュリティグループ:識別しやすい名前と許可したい通信
⇒デフォルトのSSHを許可、他は任意(ICMPとか)
確認後、インスタンスを作成
キーペアは新しく作成し、名前は適当
キーペアをダウンロードして保存しておく。
そのまま作成を継続。ちょっと待つ。
インスタンスの画面でrunningになってたらOK。
⑦パブリックIPでSSH接続
パブリックIPがアサインされているはず。
⑥でダウンロードしたキーを使ってSSH接続が可能。
Windowsの場合、ここで注意。
pemファイルではなくppkファイルに変換する必要あり。
puttygenツールを使ってppkファイルに変換。
詳しくはこちら。
●AWSのKeyPair pemファイル をSSH接続用 ppkファイル に変換
WindowsからTeraTermでログインする場合。
ユーザ:ec2-user
RSA/DSA鍵を使うを選択し、保存したppkファイルを読み込む。
以上。
登録:
投稿 (Atom)




