banner
K1NG

K1NG

读书,买花,长大。

Jenkins インストール設定チュートリアル

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 に必要なプラグインリスト#

  1. Localization Support
  2. Localization (Simplified)
  3. Locale
  4. GitLab 関連
  5. Blue Ocean
  6. Role-based Authorization Strategy
  7. Pipeline: Stage View
  8. Build Pipeline
  9. 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 点です:

  1. ミラーソースのアドレスを国内ソースに変更
  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_gitlabid_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]

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。