マルチAZ構成のVPCを作成する

 
カテゴリー AWS   タグ

料金

VPC自体の料金は無料。AWSサイト間のVPN接続やAWS PrivateLink、NAT Gatewayは料金が発生する。

マルチAZ構成のVPCを作成する

vpc.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
AWSTemplateFormatVersion: '2010-09-09'
Description: MultiAZ VPC

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
VpcCidrBlock:
Description: Vpc CIDR block
Type: String
Default: 10.0.0.0/16
PublicSubnetCidrBlockA:
Description: Vpc CIDR block
Type: String
Default: 10.0.0.0/24
PublicSubnetCidrBlockB:
Description: Vpc CIDR block
Type: String
Default: 10.0.1.0/24

Resources:
# ------------------------------------------------------------ #
# VPC
# ------------------------------------------------------------ #
VPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: !Ref VpcCidrBlock
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
InstanceTenancy: default
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-VPC"

InternetGateway:
Type: "AWS::EC2::InternetGateway"
Properties:
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-igw"
AttachInternetGateway:
Type: "AWS::EC2::VPCGatewayAttachment"
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
PublicRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "${AWS::StackName}-rtb"
PublicRoute:
Type: "AWS::EC2::Route"
DependsOn: InternetGateway
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: "0.0.0.0/0"
GatewayId: !Ref InternetGateway

PublicSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref PublicSubnetCidrBlockA
AvailabilityZone: !Select [ "0", !GetAZs { "Ref": "AWS::Region" } ]
MapPublicIpOnLaunch: true
PublicSubnetARouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetA
RouteTableId: !Ref PublicRouteTable

PublicSubnetB:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref VPC
CidrBlock: !Ref PublicSubnetCidrBlockB
AvailabilityZone: !Select [ "1", !GetAZs { "Ref": "AWS::Region" } ]
MapPublicIpOnLaunch: true
PublicSubnetBRouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetB
RouteTableId: !Ref PublicRouteTable

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
myVPC:
Value: !Ref VPC
myVPCCidrBlock:
Value: !GetAtt VPC.CidrBlock
Description: VPC CidrBlock

myPublicSubnetA:
Value: !Ref PublicSubnetA
myPublicSubnetAAvailabilityZone:
Value: !GetAtt PublicSubnetA.AvailabilityZone
Description: PublicSubnetA AvailabilityZone
# CidrBlocksプロパティはないので入力パラメータをそのまま表示
myPublicSubnetACidrBlock:
Value: !Ref PublicSubnetCidrBlockA
Description: PublicSubnetA Ipv4CidrBlocks
#myPublicSubnetAIpv6CidrBlock:
# Value: !GetAtt PublicSubnetA.Ipv6CidrBlocks
# Description: PublicSubnetA Ipv6CidrBlocks

myPublicSubnetB:
Value: !Ref PublicSubnetB
myPublicSubnetBAvailabilityZone:
Value: !GetAtt PublicSubnetB.AvailabilityZone
Description: PublicSubnetB AvailabilityZone
# CidrBlocksプロパティはないので入力パラメータをそのまま表示
myPublicSubnetBCidrBlock:
Value: !Ref PublicSubnetCidrBlockB
Description: PublicSubnetB Ipv4CidrBlocks
#myPublicSubnetBIpv6CidrBlock:
# Value: !GetAtt PublicSubnetB.Ipv6CidrBlocks
# Description: PublicSubnetB Ipv6CidrBlocks

動的にAvailabilityZoneを選択する

GetAZsでリージョンを指定してAvailabilityZoneの一覧を取得し、Selectでそのうち1つを選択する。

1
AvailabilityZone: !Select [ "1", !GetAZs { "Ref": "AWS::Region" } ]

parameters.json

使用するIPアドレス範囲を指定する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"ParameterKey": "VpcCidrBlock",
"ParameterValue": "192.168.0.0/16"
},
{
"ParameterKey": "PublicSubnetCidrBlockA",
"ParameterValue": "192.168.100.0/24"
},
{
"ParameterKey": "PublicSubnetCidrBlockB",
"ParameterValue": "192.168.200.0/24"
}
]

