GCPでCircleCI回して自動デプロイ
ざっくりメモ書き程度だが、、、
GCPでVMインスタンスの生成
お金がかからないようにmicroを選択
ブラウザで表示確認
kusanagi環境でデプロイでもいいが、ここではテストなのでなし。
nginxのインストール
# yum install epel-release # yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm # yum install --enablerepo=nginx nginx # systemctl start nginx # systemctl enable nginx
ブラウザに「http://[外部IPアドレス]」を入力すればwelcomeが出てくる。
Nginxのドキュメントルートを変更
/etc/nginx/cond.d/default.conf
内に設定されているドキュメントルートを/home/[ユーザ名]/[index.htmlの親ディレクトリ]
に設定する。
# vi /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { #root /usr/share/nginx/html; root /home/[ユーザ名]/[index.htmlの親ディレクトリ]; index index.html index.htm; } (略)
index.htmlを作成する。(適当にtestとか打つ)
ブラウザでIPアドレス打って先程の内容が出てくればOK
ドメイン取得している場合
今回は1円のキャンペーンでやっていたドメインを取得
IPアドレスの固定
GCPメニュー > VPCネットワーク > 外部IPアドレスのタイプをエフェメラル→静的に変更してIPアドレスを固定する。
GCPメニュー > ネットワークサービス > CloudDNSでタイプAでIPを入力。 ドメイン側でもネームサーバーを登録。
DNS設定
データのところをドメイン側にネームサーバーの情報としてを入れる。
また、AレコードとしてドメインのIPを追加する。
ポート番号変更
セキュリティの問題からポート番号を22番から変える。 ※rootログイン禁止、パスワード認証禁止はデフォルトで設定されている。
# vi /etc/ssh/sshd_config
portのコメントアウトを外して番号を変える。
再起動する。
# systemctl restart sshd
ファイヤーウォールの設定
また、ファイヤーウォールでssh22番を閉じて、変更したポート番号のファイヤーウォールを開ける。 メニュー > VPCネットワーク > ファイヤーウォールルールから変更可能。
リポジトリ作成
ローカルでリポジトリ作成し、gitで管理する。 リモートリポジトリ作成し、pushする。
CircleCI
CircleCIにGitHubアカウントでログインして連携させる。
CircleCIでメニューバーのAddProjectで先程作ったSetUpProjectをクリック
OSと言語を選ぶ(HTMLファイルだけなのでOtherを選択)
リポジトリ内で.circleciフォルダを作成。その中にconfig.ymlファイルを作成。
とりあえずCircleCIに表示されたサンプルをconfig.ymlに入れ込む。
config.yml version: 2 jobs: build: docker: - image: debian:stretch steps: - checkout - run: name: Greeting command: echo Hello, world. - run: name: Print the Current Time command: date
一旦、startbuildingすれば連携できているはずなので、何か打ち込んでpushしてCircleCIで反応しているか確認。
できていればOKで、ymlファイルを書き換える。
version: 2 jobs: build: docker: - image: circleci/php:7.1-browsers steps: - checkout - add_ssh_keys: fingerprints: - "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" - run: name: Start ssh-keyscan command: | ssh-keyscan -p ${PORT} ${IP} >> ~/.ssh/known_hosts echo ${CIRCLE_BRANCH} # - deploy: # name: Start develop deploy # command: | # if [ "${CIRCLE_BRANCH}" == "development" ]; then # rsync -av --delete --rsh="ssh -p ${PORT}" --exclude='.git' --exclude='.circleci' ./ ${USER_NAME}@${IP}:[ユーザーのルートディレクトリからindex.htmlまでのpath] # fi - deploy: name: Start master deploy command: | if [ "${CIRCLE_BRANCH}" == "master" ]; then rsync -av --delete --rsh="ssh -p ${PORT}" --exclude='.git' --exclude='.circleci' ./ ${USER_NAME}@${IP}:[ユーザーのルートディレクトリからindex.htmlまでのpath] fi
fingerprintは後述。 Dockerの知識がないので、imageをどれにすればいいかわからない。
初期設定のDebian:strechではssh-keyscanができないのでとりあえずphp...
${}
の中は環境変数が入るので、CircleCi上のEnvironment Variablesで後ほど登録
サーバーとCircleCIの連携。
サーバー上で公開鍵を生成。(既にあれば作ってもよい。)
$ ssh-keygen -t rsa
/home/[ユーザー]/.sshに作成されるので、公開鍵はauthorized_keysに名前を変更して、権限を600に変更
ここで作った秘密鍵をcircleciに入れる。
プロジェクトのセッティングからSSH Permissionsに秘密鍵を入力
入力してできたfingerprintをyamlに貼り付ける
ちなみにEnvironment Variablesに見せたくない情報を入れて、yamlで変数上でその変数を読み込む
CircleCIでpermission dienedにったときに確認すること
Nginxでpermission dienedになったとき
メモ: home 666 project 666 index.html 644