ねっとぱんだ-プログラミング勉強ブログ-

Webデザイン、プログラミングの勉強ブログ。

webサーバーソフトの種類、Nginx

webサーバーソフトの種類

引用:http://minto.tech/web-server/

webサーバー
訪問者の要求に応じてホームページのデータを訪問者のWebブラウザーに送るサーバーのこと

webサーバーとデータベースの違い

  • ウェブサーバ > データを見せる
  • データベースサーバ > データを収集・配布する
  • webサーバの役割はHTTPによる通信をおこなうこと
  • データベースサーバはデータの蓄積と利用をおこなうこと。SQLなどのデータを利用する言語などが備わっている。

Webサーバーソフトの種類

IIS(Internet Information Services)
Microsoft社が提供するWebサーバーソフト。Webサーバーの機能の他にも、SMTP、NNTP、HTTP/HTTPSなどサポート
Apache
無料で利用ができ、OSに依存しない。オープンソースソフトウェア
GoogleWeb Server
グーグルが自社のウェブサービスの基幹に使用しているウェブサーバソフト。Linux上で動いていることを除いて、意図的にその詳細について明らかにしていない。
nignx
オープンソースソフトウェア。HTMLの画像やドキュメントを高速で処理し、消費メモリが少ないWebサーバー。余計な機能を付けていないため、多くの同時リクエストの処理など素早く行える。

サーバーの種類、クラウドについて

大まかなサーバーの種類

共用サーバ

  • 複数のユーザが1つのWebサーバを共有
  • メモリの利用上限などを厳しく設定
  • CPU、メモリ、ソフトウェアを共有するので他のユーザの影響を受けやすい
  • 好きなソフトウェアをインストールできない
  • サーバ会社が決めたOSやアプリケーションを使用
  • データベースの種類や、実行できるプログラミング言語などが限定

(レンタル)専用サーバ

  • 物理サーバを完全に1台専有。
  • CPUやメモリ、ソフトウェアを専有できる。
  • 管理者権限(root権限)で自由にアプリケーションやOSを選べる。
  • サーバを自分で構築し、メンテナンスできるスキルが必要

VPS (Virtual Private Server)

  • 物理サーバ上でユーザそれぞれに仮想サーバが割り当てられる。
  • メンテナンスできるスキルが必要
  • ホストOSがクラッシュしたり、メンテナンスする場合、サーバダウンが生じる可能性がある。

クラウド

SaaS、PaaS、IaaSという領域がある。

クラウドの形態について

SaaS (Software as a Service)
  • 必要な機能を必要な分だけサービスとして利用できるようにしたソフトウェアもしくはその提供形態。
  • ソフトウェアを提供者(プロバイダ)側のコンピュータで稼働させ、インターネットなどのネットワーク経由でサービスとして使用し、サービス料を支払う
  • ソフトウェアをインストールすることなく、インターネットを介して利用することができる
具体例
GoogleマップGoogle Earth、乗り換え案内サービス

※ちなみにAdobeCCはSaasではない

PaaS (Platform as a Service)
  • ソフトウェアを構築および稼動させるための土台となるプラットフォームを、インターネット経由のサービスとして提供
  • プラットフォーム上で構築したサービスを自分の顧客に提供することができる
  • 開発したシステムを運用するための環境をインターネットを通じて提供し、月額使用料などの形で収入を得る事業モデル
  • OSや開発言語、データベースなどがあらかじめ構築されている
  • おもに開発技術者向けのサービス
具体例
Monaca、Cloud9
IaaS (Infrastructure as a Service)
  • システムのインフラを提供するサービス
  • サーバーやストレージをはじめ、ファイアウォールロードバランサーなどのネットワーク機器まで、利用者が仮想的に構築できる。
  • CPUやメモリ、OSなども自由に設定できる。
  • 時間帯やキャンペーンなどアクセス数が急激に増減するWebサイトなどに活用される。
  • 短時間でのサーバーの増強、スケールアップやスケールアウトが行える