VPCの作成

GetAZで選択されたAvailabilityZoneとして異なるap-northeast-1aap-northeast-1cのサブネットが作成されている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ aws cloudformation describe-stacks | jq -r '.Stacks[].Outputs | sort_by(.OutputKey) | .[]'
{
"OutputKey": "myPublicSubnetA",
"OutputValue": "subnet-06d47dfd5fe6621a2"
}
{
"OutputKey": "myPublicSubnetAAvailabilityZone",
"OutputValue": "ap-northeast-1a",
"Description": "PublicSubnetA AvailabilityZone"
}
{
"OutputKey": "myPublicSubnetACidrBlock",
"OutputValue": "192.168.100.0/24",
"Description": "PublicSubnetA Ipv4CidrBlocks"
}
{
"OutputKey": "myPublicSubnetB",
"OutputValue": "subnet-07d0e41e7633178cf"
}
{
"OutputKey": "myPublicSubnetBAvailabilityZone",
"OutputValue": "ap-northeast-1c",
"Description": "PublicSubnetB AvailabilityZone"
}
{
"OutputKey": "myPublicSubnetBCidrBlock",
"OutputValue": "192.168.200.0/24",
"Description": "PublicSubnetB Ipv4CidrBlocks"
}
{
"OutputKey": "myVPC",
"OutputValue": "vpc-0cd9bbdf94a983c47"
}
{
"OutputKey": "myVPCCidrBlock",
"OutputValue": "192.168.0.0/16",
"Description": "VPC CidrBlock"
}

利用可能なAvailabilityZone

aws-cliaws ec2 describe-availability-zonesで確認できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ aws ec2 describe-availability-zones
{
"AvailabilityZones": [
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1a",
"ZoneId": "apne1-az4",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1c",
"ZoneId": "apne1-az1",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1d",
"ZoneId": "apne1-az2",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1"
}
]
}

コメント・シェア

料金

EC2 の使用は、1 秒ごとに課金されます (最小課金時間は 60 秒)。同様に、EBS ボリュームのプロビジョニング済みストレージも、1 秒ごとに課金されます (最小課金時間は 60 秒)。秒単位の課金は以下で起動されるインスタンスに適用されます。
オンデマンドの予約済みスポットフォーム
すべてのリージョンとアベイラビリティーゾーン
Amazon Linux および Ubuntu
データ転送、Elastic IP アドレス、EBS 最適化インスタンスといった関連費用の詳細については、オンデマンドの料金ページを参照してください。

無料利用枠
12 か月間無料
Amazon EC2
750 時間/月
750 時間/月の Linux、RHEL、または SLES t2.micro インスタンスの使用
750 時間/月の Windows t2.micro インスタンスの使用

EC2はt2.microで750時間無料枠あり

SSHキーペアを作成する

SSHログインで使用するキーペアの作成はAmazon EC2 コンソールのキーペアで行う。
CloudFormationで作成することはできない。

キーペアの作成 width=640

キーペアの作成 width=640

キーペアの作成 width=640

Amazone Machine Image (AMI)

Amazon EC2 コンソールから見つける方法とaws-cliを使用する方法がある。

今回はUbuntuLinuxを使用するので、ami-0d5db3e2a1b98ca94を使用する。同じバージョンでも複数のイメージが存在し、リージョンによってもIDは異なるので注意する。

インスタンスの作成

ec2.yml

イメージタイプは無料枠が適用されるt2.microを使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
AWSTemplateFormatVersion: '2010-09-09'
Description: Ubuntu on EC2

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
KeyName:
Description: Amazon EC2 Key Pair
Type: "AWS::EC2::KeyPair::KeyName"
Default: mykey
AllowSshFrom:
Description: from source IP Address
Type: String
Default: 0.0.0.0/0
ImageID:
Description: Ubuntu Linux AMI
Type: String

Resources:
# ------------------------------------------------------------ #
# EC2
# ------------------------------------------------------------ #
MySecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH
SecurityGroupIngress:
- CidrIp: !Ref AllowSshFrom
IpProtocol: tcp
FromPort: '22'
ToPort: '22'

