Let's Encrypt
2018/03/16 17:53:43Noranekoです。
ということで、約一年半ぐらい前にLet's Encryptを使ってSSL化しました。
当時の手順を書こうと思ってて、こんなに月日が流れてしまった…
しかし!
今回新たにワイルドカードにも対応したので、ここに書き留めておきたいと思います。
先ず私はcertbotをcronしてたのでこいつを削除。
次にcertbotのディレクトリで証明書を失効します。
# ./certbot-auto revoke --cert-path /etc/letsencrypt/archive/hoge.com/cert1.pem
次のコマンドで証明書等を消します。
# ./certbot-auto delete -d hoge.com
もう使わないので、certbotディレクトリごと消します。
# rm -rf ../certbot/
今回調べてたらcertbotがyumで提供されてるので、
これは楽ちんということで、yumしちゃいます。
# yum -y install epel-release
# yum -y install certbot
# yum -y install certbot
そしたらcertbotを起動します。
# certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory \
> --preferred-challenges dns \
> -d *.hoge.com -d hoge.com -m mail@hoge.com \
> --agree-tos --manual-public-ip-logging-ok \
> --preferred-challenges dns \
> -d *.hoge.com -d hoge.com -m mail@hoge.com \
> --agree-tos --manual-public-ip-logging-ok \
この辺を詳しく知りたい方は、
あぱーぶろぐへ!
よくわからない人は、この方にどしどし質問しましょう!
他のサイトもちらほら技術解説があったんですが、
この方がサブドメインなしのドメインを追加していたので非常に参考になりました。
これを叩くと「DNS TXTにdeployしろよカス」
と言うのが2回表示されます。
この2回と言うのが今回重要です。
あぱーさんはすらっと流してますが、ここでほんのり躓きました。
なんて小心者なので言えませんが、ネット弁慶なので書き込むことはできる。
んで何故2回なのか?
ふかわりょうでもリスペクトしてるのか?
違います。
つまり*.hoge.comのみで登録するとhttps://hoge.com/でエラーが出ちゃうんです。
その為、*.hoge.comとhoge.comを登録することで2回出てくるのです。
多分。
よくわからないので、あぱーさんに聞いて。
てか意識高いQiitaとかはてなとか、ほんと使えない。
技術を参考したい時は、あぱーさんみたいなこういう個人で技術サイトを作ってる人が断然参考になる。
そんでこの値をDNSのTXTに書きます。
ここで重要なのは2個作ること!
ほんと、あぱーさんちゃんと書いておいて下さいよ!
ということで、お名前.comを使ってる方は、
ネームサーバーの設定 > DNS関連機能設定 > DNSレコード設定を利用する
の新規作成で
ホスト名に _acme-challenge
TYPEを TXT
VALUEに 表示された文字列
追加を押して、これを2個作ります。
浸透するまで5分くらい待てばいいかな?
5分待ってから何かキーを押して、
Congratulations!
が出たら成功です!
後はhttpdのconfとかに書くか、あぱーさんに聞いてSSLを設定して下さい。
PS
あぱーブログはとても参考になりました。
ありがとうございました!
気に入ったら押してね
~こんなアプリ出してます~
MySQL
2015/10/15 23:00:57Noranekoです。
思うところがあり、MySQLをチューニングしてみました。
システムにもよりますが、今まで数千件のデータを一件ずつグルグル回してinsertしてたのですが、
ちょっと時間もかかるようになってきたので、一括insertに変更しました。
SQLなんかも特に難しい書き方はせず、
『,』
で繋げていくだけです。
INSERT INTO
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
これが基本。
で、最後のカンマを取りたいのでphpを使って、
$sql = substr($sql, 0, -1);
$res = $dbCon->query($sql);
$res = $dbCon->query($sql);
として、流しましょう!!
よしよし、これでぐっすり寝れる。
寝れませんでした!
Duplicateエラーでこけてました。
しかも一気に流すので、ひとつもINSERTできていませんでした^q^
当然やね!
なので、最初のSQLにある魔法の言葉を加えます。
INSERT IGNORE INTO
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')
どこが変わったかよくわかりませんね。
IGNORE
これを追加しました。
無事INSERTできて、ぐっすり眠れる日が来ました。
しかし、ある日見慣れぬエラーが!!!
次回、
『迫りくる脅威、この愛は届くのか?』
をお送り致します。
と、次回に持ち越しても良かったんですが、備忘録にならないので続けます!
それで、その時遭遇したエラーと言うのが、
MySQL server has gone away
義務教育6年間+αの英語教育を習った私は驚愕しました。
has gone away
この言葉の重み!!
直訳すると
『逝ってしまわれた』
ですよ!!
しかも、present perfectです!!
うおおおおおおDB逝ったあああああ!
と思いましたが、MySQLWorkbenchは繋がってSQLも打てる状態でした。
なんなんだこのエラーメッセージは...
ORACLEしかり何故こうもDBのエラーメッセージはうんこなのか?
わかりやすいエラーを表示すると死ぬの?馬鹿なの?
ということでググル先輩に聞いてみたところ、タイムアウトとかいろんな要因がでてきます。
が、私の場合心当たりがあるので、そこを調べてみたところビンゴでした。
その前に下記のSQLを流してみましょう
SHOW VARIABLES LIKE 'max_allowed_packet'
>1048576
>1048576
となるはずです。
これは一回のSQLで流せるのが1,048,576Byte
つまり1MBですよ!
と言う意味です。
案の定、数千件のINSERT文のバイト長を調べたところちょっと超えていました。
一応カラム長とかから、大雑把に計算してその件数を決めていたのですが、
本当にわずかに超えていました。
おしかったね!
ちなみにバイト長を調べるには、
echo(strlen($sql));
とすればわかります。
なので件数を半分にしました。
これでぐっすり眠れるようになりました!
おしまい。
気に入ったら押してね
~こんなアプリ出してます~
アクセスログ
2015/03/05 14:42:09消費税増税に備えて、ねこに小判のアップデートとかそろそろ着手しなきゃ。
てことで、今までThe Webalizerを重宝してましたが、
デイリー情報が欲しくなったので自作してみました。
基本的に、アクセスログを集計する際には
/var/log/httpd/access_log-yyyymmdd
のファイルを使いますが、phpとかで集計しようとするとアクセス権がござらん!
なので最初に
chown -R apache:apache httpd
として、アクセスできるようにしましょう。
これで90%完成です。
あとは分解して、DBに入れておしゃれにするだけです。
簡単ですね^^
で、出来上がったものがこちら!
まずは年間
次に月間
グラフをクリックするとデイリー詳細に飛ぶようにしてます。
詳細には、
アクセスファイルTOP50、アクセスドメインTOP50、リファラーTOP50を表示してて、
こんな感じになります。
通常のページでは月間の詳細も表示しています。
グラフはhighchartsを使ってみました。
先程の月間からのクリックイベントの入れ方は、
series: {
cursor: 'pointer',
point: {
events: {
click: function () {
var loc = "hoge.html";
window.open(loc, "new");
}
}
}
}
cursor: 'pointer',
point: {
events: {
click: function () {
var loc = "hoge.html";
window.open(loc, "new");
}
}
}
}
こんな感じです。
デイリー詳細を別ウィンドウで見たかったので、window.openしてます。
ほんとはjava scriptの中にデータをカンマで作るのが嫌で、他のを使っていたんですが、
そっちはデザイン部分がかなりいけてないので、結局highchartsになりました。
そんなこんなでデイリーも取れて満足してます!
ソースは出しませんが、どうしてもって言うならzipにしてもいいんだからねっ!
気に入ったら押してね
~こんなアプリ出してます~
CentOS7始めました Vol.3
2014/12/02 11:34:35Noranekoです^ω^
アプリは絶不調ですが、投資の方が絶好調☆彡
Studio neko投資方法は、
『宵越しの銭はいらねぇ、利益を倍プッシュだ!』
...
......
ふえぇぇ...ジェントルドンナ...
ということで、前回から時間が空きましたが、今回はMTAについて語りましょう。
MTA(Message Transfer Agent)つまりメールサーバですね。
結論から申し上げると、
ぐーぐる
を使うのが楽です!
スペルミスとか、その辺のブログサイト見て間違った値を設定したりと
毎回思うけど、これは結構大変な作業ですね。
なので未来の自分の為に、今回は手順書も作成しました。
んで、CentOS7なんですが、標準MTAがPostfixになっています。
自分もだいぶ前からPostfixに慣れ親しんでいたので良いと思います。
設定の際にIPとか調べようとしたんですが、まさかifconfigまでないとか...
ifconfig
↓
ip a
netstat
↓
ss
↓
ip a
netstat
↓
ss
短くなることは良いことです!
Postfixが標準になってるなら、Dovecotも入れとけよと思うんですが入ってませんね。
Dovecotのロゴはアウトドアグッズの会社っぽくて良いですね。
こんなん
SASL認証とかで必要な物とかも一緒にインスコしておきましょう!
// dovecotインストール
# yum install dovecot
// SASLインストール
# yum install cyrus-sasl
# yum install cyrus-sasl-md5
# yum install cyrus-sasl-plain
# yum install dovecot
// SASLインストール
# yum install cyrus-sasl
# yum install cyrus-sasl-md5
# yum install cyrus-sasl-plain
cyrus-sasl-md5がなくて認証がはじかれてました。
どなたかのブログに書いてあって助かりました。
後重要なのはポートの解放
// SMTP
# firewall-cmd --add-service=smtp --permanent
// Submission
# firewall-cmd --add-port=587 --permanent
// POP3S
# firewall-cmd --add-service=pop3s --permanent
// 再起動
# systemctl restart firewalld
# firewall-cmd --add-service=smtp --permanent
// Submission
# firewall-cmd --add-port=587 --permanent
// POP3S
# firewall-cmd --add-service=pop3s --permanent
// 再起動
# systemctl restart firewalld
serviceの名前があるやつとないやつがあって、Submissionはなかったので、
上記のようにポートを指定して開けます。
あとはまってたのが、
SELinux
つかこれ、みんな切ってるでしょ?
インスコした後に最初にこれ切ってるでしょ?
httpdとかDBに関してはこいつは特に悪さしてなかったので放置してたんですが、
Postfixでとうとう悪さをしてきたので、切りました!!
# setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=permissive
# reboot
# vi /etc/sysconfig/selinux
SELINUX=permissive
# reboot
こんな感じで無効に。
最後にメールの送受信ができなかった時は、
# tail /var/log/maillog
とにらめっこしながら、原因を追究するしかありません。。。。
SASLのエラーでは、
warning sasl authentication failure internal error ***
SELinuxでのエラーは、
fatal open /etc/postfix/main.cf permission denied
と出てました。
ほんとオラクルのエラーみたいにわかりやすくていいですね!
F*CK :)
P.S.
前回からのCentOS7についての記事ですが、
最小構成インストール時の初期設定の値を表記してます。
気に入ったら押してね
~こんなアプリ出してます~
CentOS7始めました Vol.2
2014/10/06 15:48:18こんな日は家で構築したサーバに、ソフトインスコ作業に限りますね。
そんなわけで前回の続きになります。
インストールが終了し、再起動をすると
この画面になります。
そしたら、
$ su -⏎
Password
Password
パスワードと出たら前回入力したパスワードを打ち込んでrootになります!
パスワードとか忘れがちなので、
次はなんとなくアップデートしましょう!
# yum -y update⏎
-yを付けることによって画面を監視してなくても、
イエスマンでどんどん作業が捗るという魔法の呪文です。
■ MySQLをインスコしよう!
なんとCentOS7ではMySQLがなくなっています!
MySQLの代わりにMariaDBになったらしいです。
今のところ完全な互換性があり、
コマンドも使えるのでとりあえずは一安心です。
# yum -y install mariadb mariadb-server⏎
現在、5.5.37辺りがインスコされます。
それで今回のCentOS7ですが、
以前までのヴァージョンでは
# /etc/init.d/*** restart
# service *** start
# chkconfig
# service *** start
# chkconfig
とサービス起動とかしてきましたが、
今回から、
// サービスの状態
# systemctl status ***
// サービス再起動
# systemctl restart ***
// サービス設定再読み込み
# systemctl reload ***
// サービス自動起動登録
# systemctl enable ***
# systemctl status ***
// サービス再起動
# systemctl restart ***
// サービス設定再読み込み
# systemctl reload ***
// サービス自動起動登録
# systemctl enable ***
という風にsystemctlでなんかしろって言われますね。
なので、
# systemctl start mariadb⏎
# systemctl enable mariadb⏎
# systemctl enable mariadb⏎
として起動させます。
そしたらあとは、以前のMySQL設定と一緒です
// 初期化
# mysql_secure_installation
// とりあえず入ってみる
# mysql -u root -p
# mysql_secure_installation
// とりあえず入ってみる
# mysql -u root -p
ここまできたらokです。
あと、自分はDBのデータをコマンドで見たり、
webでツールで見たりするのは作業効率が非常に悪いと思っており、
常にツールを使ってデータを見ています。
今回のこのMariaDBもMySQLWorkbenchで繋げることができたので、
ご紹介しておきます。
http://www-jp.mysql.com/products/workbench/
上のリンクからダウンロードできます。
最新のMySQLWorkbench 6.2で確認しました。
話がちょっと飛びますが、このツールを使う際に3306を開けるのでなく、
SSHでトンネリングして使います。
起動したら、こういう画面になります。
この画像ではすでに4つの接続先が登録されています。
接続先を登録するには左上の『+』を押します。
このウィンドウが表示されるので、
[Connection Method] [Standard TCP/IP over SSH]に変更
[SSH Hostname] SSHの接続先(IPとポート番号等)
[SSH Username] SSHのユーザ
[SSH Key File] 秘密鍵がある場合は参照します
[Username] MriaDBに繋ぐMariaDBユーザ
入力後、右下の『Test Connection』を押して接続できるか確認しましょう。
無事接続できたらDBについては終わりにしましょう。
■ phpをインスコしよう!
世界にはいろんな言語がありますが、自分の好きな言語でおk
ただ、フレームワーク系の言語やオブジェクト指向言語を
webで使うのはオススメできません。
テキストボックス一個追加するだけなのに
3、4個のファイルを変更するとかちょっとね…
asp.netの話になるんですがasp.netのポストバックの考えは好きですね。
ってフレームワーク系やん!!!!
言語じゃなくて考え方です><
自分は仕事でいろんなサイトを作ってきましたが、
仕様変更しつつ運用するというのがweb開発では重要なので、
1ページ1ファイル(表示と処理)という考えに行きついています。
この辺の話は長くなりそうだし、相容れないプログラマの聖域なので
自分の好きな言語で好きな書き方で作ればいいんですよ。
ということで、phpをインスコしましょう。
# yum -y install php php-gd php-mbstring php-mysql
最低限これだけあればおkですね。
ヴァージョンは5.4.16です。
そんで依存関係で勝手にhttpdもインスコされています。
ひどい話です。
が、久々にhttpdでもええかなって。
ということでhttpdを使いましょう!
多分すでに動いていると思いますが、
# systemctl start httpd⏎
# systemctl enable httpd⏎
# systemctl enable httpd⏎
と設定しましょう。
ちなみにヴァージョンは2.4.6でした。
で鯖のurlを叩きましょう。
ほら、見えない!!
多分ですが見えないはずです。
だってポート空いてないから。
なのでiptableしましょう。
…
……
…………
command not found
そうなのです。
CentOS7はここも違うのです。
// 現在の状態をみます
# firewall-cmd --list-services⏎
// ポート追加します
# firewall-cmd --add-service=http --permanent⏎
# firewall-cmd --list-services⏎
// ポート追加します
# firewall-cmd --add-service=http --permanent⏎
という風にfirewall-cmdしましょう。
--permanentというのを付けないと再起動した時に、
せっかく空けたポートが閉じていたので多分必要です。
これでもう一度鯖のURLを叩いて確認しましょう。
多分見えるはずです!
あとはapachのconfとかユーザとか整理するだけですね。
最後にEPELリポジトリの追加を
# yum install epel-release⏎
これはちょっと便利ですね。
長くなりましたが、CentOS7はちょこちょこ変わってます。
いろんなブログを見て、比較して構築することをオススメだょ!
気に入ったら押してね
~こんなアプリ出してます~
BLOG内検索
Sun | Mon | Tue | Wed | Thu | Fri | Sat |
---|---|---|---|---|---|---|
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 |
カテゴリー