VPS契約ガイド
1. スペックの選定
これらを合計すると、全体として最低でも6-8GBのRAMと120GB以上のディスクスペースが必要となると見積もられます。
※これはあくまで概算。
ソフトウェア | 推奨リソース |
---|---|
CentOS | 最低でも1GBのRAMが必要ですが、他のアプリケーションを動作させるためには2GB以上のRAMを確保することを推奨します。 |
Jenkins | Jenkinsの動作には最低でも256MBのRAMと1GBのディスクスペースが必要ですが、大規模なビルドや多数のジョブを実行する場合にはさらに多くのリソースが必要となります。一般的には、2GB以上のRAMと50GB以上のディスクスペースを確保することが推奨されます。 |
Docker Compose | Docker自体の動作には最低でも512MBのRAMと20GBのディスクスペースが必要ですが、動作させるコンテナによってはさらに多くのリソースが必要となります。 |
Spring Boot Webアプリケーション | 必要とするリソースはアプリケーションの規模や負荷によりますが、最低でも512MB~1GBのRAMを確保することが推奨されます。 |
Redis | 必要なリソースは使用するデータの量によりますが、最低でも512MBのRAMを確保することが推奨されます。 |
PostgreSQL | 小規模なデータベースの場合、最低でも512MBのRAMと50GBのディスクスペースを確保することが推奨されます。 |
2. VPSの契約
今回契約をしたVPSはコスパ重視でCONTABOのVPSサーバー
https://contabo.com/en
項目 | 内容 |
---|---|
プラン | Cloud VPS Sプラン |
CPU | 4 vCPU Cores |
RAM | 8 GB RAM |
STORAGE | 200 GB SSD |
Region | Asia (Japan) |
OS | Cent OS 7 |
CentOS 7 設定ガイド
1.作業用のユーザーアカウントを作成する
-
新しいユーザーアカウントを作成します。ここではユーザー名を
username
とします。適切なユーザー名に置き換えてください。adduser username
-
作成したユーザーにパスワードを設定します。
passwd username
-
このユーザーにsudo権限を付与します。
usermod -aG wheel username
2. 公開鍵認証の設定
-
ユーザーを切り替えます。
su - username
-
ユーザーのホームディレクトリで.sshディレクトリを作成します。
mkdir ~/.ssh
-
公開鍵を
~/.ssh/authorized_keys
ファイルに追加します。公開鍵はあらかじめローカルマシンで生成しておく必要があります。
リンク参照:SSH公開鍵と秘密鍵の作成方法echo 'your_public_key' >> ~/.ssh/authorized_keys
-
必要なパーミッションを設定します。
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
-
rootユーザーに戻ります。
exit
3. パスワード認証を無効化
-
SSHの設定ファイル
/etc/ssh/sshd_config
を開きます。vi /etc/ssh/sshd_config
-
以下の行を見つけて変更または追加します。
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
ChallengeResponseAuthentication no
-
SSHサーバーを再起動します。
systemctl restart sshd
4. ファイアウォールの設定
-
firewalldサービスの開始
systemctl start firewalld
-
firewalldが正常に起動したことを確認
systemctl status firewalld
active (running)という結果を返すならば、firewalldは正常に起動しています。
-
firewall-cmdコマンドを実行してHTTP、HTTPS、SSHをファイアウォールに追加
firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
-
firewalldがシステム起動時に自動的に起動するように設定
systemctl enable firewalld
この設定は基本的なものですが、セキュリティをさらに強化するためには、SELinuxの設定、不要なサービスの停止、定期的なパッチ適用などを行うことが重要です。また、システムの監視やロギングも重要なセキュリティ対策の一部となります。
ソフトウェアインストール
1. JenkinsやDocekr設定用の、shスクリプトを実行する。
※jenkins.io-2023.keyは頻繁に更新される為、最新versionをインストールする必要がある
#!/bin/bash
# Javaのインストール
sudo yum install -y java-11-openjdk-devel
# Gitのインストール
sudo yum install git
# yum-utils のインストール
sudo yum install -y yum-utils
# Dockerのインストール
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
# DockerComposeのインストール
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo usermod -aG docker jenkins
# Jenkinsリポジトリの追加
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key
# Jenkinsのインストール
sudo yum install -y jenkins
# Jenkinsの起動と自動起動の設定
sudo systemctl start jenkins
sudo systemctl enable jenkins
# ファイアウォールの設定
sudo firewall-cmd --permanent --zone=public --add-port=8000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
2. Jenkinsのport番号の変更
-
Jenkinsの設定ファイル
/usr/lib/systemd/system/jenkins.service
を開きポートを8000
に変更。jenkins.serviceEnvironment="JENKINS_PORT=8000"
-
Jenkinsの設定ファイル
/etc/sysconfig/jenkins
を開きポートを8000
に変更。jenkinsJENKINS_PORT="8000"
jenkinsJENKINS_HTTPS_PORT="8000"
-
再起動して設定を反映
bashsudo systemctl daemon-reload sudo systemctl restart jenkins
-
初期パスワードの表示
bashecho "Initial Admin Password:" sudo cat /var/lib/jenkins/secrets/initialAdminPassword
-
初回ログイン
<VPSのホスト名>:8000
でJenkinsにアクセスして、取得したPWを入力して初回ログインを行う。
CICDの構築
1. Jenkinsのセットアップ:
以下の手順でJenkinsと必要なプラグインをセットアップします。
- Jenkinsのダッシュボードにログインします。
- 「Jenkinsの管理」をクリックします。
- 次に「プラグインの管理」をクリックします。
- 「利用可能なプラグイン」タブを開き、「GitHub plugin」と「Docker plugin」を検索します。
- プラグインの横にあるチェックボックスをオンにし、「再起動せずにインストール」をクリックします。
2. ソースコード管理(GitHub):
Jenkinsジョブを設定し、ソースコードのリポジトリとしてGitHubを指定します。
- Jenkinsのダッシュボードで、「新規ジョブ作成」をクリックします。
- 任意のジョブ名を入力し、「フリースタイル・プロジェクトのビルド」を選択して、「OK」をクリックします。
- 「ソースコード管理」セクションで、「Git」を選択します。
- 「リポジトリURL」にGitHubリポジトリのURLを入力します。
- 「認証情報」にGitHubの認証情報を追加します。
- 「ビルドするブランチ」でビルドするブランチを指定します。
3. Dockerビルド:
Dockerfileを使ってアプリケーションのDockerイメージをビルドします。
- 「ビルド」セクションで、「ビルド手順の追加」をクリックし、「シェルの実行」を選択します。
- シェルスクリプトでDockerビルドコマンドを実行します。
例:docker-compose build app
4. DockerHubへのプッシュ:
ビルドしたDockerイメージをDockerHubにプッシュします。
- 「ビルド」セクションで、「ビルド手順の追加」をクリックし、「シェルの実行」を選択します。
- シェルスクリプトでDocker pushコマンドを実行します。
例:docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS docker push lunch-app
5. デプロイ(Docker Compose):
新しいイメージを使用してアプリケーションをデプロイします。
- 「ビルド後の処理」で、「ビルド後の処理の追加」をクリックし、「シェルの実行」を選択します。
- シェルスクリプトでDocker Composeを使用してアプリケーションをデプロイします。
例:docker-compose up -d
6. Jenkinsジョブのスケジューリング:
すべてのステップをJenkinsジョブとしてスケジュールします。
- 「ビルド・トリガ」セクションで、「SCMをポーリング」を選択します。
- スケジュールを設定します。例:
H/15 * * * *
(15分ごとにチェック)