MyEC2Instance:
Type: AWS::EC2::Instance
Description: "Ubuntu 18.04 bionic on AWS"
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ MySecurityGroup, GroupId ]
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}
UserData: !Base64
Fn::Sub: |
#!/bin/bash -xe

# ubuntuのパッケージを最新化
apt update
DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get upgrade -y

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
PublicIp:
Description: "Public IP"
Value: !GetAtt MyEC2Instance.PublicIp

parameters.json

証明書を発行するドメイン名を指定する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
"ParameterKey": "KeyName",
"ParameterValue": "mykey"
},
{
"ParameterKey": "ImageID",
"ParameterValue": "ami-0d5db3e2a1b98ca94"
},
{
"ParameterKey": "AllowSshFrom",
"ParameterValue": "0.0.0.0/0"
}
]

インスタンスを作成する

1
2
3
4
$ aws cloudformation create-stack --stack-name tutorial-ec2 --template-body "file://./ec2.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-ec2/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

インスタンスにログインする

作成したインスタンスの情報取得

インスタンスの情報はCloudFormationの結果以外にもaws-cliで取得することもできる。
タグ名としてスタック名を付与しているので、スタック名を指定してインスタンスを特定し、IPアドレス等を取得している。

1
2
3
4
5
6
aws ec2 describe-instances --filters "Name=tag:Name,Values=tutorial-ec2" --query 'Reservations[].Instances[].[ImageId,InstanceId,KeyName,PublicIpAddress,PrivateIpAddress]' --output table
----------------------------------------------------------------------------------------------
| DescribeInstances |
+------------------------+-----------------------+--------+-----------------+----------------+
| ami-0d5db3e2a1b98ca94 | i-087fXXXXXXXX0ec4f | mykey | XXX.XXX.XXX.XXX | 172.31.38.166 |
+------------------------+-----------------------+--------+-----------------+----------------+

sshでログイン

sshで作成したキーペアの秘密鍵を指定して接続。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ ssh -i mykey.pem ubuntu@XXX.XXX.XXX.XXX
The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-1052-aws x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

System information as of Mon May 4 04:22:37 UTC 2020

System load: 0.0 Processes: 88
Usage of /: 19.0% of 7.69GB Users logged in: 0
Memory usage: 18% IP address for eth0: 172.31.38.166
Swap usage: 0%

0 packages can be updated.
0 updates are security updates.


*** System restart required ***

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-172-31-38-166:~$

コメント・シェア

AWSの初期設定

 
カテゴリー AWS   タグ

アカウントのサインアップ

  • クレジットカードの有効性チェック(いわゆるオーソリ)
  • 電話番後の有効性チェック(Call or SMS)

AWS Consoleへのログイン

AWS Consoleにアクセスし、コンソールにサイインイン

  • ルートユーザー
    • AWSアカウントのこと
    • アカウント作成時に設定したメールアドレスでログイン

awsコンソールへのログイン width=640

  • IAMユーザー
    • 通常のアカウント
    • IAMで作成したアカウントIDを使用する

awsコンソールへのログイン width=640

Identity and Access Management (IAM) ダッシュボードの項目

ルートアカウントのMFAを有効化

ルートアカウントのMFA有効化 width=640

ルートアカウントのMFA有効化 width=640

ルートアカウントのMFA有効化 width=640

ルートアカウントのMFA有効化 width=640

ルートアカウントのMFA有効化 width=640

ルートアカウントのMFA有効化 width=640

個々のIAMユーザーの作成

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

個々のIAMユーザーの作成 width=640

アカウントエイリアスの設定

アカウントエイリアスの設定 width=640

アカウントエイリアスの設定 width=640

アカウントエイリアスの設定 width=640

アカウントエイリアスの設定 width=640

アカウントエイリアスの設定 width=640

請求関連設定

お支払通貨の設定(マイアカウント)

USDからJPYに変更。

USD→JPY変更 width=640

USD→JPY変更 width=640

IAMユーザから請求情報へのアクセスを許可する(マイアカウント)

