ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

カラーミーショップで独自ドメインを使い、他サーバーでサブドメインを運用する方法

カラーミーショップを開設し、独自ドメインを使いつつ、他のサーバーでサブドメインを運用する案件がありました。
その時に少し手間取ったので、今後このようなことをされる方の参考になればと思いまとめてみました。

前提条件

カラーミーショップでの設定手順

1.カラーミーショップの管理ページにログインします
https://admin.shop-pro.jp/


2.上部メニューにある「アカウント・設定」→「ドメイン」をクリックします
f:id:shinsuke789:20180425104859p:plain


3.左メニューにある「ドメイン」→「独自ドメイン」をクリックします
f:id:shinsuke789:20180425104907p:plain


4.「独自ドメインを設定する」ボタンをクリックします
f:id:shinsuke789:20180425111042p:plain


5.「取得されているドメイン」に独自ドメインを入力し、「DNS(ネームサーバー)」に「カラーミーショップのDNS(ネームサーバー)」が選択されていることを確認し、「確認」をクリックします
f:id:shinsuke789:20180425104952p:plain


6.設定内容が合っているか確認し、「送信」をクリックします
f:id:shinsuke789:20180425105005p:plain

ドメインのネームサーバーを「dns1.shop-pro.jp」「dns2.shop-pro.jp」に設定して下さいと言われますが、設定してはいけません。


参考:ドメインをカラーミーショップのみでご利用の方 | ネットショップ開業マニュアル

お名前.com等のドメインでの設定手順

ここではお名前.comを例とします。

DNSレコードの設定手順

1.ドメインの管理ページにログインします
https://navi.onamae.com/login


2.上部メニューの「ドメイン」をクリックします
f:id:shinsuke789:20180425105018p:plain


3.「ドメイン設定」をクリックして展開し、「DNS関連機能の設定」をクリックします
f:id:shinsuke789:20180425105029p:plain


4.カラーミーショップで使用する独自ドメインを選択し、「次へ進む」をクリックします
f:id:shinsuke789:20180425105039p:plain


5.ページを下の方にスクロールし「DNSレコード設定を利用する」の「設定する」をクリックします
f:id:shinsuke789:20180425105049p:plain


6.登録済みの欄が以下のようになるようにDNSレコードを追加、「確認画面に進む」をクリックし、DNSレコードの設定を完了します。

取得した独自ドメインを「shop-test.com」、サブドメインを「admin.shop-test.com」とした場合の設定例です。

ホスト名 TYPE TTL VALUE
shop-test.com A 3600 shop-test.shop-pro.comのIPアドレス
admin.shop-test.com A 3600 サブドメインを使うサーバーのIPアドレス
www.shop-test.com CNAME 3600 shop-test.shop-pro.com

TTLは初期値のままです


7.ネームサーバーが独自ドメインの初期値になっているか確認します
すでに「dns1.shop-pro.jp」「dns2.shop-pro.jp」に変えている場合、独自ドメインの初期値に戻して下さい。
お名前.comだと「01.dnsv.jp」「02.dnsv.jp」になります。


8.数分後、設定したドメインにアクセスできるか確認します。

「xxxxx.shop-pro.com」のIPアドレスを調べる

カラーミーショップで独自ドメインを使わない場合、「任意の値.shop-pro.com」というサブドメインが割り当てられます。
独自ドメインを決める煩わしさを解消するために設けられているようです。


さて「xxxxx.shop-pro.com」のIPアドレスを調べるには、2種類あります。


1.「ping」コマンドで調べる
Windowsは「コマンドプロンプト」、Macは「ターミナル」を起動し、次を入力するとIPアドレスが取得できます。

ping xxxx.shop-pro.com

ネットワークの環境によってはpingを実行しても思った答えた返って来なかったり、応答なしだったりします。
その時は、次のWebサービスを利用してみて下さい。


