Jenkins サーバーに必要なソフトウェアリスト#
Jenkins を実行するために必要なもの#
- Jenkins
- Jdk 17+ (Jenkins 実行に必要)
- Nginx (オプション、IP + ポートの方法で直接アクセス可能)
業務に必要なもの#
- Maven
- Maven ソースの変更
- JDK 8 (業務コードに必要な Java バージョンと一致)
- NVM (NodeJS バージョン管理)
- NodeJS 10.24.1
- NodeJS 12.22.12
- NodeJS 14.21.3
- NodeJS 16.20.2
- NodeJS 18.20.5
- NodeJS 20.18.1
- コードクレデンシャルの設定(コードをプルするために必要)
- SSH-Keygen
- GitLab のアカウントパスワード
- PHP (業務コードに必要な PHP バージョンと一致)
- Compress
- Ansible
- アカウントパスワードの設定
- sudo コマンドの無パス実行の設定
Jenkins に必要なプラグインリスト#
- Localization Support
- Localization (Simplified)
- Locale
- GitLab 関連
- Blue Ocean
- Role-based Authorization Strategy
- Pipeline: Stage View
- Build Pipeline
- Version Number
アプリケーションサーバーに必要なソフトウェアリスト#
- JDK 8(バックエンド Java パッケージ実行に必要)
- Nginx (フロントエンドパッケージプロキシに必要)
- Supervisord(バックエンド Java プロセス管理)
- PHP
- compose
Jenkins インストール設定#
Jenkins サーバー#
業務に一致するパッケージ環境のインストール#
JDK 8 のインストール#
Oracle は JDK の更新を保証するために JDK の古いバージョンのログインダウンロードを強制的に停止しました。そのため、JDK 8 のバージョンについては、手動で Oracle Java サイト からダウンロードし、サーバーにアップロードする必要があります。ここでは、JDK 8 の圧縮ファイルをサーバーの /usr/local/src/
ディレクトリにアップロードします。
cd /usr/local/src
事前にコンパイルされた JDK 8 の圧縮ファイルを解凍し、外部ディレクトリに移動します:
tar -zxvf jdk-8u371-linux-x64.tar.gz
mv jdk1.8.0_371 /usr/local/jdk8
環境変数に書き込み、後続のパッケージ時に呼び出せるようにします:
echo 'PATH=$PATH:/usr/local/jdk8/bin
export PATH' >> /etc/profile
echo 'JAVA_HOME=/usr/local/jdk8' >> /etc/profile
環境変数をリフレッシュして有効にします。
source /etc/profile
Maven のインストールと設定#
Maven のインストール
Maven のダウンロードリンクは以下の通りです:https://archive.apache.org/dist/maven/maven-3/
最新バージョンを選択してダウンロードします。
サーバーの場合、wget
コマンドを使用してダウンロードできます。国内のサーバーでは、清華源を使用してダウンロードします。ここでは、/usr/local/src
ディレクトリにダウンロードします。
cd /usr/local/src
wget https://archive.apache.org/dist/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
事前にコンパイルされた Maven の圧縮ファイルを解凍し、外部ディレクトリに移動します:
tar -zxvf apache-maven-3.9.9-bin.tar.gz
cp -r /usr/local/src/apache-maven-3.9.9 /usr/local/maven3.9
環境変数に書き込み、後続のパッケージ時に呼び出せるようにします:
echo '
PATH=$PATH:/usr/local/maven3.9/bin
export PATH' >> /etc/profile
環境変数をリフレッシュして有効にします。
source /etc/profile
Maven の設定
設定する内容は以下の 2 点です:
- ミラーソースのアドレスを国内ソースに変更
- プライベートミラーソースのアドレスを設定
Maven 設定ファイルを変更します:
vim /usr/local/maven3.9/conf/settings.xml
以下の内容を追加します:
...
<servers>
+ <server>
+ <id>self-hosted-nexus</id>
+ <username>${username}</username>
+ <password>${password}</password>
+ </server>
</servers>
...
<mirrors>
+ <mirror>
+ <id>self-hosted-nexus</id>
+ <mirrorOf>*</mirrorOf>
+ <name>self-hosted-nexus</name>
+ <url>${url}</url>
+ </mirror>
+ <mirror>
+ <id>aliyun-maven</id>
+ <mirrorOf>*</mirrorOf>
+ <url>https://maven.aliyun.com/repository/public/</url>
+ </mirror>
</mirrors>
...
ここでの ${username}
と ${password}
をプライベートリポジトリのアカウントパスワードに置き換え、${url}
をアクセス可能なアドレスに置き換えます。
NodeJS のインストール#
NVM のインストール
NVM のダウンロードリンクは以下の通りです:https://github.com/nvm-sh/nvm
最新バージョンを選択してダウンロードします。
サーバーの場合、wget
コマンドを使用してダウンロードできます。国内のサーバーでは、清華源を使用してダウンロードします。ここでは、/usr/local/src
ディレクトリにダウンロードします。
cd /usr/local/src
wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.40.1.tar.gz -O nvm-0.40.1.tar.gz
事前にコンパイルされた NVM の圧縮ファイルを解凍し、外部ディレクトリに移動します:
tar -zxvf nvm-0.40.1.tar.gz
mv nvm-0.40.1 /usr/local/nvm0.40
Bash の設定ファイルに追加します:
echo "source /usr/local/nvm0.40/nvm.sh" >> ~/.bashrc
Bash の設定をリフレッシュして有効にします:
source ~/.bashrc
複数の NodeJS バージョンのインストール
NVM を使用して NodeJS をインストールする際、NodeJS バージョンが確認できず、io.js バージョンのみが表示されるのは、NVM が NodeJS バージョンサーバーに接続できないためです。サーバーを指定してバージョンをインストールできます。
NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm install <nodejs_version>
# または
NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/ nvm install <nodejs_version>
NVM を使用して各 NodeJS の安定版をインストールします:
nvm install v10.24.1
nvm install v12.22.12
nvm install v14.21.3
nvm install v16.20.2
nvm install v18.20.5
nvm install v20.18.1
PHP のインストールと設定#
[!TODO]
Jenkins のインストールと設定#
Jenkins に必要な実行環境のインストール#
Jenkins の新しいバージョンは JDK 17 以上が必要です。ここでは、手動で Oracle Java サイト から最新の JDK バージョンをダウンロードし、サーバーの /usr/local/src/
ディレクトリにアップロードします。
cd /usr/local/src
事前にコンパイルされた JDK 21 の圧縮ファイルを解凍し、外部ディレクトリに移動します:
tar -zxvf jdk-21-linux-x64.tar.gz
mv jdk21 /usr/local/jdk21
ここでは、JDK 21 を環境変数に書き込まず、Jenkins 起動時に絶対パスを使用して JDK 21 を使用します。
Jenkins のインストール#
Jenkins の RedHat 版インストールパッケージをダウンロードし、国内のサーバーでは清華源を使用してダウンロードします。
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.491-1.1.noarch.rpm --no-check-certificate
バイナリインストールパッケージをインストールします。
rpm -ivh jenkins-2.491-1.1.noarch.rpm
Jenkins の設定#
Jenkins の起動設定ファイルを変更します。
vim /usr/lib/systemd/system/jenkins.service
以下の内容を変更します:
#
# このファイルは systemd(1) によって管理されています。手動でこのファイルを編集しないでください!
# これらの設定をオーバーライドするには、次のコマンドを実行します:
#
# systemctl edit jenkins
#
# ドロップインファイルに関する詳細情報は、次のリンクを参照してください:
#
# https://www.freedesktop.org/software/systemd/man/systemd.unit.html
#
[Unit]
Description=Jenkins Continuous Integration Server
Requires=network.target
After=network.target
StartLimitBurst=5
StartLimitIntervalSec=5m
[Service]
Type=notify
NotifyAccess=main
ExecStart=/usr/bin/jenkins
Restart=on-failure
SuccessExitStatus=143
# 起動完了までの待機時間を設定します。Jenkins が設定された時間内に起動完了を通知しない場合、
# サービスは失敗と見なされ、再度シャットダウンされます。単位のない値(秒)または
# "5min 20s" のような時間間隔値を指定します。タイムアウトロジックを無効にするには "infinity" を指定します。
#TimeoutStartSec=90
# Jenkins デーモンを実行する Unix アカウント
# これを変更する際は注意が必要です。$JENKINS_HOME、$JENKINS_LOG、および(すでに Jenkins を実行している場合)
# $JENKINS_WEBROOT の権限を更新する必要があります。
- User=jenkins
+ User=root
- Group=jenkins
+ Group=root
# Jenkins が設定と作業スペースを保存するディレクトリ
- Environment="JENKINS_HOME=/var/lib/jenkins"
+ Environment="JENKINS_HOME=/data/jenkins"
- WorkingDirectory=/var/lib/jenkins
+ WorkingDirectory=/data/jenkins
# Jenkins WAR の場所
#Environment="JENKINS_WAR=/usr/share/java/jenkins.war"
# 展開された WAR の場所
Environment="JENKINS_WEBROOT=%C/jenkins/war"
# Jenkins ログの場所。デフォルトでは systemd-journald(8) が使用されます。
#Environment="JENKINS_LOG=%L/jenkins/jenkins.log"
# Java ホームディレクトリ。空のままにすると、JENKINS_JAVA_CMD と PATH が参照されます。
#Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
+ Environment="JAVA_HOME=/usr/local/jdk21"
# Java 実行ファイル。空のままにすると、JAVA_HOME と PATH が参照されます。
#Environment="JENKINS_JAVA_CMD=/etc/alternatives/java"
# Jenkins JVM の引数
Environment="JAVA_OPTS=-Djava.awt.headless=true"
# ローカル HTTP リクエストをリッスンするための Unix ドメインソケット。デフォルトは無効です。
#Environment="JENKINS_UNIX_DOMAIN_PATH=/run/jenkins/jenkins.socket"
# HTTP リクエストをリッスンする IP アドレス。
# デフォルトはすべてのインターフェース(0.0.0.0)でリッスンします。
#Environment="JENKINS_LISTEN_ADDRESS="
# HTTP リクエストをリッスンするポート。無効にするには -1 に設定します。
# 特権ポート(ポート番号が 1024 未満)でリッスンできるようにするには、
# 以下の AmbientCapabilities ディレクティブに CAP_NET_BIND_SERVICE 権限を追加します。
Environment="JENKINS_PORT=8080"
# HTTPS リクエストをリッスンする IP アドレス。デフォルトは無効です。
#Environment="JENKINS_HTTPS_LISTEN_ADDRESS="
# HTTPS リクエストをリッスンするポート。デフォルトは無効です。
# 特権ポート(ポート番号が 1024 未満)でリッスンできるようにするには、
# 以下の AmbientCapabilities ディレクティブに CAP_NET_BIND_SERVICE 権限を追加します。
#Environment="JENKINS_HTTPS_PORT=443"
# JKS 形式のキーストアへのパス(JDK の keytool によって作成されます)。
# デフォルトは無効です。
#Environment="JENKINS_HTTPS_KEYSTORE=/path/to/keystore.jks"
# JENKINS_HTTPS_KEYSTORE で定義されたキーストアにアクセスするためのパスワード。
# デフォルトは無効です。
#Environment="JENKINS_HTTPS_KEYSTORE_PASSWORD=s3cR3tPa55w0rD"
# HTTP2 リクエストをリッスンする IP アドレス。デフォルトは無効です。
#Environment="JENKINS_HTTP2_LISTEN_ADDRESS="
# HTTP2 リクエストをリッスンするポート。デフォルトは無効です。
# 特権ポート(ポート番号が 1024 未満)でリッスンできるようにするには、
# 以下の AmbientCapabilities ディレクティブに CAP_NET_BIND_SERVICE 権限を追加します。
#Environment="JENKINS_HTTP2_PORT="
# 実行プロセスのための環境能力セットに含める能力を制御します。空白で区切られた能力名のリストを取ります。
# 例:CAP_SYS_ADMIN、CAP_DAC_OVERRIDE、CAP_SYS_PTRACE。環境能力セットは、
# 特権ユーザーとしてプロセスを実行したいが、いくつかの能力を与えたい場合に便利です。
# 例えば、特権ポート(ポート番号が 1024 未満)でリッスンできるようにするために、CAP_NET_BIND_SERVICE 権限を追加します。
#AmbientCapabilities=CAP_NET_BIND_SERVICE
# ログのデバッグレベル。値が高いほど詳細になります。5 は INFO。
#Environment="JENKINS_DEBUG_LEVEL=5"
# true に設定すると、/var/log/jenkins/access_log へのログ記録が有効になります。
#Environment="JENKINS_ENABLE_ACCESS_LOG=false"
# サーブレットコンテキスト(リバースプロキシを使用する場合は重要)
#Environment="JENKINS_PREFIX=/jenkins"
# Jenkins に渡す任意の追加引数。
# 完全なオプションリスト:java -jar jenkins.war --help
#Environment="JENKINS_OPTS="
# 最大コアファイルサイズ。未設定の場合、OS の値が継承されます。
#LimitCORE=infinity
# 最大ファイルサイズ。未設定の場合、OS の値が継承されます。
#LimitFSIZE=infinity
# ファイルディスクリミネータの制限。未設定の場合、OS の値が継承されます。
#LimitNOFILE=8192
# 最大プロセス数。未設定の場合、OS の値が継承されます。
#LimitNPROC=32768
# Jenkins が作成するファイルの権限ビットを制御するために umask を設定します。
#
# 0027 はファイルをグループに対して読み取り専用にし、他のユーザーにはアクセスできなくします。これは、一部の
# セキュリティに敏感なユーザーにとって有益と見なされるかもしれません。特に Jenkins が
# 複数の目的で使用されるサーバーで実行されている場合は注意が必要です。0027
# の権限は、コントローラー上で実行される sudo スクリプトに干渉します
# (JENKINS-25065 を参照)。
#
# また、$JENKINS_HOME の特に敏感な部分(クレデンシャルなど)は常に 'other' アクセスなしで書き込まれます。
# したがって、umask の値はジョブ設定、ビルド記録などにのみ影響します。
#
# 未設定の場合、OS の値が継承されます。通常は 0022 です。
# デフォルトの umask は pam_umask(8) と /etc/login.defs から来ます。
#UMask=0022
[Install]
WantedBy=multi-user.target
変更が完了したら、設定ファイルを再読み込みします。
systemctl daemon-reload
ここで、Jenkins の作業ディレクトリを /data
パスに変更しました。このディレクトリを手動で作成する必要があります:
mkdir -p /data/jenkins
作成が完了したら、Jenkins を実行します。
systemctl enable jenkins --now
以下のコマンドを使用して実行状況を確認します:
systemctl status jenkins
実行に成功した後、同じローカルネットワーク内のサーバーで、Jenkins サーバーの IP アドレス + 8080 ポート番号を使用して Jenkins の Web インターフェースにアクセスできます。
デフォルトのパスワードは以下のコマンドで確認できます:
cat /data/jenkins/secrets/initialAdminPassword
Jenkins のデフォルトダウンロードソースは国内でのダウンロードが遅いため、清華源に変更する必要があります:
vim /data/jenkins/hudson.model.UpdateCenter.xml
以下の内容を変更します:
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
- <url>https://updates.jenkins.io/update-center.json</url>
+ <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
Jenkins のインストールが完了した後、起動時に必要なディレクトリがすでに生成されています。その中の更新アドレスは依然として update.jenkins.io
であり、国内ソースに変更する必要があります:
cd /data/jenkins/updates
sed -i 's#updates.jenkins.io/download/plugins#mirrors.tuna.tsinghua.edu.cn/jenkins/plugins#g' default.json
sed -i 's#www.google.com#www.bilibili.com#g' default.json
コードプルクレデンシャルの設定#
SSH プロトコルを使用してプル#
Jenkins が SSH プロトコルを使用してコードをプルできる場合は、ローカルの SSH 公開鍵を Git サーバーに設定できます。
まず、SSH-Keygen を生成します。セキュリティ上の理由から、Github は RSA2048 アルゴリズムに基づく鍵の生成を許可していません。ここでは ed25519 アルゴリズムを使用します。サーバーがこのアルゴリズムをサポートしていない場合は、RSA4096 アルゴリズムを使用できます。
ssh-keygen -t ed25519 -C "[email protected]"
# または
ssh-keygen -t rsa -b 4096 -C "[email protected]"
システムが「鍵を保存するファイルを入力してください」と表示した場合、デフォルトのファイル位置で Enter を押して終了できます。以前に作成した場合、ssh-keygen は鍵の上書きを要求するかもしれません。この場合、作成したファイルにカスタム名を付けることができます。この時、.gitconfig
ファイルを変更して、どの鍵を使用してコードをプルするかを指定します。ここでは、生成した鍵を id_rsa_gitlab
と id_rsa_gitlab.pub
と仮定します。
ssh の設定ファイルを変更します:
vim /root/.ssh/config
以下の内容を書き込みます:
Host self-hosted-gitlab
HostName gitlab.example.com
User git
IdentityFile /root/.ssh/id_rsa_gitlab
IdentitiesOnly yes
同時に、id_rsa_gitlab.pub
ファイルの内容を GitLab サーバーに設定する必要があります。
HTTP プロトコルを使用してプル#
SSH プロトコルを使用してコードをプルできない場合は、Git リポジトリのログインクレデンシャルを設定する必要があります。
Jenkins の Web インターフェースで、以下の順序でクリックします:
[システム管理] -> [クレデンシャル] -> 最下部の [System] -> [全体のクレデンシャル (unrestricted)] -> [+ クレデンシャルを追加]
クレデンシャルのタイプを Username with password
に選択し、具体的な情報を入力して Git サーバーのユーザー名とアドレスを記入します。
Ansible を使用して配布を設定#
Ansible ソフトウェアを使用して、コンパイル済みの業務コードパッケージを配布します。配布プロセスでは scp
コマンドを使用し、Jenkins サーバーと業務サーバー間で SSH プロトコルによる通信が可能である必要があります。
Jenkins サーバーに Ansible をインストールします。
yum install -y ansible
ansible ソフトウェアの hosts ファイルを設定します:
vim /etc/ansible/hosts
以下の内容を書き込みます:
+ [web]
+ 192.168.50.101 ansible_ssh_port=22 ansible_ssh_user=nginx ansible_ssh_pass="your_password"
+ 192.168.50.102 ansible_ssh_port=22 ansible_ssh_user=nginx ansible_ssh_pass="your_password"
192.168.50.101 と 192.168.50.102 の 2 台は業務が行われるサーバーです。これらのサーバーに nginx
ユーザーでログインできることを確認する必要があります。
完了したら、Ansible Ping モジュールを使用してテストします:
ansible web -m ping
返り値が pong
であれば成功です。
Nginx リバースプロキシの設定#
Jenkins サービスが正常に起動した後、ローカルネットワーク内のジャンプホストを使用して IP:Port
でアクセスできます。外部からのアクセスには Nginx リバースプロキシを設定する必要があります。設定内容は以下の通りです:
この Nginx 設定ファイルは最外層のプロキシサーバーに設定されます。
vim /usr/local/nginx1.27/conf/conf.d/jenkins.conf
以下の内容を書き込みます:
upstream jenkins {
keepalive 32; # keepalive connections
server 127.0.0.1:8080; # jenkins ip and port
}
# Jenkins websocket agents に必要
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80; # IPv4 リクエストのためにポート 80 でリッスン
server_name jenkins.example.com; # 'jenkins.example.com' をサーバーのドメイン名に置き換え
# これは jenkins の web ルートディレクトリです
# (systemctl cat jenkins の出力に記載されています)
root /var/run/jenkins/war/;
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
# Nginx が無効と見なす Jenkins からのヘッダーを通過させる
ignore_invalid_headers off;
location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
# すべての静的ファイルをルートへのリクエストに書き換えます
# 例:/static/12345678/css/something.css は /css/something.css になります
rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
}
location /userContent {
# nginx が userContent フォルダーへのすべての静的リクエストを処理します
# 注意:これは $JENKINS_HOME ディレクトリです
root /var/lib/jenkins/;
if (!-f $request_filename){
# このファイルは存在しません。ディレクトリまたは /**view** URL かもしれません
rewrite (.*) /$1 last;
break;
}
sendfile on;
}
location / {
sendfile off;
proxy_pass http://jenkins;
proxy_redirect default;
proxy_http_version 1.1;
# Jenkins websocket agents に必要
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
# これは最大アップロードサイズです
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_request_buffering off; # HTTP CLI コマンドに必要
}
}
Blue Ocean を使用する際に特定のパスの問題が発生した場合、以下のコードスニペットを設定ファイルに追加します:
if ($request_uri ~* "/blue(/.*)") {
proxy_pass http://YOUR_SERVER_IP:YOUR_JENKINS_PORT/blue$1;
break;
}
Web アプリケーションサーバー#
nginx ユーザー権限の設定#
Jenkins は完成したパッケージコードを配布する必要があり、配布プロセス中に root
権限の操作が関与する可能性があります。sudo
を実行する際にパスワードを入力する必要があるため、nginx
ユーザーの権限を変更して、無パスで sudo
コマンドを実行できるようにします。
以下のファイル内容を変更します:
vim /etc/sudoers
以下の内容を追加します:
...
## パスワードなしで同じこと
# %wheel ALL=(ALL) NOPASSWD: ALL
+ nginx ALL=(ALL) NOPASSWD: ALL
...
業務サーバー上に nginx
ユーザーが存在し、ログイン操作を実行できることを確認する必要があります。nginx
ユーザーを作成する際に /sbin/nologin
パラメータを追加した場合、以下の操作で復元できます:
vim /etc/passwd
以下の内容を変更します:
- nginx:x:1000:1000::/home/nginx:/sbin/nologin
+ nginx:x:1000:1000::/home/nginx:/bin/bash
業務に必要なソフトウェア環境のインストール#
JDK 8 のインストール#
Oracle は JDK の更新を保証するために JDK の古いバージョンのログインダウンロードを強制的に停止しました。そのため、JDK 8 のバージョンについては、手動で Oracle Java サイト からダウンロードし、サーバーにアップロードする必要があります。ここでは、JDK 8 の圧縮ファイルをサーバーの /usr/local/src/
ディレクトリにアップロードします。
cd /usr/local/src
事前にコンパイルされた JDK 8 の圧縮ファイルを解凍し、外部ディレクトリに移動します:
tar -zxvf jdk-8u371-linux-x64.tar.gz
mv jdk1.8.0_371 /usr/local/jdk8
環境変数に書き込み、後続のパッケージ時に呼び出せるようにします:
echo 'PATH=$PATH:/usr/local/jdk8/bin
export PATH' >> /etc/profile
echo 'JAVA_HOME=/usr/local/jdk8' >> /etc/profile
環境変数をリフレッシュして有効にします。
source /etc/profile
Supervisord のインストールと設定#
Supervisord のインストール
Java プロセスを nohup
のようなコマンドで起動すると、業務にとって完全に制御および監視できないため、ここでは Supervisord ソフトウェアを使用して Java プロセスを制御管理および監視します。
Supervisord のソースコードを /usr/local/src
ディレクトリにダウンロードします:
cd /usr/local/src
wget https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz
解凍します:
tar -zxvf supervisor-4.2.5.tar.gz
Supervisord は Python で書かれているため、Python を使用してインストールします:
cd /usr/local/src/supervisor-4.2.5
python3 setup.py install
インストールが完了したら、supervisord
コマンドをグローバル変数に書き込みます:
ln -sf /usr/local/bin/supervisor* /usr/bin/
ln -sf /usr/local/bin/echo_supervisord_conf /usr/bin/
書き込みが成功したら、以下のコマンドでバージョンを確認できます:
supervisord --version
Supervisord の設定
Supervisord の実行に必要な作業ディレクトリを作成します:
mkdir -p /etc/supervisord.d
mkdir -p /var/log/supervisor
mkdir -p /var/run/supervisor
デフォルト設定ファイルを作成します:
echo 'D /var/run/supervisor 0775 root root -' > /etc/tmpfiles.d/supervisor.conf
echo_supervisord_conf > /etc/supervisord.conf
設定ファイルの内容を変更します:
...
[unix_http_server]
- file=/tmp/supervisor/supervisor.sock ; (ソケットファイルへのパス)
+ file=/var/run/supervisor/supervisor.sock ; (ソケットファイルへのパス)
[supervisorctl]
- serverurl=unix:///tmp/supervisor/supervisor.sock ; unix ソケット用の unix:// URL を使用
+ serverurl=unix:///var/run/supervisor/supervisor.sock ; unix ソケット用の unix:// URL を使用
[inet_http_server] ; inet (TCP) サーバーはデフォルトで無効
- ;port=*:9001 ; ip_address:port 指定、*:port はすべての iface 用
+ port=*:9001 ; ip_address:port 指定、*:port はすべての iface 用
- ;username=admin ; デフォルトはユーザー名なし(オープンサーバー)
+ username=admin ; デフォルトはユーザー名なし(オープンサーバー)
- ;password=<password> ; デフォルトはパスワードなし(オープンサーバー)
+ password=<password> ; デフォルトはパスワードなし(オープンサーバー)
[supervisord]
- logfile=/tmp/supervisor/supervisord.log
+ logfile=/var/log/supervisor/supervisord.log
[include]
+ files = supervisord.d/*/*.ini supervisord.d/*.ini
Systemd 設定ファイルを作成します。
vim /etc/systemd/system/supervisord.service
以下の内容を書き込みます:
# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Supervisord を起動し、起動時に自動的に開始するように設定します:
systemctl daemon-reload
systemctl enable supervisord --now
異なるニーズに応じてディレクトリを分類し、具体的な業務に基づいて以下の設定を作成します:
vim /etc/supervisord.d/${example-work}/${example-program}
以下の内容を書き込みます:
Warning
必要に応じて、設定ファイル内の変数を業務の具体的な値に置き換えてください。
[program: ${example-program}]
command=/usr/local/jdk8/bin/java -jar -Xms1g -Xmx1g -Dspring.profiles.active=${env} -Dserver.port=${port} /data/contents/${example-work}/${example-program}.jar
directory=/data/contents/${example-work}/
startsecs=10
autorestart=true
startretries=3
user=root
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=1GB
stdout_logfile_backups = 1
stopasgroup=false
killasgroup=false
stdout_logfile=/data/logs/${example-work}-${example-program}.log
Nginx のインストール#
業務サーバー上の Nginx は最も基本的なリバースプロキシサービスのみを提供します。SSL 証明書の解析、アクセスルーティング、およびアクセス頻度の制限は、最外層のプロキシおよび WAF に委任されるため、最も基本的な機能のみをインストールします。
PHP のインストール#
[!TODO]