徒然なるままに プログラミングメモや日々の生活などつれづれとつづっていくblog

2021年3月25日

Opnsense + Nginx + Let’s Encrypt(たぶんこれが正解)

Filed under: Let's Encrypt,Linux,Nginx,Opnsense — ranpei @ 9:07 PM

以前の記事で変則的なLet’s Encryptの設定方法を紹介しましたが、

この方法はアップデートのためかうまくいかなくなりました。。。

そんなわけで最新の環境に対応した設定をメモとしてまとめます。

・DNSにCAAレコードを設定

利用しているDNSサーバーにCAAレコードを登録します。

(ご利用のDNSサーバーがCAAレコードに対応しているか別途確認してください)

当方はMydnsを使用していますので以下のようにCAAレコードを3行登録しました。

DNS設定

0 iodef “メールアドレス”
0 issuewild “;”
0 issuewild “letsencrypt.org”

・Let’s Encryptプラグインを有効化

前回の設定ではチェックを入れていませんでしたが、

今度はチェックを入れます。

証明書のDNS Alias Modeを変更

DNS Alias Modeを「Automatic Mode」に変更します。

この状態で「証明書の取得・更新」を行うと証明書を取得できます。

・余談

実は前回の設定のままで半年ほど運用してたんですが、

証明書が更新されてもNginxに反映されていなくてなぜ??ってなってました。

原因は更新後にNginxを再起動する設定がなかったせいです^^;

なので証明書の画像にもある通り「Automations」でNginxを再起動するように設定してあげてください。(HAProxyなど他のロードバランサーも同様です)

2020年12月30日

OpnsenseでVPNサーバー(WireGuard)を構築する

Filed under: Linux,Opnsense — ranpei @ 8:16 AM

ネットワーク構成の変更で以下のようにOpnsense配下のLANに各サーバーを配置することになりました。

ですが、コレだと各サーバーに直接アクセスできません。

OpnsenseのSSHサーバーを踏み台に各サーバーにアクセスしても良いのですが、フロントにあるサーバーのSSHを有効にするのはセキュリティ的に少々不安が残ります。

(実際はファイアーウォールの設定も簡単にできるようにできてるので、そこまで心配する必要はないとは思いますが・・・)

そのためOpnsense側にVPNサーバーを導入して直接アクセスできるようにしたいと思います。

当初はドキュメントで利用可能とあったL2TPを利用するつもりでしたが、最新版では利用できなくなっている模様・・・・・

そのため使用可能(プラグイン含む)なモノの中から各OSとの親和性の高いWireGuardをチョイスしました。

◆WireGuardプラグインのインストール

「ファームウェア」→「プラグイン」から「os-wireguard」を「+」ボタンでインストールします。

◆WireGuardサーバーを設定

インストールが完了したら「VPN」メニューの中に「WireGuard」が追加されていますので選択。

「ローカル」タブを選択し、「+」ボタンでサーバーを設定します。

設定するのは「名前」「リッスンポート」「Tunnel Address」の3つ。

「保存」したら、再度設定を開くと「Public Key」と「Private Key」が自動生成されています。(Public Keyはクライアントの設定で使用します)

◆ファイアーウィールを設定

ファイアーウォールでWireGuardが利用するポートを開けます。

「リッスンポート」をいじっていなければデフォルトでは「51820/UDP」を開きましす。

◆クライアントを設定する

Windowsクライアントを公式サイトから取得してインストール。

インストールしたら「トンネルを追加」の「▼」から「空のトンネルを作成」を選択し新規に接続設定(Peer)を作成します。

作成したら任意の名前を入力してテキストエリア部分に以下のように追記していきます。

◆WireGuardサーバーにクライアント(Peer)を追加する

次に接続するクライアントをサーバーに登録していきます。

「Endpoints」タブを選択して「+」ボタンから接続するクライアントを登録します。

・名前は適当に

・Public Keyにはクライアントの共通鍵を登録します。

・Allowed IPsには接続を許可するIP帯を設定(Tunnel AddressとLAN配下を設定します)

設定が完了したら「ローカル」タブより設定を編集します。

「ピア」項目に先ほど設定したクライアントを選択して「保存」を押下。