具体例
Amazon Web Service(AWS)、Microsoft Azure
DropboxGoogleドライブなどのクラウドストレージサービスも含まれる。
クラウドサービスのメリット
  • アプリケーションなどが「所有」から「利用」するものに変わりつつある。
  • アクセス数の増減に合わせ柔軟にシステムが構築できる = スケーラビリティ
  • 設計や検証などせずに契約することですぐに使い始められる
  • クラウド側で管理・運用する為、メンテナンスせず最新の環境を利用できる。
  • 初期費用がかからず、月額で使う分だけの費用で利用できる。
クラウドサービス注意点
  • インターネットが使えない場所では利用できない
  • 最新のファイルを物理環境にバックアップしたり、重要なシステムを物理環境にも用意するといった対策が必要。
引用
https://japan.norton.com/cloud-service-3385
https://ja.wikipedia.org/wiki/SaaS
https://ja.wikipedia.org/wiki/Platform_as_a_Service

従来型とクラウドについて

従来型

オンプレミス
  • 自社で管理している施設内で運用
ハウジング
  • サーバ設置場所を、外部のデータセンター事業者に移したイメージ
ホスティング

クラウド

クラウドのメリットについて詳しい↓
「NIST(アメリカ国立標準技術研究所)によるクラウドコンピューティングの 定義」
https://www.ipa.go.jp/files/000025366.pdf
以下は下記サイトの引用
http://techtarget.itmedia.co.jp/tt/news/1305/28/news03.html

プライベートクラウド(オンプレミス型)
  • 巨大なシステム
  • (狭義の)プライベートクラウド
  • エンドユーザーがリソースの配賦をごく短時間で受けられ、費用負担も「使っただけ」にできる。
  • 仮想化技術の導入と習熟に一定のコストが必要
  • リソースの追加は従来型と同様かそれ以上

クラウドサーバーのスケーラビリティはユーザーにとってはメリットだが、管理者にとっては高コストとなる。

プライベートクラウドホスティング型)
  • リソースのオーナーシップがオンプレミス型と異なる
  • リソース全体を借りたり、一部だけを借りて後から増減する場合がある。
  • 専用回線などで自社環境とデータセンター間を接続
  • オンプレミス型よりコストが低い(? 経費での運用、リース資産になるなど)
  • ハードウェアベンダーやシステムインテグレーターがサービス提供 < 安定性、安全性、保守性において圧倒的に優れている
  • 短期の利用や、リソースの変更が頻繁に必要なケースには向いていない
  • 専用回線を敷設によって高コストになる場合も
ハードウェアベンダー
ハードウェアのメーカー
データセンター
インターネット用のサーバやデータ通信、固定・携帯・IP電話などの装置を設置・運用することに特化した建物の総称
システムインテグレーター
顧客の業務を把握し、抱えている問題を解決するための企画、設計、開発、運用などを行うIT企業
プライベートクラウドパブリッククラウド型)
  • AWSAmazon Web Services)のAmazon VPCが草分け
  • 多くのIaaS系クラウドベンダーが提供
  • パブリッククラウド上の仮想的な区画を、自社の専用エリアとして使う
  • VPN専用線で接続、ネットワーク的にあたかも自社のLANの延伸として使うことができる
  • パブリッククラウドのリソースを自由に使え、自社のプライベートIPアドレスを付与して管理できる
  • プライベートな利用をしながら、初期費用はほとんど必要なく使った分だけの費用になる
  • 「自社のLANの延伸」となるので、圧倒的に管理がしやすい
  • 最も低コストで可用性を担保できる
  • 唯一の弱点は、障害コントロールがほとんどできない点
  • クラウドベンダーが復旧作業を終えるのを待つしかない
VPN (Virtual Private Network)
インターネットというオープンなインフラを使って拠点間をセキュアに接続する
インターネットVPN
インターネットのアクセス回線を利用する専用回線
IP-VPN
通信事業者が独自に保有する閉じたネットワーク(閉域網)を利用する専用回線

