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 の内容は以下のようになります。 ...

2022年6月10日

【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 # 土曜日で改行

2022年6月8日

【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 "普通の書式で普通の色の文字" 【参考】 ...

2022年6月8日

【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に以下を追加 ...

2022年6月8日

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 列の取得 ...

2022年6月7日

さくらの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サーバー ドメイン移管とは ドメイン移管とは?移管の流れ・具体的な方法や費用・トラブルの原因まで解説! – 初心者のためのブログ始め方講座 別のパターン 他社で取得・管理中のドメインを設定したい | さくらのサポート情報 さくらインターネットで取得・管理中のドメインを設定したい | さくらのサポート情報 他社から移管したドメインを設定したい | さくらのサポート情報

2022年6月6日

【Debian】NginxでVirtual Hostsを使って複数のドメインを設定する方法【Server Blocks】

NginxのWebサーバではVirtual Hosts(Server Blocks)を使って1台のサーバで複数のドメインを運用することができます。 この記事では、Debian 11上のNginxにVirtual Hostsを設定する方法を紹介します。 なお、本稿の手順を進める前にDebian上にNginxがインストールされている必要があります。 DebianでのNginxのインストール方法は以下の記事を参照してください。 【Debian】Nginx公式リポジトリにある最新バージョンのNginxをインストールする | あまブログ 1. 環境 Debian 11 bullseye nginx 1.21.6 2. 手順 2-1. ドキュメントルートディレクトリの作成 ドキュメントルートは各ドメインのhtmlファイルが保存されるディレクトリで、任意の場所に作ることができます。 以下では /var/wwwディレクトリの中にサーバでホストしたいドメインごとに html ディレクトリを作成します。 今回はサンプルとしてtest1.comとtest2.comの2つのドメインを使用します。 以下のコマンドを実行して、ドキュメントルートディレクトリを作成します。 $ sudo mkdir -p /var/www/test1.com/html $ sudo mkdir -p /var/www/test2.com/html 2-2. サンプルページの作成 次に各サイトのデフォルトページをドキュメントルートディレクトリの中に作成します。 以下のコマンドを実行して、1つ目のサンプルページを作成します。 $ sudo vi /var/www/test1.com/html/index.html テスト用として、以下の内容で作成します。 /var/www/test1.com/html/index.html <html> <head> <title>test1</title> </head> <body> <h1>test1.com</h1> </body> </html> 続けて、2つ目のサンプルページも作成します。 $ sudo cp /var/www/test1.com/html/index.html /var/www/test2.com/html/ $ sudo vi /var/www/test2.com/html/index.html 内容は以下のようになります。 ...

2022年6月6日

【Debian】Nginx公式リポジトリにある最新バージョンのNginxをインストールする

この記事では、DebianにNginx公式リポジトリにある最新バージョンのNginxをインストールする手順を紹介します。 ※Debianのデフォルトの設定でapt install nginxした場合、Nginx公式リポジトリからではなく、Debian公式リポジトリから少し古いバージョンのNginxがインストールされます。 1. 実行環境 Debian 11 bullseye 2. 手順 2-1. 必要なパッケージのインストール Nginxのインストールに必要な以下のパッケージをインストールします。 curl gnupg2 ca-certificates lsb-release debian-archive-keyring 以下のコマンドを実行してパッケージをインストール。 $ sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring パッケージの情報を表示:apt show <パッケージ名> インストール済みパッケージの確認:apt list --installed <パッケージ名> 2-2. 署名鍵のインポート aptがパッケージの信頼性を確認できるようにするために、Nginxが公式に公開している署名鍵をインポートします。 以下のコマンドを実行して署名鍵をインポート。 $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null コマンドの意味 curl https://nginx.org/keys/nginx_signing.key curlコマンドで署名鍵ファイルをダウンロード gpg --dearmor 署名鍵ファイルをgpgコマンドで暗号化 sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg teeコマンドで /usr/share/keyrings 配下に nginx-archive-keyring.gpg というファイル名で保存 >/dev/null コマンド実行時の出力結果を /dev/null に渡している 以下のコマンドを実行して、ダウンロードした署名鍵が正しいことを確認します。 ...

2022年6月6日

telnetでGETとPOSTでHTTPリクエストを送る方法

この記事では、クライアントからtelnetを使ってGETメソッドとPOSTメソッドでWebサーバにHTTPリクエストを送信する方法を紹介します。 HTTPは、Webサーバ(サーバ)⇄Webブラウザ(クライアント)間のWebページの送受信に使われるプロトコルです。 1. 環境 macOS Monterey:12.4 2. 手順 2-1. telnetのインストール $ brew install telnet 2-2. GETメソッド 以下のコマンドで、example.comの80番ポート(HTTP)に接続 $ telnet example.com 80 書式:telnet <ホスト名> <ポート番号> 続けて、以下のHTTPリクエストを実行 GET / HTTP/1.1 # リクエスト行 Host: example.com # ヘッダ <改行> リクエスト行 メソッド:GETメソッド、リクエストURI:/、プロトコルバージョン:HTTP/1.1 ヘッダ フィールド名:Host、フィールド値:example.com Host→HTTP/1.1 で唯一の必須ヘッダ。フィールド値にURLのホスト部分を指定。 <改行> 1行空けることでヘッダの終わりを伝える 2-3. POSTメソッド xxx.com/articlesに以下のようなフォームがある場合を想定 <form action="/articles" method="post"> <div> <label for="article_title">Title</label> <input type="text" name="article[title]" id="article_title"> </div> <div> <label for="article_body">Body</label> <textarea type="text" name="article[body]" id="article_body"></textarea> </div> <div> <input type="submit" name="commit" value="Submit" data-disable-with="Submit"> </div> </form> 以下のコマンドで、xxx.comの80番ポート(HTTP)に接続 ...

2022年6月5日

【Debian】Nginxで自分で作ったhtmlファイルを表示させる方法

この記事では、Nginx上に自分で作ったhtmlファイルを配置し、ブラウザから表示させる方法を紹介します。 1. 環境 Debian 11 bullseye nginx 1.21.6 2. 手順 2-1. Nginxのインストール Nginxをインストール $ sudo apt update $ sudo apt install nginx Nginxのインストールを確認 $ /usr/sbin/nginx -v nginx version: nginx/1.21.6 2-2. Nginxの起動 Nignxを起動 $ sudo systemctl start nginx Nginxの起動を確認 $ systemctl status nginx ● nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-06-05 06:38:04 JST; 1h 45min ago Docs: https://nginx.org/en/docs/ Process: 8247 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 8248 (nginx) Tasks: 2 (limit: 529) Memory: 1.7M CPU: 10ms CGroup: /system.slice/nginx.service ├─8248 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf └─8250 nginx: worker process 2-3. 設定ファイルの確認 Nginxの設定ファイルを確認 ...

2022年6月5日