2.Webサービスで調べる
次のようなWebサービスドメインを入力するとIPアドレスが返ってきます。
www.cman.jp

おすすめの書籍

売れるネットショップ開業・運営 eコマース担当者・店長が身につけておくべき新・100の法則。

売れるネットショップ開業・運営 eコマース担当者・店長が身につけておくべき新・100の法則。

【小さな会社】 ネット通販 億超えのルール

【小さな会社】 ネット通販 億超えのルール

プロがおすすめ・ダメなレンタルサーバーをまとめました

Webシステムの開発をしている中で、顧客とサーバーの話が必ず出てきます。

その中で私が推奨しているサーバーと、すでに顧客が契約していてダメだったサーバーをまとめてみました。

今後サーバーを契約するときは参考にしてみて下さい。

契約すべき推奨のサーバー

さくらのレンタルサーバ

ホームページに使うならもってこいの安定のレンタルサーバーです。
料金プランも多彩で契約しやすいです。スタンダードであれば月500円程で契約できます。



XSERVER

WordPressを本格的に動かすならおすすめの高性能サーバーです。



また同社では、WordPressに特化した「wpX」を提供していますが、こちらはWordPressのみしか動作しません。

www.wpx.ne.jp

従来通りのHTML・CSS・JSのみのホームページやPHPのWebアプリは、アップロードしてもアクセス権限がないため閲覧不可能です。
またcronの設定ができません。

WordPressのみの運用であれば契約しても問題ないですが、将来的にWebアプリを動かしたいとなるとサーバーを乗り換えるしかないので注意しましょう。

さくらのVPS

VPSで迷ったらこれ!といっても過言ではない安定のVPSサーバーです。

料金は少し高い気もしますが、オートスケール対応、上位プランへそのまま移行、サーバーの追加が簡単にできます。

ビジネス利用に最適です。



お名前.com VPS

ホームページを見る限り2015年で更新が止まっているようですが契約できるし、問題なく使用できます。

他社よりも費用が安く、メモリ2GBプランは初期費用無料で契約できます。
その代わりSSDの選択やさくらのVPSのようにオートスケール、現状を維持したままのプラン変更は不可能です。

サーバー単体で利用する方や検証用・趣味用におすすめのVPSサーバーです。

GMOインターネット株式会社の株を持っていると株主優待で年間1万円分の割引が受けられます。


契約してはいけないサーバー

GMOクラウド レンタルサーバー iCLUSTA+

ビジネス向けのレンタルサーバーです。
有名どころなのか不明ですが、契約している方が多いです。

このサーバーのダメな所は、ホームページを設置し、最初のアクセスが数秒かかるところです。
これは、サーバーの仕様なのか何をやっても解決できません。
表示が遅いとそれだけ利用者離れになりやすいので、契約してはいけません。

shared.gmocloud.com

お名前.com 共用サーバーSD

性能等は全く問題ないですが、ディレクトリの作成に自由度がないのでおすすめできません。
契約するとすぐには解約できない感じですが、「思っていたのと違う!」ということで問い合わせすると解約できることもあります。



ロリポップ

プランが豊富で価格安く契約しやすく趣味での利用はおすすめですが、ビジネスとなると使い勝手が悪かったりします。
利用者が多いため少し動作が遅いなーと感じることもあります。
こちらを契約するならさくらレンタルサーバーをおすすめします。



まとめ

知識が乏しい業者とやりとりしていると、安いだけのマイナーなサーバー、大手だから安心というだけの無意味なサーバーを勧められたりします。

そうならないために、ここで紹介している推奨サーバーを契約しておけば安心です。
すでに契約してしまってる方は、推奨サーバーに変更することをおすすめします。

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド

Apache2.4のリバースプロキシ設定は最後の「/」が不要!

新規でサーバーを構築する機会があったのでApache2.4でリバースプロキシを設定しました。

Apache2.2の設定をそのまま使ってみるものの、動作せず5時間ほどハマり、結果的に「/」の有無で解決しました。

