サクラVPSで開発環境を整える
サクラVPSを借りた後やった初期設定〜開発環境を設定するところまで。以下、開発環境の要件
ローカルマシンからデプロイ可能
開発環境はローカル環境で使用しているDockerfileを叩くことで起動可能
ユーザー作成
VPSにログインしたときにルートユーザーだと危険なので開発用ユーザーでログインし、ルートユーザーに切り替えられるようにする。ここでは開発ユーザー名を仮にdevとする。ルートユーザー名はdebianとする。
サクラのVPSにログインし使用するサーバを選択。電源操作 > 起動する
コンソール > シリアルコンソール
シリアルコンソールにサーバ契約時に設定したルートユーザーでログイン
login: debian
Password:
開発用ユーザー/パスワード作成
sudo adduser dev
sudo passwd dev
SSHセットアップ
シリアルコンソールでルートユーザーとしてログインした状態で作業を続ける。
sshをインストール
apt update
apt -y install ssh
sshd_configのセキュリテイ変更
sudo vi /etc/ssh/sshd_config
変更対象は以下の通り。コメントアウトされているか、違う値が入ってるので以下のように変更する。ポート番号は1024以上であればなんでも良い。
Port 6543
PermitRootLogin no
PasswordAuthentication no
sshd_configの設定を反映
# 以下のコマンドでviを保存終了
:wq
# 以下のコマンドでSSHデーモン再起動。設定が反映される。
sudo systemctl restart ssh
パケットフィルターでポート許可。サクラのVPSにログインしてサーバを選択しパケットフィルター設定タブ > パケットフィルター設定 > パケットフィルター設定を追加するから以下の設定を追加
フィルターの種類:カスタム
プロトコル:TCP
ポート番号:6543
すべて許可
デフォルトのSSHポート 22は不要なのでバツボタンで削除。右下の設定を保存するボタンを押して設定を反映する。
SSHログイン設定
開発ユーザーでSSHログインできるようにする。前章でシリアルコンソールでルートユーザーとしてログインした状態で作業を続ける。
開発ユーザーのホームディレクトリ作成
sudo mkdir /home/dev
sudo chown dev:dev /home/dev
ルートユーザー → 開発ユーザーへ切り替え
su dev
SSHの公開鍵認証用のディレクトリとファイルを作成
cd ~
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
ローカルマシンで公開鍵を作成し、公開鍵の内容をコピーする。公開鍵と秘密鍵のファイル名を仮にsakurassh, sakurassh.pub とする。
[ローカルマシン]
# 初めての場合はディレクトリがないので作成してください。
cd ~
mkdir .ssh
# sshディレクトリ内にて作業します
cd .ssh
# 公開鍵秘密鍵ペアを作成。パスフレーズなどは空のままでOK
ssh-keygen -t rsa -f sakurassh
# 秘密鍵の権限変更
chmod 600 sakurassh
# 公開鍵の内容が表示されるのでコピーしてください。
cat sakurassh.pub
VPSサーバのシリアルコンソールに戻り、開発ユーザーにてコピーしてきた公開鍵を貼り付ける。書き込みモードにしてからペーストするのをお忘れなく。
vi authorized_keys
SSH接続テスト。ホスト(xxx.xxx.xxx.xxx)はサクラのVPSのサーバの基本情報タブのIPv4を指定する。
[ローカルマシン]
ssh -i ~/.ssh/sakurassh -p 6543 dev@xxx.xxx.xxx.xxx
Docker設定
Dockerを使ってローカル環境でテストしていたのでリモート環境でも同じようにDockerを使用したい。以下その設定。
SSH接続しルートユーザーに昇格する。
su debian
Docker, unzipをインストール。unzipはローカルからリモートへサーバのプロジェクトディレクトリを圧縮してアップロードした後、それを展開するために使う。Github経由でデプロイするとかであれば不要。
apt install docker.io
# Dockerを開発ユーザーで使えるようにする
sudo usermod -aG docker dev
# デプロイしたzipファイルを解凍するため。
apt install unzip
デプロイ用のスクリプトを作成する
ローカルマシンに以下のシェルスクリプトを作成。ファイル名はupload.shとする。
#!/bin/bash
# 引数のチェック
if [ "$#" -ne 5 ]; then
echo "Usage: $0 <local_directory> <remote_user> <remote_host> <port> <private_key_path>"
exit 1
fi
LOCAL_DIR=$1
REMOTE_USER=$2
REMOTE_HOST=$3
PORT=$4
PRIVATE_KEY=$5
REMOTE_DIR_INSTALL="/home/dev/projects"
# ZIPファイル名を作成
ZIP_FILE="$(basename "$LOCAL_DIR").zip"
# ディレクトリをZIP形式に圧縮
zip -r "$ZIP_FILE" "$LOCAL_DIR"
# SSHでリモートサーバにアップロード
scp -i "$PRIVATE_KEY" -P "$PORT" "$ZIP_FILE" "${REMOTE_USER}@${REMOTE_HOST}:~"
ssh -i "$PRIVATE_KEY" -p "$PORT" "${REMOTE_USER}@${REMOTE_HOST}" <<EOF
# 解凍先のディレクトリがあれば削除
if [ -d "$REMOTE_DIR_INSTALL" ]; then
rm -rf "$REMOTE_DIR_INSTALL"
fi
mkdir -p "$REMOTE_DIR_INSTALL"
# ZIPファイルを解凍
unzip "$ZIP_FILE" -d "$REMOTE_DIR_INSTALL"
# ZIPファイルを削除
rm -rf "$ZIP_FILE"
EOF
# ローカルのZIPファイルを削除
rm "$ZIP_FILE"
echo "Upload and extraction completed."
ファイル内の以下にサーバ内のデプロイ先のディレクトリを指定する。/home/dev以下であれば開発ユーザーは権限があるのでどこでも良い。デフォルトではprojectsというディレクトリにしてある。サーバ上にあらかじめこのディレクトリを作っておく必要はない。
REMOTE_DIR_INSTALL="/home/dev/projects"
デプロイテスト
スクリプト引数は以下の通り第一引数::アップロードしたいディレクトリのパス
第二引数:ユーザー名。ここでは開発ユーザー
第三引数:接続ホスト。ここではさくらVPSにあるサーバIPv4を入力
第四引数:SSH秘密鍵のパス
[ローカルマシン]
# アップロード用のテストディレクトリとファイルを作成
mkdir -p testDir
touch testDir/success.txt
#スクリプト実行
./upload_wt_api.sh test dev xxx.xxx.xxx.xxx 6543 ~/.ssh/sakurassh
スクリプトを実行後、SSHでログインしファイルを確認する。
[ローカルマシン]
ssh -i ~/.ssh/sakurassh -p 6543 dev@xxx.xxx.xxx.xxx
# 以下のコマンドを実行して、success.txtが見つかれば成功。
ls projects/test