パブリッククラウド

プライベートクラウドパブリッククラウド型)を除く

  • アイソレーション機能(独立性?)を持たないクラウド
  • 広く外部のインターネットに公開するシステムを大規模に構築する場合に適する
  • インターネット側の回線を自前で調達する必要がなく、帯域についても気にする必要がない
  • 一般コンシューマ向けのサービスでアクセスの増減に柔軟に対応できる
  • 障害コントロールが困難
  • 部分的にアイソレーションが必要な場合には自分で設計、設定、管理しなければならない
  • 利用料の見込みを予測することが難しい
オンデマンド
需要に応じて、または必要になった時だけ、行うこと
コンシューマ
消費者、需要者、購入者、民生用のもの
エンタープライズ(Enterprise)
規模の大きな法人に向けた市場や製品

引用した上記記事を書いた加藤さんのクラウドについての連載
http://techtarget.itmedia.co.jp/tt/news/1008/19/news04.html

【java】配列、データ型とメモリ、メソッド

配列の宣言

//型を宣言した後に変数名
	  int[] sales;
//配列の長さ
	  sales = new int[3];
//代入
	  sales[0] = 100;
	  sales[1] = 200;
	  sales[2] = 300;
//代入を省略、長さは宣言しなくていい
	  int[] sales;
	  sales = new int[]{100,200,300};
//初期化を省略  
	  int[] sales = {100,200,300};
      
	  System.out.println(sales[1]);
//for文での書き出し
	  int[] sales = {100,200,300};
	  
	  for(int i = 0; i < sales.length; i++){  
	    System.out.println(sales[i]);
      }
//for文の省略した書き方
      //salesの値を一つずつsaleに代入している
	  for(int sale : sales){  
	    System.out.println(sale);
      }

データ型、参照型とメモリ

データ型

メモリに値そのものが入る

//変数を宣言するとメモリに格納される
int i
//値を入れるとメモリ内に値が格納される
i = 10;

参照型

メモリに値が格納されたメモリの番地?が入る

//この時点で配列の長さはわからない
//配列に入るデータの番地を格納できる領域が作られる。
int[] a;
//それぞれの値がそれぞれのメモリに格納される。
a = new int[] {1,2,3};
//その後、宣言時のメモリにデータが入ったメモリの先頭の番地が格納される。

配列に格納していった場合

      int[] a = {3,4,5};
      //この時点で配列bには配列aの値の「番地」が格納される。
      int[] b = a;
      //b[1]はa[1]でもある為、両方の配列の値が変わる
      b[1] = 8;
      //同じ値が書き出される。
      System.out.println(a[1]);
      System.out.println(b[1]);

文字列の場合

文字列は参照型であるが、データ型を同じ挙動をするように調整されている。
文字列は変更が不可になっているので
違うデータを代入すると別の領域に割り当てられる。

      String s = "hello";
      String t = s;
      //新しいメモリが割り当てられる。
      t = "world";
      System.out.println(t);
      System.out.println(s);

メソッド

	public static void sayHi(String name){
	      System.out.println(name);
	}
	
   public static void main(String[] args){
          sayHi("bob");
    }
    //メソッドで値を返すときはvoidに型を記述
    //void  = 何もないという意味
    public static String sayHi(String name){
	      return "Hi!" + name;
	}
	
    public static void main(String[] args){
          String msg = sayHi("taro");
          System.out.println(msg);
    }

メソッド内で宣言した変数はメソッド内のみで有効。

オーバーロード

引数の数や型が違う場合、同じ名前でメソッドを作れる

	public static void sayHi(String name){
	      System.out.println(name);
	}
	
	public static void sayHi(){
	      System.out.println("none");
	}

	
    public static void main(String[] args){
          sayHi("bob");
          sayHi();
    }

【node.js】macへのインストールと概要

node.jsとは

サーバーサイドのJavaScript
JavaScript アプリケーションのプラットフォーム

ノンブロッキングI/O
I/Oの結果を待たないで処理をすすめる。 I:O=入出力