他の人がこれにハマらないように記事にしておきます…。

動作環境

Linux CnetOS6
Apache 2.4
WildFly 11.0

設定の比較

Apache2.2の設定

<Location "/ContextRoot">
    ProxyPass http://localhost:8080/ContextRoot/
    ProxyPassReverse http://xxxxx.com/ContextRoot
</Location>

Apache2.4の設定

<Location "/ContextRoot">
    ProxyPass http://localhost:8080/ContextRoot
    ProxyPassReverse http://xxxxx.com/ContextRoot
</Location>

相違点

Apache2.4のProxyPassの最後に「/」を付けてません。
これがあると、ポート8080を使う通常の処理は問題ないのですが、cssやjsなどの静的コンテンツが読み込まれません。

まとめ

リバースプロキシの設定は、バージョンアップしても基本的に使えますが、少しの変更が必要になることがあるので注意が必要です。

Apache2.4を触ってみましたが、最初に設定する項目が減ってて楽でした。
例えば、バーチャルホストだとNameVirtualHostの宣言は必要ありませんでした。
ディレクトリ構造がかなり変わって違和感ありありです。
yumでインストールした場合、/opt/rh/httpd24/root/がルートになります。


サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

CrystalReportsでプリンター名を設定する方法

CrystalReportsで任意で選択したプリンターで印刷を行いたい場合、通常のプリンター指定では認識されないようです。

認識させるには、少し特殊な指定が必要なようです。

動作環境

Windows 10
VisualStudio Community 2015 Update3
.NETFramework 4.6.1
CrystalReports 13.0.20

通常の設定方法

こちらの設定で行っても指定したプリンターで印刷はされません。

public void Print(PrinterSettings settings)

    // デザイナーで定義したレポート
    TestReport r = new TestReport();
    r.Load();
    r.Refresh();

    // 給紙トレイ設定
    r.PrinterOptions.CustomPaperSource = settings.DefaultPageSettings.PaperSource;

    // プリンター名設定
    r.PrinterOptions.PrinterName = settings.PrinterName; // ←設定されない!!

    // 印刷実行
    r.PrintToPrinter(printer.Copies, false, 0, 0);
}

正しい設定方法

1.プロジェクトの参照からアセンブリタブにある4項目を追加する

  • CrystalDecisions.ReportAppServer.ClientDoc
  • CrystalDecisions.ReportAppServer.Controllers
  • CrystalDecisions.ReportAppServer.DataDefModel
  • CrystalDecisions.ReportAppServer.ReportDefModel


2.プリンター名の設定方法を次のように変更する

public void Print(PrinterSettings settings)

    // デザイナーで定義したレポート
    TestReport r = new TestReport();
    r.Load();
    r.Refresh();

    // 給紙トレイ設定
    r.PrinterOptions.CustomPaperSource = settings.DefaultPageSettings.PaperSource;

    // プリンター名設定
    // r.PrinterOptions.PrinterName = settings.PrinterName;
    ISCDReportClientDocument cdoc = r.ReportClientDocument;
    cdoc.PrintOutputController.GetPrintOptions().PrinterName = printer.PrinterName;

    // 印刷実行
    r.PrintToPrinter(printer.Copies, false, 0, 0);
}

VisualStudioのCrystalReportsを配布先のクライアントで動作させる手順

VisualStudioでCrystalReportsを使った開発を行うには「SAP Crystal Reports developer version for Visual Studio」が必要です。
これをインストールすれば開発環境では、問題なく動作します。

しかし、配布するとそのままでは動作しません。
配布先で動作させるためには、CrystalReportsのランタイム「SAP Crystal Reports Runtime」とインストーラーに「SAP Crystal Reports Runtime - Merge Modules」が必要です。

動作環境

開発環境

Windows 10
VisualStudio Community 2015 Update3
.NETFramework 4.6.1
CrystalReports 13.0.20