◆クライアントから接続してみる

Windowsクライアントの有効化ボタンを押下して接続できるか試してみましょう。

っといってもIPアドレスが割り振られるとかないのでPingで通信できるか確認しましょう。

きちんとPingが通れば設定は完了となります。

2020年10月27日

OpnSense + Nginx + Let’s Encryptでルーター兼ロードバランサーを構築する。(Nginxリバースプロキシ編)

Filed under: Let's Encrypt,Linux,Nginx,Opnsense — ranpei @ 12:24 AM

◆Nginxプラグインをインストール

「システム>ファームウェア>プラグイン」を選択

「os-nginx」の「+」ボタンを押下してインストールします。

◆管理WebUIの動作ポートを変更

Nginxを80・443ポートで動作させるため、管理用WebGUIのポートと被ってしまいます。

そのため管理用WebGUIのポートを変更しておきます。(変更したポートを忘れてログインできなくならないよう注意!)

TCPポートを任意のポートに変更します。

◆リバースプロキシを構成する

ここではLAN側に「192.168.1.100」というWebサーバーが存在する前提で設定を進めます。

「サービス>Nginx>構成」を選択。

①Upstreamサーバーを登録

「Upstream Server」を選択して、「+」ボタンを押下。
Upstream Serverを追加
「Upstream」を選択して、「+」ボタンを押下。
Server Entriesに↑で設定したサーバーを選択。

②Locationを設定

Upstream Serversに①のUpstreamを設定

③HttpServerを設定

Locationsに②で作成したLocationを設定

終わったら「全般設定」で「Enable nginx」のチェックを入れて「適用」を押下。

正常に起動したら右上の▶が黄緑に変わります。

④ファイアーウォールを設定

ファイアウォールの設定で80、443ポートの接続を許可してください。

上手く設定できればOpnsenseにアクセスするとプロキシ先のページが表示されるはずです。

OpnSense + Nginx + Let’s Encryptでルーター兼ロードバランサーを構築する。(Let’s Encrypt編)

Filed under: Let's Encrypt,Linux,Nginx,Opnsense — ranpei @ 12:24 AM

DNSによる名前解決ができることを前提として解説します。

◆Let’s Encryptプラグインをインストール

「os-acme-client」の「+」ボタンを押下してプラグインをインストールします。

◆Nginxの設定

Let’s Encryptがドメイン確認時にアクセスするパスを設定します。

URL Patternに「/.well-known/acme-challenge/」
File System Rootに「/var/etc/acme-client/challenges/.well-known/acme-challenge/」
Locationsに上記のLocationを追加
Enable Let’s Encrypt Plugin Supportのチェックを外す(ここ重要)

保存したら右下の更新ボタン(設定反映)を行ってから、右上の更新ボタンを押下して設定を反映させてください。

(どうも右下のボタンを押さないと設定がうまく反映されないことがあるようです)

◆Let’s Encryptプラグインの設定

「サービス>Let’s Encrypt>設定」でプラグインを有効化

「サービス>Let’s Encrypt>アカウント」 でアカウントを登録

「サービス>Let’s Encrypt>検証メソッド」で検証メソッドを登録

「サービス>Let’s Encrypt>検証メソッド」 で証明書を取得するドメインを設定

ドメインの設定が済んだら右メニューの更新ボタンを押下して証明書を発行・更新します。

しばらくたってACMEステータスが「OK」となれば証明書の取得完了です。

◆ Nginxの設定(証明書設定)

Http Serverからドメインに証明書を設定して再起動します。

(HTTP Onlyにチェックを入れると強制的にhttps接続にリダイレクトするようになります)

Httpsで接続して証明書がきちんと設定されていることを確認しましょう。

◆補足

さて、なぜNginx側で「 Enable Let’s Encrypt Plugin Support 」のチェックを外したか疑問に思う方もいるかもしれませんので補足です。

実はNginxでは上記チェックが入っていると「http://127.0.0.1:43580//.well-known/acme-challenge/」へのリバースプロキシが自動的に設定されます。

