AMLのEC2でHP開発サーバを立ち上げる(備忘録)
自分の備忘録用に。
要件
- Redmineでプロジェクト管理
- 比較用にWordPressをとっかえひっかえしたい
- そのまま本番に移行するのでセキュリティもしっかり
EC2インスタンス
特に工夫した点はない。適切なスペックにて、「AML2」で作成。キーペアは新規作成。紛失しないように注意。
基本パッケージセットアップ
初期ユーザは「ec2-user」、パスワードなし。キーペアを指定してssh。
パッケージアップデート
sudo yum update -y
yum-cronのインストール
sudo yum install yum-cron -y
自動有効化
sudo systemctl enable yum-cron
自動更新設定
sudo sed -i "s/^apply_updates.*$/apply_updates = yes/g" /etc/yum/yum-cron.conf
yum-cronの起動
sudo systemctl start yum-cron
タイムゾーン
タイムゾーンの変更
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ハードウェアクロックを【Asia/Tokyo】に変更
sudo vim /etc/sysconfig/clock
下記の行を削除
ZONE=”UTC”
追加:
ZONE=”Asia/Tokyo”
UTC=true
変更されていることを確認
date
Wed Apr 3 13:26:13 JST 2019
JSTになっていればOK。
文字コードを日本語に変更
sudo sed -i "s/en_US\.UTF-8/ja_JP\.UTF-8/g" /etc/sysconfig/i18n
管理用ユーザの追加
sudoできるユーザを別に作る。
管理用ユーザの追加
sudo adduser newuser
管理用ユーザのパスワード設定
sudo passwd newuser
管理ユーザをwheelグループに追加
sudo usermod -aG wheel newuser
sudoersファイルの変更
sudo visudo
#適当なところに追加
%newuser ALL=(ALL) NOPASSWD: ALL
管理用ユーザのSSH設定
作成した管理ユーザにスイッチ
su newuser
.sshディレクトリの作成
cd /home/newuser
mkdir .ssh
ec2-userから鍵のコピー(推奨できないやり方)
sudo cp /home/ec2-user/.ssh/authorized_keys /home/newuser/.ssh/authorized_keys
suでrootになれるようにする
sudo vi /etc/pam.d/su
#下記コメントアウトを消して可能にする
auth required pam_wheel.so use_uid
権限の変更
chmod 700 .ssh
sudo chown newuser:newuser .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
ec2-userの削除
一度ログアウトし、作成した管理ユーザでログイン出来ることを確認してから。
sudo userdel -r ec2-user
rootユーザのパスワード変更
rootユーザにスイッチ
sudo su -
パスワード変更
passwd
docker インストール
docker本体
sudo yum install -y docker
service docker start
usermod -a -G docker newuser
docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
systemctl restart docker
ログインし直してrootでないユーザでもdockerコマンドが実行できればOK。
dockerはイメージ格納などで数GBのディスクを必要とする。
作業ディレクトリを変えたい場合は以下で行う。
dockerを停止
systemctl stop docker
/etc/docker/daemon.jsonというファイルを以下の内容で新規に作る
{
"data-root": "/to/some/path"
}
dockerを起動
systemctl start docker
Redminコンテナ導入
バックログも使いたいので入ったイメージを導入。
(プラグイン後付けはできなかった。)
Docker Hubから下記を導入↓
74th/redmine-all-in-one
バージョンによってはプラグインがうまく動かない場合があるので、バージョンが選べるようにすべてのTAGのイメージをpullする
docker pull -a 74th/redmine-all-in-one
docker run -d --name redmine --restart=unless-stopped -p 8080:80 74th/redmine-all-in-one:JP
Wordpressコンテナ導入(×3)
3つの候補から選ばせるため複数立ち上げた。
以下のdockerファイルを作ってdocker-composeで立ち上げた。
version: '2'
services:
db1: #←サイトごとにユニーク名にする
image: mysql:5.7
container_name: askahp_mysql1 #←これがコンテナ名になる。サイトごとにユニーク名にする
volumes:
- /home/fantec/db_data/mysql1:/var/lib/mysql #←サイトごとに別パスにする
restart: always
ports:
- "3307:3306" #←サイトごとに別ポートにする
environment: #←全サイト同じにした
MYSQL_ROOT_PASSWORD: xxxxxxx
MYSQL_DATABASE: xxxxxxx
MYSQL_USER: xxxxxxx
MYSQL_PASSWORD: xxxxxx
wordpress1: #←サイトごとにユニーク名にする
image: wordpress:latest
container_name: askahp_wp1 #←これがコンテナ名になる。サイトごとにユニーク名にする
depends_on:
- db1 #←dbサービスと合わせる
ports:
- "81:80" #←サイトごとに別ポートにする
restart: always
volumes:
- /home/fantec/html/wp1:/var/www/html #←サイトごとに別パスにする
environment:
WORDPRESS_DB_HOST: db1:3306 #←DBサービスと合わせる。コンテナ内部ポートであることに注意
WORDPRESS_DB_PASSWORD: xxxxxxx #←DBサービスと合わせる。
volumes:
db_data:
上記の設定からdocker-composeで起動するコマンド。
docker-compose -f [dockerファイル名] up -d
するほどでないが複数起動するので一応シェル化した。
#!/bin/sh
if [ $# -ne 1 ]; then
echo "指定された引数は$#個です。"
echo "実行するには1個の引数が必要です。"
exit 1
fi
docker-compose -f $1 up -d
環境を作る過程で面倒だったのでWordPressコンテナを停止して削除するシェルも一応作った。
#!/bin/sh
if [ $# -ne 1 ]; then
echo "指定された引数は$#個です。"
echo "実行するには1個の引数が必要です。"
exit 1
fi
docker stop askhp_wp${1}
docker rm askhp_wp${1}
docker stop askhp_mysql${1}
docker rm askhp_mysql${1}
Wordpress設定
新しい投稿エディタは使いにくいのでクラシックに戻す。
プラグインにて「Classic Editor」で検索してインストールする。
おまけ1 EFSマウント
dockerのバックアップを別インスタンスに受け渡しする際に。
割高なので受け渡し目的なら必要な時に一時的に使うのが吉。
作成
AWSのコンソール画面から「EFS」を選択して作成可能。
マウント
$sudo yum install -y amazon-efs-utils
$sudo mkdir [マウントしたいディレクトリ]
$sudo mount -t efs [ファイルシステムID]:/ [マウントしたいディレクトリ]
#ファイルシステムIDはEFSのコンソール画面からヘルプで確認できる。
アンマウント
$sudo umount [マウントしたディレクトリ]
おまけ2 EBS
アタッチ
作成は画面コンソールのEBSで。アタッチも画面から。
アタッチすると以下のコマンドでデバイスが追加されていることがわかる
ls -la /dev/s*
マウント
mkfs -t ext4 [デバイス名]
mkdir [マウント先のディレクトリ]
mount [デバイス名] [マウント先のディレクトリ]
chmod 777 [マウント先のディレクトリ]
#自動マウントを設定する。以下を/etc/fstabの末尾に追加する。
[デバイス名] [マウント先のディレクトリ] ext4 defaults 1 1
おまけ3 dockerのバックアップとリストア
バックアップ
saveしてtarで固める方法で。
docker commitでコンテナをイメージに変換
docker commit [コンテナ名] [イメージ名]:[タグ]
docker saveでイメージを保存
docker save [イメージ名]:[タグ] > [アーカイブ名].tar
リストア
docker load < [アーカイブ名].tar
#新規でコンテナを作るときと同じコマンドで起動
docker run -d --name redmine --restart=unless-stopped -p 8080:80 [イメージ名]:[タグ]
おまけ4 docker hubにあるイメージで利用できるタグを検索する
コマンドはないみたい。APIをたたいて取得するシェルを作ってみた。
#!/bin/sh
if [ $# -ne 1 ]; then
echo "指定された引数は$#個です。"
echo "実行するには1個の引数が必要です。"
exit 1
fi
TMPFILE=./.tagstmp
curl -s https://registry.hub.docker.com/v1/repositories/$1/tags > ${TMPFILE}.1
sed -e 's/},/\n/g' ${TMPFILE}.1 > ${TMPFILE}.2
cut -d ',' -f 2 ${TMPFILE}.2 | cut -d ':' -f 2 | sed -e 's/"//g' | sed -e 's/ //g' > ${TMPFILE}.3
cat ${TMPFILE}.3
rm ${TMPFILE}.*
おまけ5 VSCodeでリモート編集ができるようにする。
WordPressのカスタマイズを行う際、UI的にVSCodeが優れているのでSSHリモート編集できるようにする。
クライアントはWindows10、SSHクライアントは標準で入っているOpenSSHを使用する。
OpenSSHの接続ファイルを作成する。
Windowsのログインユーザのプロファイルディレクトリ以下に.sshフォルダを作成する。
cd %USERPROFILE%
mkdir .ssh
このフォルダの中にconfigというファイルを以下の中身で作成する。
Host profile_name ←プロファイル名
HostName xxx.xxx.xxx.xxx
User xxxx
Port xx
IdentityFile ~/.ssh/*****.pem
ForwardAgent yes
RemoteForward 52698 127.0.0.1:52698
接続できるか確認する。
VSCodeを起動し、一般ターミナルウィンドウで以下を実行し接続できればOK。
ssh profile_name
VSCodeに「SSH FS」の名前の拡張機能をインストールする。
バージョンはこの時点で最新の「1.16.2」を使った。
インストールしたらいったんリロードする。
エクスプローラで「SSH FILE SYSTEMS」のタグが追加されているので開いて、新しい設定を追加する。設定は以下とする。
Name:表示名なのでわかりやすい任意の文字
Merge:No
Label:Nameと同じにした
Group:空
PuTTY:空
Host:ホストアドレス
Port:22
Root:サーバのルートパス
Agent:空
Username:ログインユーザ名
Password:空
Private key:AWSのpemファイルフルパス指定
Passphrase:空
Proxy:空
設定したら「SSH FILE SYSTEMS」に設定名が追加されるので右クリックして接続する。正常に接続できたら緑マークになる。未設定(ワークスペース)に一覧がでるので編集できる!
※ただし検索できない。
Author And Source
この問題について(AMLのEC2でHP開発サーバを立ち上げる(備忘録)), 我々は、より多くの情報をここで見つけました https://qiita.com/oko1977/items/026018874c3391f778e1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .