NginxでSSL対応サイトを作る

この記事では、Debian 11上のNginxでSSL対応サイトを作る方法を紹介します。 自己署名証明書を作成し、Nginxの設定を編集します。 Nginxの設定ファイルの詳しい解説は以下の記事を参照してください。 【Debian】NginxでVirtual Hostsを使って複数のドメインを設定する方法【Server Blocks】 | あまブログ 1. 環境 Debian GNU/Linux 11 bullseye (さくらのVPS) Nginx 1.21.6 OpenSSL 1.1.1 2. SSLの概要 まず初めに、SSLの概要を説明します。 2-1. SSLの暗号化方式 データのやりとりには共通鍵暗号を使う 共通鍵暗号で必要となる共通鍵の受け渡しに公開鍵暗号を使う 共通鍵暗号:暗号化と復号化に同じ鍵を使う 公開鍵暗号:秘密鍵で暗号化、ペアとなる公開鍵で復号化 2-2. 公開鍵証明書 SSL証明書、サーバー証明書とも呼ばれる 認証局によるデジタル署名がついたサーバーの公開鍵のこと 通信を行うサーバーが信頼できるかどうかを確認する仕組み デジタル署名を自身で行なった証明書を自己署名証明書と言う(オレオレ証明書) デジタル署名:秘密鍵で署名、ペアとなる公開鍵で検証 【公開鍵証明書発行の流れ】( 図解 X.509 証明書 #x.509 - Qiita より) 3. 手順 以下の手順で進めていきます。 公開鍵証明書の作成 Nginxの設定 また、本手順では、サーバーのホスト名をtest.comとします。 3-1. 公開鍵証明書の作成 サーバーの秘密鍵と公開鍵証明書を作成します。 まずは、opensslをインストール。 $ sudo apt install openssl 秘密鍵と公開鍵証明書を生成。(ここで生成される公開鍵証明書は自己署名証明書) $ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -subj /CN=test.com -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crt req:CSR(Certificate Signing Request:証明書署名要求)を生成するためのサブコマンド。 -x509:CSRではなく自己署名証明書を生成する。 -nodes:公開鍵証明書のパスフレーズ設定をスキップ。パスフレーズを設定するとNginxを再起動するたびに入力する必要がある。 -days:生成する公開鍵証明書の有効期限を指定。 -newkey rsa:2048:公開鍵証明書と秘密鍵を同時に生成する。rsa:2048で2048ビットのrsa鍵を指定。 -subj /CN=test.com:Common Nameにホスト名を指定。-subjオプションを指定しない場合、プロンプトが表示され入力を求められる。CN以外はテキトーな値でいい。 -keyout:生成する秘密鍵のファイル名を指定。 -out:生成する公開鍵証明書のファイル名を指定。 3-1-1. 細かくやると 先程行った秘密鍵と公開鍵証明書の生成を、「秘密鍵の生成」と「公開鍵証明書の生成」に分けて行うと以下のようになります。 ...

June 14, 2022

さくらのVPSに設定した独自ドメインにサブドメインを設定する方法

この記事ではさくらのVPSに設定した独自ドメインでサブドメインを利用できるようにする方法を紹介します。 これにより、契約ドメインは1つで複数のサイトを扱うことができます。 例えばfoo.comの独自ドメインにbarをサブドメインに設定することで、foo.comとbar.foo.comの2つのサイトを利用できます。 前提条件 さくらのVPSを契約済み 独自ドメインを取得済み(お名前ドットコムやXserverドメインなどで作成) サブドメインを作成済み(お名前ドットコムやXserverドメインなどで作成) 独自ドメインをさくらのVPSに設定済み さくらのVPSにXserverドメインで取得した独自ドメインを設定する方法 | あまブログ 1. 設定方法 1.さくらインターネットのドメインコントロールパネルにアクセス。 2.「ネームサーバサービス」を選択 3.以下の画面で、設定済みのドメインの「ゾーン>」を選択します。(画面右側) 4.「編集」を選択 5.「レコード追加」で以下の情報を入力して「追加」を選択 「エントリ名」→サブドメイン名(barなど) 「タイプ」→別名(CNAME) 「データ」→@ DNSチェック→チェックしない TTLの指定→チェックしない 6.「保存」を選択 以上で終了です。

June 12, 2022

【RuboCopエラー】Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||.

1. 環境 rubocop 1.30.0 Ruby 3.1.0 2. エラー内容 Favor modifier if usage when having a single-line body. Another good alternative is the usage of control flow &&/||. if文の中身が1行の場合は、後置ifを使用するか、&&または||を使用してください。 3. エラー対処法 # bad if some_condition do_something end # good do_something if some_condition # another good option some_condition && do_something RubyDoc.info: Class: RuboCop::Cop::Style::IfUnlessModifier – Documentation for rubocop (1.81.6) – RubyDoc.info rubocop/ruby-style-guide: A community-driven Ruby coding style guide

June 10, 2022

【RuboCopエラー】Use the return of the conditional for variable assignment and comparison.

rubocopでUse the return of the conditional for variable assignment and comparison.のエラーが出た時の対処法。 1. 環境 rubocop 1.30.0 Ruby 3.1.0 2. エラー内容 Use the return of the conditional for variable assignment and comparison. 変数の代入と比較には、条件式の戻り値を使用してください。 3. エラー対処法 # bad if foo bar = 1 else bar = 2 end # good bar = if foo 1 else 2 end RubyDoc.info: Class: RuboCop::Cop::Style::ConditionalAssignment – Documentation for rubocop (1.81.1) – RubyDoc.info rubocop/ruby-style-guide: A community-driven Ruby coding style guide Ruby: Use the return of the conditional for variable assignment and comparison - Stack Overflow 【Rubocop】Use the return of the conditional for variable assignment and comparison.エラーの対処法 - 紙一重の積み重ね

June 10, 2022

DebianにPostgreSQLをインストールして外部から接続する方法

この記事では、さくらのVPS上のDebianにPostgreSQLをインストールして、Macから外部接続する方法を紹介します。 1. 環境 Debian GNU/Linux 11 bullseye (さくらのVPS) macOS Monterey 12.4 PostgreSQL 14.3 2. 手順 以下の流れで進めていきます。 PostgreSQLのインストール 接続確認 ユーザの作成 外部接続の設定 外部接続の確認 2-1. PostgreSQLのインストール 2-1-1. 必要なパッケージのインストール まずは、PostgreSQLのインストールに必要な以下のパッケージをインストールします。 curl gnupg2 ca-certificates lsb-release 以下のコマンドを実行してパッケージをインストール。 $ sudo apt install curl gnupg2 ca-certificates lsb-release パッケージの情報を表示:apt show <パッケージ名> インストール済みパッケージの確認:apt list --installed <パッケージ名> 2-1-2. 署名鍵のインポート 次に、aptがパッケージの信頼性を確認できるようにするために、PostgreSQLが公式に公開している署名鍵をインポートします。 以下のコマンドを実行して署名鍵をインポート。 $ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null 2-1-3. リポジトリの追加 aptの設定ファイルにPostgreSQLの公式リポジトリを追加します。 以下のコマンドを実行して /etc/apt/sources.list.d 配下に設定ファイルを作成します。 $ echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list 作成された /etc/apt/sources.list.d/pgdg.list の内容は以下のようになります。 ...

June 10, 2022

【Ruby 3.1】カレンダーのプログラムを作る

1. 環境 macOS Monterey 12.4 Ruby 3.1.0 2. カレンダープログラムの要件 -mで月を、-yで年を指定できる 引数を指定しない場合は、今年・今月のカレンダーが表示される macに入っているcalコマンドと同じ見た目になっている 今日の日付の部分の色が反転する どのような引数が与えられようが、cal コマンドと同じ表示結果になる 3. ソースコード 3-1. 試作品(自作→レビュー反映) #!/usr/bin/env ruby require 'date' require 'optparse' today = Date.today options = ARGV.getopts("", "m:#{today.month}", "y:#{today.year}") if options["m"].to_i >= 1 && options["m"].to_i <= 12 inputed_month = options["m"].to_i else puts "cal: #{options["m"]} is neither a month number (1..12) nor a name" return end if options["y"].to_i >= 1 && options["y"].to_i <= 9999 inputed_year = options["y"].to_i else puts "cal: year `#{options["y"]}' not in range 1..9999" return end first_date = Date.new(inputed_year, inputed_month, 1) last_date = Date.new(inputed_year, inputed_month, -1) space = " " puts " #{inputed_month}月 #{inputed_year}" puts "日 月 火 水 木 金 土" print space * first_date.wday def color_reverse(text) "\e[30m\e[47m#{text}\e[0m" end (first_date..last_date).each do |full_date| day_of_week = full_date.wday if full_date == today print color_reverse(full_date.day).rjust(16) else print full_date.day.to_s.rjust(2) end print " " puts "" if day_of_week == 6 end puts "" 3-2. 最終形(自作→レビュー反映→他の人のコードを見る) #!/usr/bin/env ruby require 'date' require 'optparse' params = ARGV.getopts('m:y:') month = (params['m'] || Date.today.month).to_i year = (params['y'] || Date.today.year).to_i if month < 1 || month > 12 puts "cal: #{params['m']} is neither a month number (1..12) nor a name" return end if year < 1 || year > 9999 puts "cal: year `#{params['y']}' not in range 1..9999" return end start_of_month = Date.new(year, month, 1) end_of_month = Date.new(year, month, -1) puts " #{month}月 #{year}" puts "日 月 火 水 木 金 土" print " " * 3 * start_of_month.wday (start_of_month..end_of_month).each do |day| format = day == Date.today ? "\e[7m%2d\e[0m " : '%2d ' printf format, day.day puts "\n" if day.wday == 6 end puts "\n\n" 4. ソースコード(最終形)の解説 4-1. 主な使用メソッド Arguable#getopts Date.today Date#mon Date#year Date#wday Date#day Kernel.#printf 4-2. 解説 # 6行目 params = ARGV.getopts('m:y:') # 引数に「-m」と「-y」をとる # 7~8行目 month = (params['m'] || Date.today.month).to_i year = (params['y'] || Date.today.year).to_i # それぞれの引数が指定されなかった場合、monthに今月の月、yearに今年の年が入る # 10~13行目 if month < 1 || month > 12 puts "cal: #{params['m']} is neither a month number (1..12) nor a name" return end # -mオプションで1~12以外が指定された場合、エラーメッセージを表示して処理を終了 # 15~18行目 if year < 1 || year > 9999 puts "cal: year `#{params['y']}' not in range 1..9999" return end # -yオプションで1~9999以外が指定された場合、エラーメッセージを表示して処理を終了 # 20~21行目 start_of_month = Date.new(year, month, 1) end_of_month = Date.new(year, month, -1) # 月の初日と最終日 # 25行目 print " " * 3 * start_of_month.wday # 月の初日の曜日によって表示する位置を調整 # start_of_month.wdayには曜日を表す数値(日曜から0~6)が入る # 26行目 (start_of_month..end_of_month).each do |day| # dayに<Date: 2017-09-20 ...>の形式で月の初日から最終日までが入る # 27~28行目 format = day == Date.today ? "\e[7m%2d\e[0m " : '%2d ' printf format, day.day # 条件演算子によりdayが今日の日付の場合"\e[7m%2d\e[0m "が、それ以外の場合'%2d 'がformatに代入される # printfにより、指定したフォーマットでday.day(日付)が表示される(今日の日付の場合に色を反転して表示) エスケープシーケンスについて sprintf フォーマット フォーマット指定子一覧 # 29行目 puts "\n" if day.wday == 6 # 土曜日で改行

June 8, 2022

【Ruby】コンソールに出力結果を色付きで表示する方法【ANSIエスケープシーケンス】

この記事ではRubyの出力結果を色付きで表示する方法を紹介します。 ターミナルの出力結果で色を使うためにはエスケープシーケンスというものを利用します。 エスケープシーケンスはターミナル上で色を含む特定の制御を実現するための特殊な文字列です。 ANSI escape code - Wikipedia ANSI Escape Codes この記事では色の変更に関するエスケープシーケンスのみを紹介します。 1. 書き方 print "<エスケープシーケンス>文字列" # 赤い文字を表示したい場合 print "\e[31m文字" 1つの文字列に複数のシーケンスを適用することもできる。 # 文字色:赤、背景色:緑色 print "\e[31m\e[42m文字" 末尾に\e[0mでリセットできる。 print "\e[31m赤文字\e[0m" print "普通の色の文字" 末尾に\e[0mがないと、次の出力も変更した色のまま。 print "\e[31m赤文字" print "これも赤文字" 2. カラーコード 例:\e[31 色の名前 文字色 背景色 黒 30 40 赤 31 41 緑 32 42 黄色 33 43 青 34 44 マゼンタ 35 45 シアン 36 46 白 37 47 デフォルト 39 49 リセット 0 0 デフォルト:色のみをリセット print "\e[3m\e[31mイタリック赤文字\e[39m" print "イタリック普通の色の文字" リセット:色やその他の効果を全てリセット print "\e[3m\e[31mイタリック赤文字\e[0m" print "普通の書式で普通の色の文字" 【参考】 ...

June 8, 2022

【macOS】PostgreSQLの基本操作

この記事では、PostgreSQLの基本操作を解説します。 バージョン情報 macOS Monterey 12.4 PostgreSQL 14.3 1. インストール インストール $ brew install postgresql バージョン確認 $ psql --version psql (PostgreSQL) 14.3 2. データベースサーバの起動・停止 2-1. brew servicesコマンド brew services 起動 $ brew services start postgresql 停止 $ brew services stop postgresql 2-2. pg_ctlコマンド pg_ctlコマンド 起動 $ pg_ctl -D /usr/local/var/postgres start pg_ctl -D <データディレクトリのパス> start 停止 $ pg_ctl -D /usr/local/var/postgres stop pg_ctl -D <データディレクトリのパス> stop データディレクトリのパスの確認 postgres=# SHOW data_directory; data_directory ------------------------- /usr/local/var/postgres (1 row) -Dオプションの省略 環境変数PGDATAにデータディレクトリのパスを設定することで、-Dオプションを省略して起動・停止ができる。 ~/.zshrcに以下を追加 ...

June 8, 2022

SQLの基本を理解する

1. SQLの概要 1-1. SQLとは リレーショナルデータベースを操作するための言語 標準規格に準拠したSQLを標準SQLと言う 1-2. SQLの基本的な記述ルール SQL文の最後に;(セミコロン)をつける キーワードに大文字/小文字の区別はない 定数は''(シングルクォーテーション)で囲む 2. SQLの分類 2-1. DDL(Data Definition Language) CREATE DROP ALTER 2-2. DML(Data Manipulation Language) SELECT INSERT UPDATE DELETE 2-3. DCL(Data Control Language) COMMIT ROLLBACK GRANT REVOKE 3. SQL基礎 3-1. CREATE TABLE テーブルの作成 CREATE TABLE Staff (id CHAR(4) NOT NULL, name TEXT NOT NULL, age INTEGER , PRIMARY KEY (id)); 主な制約 PRIMARY KEY UNIQUE REFERENCES 表名(列名) CHECK(条件) NOT NULL DEFAULT 値 3-2. INSERT 行の挿入 INSERT INTO Staff (id, name, age) VALUES ('0001', '山田太郎', 26); INSERT INTO Staff VALUES ('0004', '渡辺さつき', 28); 3-3. SELECT 列の取得 ...

June 7, 2022

さくらのVPSにXserverドメインで取得した独自ドメインを設定する方法

この記事ではさくらのネームサーバにXserverドメインで取得した独自ドメインを設定する方法を紹介します。 これによりさくらのVPSに作成したサーバに、設定したドメイン名でアクセスできるようになります。 前提条件 さくらのVPSでサーバを契約済み Xserverドメインで取得した独自ドメインをXserverで使用 さくらのVPSでサーバを契約する方法は以下を参照してください。 さくらのVPSにDebian11 (bullseye)をインストールする方法 | あまブログ 1. Xserverドメイン側の設定 1-1. ネームサーバー設定の変更 Xserverアカウントにログインします。 XServerアカウント - ログイン | レンタルサーバーならエックスサーバー ログイン後、該当のドメインを選択。 ドメイン選択後の画面で「ネームサーバー設定」>「設定変更」を選択。 ネームサーバー設定で「ドメイン適用先サービス」>「その他のサービスで利用する」を選択し、ネームサーバーに以下を入力します。 ns1.dns.ne.jp ns2.dns.ne.jp 以下のようになっていればOKです。「確認画面へ進む」を選択します。 以下の画面で、設定内容を確認して「設定を変更する」を選択。 Xserverドメイン側の設定は以上です。 ネームサーバーの設定 | Xserverドメイン 2. さくらのVPS側の設定 2-1. ドメイン名の登録 さくらインターネットの会員メニューにログインします。 会員認証|さくらインターネット 「契約中のドメイン一覧」を選択。 以下の画面で、「ドメインコントロールパネル」を選択。 以下の画面で、「ネームサーバサービス」>「ネームサーバ新規登録」を選択。 以下の画面で、利用したいドメイン名を入力し、「ドメインを登録する」を選択。 ネームサーバサービス一覧に追加したドメインが表示されたら、新規登録は完了です。 ネームサーバー(オプションサービス)を利用したい | さくらのサポート情報 2-2. ゾーン情報の作成 以下の画面で、先ほど追加したドメインの「ゾーン>」を選択します。(画面右側) 以下の画面で、「さくらのDNSに設定する(簡単設定)」でサーバーのIPアドレスを入力し、「追加して設定」を選択。 さくらのVPS側の設定は以上です。 ドメインのゾーン情報を編集したい | さくらのサポート情報 以上で終了です。 【メモ】 【IIS】さくらのVPS(WindowsServer)にエックスサーバーの独自ドメインを設定してみた ネームサーバー IPアドレスとドメイン名の紐付けを行うサーバー = DNSサーバー ドメイン移管とは ドメイン移管とは?移管の流れ・具体的な方法や費用・トラブルの原因まで解説! – 初心者のためのブログ始め方講座 別のパターン 他社で取得・管理中のドメインを設定したい | さくらのサポート情報 さくらインターネットで取得・管理中のドメインを設定したい | さくらのサポート情報 他社から移管したドメインを設定したい | さくらのサポート情報

June 6, 2022