この「43580」ポートに関しては 「サービス>Let’s Encrypt>設定」 で詳細モードをONにすると設定項目が現れますので、管理用WebGUIのポートに変更してファイアウォールの設定をキチンとできればLocationの設定なしでも証明書の発行は行えると思われます。

ただ残念ながら私のうまくいかなかったため管理用WebGUIが参照するAliasパスを強制的に参照するように設定して、無理やりLet’s Encryptのドメイン確認が通るようにしました。

OpnSense + Nginx + Let’s Encryptでルーター兼ロードバランサーを構築する。(インストール編)

Filed under: Let's Encrypt,Linux,Nginx,Opnsense — ranpei @ 12:22 AM

我が家のネットワークはサーバー側をIPv6に対応させるため、2コネクタ使って二股に接続する体系をとっていたのですがさすがに配線が複雑化。。。。

それ以外にも固定IP側物理ルーターが古いため性能が低く、通信性能の低下を招くという問題もありました。

旧ネットワーク構成

そんなときOpnSenseというルーター兼ファイアーウォールを構築できるLinuxディストリビューションを見つけたため、これを使ってネットワークを整理することにしました。

整理後ネットワーク

多段ルーター構成となりますがIPv6通信が主流となりつつある状況なのでこの際IPv4の性能には目をつぶります。(というかこれなら下のルーターいらないですが固定IPを使いたいので・・・)

まあ当然いろいろとつまづいた点もありましたが、おおむね想定通りの構成を構築できたのでメモとして残します。

◆OpnSenseを選んだ理由

同じような使い方ができるLinux OSにはpfSenseやVyattaなどがあります。

その中でOpnSenseを選択した理由ですが、WebUIの管理機能(日本語対応)があったこと。

グラフを用いた詳細な分析機能が搭載されており、管理に役立ちそうだったこと。

opnsenseグラフ

特にプラグインを利用することでNginx + Let’s Encryptを用いたリバースプロキシサーバーを構築できる点がよく、現在Nginxで構築しているWebフロントを移行できれば管理しやすくなると考えたためです。

まあ、いろいろと苦労しましたがそれはおいおい説明します。

◆OpnSenseインストール

まずはOpnSenseをインストールします。

今回はEsxiにインストールしますが、OpnSensenはFreeBSDをベースとして開発されているため、ゲストOS種別に Debian を選択しました。(追記:OS種別その他にFreeBSDがありましたのでこちらを選択したほうが良いです)

仮想マシン作成1

この場合vHDDのSCSIコントローラーが「VMware Paravirtual」となるため「{コントローラー名}」に変更します。( 「VMware Paravirtual」 のままだとインストーラーにHDDが無いと怒られます。)

そのほか、ネットワークアダプタにはWAN用、LAN用のコネクタを2つ以上を設定します。(イメージではWAN用、LAN用、OPT1用(管理コネクタ)の3つを設定してあります。)

仮想マシン作成2

インストールCDからVMを起動してログイン画面に到達したら ログインID:installer、パスワード:opnsense と入力してログインします。

インストール1

インストーラーが立ち上がったらキーボード設定を「jp.kbd」に変更。

インストール2
インストール3

変更後「Accept these Settings>Guided installation」を選択して画面の指示にしたがってインストールを行います。

インストール4
インストール5

インストール後再起動すると と以下のコンソールが立ち上がるのでログインします。

ログイン

ログイン後「1)Assign interfaces」からコネクタを設定していきます。

①VLANは「N」を入力

コネクタ設定1

①WANに使うコネクタを入力

②LANに使うコネクタを入力

③OPT1~nの各コネクタに使用するコネクタを入力(選択コネクタがない場合、何も入力せずEnter)

コネクタ設定4

その後「2)Set interface IP address」からLANのIPアドレスの設定を行います。

①「1」でLANを選択

LANの初期設定

② 自身が割り振り元となるためDHCP利用は「N」、IPアドレス・サブネットマスクは任意で入力

LAN初期設定2

③ LANなので何も入力せずにEnter

LAN初期設定3

④ LAN側でDHCPサーバーを起動するため「y」

LAN初期設定4

⑤IPアドレスの範囲はお好みでどうぞ

LAN初期設定5

