Let’s EncryptでワイルドカードSSL化に挑戦(失敗編)
先週、「みんなの洋楽ランキング」を作ったのでLet’s EncryptでワイルドカードSSLの取得に挑戦しました。が、、
失敗しました。
失敗したと言ってもまた挑戦出来るようなので、再度挑戦します。
「Azureドメインでいいじゃん」って思うこともあったのですが、まぁ、いろいろとやりたいことが出来ないんですよこれが(アフリエイトとかね
Let’s Encryptのワイルドカード化は結構いろんなサイトに載ってるので簡易的な感じで書きます。
環境 : Ubuntu16.04
※以下のコマンドはsudoをつけるように
certbot-autoコマンドを取得する
curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
実行可能な権限に変更
chmod 700 /usr/bin/certbot-auto
実行
certbot-auto certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns-01 --domain example.com --domain *.example.com
パラメータの説明は以下参照
laboradian.com
僕の場合は、メールアドレスを指定してなかったので再度聞かれます。多分、使えるメールアドレスなら何でも大丈夫っす。
同意やらなんやらを「YES」で進むと以下のようなメッセージが出ます。
------------------------------------------------------------------------------- Please deploy a DNS TXT record under the name _acme-challenge.example.com with the following value: xxxxxxxxxxxxxxxxxxxxx Before continuing, verify the record is deployed. ------------------------------------------------------------------------------- Press Enter to Continue
これはドメインのDNSレコードにType「TXT」で登録してねってやつです。お名前.comではこんな感じで設定します。
登録が完了したらEnterで完了します。
IMPORTANT NOTES: - The following errors were reported by the server: Domain: mygkrnk.com Type: unauthorized Detail: Incorrect TXT record "xxxx" found at _acme-challenge.example.com Domain: mygkrnk.com Type: unauthorized Detail: Incorrect TXT record "xxxxx" found at _acme-challenge.example.com To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address.
はい、エラーが発生しました。不正なTXTレコードだと
失敗した要因としては、はじめのコマンドでドメインとサブドメインの2つを指定していて、サブドメインに設定してなかったことが原因っぽいです(そもそもサブドメイン作ってないのに欲張り過ぎた)。気を取り直して再度挑戦しましたが、先ほど登録したDNSレコードがキャッシュのため完全になくなってないので、なくなるまで待たなければいけません。
レコードの設定情報のキャッシュ時間がなくなるまで待たなきゃです。今からやると寝れなくなるので明日までおあずけです。
さらにWindows Serverはpfxに変換しなければいけないので手間がかかります。
今週中に出来るかなぁ。。
フリーランスになるためにやったこと
3/31付で会社をやめました、長く働き過ぎた(3年
転職とかも考えたのですが
「転職して対して変わらん給料で特に学ぶことも変わらないなら意味なくね?」
と思ってフリーランスでしばらくは活動しようと思ったので、そこでいろいろやったのでここに書こうと思います。
会社に在籍中にクレジットカードを作りまくる
フリーランスになるとカード等の審査が通りにくくなるらしいので、とりあえずカードを作りまくりました。オリコ、三菱、みずほなど計5つぐらい作りました。
エージェントを使う
フリーランスと言っても仕事をもらえるほど人脈があるわけではないので、エージェントを使いました。エージェントに職務経歴書を見せて単価を決めれば勝手に面接の日程を設定してくれます。で適当に雑談したら仕事決まる感じです。ある程度、技術をキャッチアップしている人なら面談というより、技術共有で面談が終わるのでそこら辺は転職より楽だなぁと思いました。
エージェントに単価を交渉する
希望単価をある程度決めておいて提示した金額で交渉します。ちょっと多いかな?と思うぐらいの単価で交渉しても良いかもしれません。私の場合は、企業の予算と募集要項にどれだけマッチしているかを比較して、単価を出しました。60万の単価で募集要項に完全にマッチしてるのであれば、予算と同じ金額を提示しても良いと思います。
ポートフォリオを作る
これは正直いらないと思います。趣味でプログラムやるのが苦痛じゃなければ作ったほうが良い程度で、特に面談とかには影響しないと思います。ポートフォリオ作って問い合わせフォームとか作っていると「おっ?」ってなる問い合わせが増えたりするので普通に面白いですよ。
tekitoumemo.hatenablog.com
tekitoumemo.hatenablog.com
tekitoumemo.hatenablog.com
在籍中に使ったテクニックや学んだ知見をブログに書く
やったことの1割ぐらいしかかけてない気がしますが、自分の身の回りの整理をしながら盗んでいくのは良かったなと思いました。これとかね↓
tekitoumemo.hatenablog.com
Gihubのお金を払うからアカウント消さないでほしいなぁ。
厚生年金から国民年金への切り替え
市役所行くとめっちゃガラガラなので一瞬で終わります。1万6千ぐらい払って下さいって言われます。
個人事業の開業届出書
税務署で開業届けを出します。正直なにも準備していかなくてよいです。なぜなら税務署の人はめっちゃ親切で、なにも準備しなくても一からおしえてくれますし、聞いてないことも教えてくれます。準備するのは屋号ぐらいでしょうか、ここは空欄でも良いので私は空欄にしました。
青色申告承認申請書
これも税務署で提出します。ここもなーんにも準備しなくても問題ないです。なんでこんなに親切なんだ?
会社の健康保険から国民健康保健への切り替え
市役所でやればよいのですが、会社員であれば任意継続というものが使えます。どのようなことかというと、在籍していた会社の健康保険に2年間は継続で入れるという仕組みです。IT健保は結構良いみたいなので、一応入りました。IT健保の人は全然親切じゃないです。
わりとまじめにサービスを作った
ずっとWEBサービスを作りたいと思っていて、時間やアイデアなどなかなか思い浮かばなくてずっとやらずにいましたがもう諦めついて
「趣味をWEBサービスにしちゃおう!」
と思いわりとまじめに作りました。それがこちらです。
みんなの洋楽ランキングは最新の洋楽ランキングの情報を発信している。気になる曲のランキングや内容。アーティストの情報など詳しく載せている。洋楽の初心者から上級者まで楽しめる。Youtubeのランキングや再生回数などから最新洋楽ランキングを見れる
「みんなの洋楽ランキング」とは
ビルボードランキングを通じて洋楽を身近に感じるようなサービスです。洋楽の情報は散乱していて、個人のブログがメインなので、もう少しまとまっててもよいのかなぁと思いますし、日本で流れている洋楽は外国でヒットしてから半年〜1年前のものが多く、ちょっと出遅れている感が否めないのでとっつきやすくわかりやすいサイトがあると良いと思いました。今現在、Youtubeと同じぐらいに強力なメディアとされているSpotify VIRAL Top 50の日本ランキングにエド・シーランの「Shape Of You」が2位になるなど、日本国内でも洋楽はメジャーな音楽になっていることがわかります。
spotifycharts.com
作った技術について
C# 7.0
.Net Framework 4.7(大失敗)
Azure Web Service
Azure Database
Jquery
BootStrap
API Reference | YouTube Data API (v3) | Google Developers
基本は.Net Frameworkベースの技術で、WEBサーバーなどははPaasであるAzureを選定しました。ここらへんは他の記事で深く書こうと思っているので深くは書きません。
このサービスでこだわったところ、こだわり続けたいと思っているところ
「洋楽」のキーワードを軸に
サービスを作る上で、そのサービスがどうあるべきか、どうなったらよいかを考えるのは非常に重要だと思います。このサイトは日本の洋楽情報をまとめたプラットフォームとして成り立たせることを目的としているのでこの軸は絶対にずらさないようにしたいと考えています。SEOでも、ここの軸がずれると大幅に順位を下げたりするので一番大切なことかなと思っています。
会員登録などのユーザー操作が複雑な改善は極力しない
「みんなの洋楽ランキング」はメディアサービスなので、会員登録などのフローは入れない予定でいきます。ここは僕の勝手な考えですが、会員事業というものはここ数年で流行らなくなるなっている気がします。前職で自社サービスを運用していましたが、ただでさえ流入を増やすのが難しいのにさらにメールアドレスを用意させ、登録させ、本人確認させるというフローはサービスに対して本気でなければやらないので、メディアサービスとして展開するのであれば絶対にいらない機能だと思います。以下の記事を書いた子は大学生なのに的確なことを記事にしていて納得させられました。
www.eggineer.info
更新し続けられるように仕組み
洋楽のランキングは1週間でほとんど入れ替わりがないので、比較的更新するのが楽です。外出先でも、ちゃちゃっと更新出来るような仕組みを作りました。デザインはダサい(ユーザーに見られないから問題ない)ですが、曲名はプルダウンで設定でき、ランキングの数値は自動で付与されます。ランキング自体は1分程度で更新出来ていますので、良かったかなと思います。
さらにこの紹介ページの文章など、通勤時間にググったことを書き溜めて登録すれば反映されるので非常に楽です。最近は書くのすらめんどくさくなっちゃったので、iPhoneのマイクを使って文章化しています。
めんどくさいところは究極に手を抜く
私の場合はインフラやデザインは得意でなく、好きでもないので究極に手を抜きます。プログラムの部分は時間をかけて、他はお金で解決するか仕組みを持ってきて改善するか心がけます。Azureは本当に楽で全く苦労せずにデプロイまで持ってこれました。お金はかかりますが、状況見てスケールアップするなど、かかる費用をコントロール出来るのも最高です。VPSも考えましたが、今の需要はVPS<Paasになっていますので学習コストと考えればかかる費用もそんなに気にならないと思います。貧乏暇なしというのはこういうことだったんですね。まぁそこまで高くないですよ。
Railsが個人サービスの記事に取り上げられている理由の一つがHerokuでGithubにデプロイしたらリリース出来るので、Web系の手軽さが良いのだと思います。
どのぐらいの期間で作ったか
思い立ってから3ヶ月ちょっと程度かかりました。実際は、仕事探したり、式の準備したり、フリーソフトの業務提携したりなどなかなか忙しい日々を過ごしていたので週に2日1時間ぐらいの時間しか取れていませんでした。Github Insightが物語ってます。
2月から3月頭が一番忙しかったので、ほぼいじれてないことがわかりますね。Github Insightは誰がどのぐらい貢献したかの度合いなので、偉い人は評価の1つとして見ても良いかなと思いました。前職では、一番若い女の子がダントツで一位でしたよ。
失敗したこと
Windowsでしか開発出来ない環境を作ってしまった。
.NetCoreにすればLinuxでもMacでも開発出来ますし、Ngixで動いているのでAzureじゃなくてもよいです。.NetFrameworkの選定はミスったなぁと思いました。今は一人でこもってられる時間がそんなにないので、リビングでテラスハウス見ながら開発出来る仕組みを作らなければいけないと思っています。これは5月までに改善したい。
独自ドメインのSSL化が、、、
独自ドメインも買いまして、いざワイルドカードSSL化をするために「Let's Encrypt」を使って試したのですが、アクセス権のエラーに悩まされました。Azureドメインでも運用出来るので、暇があったら再度トライしようかな程度になってしまった。。ワイルドカードSSLは高いので、ちょっと買えません。
letsencrypt.org
ステージング環境とデプロイ環境の区別ができていない
Azure Web ServceのデプロイはVisualStudioからやっているので、開発してユニットテスト(XUnit)が成功したらデプロイしています。問題なさそうに見えますが、切り替えるのが面倒で開発中もAzure Databaseに接続しているのでいつか絶対事故が起こります。うまく同期を取って運用出来る仕組みを考えなきゃです。
これからどうしていくか
このサイトは1年間の事業投資(自分への投資)として運用していくので、目標を決めてそれが達成出来なければ閉鎖しようと考えています。予算(自分の懐)と相談し、ライターさんを雇ったり、広告を出すことも視野に入れています(ライターさんに関しては、少し動いています。)また、目標ばかりとらわれず「やらなきゃいけないこと」、「数値を増やしていくための改善」はしっかりと線引きをしていく必要があると考えています。どういうことかというと、TwitterCardの例ではキャプチャが同じなので流入が見込めないという課題は「数値を増やしていくための改善」でコンテンツを増やすための運用改善は「やらなきゃいけないこと」です。2つを比較するとTwitterCardを改善したほうが効果が出そうと考えられますが、駆け出しのサービスはまだコンテンツも少なく地盤を整える必要があるので運用の改善を早急にすすめる必要があると考えます。
最後に
「わりとまじめにサービスを作った」というタイトルなので、わりとまじめに偉そうに記事を書きましたが実際はイラストのようにお菓子食べながらYoutubeで新曲を聞きながら適当に作りました。モチベーションが一番重要なので、はじめはいい感じに気合を入れずに作っても良いかもしれませんね。
あ、良かったらシェアして下さい(切実)
twitter.com
MacMiniでデュアルディスプレイが最強すぎた
私は今までMacMiniの2014年モデルをBenQのディスプレイに繋いでプログラミングやらやってました。
これ↓
APPLE Mac mini (1.4GHz Dual Core i5/4GB/500GB/Intel HD 5000) MGEM2J/A
- 出版社/メーカー: アップル
- 発売日: 2014/10/21
- メディア: Personal Computers
- この商品を含むブログを見る
BenQ モニター ディスプレイ GW2270HM 21.5インチ/フルHD/AMVA+/HDMI,VGA,DVI端子
- 出版社/メーカー: ベンキュージャパン
- 発売日: 2016/11/04
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: 東プレ
- 発売日: 2006/02/25
- メディア: Personal Computers
- 購入: 14人 クリック: 732回
- この商品を含むブログ (62件) を見る
最高だわ、MacでC#環境ないのでWindowsですが。手前のアームレストは自作でぶっちゃけかっこつけです。
あとMacMiniでデュアルディスプレイにするにはこいつが必要です。
Amazonベーシック Mini DisplayPort - HDMI 変換ケーブル 1.8m
- 出版社/メーカー: AmazonBasics
- メディア: Personal Computers
- この商品を含むブログを見る
これでしばらくは引きこもれそうです。
【Azure】インメモリ OLTPのセッション管理がBasicプランで使えなかった
tekitoumemo.hatenablog.com
以前書いた記事でインメモリOLTPのセッション管理を説明しました。
が
Azureにデプロイしたら以下のエラーが発生しました。
Unable to connect to SQL Server In-Memory session database. at Microsoft.Web.SessionState.SqlStore.SqlExecuteReaderWithRetry(SqlCommand cmd, CommandBehavior cmdBehavior) ...
SQL Serverのメモリ内セッションに接続出来ませんとのこと。昨日に記事に書いたIPアドレスや、セキュリティの問題かと思いBasicプランのhttpsで接続を試みると..
Unable to connect to SQL Server In-Memory session database. ...
エラーメッセージがわかりにく杉。エラー内容をいろいろ調べると以下の記事を発見。
azure.microsoft.com
AzureのPremiumプランからしか使えないらしい。。Premiumの最低プランでも5万以上するので普通に無理でした。
マネージインスタンス、エラスティクプールなどは使えるらしい。
諦めて普通にCookieセッションに変えました。
【.NET Core, Azure SQL Server】ubuntuを使って.NET CoreでAzure Databaseを扱う
前回は.NET Coreをubuntuで動かすものを記事にしました。今回はubuntu上で.NET Coreを使ってAzure Databaseを動かせるかという検証です。ubuntuに.NET Coreを動かす場合は以下を参考にしてください。
tekitoumemo.hatenablog.com
僕の持ってるサブPCはポンコツでSQL Serverを入れたらパンクしちゃいます。メモリが3.25G以上が推奨ってもう無理じゃん。。
tekitoumemo.hatenablog.com
qiita.com
AzureDatabaseで動かして開発できたらポンコツPCでもなにかと使える!と思って検証しました。また、ubuntu上でAzure SQL Serverを動かすにはどんな作業が必要なのかの検証も含め、実施しました。結果
楽勝でした
はい。
Azure Databaseを作成します。
[SQLデータベース]をクリック→[SQLデータベースの作成]をクリック
必要な情報を入力します。
- データベース名
- サブスクリプション
- リソースグループ
- ソースの選択
これらは任意の情報を入力してください。
- サーバー
Azure SQL Serverはデータベースのサーバーを構築しなければいけないのでこちらの設定を行います。
こちらも任意の情報を入力してください。
- SQLエラスティックプール
こちらは大規模なDBでスケーリングするときの予算や規模の設定が出来ます。今回は検証なので「いいえ」にしておきます。
- 価格レベル
超知りたいところですね。SingleDatabaseだとBasic、Standard、Preniumの3つがあるので、今回はBasicにします。2G使えて、東日本リージョンで月額600円代です。Standardの250Gが使えるプランでも月額1800円程度なのでめっちゃ安いです。以下の計算ツールで計算出来ます。
azure.microsoft.com
これらの情報を入力したら作成します。ものの5分で作成出来ます。
.Net Coreの準備をします。
今回はEntity Framework Coreを使います。めっちゃ雑ですが、Githubにサンプルを載っけてるので参考になればと思います。
github.com
onConfigメソッドを作成します。
using Microsoft.EntityFrameworkCore; using System.Data.SqlClient; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 接続文字列を指定する var connectionString = ""; optionsBuilder.UseSqlServer(connectionString); }
Nugetから「Microsoft.EntityFrameworkCore」、「System.Data.SqlClient」をインストールして下さい。接続文字列はAzure Portalに記載されています。真っ赤にぬりつぶされたところに記載されています。
モデルとモデルをマッピングする処理を記載します。
public DbSet<Test> _test { get; set; } public class Test { public int Id { get; set; } public string Name { get; set; } public DateTime CreateTime { get; set; } public Nullable<DateTime> UpdateTime { get; set; } } protected override void OnModelCreating(ModelBuilder modelBuilder) { // テーブルにマッピングする modelBuilder.Entity<Test>().ToTable("Test"); }
modelBuilder.Entityにジェネリックでモデルを指定し、ToTableの引数にテーブル名を指定します。その他、モデルクラスとプロパティを設定します。
呼び出しの実装を行います。
using (var dbContext = new AppDbContext()) { var test = dbContext._test.ToList(); }
これで一通り完成です。
それではVSCodeでデバッグしてみます。
例外が発生しました。このIPアドレスは接続出来ないよ!ってエラーです。Azure Databaseではファイアウォールが設定されているので接続するIPを除外してあげなければいけません。
ファイアウォールの設定を行います。
[概要]→[サーバーファイアウォールの設定]をクリックします。
[クライアントIPの追加]を押下します。先ほどアクセスしたので、そのまま設定が出来ます。もちろん、手動で入力することも出来ます。
設定が完了したら再度、接続してみます。
ちゃんとデータが取れました!
これで、ubuntu上で.Net Coreの開発がまともにできるようになりました。やっとこれでリビングで寝っ転がりながら開発ができる!
【.Net Core 2.0,Ubuntu】Ubuntu16.04でASP.NET MVCを動してみた
Ubuntu 16.04を入れたので、.NET Coreを入れて動かしてみました。結構、いろんな記事みて理解しながらやったので、まとめます。
.NET Coreを入れる
パッケージのダウンロード。今回は「.NET Core 2.1.0-preview1 」を入れます。
wget -q packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
パッケージのダウンロード
sudo dpkg -i packages-microsoft-prod.deb
apt-transport-httpsのインストール
sudo apt-get install apt-transport-https
アップデート
sudo apt-get update
.Net Core 2.0のインストール
sudo apt-get install dotnet-sdk-2.1.300-preview1-008174
Consoleアプリのビルドと実行
mkdir test cd test dotnet new dotnet restore dotnet run // 出力 // HelloWorld
一旦、NetCoreが動く環境になりましたが、MVCやSPAを作りたいので他に環境を作らなけばいけません。ちなみにここまでは以下の記事を参考にしました。めっちゃわかりやすい!
kledgeb.blogspot.jp
Nodeの環境を構築
NPMを入れる
sudo apt-get install npm
NPMを最新版にする
sudo npm install -g npm
NVMを入れる
$ git clone https://github.com/creationix/nvm.git ~/.nvm $ source ~/.nvm/nvm.sh
NVMのバージョンリストを確認。
nvm ls-remote
以下のような感じでバージョン情報がズラッと並びます。私はLTSの最新であるv8.10.0を入れました。
v8.9.0 (LTS: Carbon) v8.9.1 (LTS: Carbon) v8.9.2 (LTS: Carbon) v8.9.3 (LTS: Carbon) v8.9.4 (LTS: Carbon) v8.10.0 (Latest LTS: Carbon) v9.0.0 v9.1.0 v9.2.0 v9.2.1 v9.3.0 v9.4.0 v9.5.0 v9.6.0 v9.6.1 v9.7.0 v9.7.1 v9.8.0
デフォルトのバージョンを指定
nvm alias default v8.10.0
NVMは入れたほうが便利です。以下を参考にしました。
qiita.com
Yeomanインストール
sudo npm install -g yo
僕は間違えて古いnodeを入れていたので以下のエラーが発生しました。
saito@saito-Aspire-one-1-131:~$ sudo npm install -g yo [sudo] saito のパスワード: ERROR: npm is known not to run on Node.js v4.2.6 Node.js 4 is supported but the specific version you're running has a bug known to break npm. Please update to at least 4.7.0 to use this version of npm. You can find the latest release of Node.js at https://nodejs.org/ sudo apt install git
このエラーは古いバージョンは動かないよってやつで、nvmでバージョンを新しくしても発生するのでバッサリ削除して入れなおしました。以下を見ました。
stackoverflow.com
sudo apt remove nodejs npm curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - sudo apt-get install -y nodejs
ASP.Net Generatorをインストール
sudo npm install -g generator-aspnet
bowerをインストール
sudo npm install -g bower
.NET Coreに必要なものをひたすら入れる。片っ端から入れるので5Gぐらいは減ります。
sudo apt-get install dotnet-dev*
ここまでで一通りの環境構築は出来ました!
MVCを動かす
テンプレートの作成
mkdir test cd test yo aspnet mvc
ここでログを取り忘れちゃったんですが、コマンドがない!とのエラーが出ます。権限のエラーなので以下を実行します。わかりにくいエラーやな。
sudo chmod -R 777 ~/.config/".
再度作成し、プロジェクトの実行を行います。
yo aspnet mvc
やったー!
あとはnuget取って実行します。
dotnet restore dotnet run
http://localhost:5000/にアクセスして完成しました。
以下がめっちゃ参考になりました。
blankstechblog.com
VSCodeでデバッグする
VSCodeのデバッグは以下を参照。
ytabuchi.hatenablog.com
VSCodeでデバッグする際に以下のエラーが発生しました。
OmniSharp.MSBuild.ProjectManager Failed to load project ..
このエラーはOmniSharpが読み込めませんとのエラーのようで、ubuntuではmonoで動いているのでmonoを入れて対応します。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list sudo apt-get update apt-get install mono-devel
monoのバージョン等は以下から取得してください。
Download - Stable | Mono
この記事が参考になりました。
github.com
これで開発環境が完成しました。
やったね!
あとはどのぐらいこの環境で不便があるか触りながら開発してみようと思います。