配布先

Windows 10
CrystalReports 13.0.20

VisualStudioのインストーラーでCrystalReportsのMergeModulesを適用する

VisualStuidoでインストーラーを扱うには、次の記事を参考にして下さい。
shinsuke789.hatenablog.jp


1.次のURLにアクセスし「SAP Crystal Reports Runtime - Merge Modules」をダウンロードします。

http://www.crystalreports.com/crvs/confirm/

f:id:shinsuke789:20171017094231j:plain


2.ダウンロードしたファイルを解凍し、「CRRuntime_13_0_xx.msm」と「CRRuntime_13_0_xx_ja.msm」のファイルを次の場所にコピーします。
f:id:shinsuke789:20171017094240j:plain

C:\Program Files (x86)\Common Files\Merge Modules

※コピーしなくても動作しますが、ここにコピーしておいた方が使い勝手が良いので

日本語環境なので「ja」のファイルを選択しています。動作環境に言語に合わせて適切なものを選択して下さい。


3.VisualStudioのセットアッププロジェクトを右クリックし、「Add」→「Merge Module...」をクリックします。
f:id:shinsuke789:20171017094256j:plain

4.ファイル選択ダイアログが表示されるので、2のファイルを選択し、プロジェクトに追加します。
f:id:shinsuke789:20171017094411j:plain


5.セットアッププロジェクトをビルドします。いつもより少し時間がかかります。


6.ビルドして生成されたインストーラーを配布します。

配布先には事前にCrystalReportsランタイムがインストールされている必要があります。

配布先でCrystalReportsのランタイムをインストールする

1.次のURLにアクセスし「SAP Crystal Reports Runtime (32Bit)」または「SAP Crystal Reports Runtime (64Bit)」をダウンロードします。

http://www.crystalreports.com/crvs/confirm/

f:id:shinsuke789:20171017092712j:plain


2.ダウンロードしたファイルを解凍し、インストーラーを実行します。
f:id:shinsuke789:20171017092649j:plain


3.ウィザードが開始されるので「Next」をクリックします。
f:id:shinsuke789:20171017092721j:plain


4.「I accept the License Agreement」を選択し、「Next」をクリックします。
f:id:shinsuke789:20171017092730j:plain


5.「Next」をクリックします。
f:id:shinsuke789:20171017092737j:plain


6.インストールが終わるまでしばらく待ちます。
f:id:shinsuke789:20171017092752j:plain


7.「Finish」をクリックし、インストールを終了します。
f:id:shinsuke789:20171017092803j:plain

配布先でのエラー対応

ファイルが見つからない

ファイルまたはアセンブリ'CrystalDecisions,CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=xxxxxxxx,またはその依存関係の1つが読み込めませんでした。指定されたファイルが見つかりません。

エラーメッセージに表示されている「Version」のCrystalReportsランタイムがインストールされていないのが原因です。
この場合、13.0.20のランタイムをインストールすることでエラーは解消します。

初期化子例外

'CrystalDecisions,CrystalReports.Engine.ReportDocument' のタイプ初期化子が例外をスローしました。System.TypeInitializationException

アプリケーションが、MergeModuleを適用したインストーラーでインストールされていないのが原因です。
MergeModuleを適用したインストーラーを作成してインストールしなおせば解消します。

旧バージョンのランタイムをダウンロードする

ランタイム配布サイトでは、最新版しかダウンロードできないと思われますが、URLを書き換えることで可能です。

URLのバージョンを希望のものに変更し、?以降を削除します。

最新版
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_32bit_13_0_21.zip?_ga=2.242728192.309491126.1508199297-555278125.1508199297

旧版
http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_32bit_13_0_20.zip

SpringBootのJacksonで日付フォーマットを設定する方法