⑦ WebGUIへのアクセスを許可するか聞かれるので「y」を入力

◆OpnSense設定(前準備)

設定後はWebUIから設定を行うのですが、今の状態ではLAN側からしかアクセスできません。

そのため以下の操作はLAN側に接続するVMを用意して行っています。

①WebUI画面にログイン(アカウントID/パスワードはコンソールと同じ)

②ウィザードが立ち上がるため順次設定を行う

  • Languageを「Japanese」
  • DNSサーバーは任意に設定
  • タイムゾーンは「Asia/Tokyo」
  • IPv4構成タイプはいったん「DHCP」(あとで変更します)
  • IPアドレスとサブネットは任意に設定
  • パスワードを変更しない場合は未入力で「次」
  • 「リロード」を押下して設定を反映させる

③OPT1からWebUIに接続できるように設定

・ メニューから「インタフェース>OPT1」を選択

  • 「インタフェースを有効」にチェック
  • IPv4構成タイプは「静的IPv4」
  • IPv4アドレスは「任意のIP/24」
  • 「保存」したら右上の「変更を適用」を押下して設定を適用

・メニューから「ファイアウォール>ルール>OPT1」を選択、「追加」ボタンを押下

  • 動作は「許可」
  • 方向は「in」
  • TCP/IPバージョンは「IPv4」
  • プロトコルは「any」
  • 送信先、送信元は「任意」

「保存」押下後、右上の「変更を適用」ボタンを押下して変更を適用する

以上でOPT1からのアクセスが可能となります。

OPT1側から設定したIPアドレスにアクセスしログイン画面が表示されるか確認しましょう。

◆ OpnSense設定(IPv4 PPPoE + IPv6 DHCP)

ここからはOPT1側から設定していきます。

① PPPoE接続の設定を行う。

「インタフェース>WAN」を選択

  • IPv4構成タイプは「PPPoE」
  • PPPoEの「ユーザー名」「パスワード」はISPのものを入力

「保存」押下後、「変更を適用」で設定を適用する。

② DHCPv6の設定を行う。

「インタフェース>割当」を選択、WAN6としてコネクタを割り当てる。

「インタフェース>WAN6」を選択、IPv6側をDHCPで設定。

ダッシュボードで確認するとWAN、WAN6にそれぞれアドレスが割当られていることが確認できるはずです。

2020年2月27日

MintLinux19からL2TPでVPN接続する

Filed under: Linux,SoftEtther VPN,VPN — ranpei @ 12:37 AM

Ubuntu系のMintLinux19からSoftetherサーバーへL2TPで接続するのに少々手こずったのでメモ。

1.GUIで設定できるようにする。

まず、ネットワーク設定に「Layer 2 Tunneling Protocol(L2TP)」がないんで追加します。

・Network-manager-l2tp-gnomeをインストール。

そうするとネットワーク設定に「Layer 2 Tunneling Protocol(L2TP)」が追加されるのでVPN設定が追加できるようになります。

・L2TPで接続する設定

設定に関しては以下のような感じ。

  • 名前(N)は任意。
  • ゲートウェイ(G)には接続先のIPまたはドメインを入力。
  • ユーザー名は「ユーザー名@ハブ名形式」で入力。 ※パスワードは接続時に入力します。
  • Gateway IDは空欄。
  • Phase1 Algorithmsに「aes128-sha1-modp1536」を入力。
  • Pre-shared KeyにはSoftetherで設定した「IPsec 事前共有鍵」を入力。
  • Phase2 Algorithmsに「aes128-sha1」を入力。
  • MPPE暗号を使用する(P)にチェックを入れる。
  • PPP Echoパケットを送信する(E)にチェックを入れる。

・ポイント

ここでポイントとなるのは IPsec Settings… の設定。

Advanced で暗号化方式を自鯖に合わせて設定しないといけません。(ここに設定する値を調べるのに時間がかかった・・・・)

・愚痴・・・・

なお、うちの環境だとドメイン経由だとなんかうまく接続できないです・・・・

IP直指定でも問題ないんで今日はここまで。

2018年8月20日

GoAccessを使ってリアルタイムアクセス解析を行う