C10K問題 (クライアント1万台接続問題)を解決

C10K問題
1万接続でパフォーマンスが落ちない

http://qiita.com/hshimo/items/1ecb7ed1b567aacbe559

node.jsインストー

下記手順でhomebrewを使ってインストールします。
http://qiita.com/akakuro43/items/600e7e4695588ab2958d
下記のエラーが出たので検索

/Users/sk/.nodebrew/src/v8.2.1/node-v8.2.1-darwin-x64.tar.gz: No such file or directory

ファイルがない為だったのでファイルを作成するとうまくいきました。
https://blog.yug1224.com/archives/5693a5e0fef2539c7d5b149d

実行パスを通す段階で僕も引っかかりました。
$nodebrew list でインストールしたnode.jsを確認後、
$nodebrew use v8.2.1 で指定したのに
$node -v でバージョン確認ができませんでした。

下記サイトによると.bashrcは自動で読み込まれないらしい
http://kinacom.hatenablog.jp/entry/2015/05/28/180523
https://gist.github.com/shokuto/4576386

上記参考サイトと同じように.bash_profileファイルを作って
以下を記述して再起動するとバージョンが確認できました

if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

.bashとか.bash_profilrの記述はシェルスクリプト

シェルスクリプト
オペレーティングシステムのシェルまたはコマンドラインインタプリタ向けに書かれたスクリプト

シェルスクリプトとは、簡単に言うとUnixコマンドなどを並んで実行するだけ」
http://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337
http://shellscript.sunone.me/tutorial.html#シェルスクリプトとは

node.jsの実行方法

1.コマンドラインにnodeと打って記述

mbp:~ sk$ node
> console.log("helloworld");
helloworld //表示される
undefined
> 
  • node.jsはブラウザを使わないのでDOMの操作はできない。
  • .help で使えるコマンド一覧が表示

2.jsファイルを作り実行
javascriptなのでjsファイルを作る

node hello.js

nonbrockingな書き方

次の処理をブロックしないように書く

例)helloの1秒後にworldを記述

setTimeout(function(){
  console.log("hello");
},1000);
console.log(world);

brockしてしまう書き方
1秒立つまでのループ
ループが終わるまで後ろの処理をブロックしてしまう。

var start = new Date().getTime();
while (new Date().getTime() < start + 1000);
console.log("hi");

【Linux】cui切り替え・webサーバー構築の準備・IPについて


linuxを触って見ています。
先日から参考サイト(http://ufuso.jp/wp/?p=15122)を見てwebサーバーやftpサーバー構築を試みましたが
まだ理解不足なところが多かったので基礎知識からやっていきます。

guiからcuiに切り替える

サーバー用途においてguiは無駄なメモリを消費する。

CentOS 7の場合

systemctl でデフォルトのモードを変更する

systemctl set-default multi-user.target

その他のsystemctlコマンド
http://www.atmarkit.co.jp/ait/articles/1603/25/news026.html

参考:https://ameblo.jp/yukisku/entry-11964626547.html

再起動後、
localhost login:にroot
Passwordに設定したpasswordをいれてログイン

ディスプレイマネージャとは?

https://eng-entrance.com/linux-displaymanager

  • LinuxでのGUI環境(といっていい)
  • X Window System(Xディスプレイマネージャ)上のプログラムの一つ
    GUIでのログインが可能になる

webサーバー構築の準備

Apacheのインストー

yumとは
Yum(Yellowdog Updater Modified/ ヤム)
LinuxRedHatディストリビューションCentOSFedoraなど)で利用されるパッケージ管理ツール。
DebianディストリビューションUbuntuなど)で利用される「APT」に相当
パッケージの集合体であるリポジトリーと連動
リポジトリー repository
ソースコードや設計、データの仕様といった情報が保管されているデータベース

RedHatディストリビューションでは、rpm形式(.rpm)が使われている。(同じ名前のパッケージ管理ツール「RPMRPM Package Manager)」もある)