SpringBootのコントローラーの戻り値に@ResponseBodyを設定して、オブジェクトでJSONを返すとき、日付型はlongで扱われます。
それを適切は日付フォーマットにするには、設定ファイル、アノテーションで設定できます。

application.propertiesによる設定

アプリケーション全体の設定として適用されます。
タイムゾーン設定をしないと、日付がずれるので必ず設定しておきましょう。

application.properties

spring.jackson.date-format=yyyy/MM/dd'T'HH:mm:ss.SSSZ
spring.jackson.time-zone=Asia/Tokyo

アノテーションによる設定

JSONマッピングするオブジェクトクラスの日付フィールドで@JsonFormatアノテーションを設定します。
アノテーションでもタイムゾーンの設定ができます。

オブジェクトクラス

@JsonFormat(pattern = "yyyy/MM/dd")
private Date date;

@JsonFormat(pattern = "yyyy/MM/dd", timezone = "Asia/Tokyo")
private Date date;

PostgreSQLを自己証明書でSSLに対応する

手順通りにすれば、簡単にPostgreSQLSSLに対応できます。

動作環境

OS CentOS 6.4
PostgreSQL 9.3.2
OpenSSL 1.0.1e-fips 11 Feb 2013

自己証明書を作成する

1.PostgreSQLのdataディレクトリに移動する

$ cd /var/lib/pgsql/9.3/data

2.OpenSSLでRSA秘密鍵を作成する

# 2048はビット数
$ openssl genrsa 2048 > server.key

3.OpenSSLでCSRを作成する

$ openssl req -new -key server.key > server.csr

4.OpenSSLで証明書を作成する

# 36500は有効期限(この場合100年)
$ openssl x509 -days 36500 -req -signkey server.key < server.csr > server.crt 

5.作成したファイルの所有権・グループを変更する

$ chown postgres:postgres server.*

6.server.keyのアクセス権限を変更する

$ chmod 600 server.key

PostgreSQLの設定を変更する

1.pg_hba.confでアクセス権を変更する

$ vi /var/lib/pgsql/9.3/data/pg_hba.conf

# IPv4 local connections:
host     all     all     127.0.0.1/32     md5  # ローカルはSSL不要
hostssl     all     all     0.0.0.0/0     md5  # リモートはSSL必須

2.postgresql.confでSSLを有効にする

$ vi /var/lib/pgsql/9.3/data/postgresql.conf

# コメントアウトされているので、コメントを外し「ssl = on」にする
# ssl = off
ssl = on

3.設定を有効にするためPostgreSQLを再起動する

$ service postgresql-9.3 restart

注意事項

TomcatGlassFishなどのアプリケーションサーバーを利用している場合、PostgreSQLを再起動する前に停止しておく必要があります。
起動したままだと、データベースとの連携が行われなくなり接続エラーが発生します。

PostgreSQLの再起動が失敗した場合、エラーメッセージがログに出力されるので、そちらを参照し問題点を修正して下さい。
pg_logディレクトリ内に発生曜日ごとにログがあります。

/var/lib/pgsql/9.3/data/pg_log

SSL設定後のPostgreSQLへの接続

GUIツールは、SSLの設定を追加して接続するだけです。

psqlコマンドで接続する場合、接続情報を「""」で括り、「sslmode=require」を追加します。

psql "sslmode=require host=xxx.xxx.xxx.xxx user=user1 dbname=db1"

SSL設定後のアプリケーション側での接続文字列変更

Java

接続文字列に「?sslmode=require」を追加します。

jdbc:postgresql://xxx.xxx.xxx.xxx:5432/dbname?sslmode=require

.NET

接続文字列に「SSL Mode = Require; Trust Server Certificate = true; 」を追加します。

Host=xxx.xxx.xxx;Database=dbname;Username=user;Password=pass;SSL Mode=Require;Trust Server Certificate=True

PostgreSQLを深く知るためにおすすめの書籍

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

PostgreSQL全機能バイブル

PostgreSQL全機能バイブル