Filed under: GoAccess,Linux,Nginx,OSS,ログ,不正アクセス — ranpei @ 9:04 PM

Ubuntu 16.04 + Nginx にGoAccessを使ったリアルアイムアクセス解析の環境を作ったのでその内容をメモ。

 

1.GoAccessをインストール
これは公式の手順を参考にインストール。

// 必要パッケージをインストール
$ sudo apt-get -y install libncursesw5-dev gcc make
$ sudo apt-get -y install libgeoip-dev libtokyocabinet-dev

// GoAccessをダウンロード
$ wget http://tar.goaccess.io/goaccess-1.2.tar.gz

// コンパイルしてインストール
$ tar -xzvf goaccess-1.2.tar.gz
$ cd goaccess-1.2
$ sudo ./configure --enable-utf8 --enable-geoip=legacy
$ sudo make
$ sudo make install
$ sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccess

インストールできたら試しに解析してみる。

$ sudo goaccess /var/log/nginx/access.log --log-format=COMBINED

こんな画面が表示される。

 

さて、GoAccessは解析結果をHTMLとして出力することもでき、
さらに –real-time-html オプションをつけることで常時情報が更新されるHTMLを出力できます。

注意点としては情報更新の通信(WebSocket)に 7890番ポートを使用するためFWを開放しておきましょう。

$ sudo ufw allow 7890

※ ルーターの開放なども必要ですが割愛します。

開放したら以下のコマンドでリアルタイム解析HTMLを出力しましょう。

$ sudo goaccess /var/log/nginx/access.log -a -o /usr/share/nginx/html/report.html --real-time-html --log-format=COMBINED

http://[ホスト名 or IPアドレス]/report.html にアクセスすると以下ような画面が見れるはずです。

 

 

2.サービス化する
常時起動するには毎回先ほどのコマンドを実行するわけにはいきませんので、

今回はサービス化して常時起動する状態にしたいと思います。

// 定義ファイルを作成
$ sudo vi /etc/systemd/system/goaccess.service
↓↓ 記載
[Unit]
Description=Goaccess Web log report.
After=network.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/goaccess -a -g -f /var/log/nginx/access.log -o /usr/share/nginx/html/report.html --real-time-html --log-format=COMBINED --ws-url <host名>
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target
↑↑ 記載

// サービスファイルとして認識されたか確認
$ sudo systemctl list-unit-files --type=service | grep goaccess
goaccess.service disabled ← 表示されればOK

// サービスを有効化
$ sudo systemctl enable goaccess

// サービス起動
$ sudo systemctl start goaccess

// サービス状態確認
$ sudo systemctl status goaccess
● goaccess.service - Goaccess Web log report.
Loaded: loaded (/etc/systemd/system/goaccess.service; enabled; vendor preset: enabled)
Active: active (running) since 月 2018-08-20 16:46:27 JST; 4h 5min ago
Main PID: 91584 (goaccess)
Tasks: 3
Memory: 3.7M
CPU: 1min 7.536s
CGroup: /system.slice/goaccess.service
mq91584 /usr/local/bin/goaccess -a -g -f /var/log/nginx/access.log -o /usr/share/nginx/html/report.html -

8月 20 16:46:27 MainServer systemd[1]: Started Goaccess Web log report..

起動できたら先ほどのURLにアクセスしてみましょう
きちんと解析画面が表示されれば設定完了です。

 

あとは必要であればアクセス制限を設けるなどしてください。

2016年11月7日

Docker + LDAP+ MailServer(Postfix + dovecot) + Roundcubeを構築する

Filed under: Docker,Linux,OSS,postfix,Roundcube,オープンソース — ranpei @ 3:11 AM

ちょっと流れから脱線しますが、

Dockerを使ってのメールサーバー構築に成功したため

その内容をメモとして残します。

 

1.メールサーバーの要件

現在のメールサーバーの使い方なのですが、

以下の2つがあるためこれらを満たす必要があります。

・サービス毎のメールアカウント管理

・フリーメールの集約

サービス毎のメールアカウントを管理するのは前にも言ったようにLDAPL+バーチャルメールボックスで行けるのですが、

フリーメールの集約はFetchmailを使っているためこれが動作する環境である必要があります。