yumの仕組み

ネットワーク越しにアクセス出来るサーバからパッケージをインストールできる。リポジトリはメディア上にも置ける。
http://q.hatena.ne.jp/1315885174

yumapacheをインストー

//yumを指定
//-y:問い合わせに全てyと答える
//install:インストール
//httpd:apacheを指定
yum -y install httpd
httpd
常駐プログラム(デーモン)のひとつ。
Webサーバとして仕事をしているデーモン
http://wa3.i-3-i.info/word13579.html
デーモン
LinuxUNIXにおいてメモリ上に常駐して様々なサービスを提供するプロセス
悪魔の「demon」ではなく守護神の「daemon
プログラムファイル名(プロセス名)の最後に「d」が付けられていたりする。
https://begi.net/read/base/13.html


http://qiita.com/sango/items/a86f9b8cf8c9c641823a

linuxコマンド yum
yum [option] [command] [package]

http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/230999/

ipについて

グローバルIPアドレス
広大なインターネットにおける自分の住所を表す。IPアドレスは同時に他に存在しない。
プライベート(ローカル)IPアドレス
ルーターが割り振るアドレス。プライベートIPアドレスを使ってインターネット(グローバルネット)に接続することはできない。

プライベートIPアドレスは192.168.0.0~192.168.255.255の間になる
プライベートIPアドレスとは パソコン初心者講座

デフォルトゲートウェイ
外部にあるネットワークに通信を行う場合の出入り口の役割を果たすように設定されたルータやコンピュータのこと
LAN(Local Area Network)
施設内程度の規模で用いられるコンピュータネットワーク。回線契約者(ネットワーク管理者)が許可したパソコンやインターネット接続機器しか接続できない。
WAN(Wide Area Network)
広い範囲(市街地を越え郊外、県外や国際の範囲)におよぶネットワーク。だれもが自由に接続できる。WAN側のIPアドレスISP(Internet Services Provider)に利用申請等をしなければならない。
NAT
NATがLAN内の端末プライベートIPアドレスをNATに割り当てられているグローバルIPアドレスに変換してからWANに接続される。
NATがWAN側からLAN側への通信をブロックする(ファイアウォールとは違いあくまでIPアドレスの変換装置)ことによってNATのLAN側はプライベートIPアドレスを使うことができる。

端末(プライベートIPアドレス)-LAN--NAT(グローバルIPアドレス)-WAN-インターネット

NAPT
NATと違い、IPアドレスだけでなくポート番号まで変換する。

NAT、NAT超えについて
[NAT]NAT越え入門1-NATとは何か?: Tomo’s HotLine

ルーターのWAN側にはグローバルIPアドレスが、LAN側には(基本的に)プライベートIPアドレスが割り振られている。

ネットワーク講座
3 Minutes Networking

IPv4
「0.0.0.0」から「255.255.255.255」までの約43億(4,294,967,296個)のアドレス
IPv6
約340澗のアドレス 澗=10の36乗

http://www.atmarkit.co.jp/ait/articles/0109/29/news004.html

サブネットマスク
IPv4IPアドレスを使用している場合のみに使用。ネットワークの範囲(サブネット)を指定。ネットワーク管理で変更することはありますが、一般的に使う場合は まず変更することはまずない。
https://www.cman.jp/network/term/subnet/
lo
ローカルループバック。仮想的にネットワークのテストなどに使えるように用意されている。必ず127.0.0.1が割り当てられる。外部と通信はできない。
ens〇〇
en=イーサネット(Ethernet) s=スロット 〇〇=数字
Ethernet
LAN(ローカルエリア・ネットワーク)で最も使用されている技術規格。LAN で接続された多数のコンピュータが、 効率よく通信回線を利用できるように考えられた通信方法の一つ。

http://www.infonet.co.jp/ueyama/ip/network/ethernet.html