デフォルトではrootアカウントからしかアクセスできない。

請求情報へのアクセス許可 width=640

請求情報へのアクセス許可 width=640

Billing設定(請求情報とコスト管理ダッシュボード)

PDFでの請求書受取と請求アラートを有効化する。

Billingの設定 width=640

コストエクスプローラーを有効化(請求情報とコスト管理ダッシュボード)

コストエクスプローラーを有効化。

コストエクスプローラーの有効化 width=640

コストエクスプローラーの有効化 width=640

Budgetの設定(請求情報とコスト管理ダッシュボード)

設定値は利用状況に合わせて設定。予算に対する利用状況でアラームを通知。

Budgetの設定 width=640

Budgetの設定 width=640

Budgetの設定 width=640

Budgetの設定 width=640

Budgetの設定 width=640

Budgetの設定 width=640

Budgetの設定 width=640

CloudWatchでBillingアラームを設定する(請求情報とコスト管理ダッシュボード)

突発的な利用料発生でアラーム通知。

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

Billingアラームの設定 width=640

コメント・シェア

CI/CD

 
カテゴリー CI/CD   タグ

What is CI/CD

CI(Continuous Integration)

継続的インテグレーション、CI(英: continuous integration)とは、すべての開発者の作業コピーを1日に数回、共有されたメインラインにマージすることである[1]。グラディ・ブーチは1991年のメソッド[2]でCIという用語を最初に提案したが、彼は1日に数回の統合を提唱していなかった。エクストリームプログラミング(XP)ではCIの概念を採用し、1日に1回以上、おそらく1日に何十回も統合することを提唱した[3]。

CD(Continuous Delivery)

チームが短いサイクルでソフトウェアを生産し、いつでも確実にソフトウェアをリリースできるようにし、ソフトウェアをリリースする際には、手動で行うソフトウェアエンジニアリングのアプローチである[1] [2]。

CD(Continuous Deployment)

継続的デプロイメント(英語: Continuous deployment; CD)とは、ソフトウェア開発プロセスの1種で、自動化されたデプロイによって、高い頻度で、ソフトウェアの機能を提供する手法である[1][2][3]。すなわち、自動化により、開発された最新のソフトウェアをユーザーが常に利用可能にしておく手法である。開発されたソフトウェアを絶え間なく、継続的にデプロイし続けることから継続的デプロイメントと呼ばれる。

主要な解釈

Developer-roadmap

Web developer roadmap 2020の中にDevOpsロードマップがある。

IaCを前提として、CI/CD Toolが挙げられている点でインフラを含めたCI/CDが意識されている。
DevOpsRoadmap width=640

Synopsy社のAgile、CI/CD、DevOps

Synopsys社のブログが簡潔でわかりやすい。
どこにフォーカスしているかと言えば、アジャイルは開発プロセス、CI/CDはライフサイクル、DevOpsは文化が対象。

Agile CICD DevOps width=640

アジャイルは、変更とデリバリーの迅速化に注目したプロセスに焦点を当てます。
CI/CDは、自動化を強化するツールに注目したソフトウェア定義ライフサイクルに焦点を当てます。
DevOpsは、即応性を強化する役割に注目した文化に焦点を当てます。

Redhat社のCI/CD

自動化してリリース頻度を上げる話が中心だが、Integration Hellについての記載がある。

CI/CD (継続的インテグレーション/継続的デリバリー) とは、アプリケーション開発のステージに自動化を取り入れて、顧客にアプリケーションを提供する頻度を高める手法です。CI/CD から発生した主なコンセプトは、継続的インテグレーション、継続的デリバリー、継続的デプロイメントです。CI/CD は、新規コードの統合によって開発チームや運用チームに生じる問題 (すなわち「インテグレーション地獄」) に対する解決策です。

Redhat CI/CD width=640

継続的デプロイメントは開発者による変更をリポジトリから本番環境に自動的にリリースし、顧客が使用できるようにするというものです。運用チームが担当する手動プロセスが多すぎて、アプリケーション提供が遅れるという問題に対処します。継続的デリバリーのメリットを活用し、パイプラインの次のステージを自動化します。