ではできるのか?というとRoundcubeにはFetchmailの設定をWeb上で行えるプラグインが存在します。

ですが、Fetchmailは取得したメールをローカルのMDAにフォーワードすることしかできないのできません。

つまりRoundcube自身にプラグインが入った状態でなおかつローカルにMDAが存在する必要があるのです。

 

2.考えられる構成は?

考えられる構成は2種類あります。

1つは以下のようにすべてを1つのContainerにまとめること。

%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc_%e5%8d%98%e4%b8%80%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a

もう1つは以下のように転送用のメールサーバーを構築してメインのメールサーバーにメールを転送すること。

%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc_%e5%88%86%e9%9b%a2%e5%9e%8b

 

今回はどうしてもメールサーバーとRoundcubeは別に構築したかったため後者で構築を行いました。

 

3.メールサーバーを構築する

これらのContanerについては要件を満たすものがなかったため

DockerHub上のものを改造する形で自分で作りました。

GitHubに挙げてますのでダウンロードしてください。

 

// メールサーバーのチェックアウト
$ git clone https://github.com/gittrname/mailserver-ldap.git
// Roundcube + Fetchmailサーバーのチェックアウト
$ git clone https://github.com/gittrname/roundcube-fetchmail.git

・docker-compose.yml

version: '2'
services:  
  mail:  
    build: mailserver-ldap  
    ports:  
      - "25:25"  
      - "465:465"  
      - "587:587"  
      - "110:110" 
      - "143:143"  
      - "995:995"  
      - "993:993"  
    links:  
      - ldap  
    extra_hosts:  
      - "mail.example.com:127.0.0.1"  
    environment:  
      - "LDAP_SERVER=ldap"  
      - "DOMAIN=example.com"  
      - "HOSTNAME=mail.example.com" 
      - "LDAP_BASE=ou=People,dc=example,dc=com"  
      - "LDAP_USER_FIELD=uid"  
  roundcube:
    build: roundcube-fetchmail
    ports:
      - "80:80"
    links:
      - ldap
      - mail
    extra_hosts:
      - "fetch.example.com:127.0.0.1"
    environment:
      - "ROUNDCUBE_DEFAULT_HOST=mail"
      - "ROUNDCUBE_SMTP_SERVER=mail"
      - "ROUNDCUBE_USERNAME_DOMAIN=example.com"
      - "HOSTNAME=fetchmail.example.com"
  ldap:  
    image: sharaku/ldap  
    ports:  
      - "8080:80"  
    environment:  
      - "LDAP_DOMAIN=example.com"  
      - "LDAP_ADMIN_PWD=password"  
      - "LDAP_ORGANISATION=LDAP for docker."

 

※ RoundcubeとLdapAdminのポートが被らないようにしてください。

後はLdapAdmin上でユーザーを作成すればメールアカウントの作成は完了します。

 

 

定期的なメールの取得はログインした後「設定」⇒「Fetchmail]で設定します。

取得先のドメイン、ユーザー、パスワードを設定すると15分間隔でメールを取得し、

ログインユーザー@ドメインにメールを転送します。

 

ちょっとデータの永続化に多少の不安がありますが

一応、やりたいことはできたので公開してます。

2016年10月20日

既存サーバーのConcrete5データをDockerコンテナに移設する

Filed under: Concrete5,Docker,Linux,OSS,オープンソース — ranpei @ 6:09 AM

Concrete5のデータを移行していきましょう。

やり方はConcrete5公式の「concrete5 サイトを復旧(リストア)する方法」を参考にすればすんなりいきます。

 

1.移設元サーバーから移設データを取り出す

# cd /var/www/html/concrete
// データ格納フォルダをtarで固める
# tar cvf concrete-content.tar blocks/ css/ elements/ files/ helpers/ jobs/ js/ languages/ libraries/ mail/ modules/ packages/ page_types/ single_pages/ sitemap.xml themes/ tooles/ updates/
//SQLデータをエクスポート
# mysqldump -u {ユーザー名} -p {パスワード} {データベース名} >> concrete-export.sql

2.Dockerコンテナに反映させる