ネットワークインタフェース
ネットワークの機能を使うための電気的/ソフトウェア的な呼び出し方法などの仕様
broadcast
ネットワーク内のすべての端末にデータを送信するために使われるアドレス。
virbr0
KVM環境を構築した際、初期状態で存在する仮想ブリッジ
KVM (Kernel-based Virtual Machine)
Linux Kernel自体をハイパーバイザ(仮想機械を実現するための制御プログラム)とする仕組み
MACアドレス (Media Access Control address)
ネットワーク上で、各ノードを識別するために設定されているLANカードなどのネットワーク機器のハードウェアに(原則として)一意に割り当てられる物理アドレス。LAN(ネットワークセグメント)内の宛先特定のために使われる。
6つの16進数で区切られる。
http://www.mm-labo.com/computer/tcpip/ipaddress/ipaddressandmacaddress.html

centos7でip確認

コマンドでグローバルIPを呼び出す

$ curl ifconfig.io

http://qiita.com/kanpou_/items/734b947f5a95109e7bb9

IPを確認(a = adress)

ip a

iconfigはデフォルトではなくipになった。
http://qiita.com/Bopllq0916/items/17a9514dcd2711806479

詳しく確認(d = device)

$ nmcli d show

http://neoblog.itniti.net/centos7-check-ipaddress/

【WordPress】クライアントワークCMS化2 カスタム投稿 / カスタムフィールド追加

WordPressへのカスタム投稿タイプ、カスタムフィールドの追加

やった事
Custom Post Type UIとAdvanced Custom Fieldを使用してのカスタム投稿タイプ、カスタムフィールドの追加
Custom Post Type UI
カスタム投稿フィールドをfunctions.phpに自分で記述せずに作成できる。
Advanced Custom Field
投稿フォームを任意の形式で作成できる。

チェックボックスやテキストエリアの他にラジオボタン、メールなどHTML5で使用できるフォームやカラーピッカーなどが作成できる。
f:id:p_and_a_fam:20170720013157p:plain

Advanced Custom Fieldのフォームから入力した値を書き出す

通常の書き出しかたとは違い、専用の関数を使う

//値を取得
get_field('フィールドに設定した名前');
//値を書き出す(この関数のみで書き出し可能)
the_field('フィールドに設定した名前');

get_field()を変数に代入してechoで書き出す方法も見ましたがチェックボックスなどは配列として書き出されてしまいます。
the_field('フィールドに設定した名前')を使用した場合は選択した値だけ書き出されました。

Advanced Custom Fieldの関数まとめ
https://blog.s-giken.net/255.html

参考
http://moneyreport.hatenablog.com/entry/wordpress_custom_fieldhttp://oxynotes.com/?p=1339

【Linux】CentOSのインストール

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

やること

貰い物のWindowslinuxcentosを入れて勉強しようと思います。
もらいもののPCですが練習ということもあり仮想環境でやっていきます。

CentOSとは

Red Hat Enterprise Linuxという有料のディストリビューションのクローンでフリーのディストリビューション
企業のサーバや業務用デスクトップ環境の構築をターゲットとしている。

引用:https://ja.wikipedia.org/wiki/CentOS

  • コミュニティーベース
  • YUMRPMによるパッケージ管理
  • 長期間にわたるセキュリティーフィックスサポート
  • 少々枯れたパッケージを採用することで安定性を重視する
  • 基本的にサーバー業務に向いている

引用:https://eng-entrance.com/what-is-centos

インストー

下記参考サイトを元にインストールしていきました。
参考:https://nelog.jp/vmware-linux
上記のチュートリアルにはなかったのですが、
途中でsetup画面がでてきたので、上から順番に設定していき、右下の完了ボタンを押したあと、
チュートリアルと同じログイン画面へ
f:id:p_and_a_fam:20170717114516p:plain
f:id:p_and_a_fam:20170717114535p:plain
GUIのデスクトップ?が出てきた後言語選択画面へ

次回は一通りGUIを触ってみた後、CUIに切り替えて操作してみたいと思います。
http://blog.rutti.net/item_217.html#.WWwizNOLQ1g