マストドンのサーバ引越で詰まったこと

AWSの1か月の無料期間が終わりそうだったので安価のVPSに引っ越しさせたました。

5日もかかってしまったので、もったいないので自分のためにも調べたことをまとめます。(覚えてる範囲ですみませんm(_ _)m)

 

まず手順は以下のとおり

mastodonフォルダをまるまるコピー

DNS設定

・引っ越し前サーバのDocker内DBのデータのバックアップ

・引っ越し先サーバのDocker内DBへレストア

 

mastodonフォルダをまるまるコピー

(AWS)home/ubuntu/にmastodonというフォルダがあったので

それを引っ越し先の/var/(**ヒミツ**)/以下にまるまるコピーしました。(どこでもいいと思います。任意)

 

DNS設定

ドメインサービスによるとおもいますので省略。

自分はお名前.comでドメインを取っているので改めて設定しました。

 

letsencrypt

mastodonフォルダ置いてDNS設定しただけで普通にSSLアクセスできるようになったと思います。SSL通信はAWSでもできていたので、設定ファイルなどそのままで大丈夫なのかな。nginxは適切に設定すべきかと思いますが(特に触らなかったような気がします。)

 

エラー

マストドンのdocker内のデータベースのデータを復活させるのに苦労しました。

SSL通信はできても、表示されるページはエラーページでした。ログを見てみるとデータベースのuserテーブルを見つけられませんというふうにエラー吐いていました。(アクセスされたら最初にuserテーブルを探すようです)つまりデータベースが空っぽでした。

 

・引っ越し前サーバのDocker内DBのデータのバックアップ

AWSで以下のコマンド打って「.sql」ファイルを取得しました。

docker exec mastodon_db_1 pg_dumpall -U postgres > ./mastodon_backup.sql

(青部分は任意)

このmastodon_backup.sqlファイルを大事に保管します。

 

この辺で一度migrateしました(2コマンド)。

docker-compose run --rm web rake assets:precompile

docker-compose run --rm web rake db:migrate

 

・引っ越し先サーバのDocker内DBへレストア

※激詰まりポイント

dockerコンテナにアクセスして「mastodon_db_1」を操作します。

 

-まずはDBコンテナを起動します。(今回は全部起動させました…)

docker-compose up -d

-mastodon_db_1コンテナの/tmp/直下に取得したバックアップ.sqlファイルをコピー。

docker cp mastodon_backup.sql mastodon_db_1:/tmp/mastodon_backup.sql

-mastodon_db_1コンテナに入ります。

docker exec -it mastodon_db_1 /bin/bash

-次にDB_USER(.env.productionで設定済)に代わります。

su - [DB_USER]

-psqlに入ります。

pslq

-/tmp/フォルダ内の.sqlをたたきます

\i /tmp/mastodon_backup.sql

 

続きを読む

Bootstrapで横スクロールが発生してしまう件/CakePHP+Bootstrap(jumbotron)で画像(背景)表示

Bootstrapで横スクロールが発生してしまう件

Containerクラスの使い方を理解する。

 

基本的に

class="container-fluid"

でくくってあげれば横スクロールは発生しない。

あと、あまり大きなくくり方をすると思い通りにならなかったので

特にグリッドシステムを使う場合などは結構小分けでcontainerでくくりました。

 

class="container-fluid"

の中身を

class="container"

で囲んであげて中身を中央に寄せてあげるといい感じになった。

 


CakePHP+Bootstrap(jumbotron)で画像(背景)表示

Bootstrap.css内の.jumbotronで画像を指定してあげようとしたら、

なかなかうまくいかなかったので、ctp側で設定してあげました。

 

<div class="jumbotron text-center"

style="background-image:url(http://192.168.100.***/***.jpg);
center no-repeat; background-size: cover;
color: #DCDCDC;">

***

</div>

CakePHP3文字化け解消

非常に長い時間悩んだけどかなりシンプルな解決法だった。

 

CTPファイルを秀丸エディタUnicode(UTF-8)にエンコードして上書き保存するだけ。

 

フラッシュメッセージその他、日本語の文字化け解消できるはず。

 

--

MySQL日本語文字化け解消

■現状の確認

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

 

■latin1をutf8に変えたい。

変更するファイルは以下。

/etc/mysql/my.conf

 

【変更箇所】(引用)

引用元:【備忘録】MySQL始めてデータベースに日本語いれようとしたらハマった - Qiita

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysqld]
character-set-server=utf8
#if you use mysql<5.5 use this
#default-character-set=utf8

ポイントは、mysqldだけdefault-character-setではない

てことです。

character-set-server=utf8

です。気をつけましょう。

 

※ここで/etc/mysql/my.conf /etc/mysql/パーミッションを変更している場合は、

元に戻す!

/etc/mysql/my.conf = 755

/etc/mysql/ = 755

 

MySQL再起動

(sudo) /etc/init.d/mysqld restart

 

■再度現状確認

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

 

mysql> status

も確認するとなおよい。

 

■このあとに作ったテーブル、DBは普通に日本語使えると思う。

既存のテーブルのCHARSETを変えたい場合は以下のとおり。

 

・まずテーブルの現状の確認(accountsというテーブル名とする)

mysql> show create table accounts;

| accounts | CREATE TABLE `accounts` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_idstr` varchar(18) DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `user_bio` text,
  `password` varchar(255) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_idstr` (`user_idstr`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |

 

・テーブル自体のCHARSET変更

mysql> alter table accounts charset=utf8;
Query OK, 4 rows affected (0.09 sec)
Records: 4  Duplicates: 0  Warnings: 0

 

・確認

mysql> show create table accounts;

| accounts | CREATE TABLE `accounts` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_idstr` varchar(18) CHARACTER SET latin1 DEFAULT NULL,
  `user_name` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `user_bio` text CHARACTER SET latin1,
  `password` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_idstr` (`user_idstr`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |

OK!(急に列ごとにCHARSETが表示されるようになった。

テーブルがutf8に変わったけど、列はlatin1のままだからだと思う。)

 

・列のCHARSET変更

mysql> alter table accounts modify user_name varchar(255) character set utf8;
Query OK, 5 rows affected (0.12 sec)
Records: 5  Duplicates: 0  Warnings: 0

 

・確認

mysql> show create table accounts;

| accounts | CREATE TABLE `accounts` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_idstr` varchar(18) CHARACTER SET latin1 DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `user_bio` text CHARACTER SET latin1,
  `password` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_idstr` (`user_idstr`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 |

user_nameフィールドにCHARACTER SETが明記されていない。

テーブル自体のCHARSETと一致したからだと思う。

 

--