コンテンツファイルをDockerコンテナに反映させる。

※ コンテナ名:concrete

// SCPでファイルを移動
# cd /tmp
# scp {移設元サーバーIP}:/var/www/html/concrete/concrete-content.tar concrete-content.tar
// concreteコンテナ内にconcrete-content.tarをコピー
# docker cp concrete-content.tar concrete:/var/www/html
// tarファイルを展開
# docker exec concrete tar xvf concrete-content.tar
# docker exec concrete /bin/bash -c "chown www-data:www-data -R /var/www/html"

記事データをMySQLコンテナにインポートする。

※ コンテナ名:mysql

// SCPでファイルを移動
# cd /tmp
# scp {移設元サーバーIP}:/var/www/html/concrete/concrete-export.sql concrete-export.sql
// mysqlコンテナ内にconcrete-export.sqlをコピー
# docker cp concrete-export.sql mysql:/tmp/
// インポート
# docker exec mysql /bin/bash -c "mysql -h mysql -u {ユーザー名} -p {パスワード} {データベース名} < /tmp/concrete-export.sql"

もしかしたらディレクトリのパーミッション設定をいじる必要があるかもしれませんが・・・

ブログと違ってまだ新規のページを作成していないので何かあれば追記します。

次回、から内部ツール系サーバーの構築を行っていきます。

既存サーバーのWordPressデータをDockerコンテナへ移設する

Filed under: Docker,Linux,OSS,Wordpress,オープンソース — ranpei @ 4:27 AM

Dockerコンテナ環境の構築が完了しましたので、

既存サーバーのデータをDockerコンテナへ移設します。

※ なお、初期インストール画面での設定は終えているものとして話を進めていきます。

1.移設元サーバーから移設データを取り出す

移設するデータは記事データである”MySQLのdumpファイル”、

画像などのメディアファイルやプラグインなどが格納されている”wp-contentディレクトリ”の2つ。

// WordPress配置ディレクトリに移動 (各々のサーバー環境に合わせて読みかえてください)
# cd /var/www/html/wordpress
// wp-contentフォルダをtarで固める
# tar cvf wp-content.tar wp-content
// SQLデータをエクスポート
# mysqldump -u {ユーザー名} -p {パスワード} {データベース名} >> wordpress-export.sql

2.Dockerコンテナに反映させる

wp-contentディレクトリをDockerコンテナに配置する

※ Dockerコンテナ名:wordpress

// SCPでファイルを移動
# cd /tmp
# scp {移設元サーバーIP}:/var/www/html/wordpress/wp-content.tar wp-content.tar
// wordpressコンテナ内にwp-content.tarをコピー
# docker cp wp-content.tar wordpress:/var/www/html
// tarファイルを展開
# docker exec wordpress tar xvf wp-content.tar
# docker exec wordpress /bin/bash -c "chown www-data:www-data -R /var/www/html/wp-content"
// ディレクトリのパーミッションを変更
# docker exec wordpress /bin/bash -c "chmod 777 -R /var/www/html/wp-content/cache && chmod 777 -R /var/www/html/wp-content/uploads"

記事データをMySQLコンテナにインポートする。

※ Dockerコンテナ名:mysql

// SCPでファイルを移動
# cd /tmp
# scp {移設元サーバーIP}:/var/www/html/wordpress/wordpress-export.sql wordpress-export.sql
// mysqlコンテナ内にwordpress-export.sqlをコピー
# docker cp wordpress-export.sql mysql:/tmp/
// インポート
# docker exec mysql /bin/bash -c "mysql -h mysql -u {ユーザー名} -p {パスワード} {データベース名} < /tmp/wordpress-export.sql"

で、ブラウザでアクセスするときちんとデータが反映されていたので

これで、移設完了・・・・・と思っていたらブログの記事を書いているときに

画像をアップロードできない問題が発生しまして・・・・・

調べたところ今回の移設でwordpressの配置パスが変わったため

それに合わせて「メディア設定」>「アップロードするファイルの保存場所」のパス設定を

変更する必要がありましたのでメモしておきます。

アップロードパスの変更

 

これでWordpressデータの移設が完了しました。

Older Posts »

Powered by WordPress