コメント・シェア

Hexo Markdown

 
カテゴリー Markdown SSG   タグ

画像の引用

通常のMarkdownのハイパーリンク(![](http://url/img.jpg)[](http://url/img.jpg))を使ってassetフォルダーへのリンクを貼ると、生成されたタグページやカテゴリページでリンク切れになる。

asset_linkでファイルへのリンクを生成する

1
{% asset_link grey.jpg グレーテンプレ画像 %}
グレーテンプレ画像

asset_img<img src="/<path>/grey.jpg" alt="title" title="title">タグが生成される。

1
{% asset_img grey.jpg グレーテンプレ画像 %}

ハイパーリンク

Google

1
[Google](http://www.google.co.jp)

カテゴリ・タグ

カテゴリは階層化できる

1
2
3
4
5
6
7
8
9
10
11
12
---
title: testpge
date: 2018-11-28 13:29:56
+update: {{date}}
category:
- [テスト, テスト2, テスト3]
- [テスト, テスト2, テスト4]
tags:
- [jpeg]
- [hexo]
- [liefty]
---

続きを読む

1
<!-- more -->
続きを読む

モダンWebホスティングサービスNetlify

 
カテゴリー CI/CD SaaS   タグ

Netlify

NetlifyはContinuous Deploymentに対応したモダンなWebホスティングサービス。
Gitリポジトリサービス(GitHubやBitBucket)と連携し、GitへのPushをトリガーにプレビューおよびサイト公開を自動的に行う。Buildフェーズの中で静的サイトジェネレーターによるサイト生成も行うため、ローカルの開発環境に静的サイトジェネレーターをインストールする必要もない。

  • HTTP/2対応
  • Let’s Encryptの無料サーバ証明書
  • Continuous Deploymentでサイト更新の手間を最小化
  • 静的サイトジェネレーターの環境をローカルPCに用意する必要がない
  • CDN経由での配信(2019年12月時点で日本からのアクセスはシンガポールからの配信)
  • アクセスログは見ることができない
1
2
3
4
5
6
7
8
9
10
11
12
IP General Information
IP Address: 178.128.17.49
Hostname: 178.128.17.49
ISP: DiGital Ocean

IP Geolocation Information
Continent: Asia (AS)
Country: Singapore (SG) SG
City: Time
Zone: Asia/Singapore
Latitude: 1.314 (1°18'50.4" N)
LonGitude: 103.6839 (103°41'2.04" N)

Netlifyのセットアップ

Sign up

以下、BitBucketの場合。

Netlify width=640

Bitbucketアカウントを使う。

Netlify width=640

Bitbucketアカウントでログイン。

Netlify width=640

Bitbucketアカウントに対してNetlify APIのアクセスを許可する。

Netlify width=640

Netlify width=640

New site from Git

Netlify width=640

1. Connect to providerでBitbucketを選択。

Netlify width=640

2. Pick a repositoryでサイト用に作成したリポジトリを選択。

Netlify width=640

3. Build options, and deployでデプロイの設定を行う。

静的サイトジェネレーターにはhexoを使用するので、Build commandはhexo generate、Publish先はpublic/で設定。

Netlify width=640

設定が終わると初回のビルドが始まる。

Netlify width=640

カスタムドメイン設定

Domain settingsで独自ドメインを設定する。
DNSサーバはLets’s Encryptを自動更新するために、Netlifyが提供するサーバに変更する必がある。

Netlify custom domain width=640

Netlify custom domain width=640

DNSサーバ側でレコード登録

Netlify custom domain width=640

Let’s Encryptを使用した無料のサーバ証明書発行

Netlify custom domain width=640

コメント・シェア

Hexoの基本操作チュートリアル

 
カテゴリー SSG Tutorial   タグ

ページ作成 - ドラフト~リリース

ドラフトを作成して、確認してリリースする場合、まずhexo new draftでドラフトを作成。

1
2
hexo new draft テストページ
INFO Created: C:\....\<<サイト名>>\source\_drafts\テストページ.md

hexo server --draftでドラフトを表示して確認。

1
2
3
hexo server --draft
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

hexo publishでドラフトをリリース。

1
hexo publish テストページ

hexo serverでリリースしたページを表示して確認。

1
2
3
hexo server
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

ページ作成 - リリースのみ

ドラフトは作成せずリリースする場合、hexo newで作成。

1
2
hexo new テストページ
INFO Created: C:\....\<<サイト名>>\source\_posts\テストページ.md

hexo serverでリリースしたページを表示して確認。

1
2
3
hexo server
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

静的サイトの作成

hexo generateでサイト一式がpublishフォルダーに作成される。

1
2
3
4
5
6
7
8
9
hexo generate
hexo generate
INFO Start processing
INFO Files loaded in 9.24 s
INFO Generated: post-sitemap.xml
INFO Generated: atom.xml
INFO Generated: sitemap.xml
INFO Generated: sitemap.xsl
INFO Generated: categories/テスト/index.html

hexo cleanでサイト一式クリアできる。

1
2
3
hexo clean
INFO Deleted database.
INFO Deleted public folder.

サイトのデプロイ

hexo deployでサイトをデプロイ。hexo generate -dでサイト作成からデプロイまで一括で行う。

1
2
3
4
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type:

コメント・シェア

Hexoを使った静的サイト作成

 
カテゴリー SSG   タグ

Hexo

Node.jsのインストール

Windowsの場合、Node.jsの開発元のWindows Installerでインストール
この時は node-v10.13.0-x86.msi

Hexoのインストール

Windowsの場合、Node.jsコマンドプロンプトから以下を実行。npmはNode.jsのインストーラーでインストールされている。

1
2
3
4
npm --version
6.4.1
npm install -g hexo
npm install -g grunt-cli --save

Hexoプラグインのインストール

npm installでプラグインを追加していく。
--saveを使うことでpackage.jsonDependenciesに追加される。
hexo-generator-archivehex-generator-categoryは標準でインストールされていた。

1
2
3
npm install hexo-generator-feed hexo-generator-sitemap --save
npm install hexo-generator-robotstxt hexo-generator-seo-friendly-sitemap --save
npm install hexo-generator-archive hexo-generator-category hexo-generator-index hexo-generator-tag --save
  • hexo-generator-feed
  • hexo-generator-sitemap
  • hexo-generator-robotstxt
  • hexo-generator-seo-friendly-sitemap
  • hexo-generator-archive
  • hexo-generator-category
  • hexo-generator-index
  • hexo-generator-tag

サイト生成

サイト生成はhexo initで行う。必要モジュールはpackage.jsonに記述があればnpm installでまとめてインストールできる。

1
2
3
hexo init サイト名
cd サイト名
npm install

テーマのダウンロード

テーマはtranquilpeakをインストールする。
grunt buildを実行しないと、assetフォルダーが生成されず、cssやjsが読み込めないので注意。

1
2
3
4
5
6
7
git clone https://github.com/LouisBarranqueiro/hexo-theme-tranquilpeak themes/tranquilpeak
cd themes
cd tranquilpeak
npm install
grunt build
cd ..
cd ..

テーマの反映

_config.ymlのthemesをtheme: tranquilpeakに変更。

1
2
3
4
5
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
#theme: landscape
theme: tranquilpeak

画像フォルダーを有効にする

_config.ymlpost_asset_folderpost_asset_folder: trueに変更

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link: true # Open external links in new tab
filename_case: 0
render_drafts: false
#post_asset_folder: false
post_asset_folder: true
relative_link: false
future: true
highlight:
enable: true
line_number: true
auto_detect: false
tab_replace:

サイトに関する情報を設定

サイトに関する情報を設定する。
タイムゾーンはAsia/Tokyoにする。

1
2
3
4
5
6
7
8
# Site
title: Hexo
subtitle:
description:
keywords:
author: John Doe
language: ja
timezone: Asia/Tokyo

背景画像の変更

themme/tranquilpeak/source/_images/に画像を配置(ここではgrey.jpg)。
themes/tranquilpeak/_config.ymlのcover_imagecover_image: grey.jpgに変更。

1
2
3
4
5
# or in `source/assets/images/` if you can't or don't want to build the theme,
# and use relative url : `your-image.png`
cover_image: grey.jpg
# Your favicon located in folder `source/_images/` (development) or in `source/assets/images/` (production)
favicon:

サイドバーを小さくする

themes/tranquilpeak/_config.ymlのsidebar_behaviorsidebar_behavior: 6に変更。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Define the behavior of the sidebar
# 1: Display extra large sidebar on extra large screen, large sidebar on large screen,
# medium sidebar on medium screen and header bar on small screen and
# extra large sidebar is swiped on extra large screen and large sidebar on all lower screen (default)
# 2: Display large sidebar on large screen, medium sidebar on medium screen and
# header bar on small screen and large sidebar is swiped
# 3: Display medium sidebar on large and medium screen and header bar on small screen and
# medium sidebar is swiped
# 4: Display header bar on all screens, extra large sidebar is swiped on extra large screen and
# large sidebar is swiped on all lower screens
# 5: Display header bar on all screens and large sidebar is swiped on large screen
# 6: Display header bar on all screens and medium sidebar is swiped
#sidebar_behavior: 1
sidebar_behavior: 6
# Hide sidebar on all article page to let article take full width to improve reading, and

サイドバーのアイテム編集

themes/tranquilpeak/_config.ymlから不要なリンクをコメントアウトする。
アイコンはFont Awesomeを使う。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
sidebar:
menu:
home:
title: global.home
url: /
icon: fa fa-home
categories:
title: global.categories
url: /all-categories
icon: fa fa-bookmark
tags:
title: global.tags
url: /all-tags
icon: fa fa-tags
archives:
title: global.archives
url: /all-archives
icon: fa fa-archive
search:
title: global.search
url: /#search
icon: fa fa-search
# `open-algolia-search` classes are used to open algolia search modal
class: open-algolia-search
about:
title: global.about
url: /#about
icon: fa fa-question
author_links:
# github:
# title: global.github
# url: https://github.com/
# icon: fab fa-github
# stack_overflow:
# title: global.stack_overflow
# url: http://stackoverflow.com/users
# icon: fab fa-stack-overflow
# twitter:
# title: global.twitter
# url: https://twitter.com/
# icon: fab fa-twitter
# facebook:
# title: global.facebook
# url: https://facebook.com/
# icon: fab fa-facebook
# google_plus:
# title: global.google_plus
# url: https://plus.google.com/
# icon: fab fa-google-plus
# linked_in:
# title: global.linkedin
# url: https://www.linkedin.com/profile/
# icon: fab fa-linkedin
mail:
title: global.mail
url: mailto
icon: fa fa-envelope
rss:
rss:
title: global.rss
url: /atom.xml
icon: fa fa-rss

カテゴリ、タグ、アーカイブの一覧ページの生成

各Indexページを自動生成させる方法はtranquilpeakのドキュメントに記載がある。
hexoコマンドでページを作成する記述だが、以下のファイル群をsource以下に作成すればよい。

1
2
3
4
5
6
7
8
source  + all-archives
| + index.md
|
+ all-tags
| + index.md
|
+ all-categories
+ index.md

all-archives/index.md

1
2
3
4
5
---
title: "all-archives"
layout: "all-archives"
comments: false
---

all-tags/index.md

1
2
3
4
5
---
title: "all-tags"
layout: "all-tags"
comments: false
---

all-categories/index.md

1
2
3
4
5
---
title: "all-categories"
layout: "all-categories"
comments: false
---

Google Analyticsの設定

themes/tranquilpeak/_config.ymlで、Google AnalyticsのトラッキングIDを追加

1
2
3
4
5
6
7
8
9
# -------------------
# Integrated services
# -------------------

# Your Google analystics web property ID : UA-XXXXX-X
google_analytics_id: UA-XXXXX-X
# Your Baidu analystics web property ID : 9505a5af654a2478f93fd6c0ae4f687d
baidu_analytics_id:
# Your Gravatar email. Overwrite `author.picture` everywhere in the blog

コメント・シェア



nullpo

めも


募集中


Japan