CentOS 7にApacheをインストールする方法
CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。
継続的インテグレーションは、開発者が1日に何度も頻繁に変更されたコードを共有リポジトリにマージできるDevOpsソフトウェア開発プラクティスです。マージのたびに、コードの問題を検出するために自動ビルドとテストが実行されます。これにより、開発者はエラーをすばやく見つけて解決し、ソフトウェアの品質を向上させ、ソフトウェアを継続的に提供できます。Concourseとの間で切り替えを行うと、すべての構成がバージョン管理にチェックインできる宣言ファイルに保持されるため、非常に簡単です。また、ビルド情報をインタラクティブに表示するWebユーザーインターフェイスも提供します。
192.0.2.1
およびのci.example.com
実際のVultrパブリックIPアドレスと実際のドメイン名をすべて置き換えてください。
CentOS 7のアップデート方法ガイドを使用して、ベースシステムをアップデートします。システムが更新されたら、PostgreSQLのインストールに進みます。
PostgreSQLはオブジェクトリレーショナルデータベースシステムです。ConcourseはそのパイプラインデータをPostgreSQLデータベースに保存します。PostgreSQLリポジトリを追加します。
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
PostgreSQLデータベースサーバーをインストールします。
sudo yum -y install postgresql96-server postgresql96-contrib
データベースを初期化します。
sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
initdb
単一のサーバーインスタンスによって管理されるデータベースのコレクションである、新しいPostgreSQLデータベースクラスターを作成します。pg_hba.conf
ファイルを編集して、MD5ベースの認証を有効にします。
sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf
次の行を検索し、値を変更peer
し、ident
中METHOD
に列をtrust
してmd5
、それぞれ。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
更新すると、構成は次のようになります。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
PostgreSQLサーバーを起動し、起動時に自動的に起動するようにします。
sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6
デフォルトのPostgreSQLユーザーのパスワードを変更します。
sudo passwd postgres
PostgreSQLユーザーとしてログイン:
sudo su - postgres
Concourse CIの新しいPostgreSQLユーザーを作成します。
createuser concourse
注:データベースの認証にはデフォルトのPostgreSQLユーザーを使用できますが、本番環境のセットアップではConcourseデータベースの認証に専用ユーザーを使用することをお勧めします。
PostgreSQLは、データベースでクエリを実行するためのシェルを提供します。次のコマンドを実行して、PostgreSQLシェルに切り替えます。
psql
新しく作成したConcourseデータベースユーザーのパスワードを設定します。
ALTER USER concourse WITH ENCRYPTED password 'DBPassword';
重要:DBPassword
強力なパスワードに置き換えてください。チュートリアルの後半で必要になるため、パスワードを書き留めておきます。
Concourseの新しいデータベースを作成します。
CREATE DATABASE concourse OWNER concourse;
psql
シェルを終了します。
\q
現在のpostgresユーザーからsudoユーザーに切り替えます。
exit
Concourse実行可能ファイルの最新バージョンをダウンロードして保存し、/usr/bin
直接実行できるようにします。Concourse and Flyバイナリの最新バージョンは、Concourseダウンロードページから入手できます。新しいリリースは非常に頻繁です。以下のリンクを最新バージョンの新しいリンクに置き換えます。
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 -O /usr/bin/concourse
同様に、最新バージョンのfly実行可能ファイルをダウンロードして、に保存し/usr/bin
ます。
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 -O /usr/bin/fly
Flyは、Concourse CIのATC APIに接続するためのコマンドラインインターフェイスです。Flyは、Linux、Windows、MacOSなどの複数のプラットフォームで利用できます。
ダウンロードconcourse
したfly
バイナリとバイナリに実行権限を割り当てます。
sudo chmod +x /usr/bin/concourse /usr/bin/fly
バージョンを確認して、コンコースとフライが正しく動作しているかどうかを確認します。
concourse -version
fly -version
RSAキーペアは、コンコースのコンポーネント間の通信を暗号化する方法を提供します。
Concourseを機能させるには、少なくとも3組のキーを生成する必要があります。セッションデータを暗号化するには、を生成しsession_signing_key
ます。このキーは、TSAがATCに対して行う要求に署名するためにも使用されます。TSA SSHサーバーを保護するには、を生成しtsa_host_key
ます。最後に、生成するworker_key
ために各作業員。
Concourse CIに関連するキーと設定を保存するための新しいディレクトリを作成します。
sudo mkdir /opt/concourse
必要なキーを生成します。
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key
内容をauthorized_worker_keys
ファイルにコピーして、ワーカーの公開鍵を承認します。
sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys
Concourseは、開始する必要がある2つの別個のコンポーネント、Webとワーカーを提供します。Concourse Webを開始します。
sudo concourse web \
--basic-auth-username admin \
--basic-auth-password StrongPass \
--session-signing-key /opt/concourse/session_signing_key \
--tsa-host-key /opt/concourse/tsa_host_key \
--tsa-authorized-keys /opt/concourse/authorized_worker_keys \
--postgres-user=concourse \
--postgres-password=DBPassword \
--postgres-database=concourse \
--external-url http://192.0.2.1:8080
basic-auth
必要に応じて、のユーザー名とパスワードを変更します。キーファイルへのパスが正しいことを確認し、PostgreSQLデータベース構成でユーザー名とパスワードの正しい値が指定されていることを確認してください。
注:ATCはデフォルトポートをリッスンし、8080
TSAはポートをリッスンします2222
。認証が--no-really-i-dont-want-any-auth
不要な場合は、基本認証オプションを削除してからオプションを渡します。
Webサーバーが起動すると、次の出力が表示されます。
{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}
まだいくつかセットアップする必要があるので、今のところサーバーを停止します。
Concourse CIワーカーを開始します。
sudo concourse worker \
--work-dir /opt/concourse/worker \
--tsa-host 127.0.0.1 \
--tsa-public-key /opt/concourse/tsa_host_key.pub \
--tsa-worker-private-key /opt/concourse/worker_key
上記のコマンドは、TSAがlocalhostで実行されていて、デフォルトのポートをリッスンしていると想定しています2222
。
上記のコマンドを使用してConcourse Webとワーカーを簡単に起動できますが、サーバーの管理にはSystemdを使用することをお勧めします。
Systemdサービスを使用してアプリケーションを管理することで、障害発生時および起動時にアプリケーションが自動的に開始されます。Concourseサーバーは設定ファイルからデータを取得しませんが、環境変数からデータにアクセスできます。グローバル環境変数を設定する代わりに、環境変数を格納する新しいファイルを作成し、Systemdサービスを使用して変数をConcourse CIに渡します。
Concourse Webの新しい環境ファイルを作成します。
sudo nano /opt/concourse/web.env
ファイルに入力します。
CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse
CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080
BASIC_AUTH
必要に応じて、のユーザー名とパスワードを変更します。キーファイルへのパスが正しいことを確認し、PostgreSQLデータベース構成でユーザー名とパスワードの正しい値が指定されていることを確認してください。
同様に、ワーカーの環境ファイルを作成します。
sudo nano /opt/concourse/worker.env
ファイルに入力します。
CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1
環境ファイルにはユーザー名とパスワードが含まれているため、他のユーザーがアクセスできないようにアクセス許可を変更します。
sudo chmod 600 /opt/concourse/*.env
次に、ConcourseがWeb環境を実行するための新しいユーザーを作成します。これにより、Webサーバーが隔離された環境で確実に実行されます。
sudo adduser --system concourse
コンコースのCIファイルのディレクトリに対するコンコースユーザーの所有権を付与します。
sudo chown -R concourse:concourse /opt/concourse
Concourse Webサービス用の新しいsystemdサービスファイルを作成します。
sudo nano /etc/systemd/system/concourse-web.service
ファイルに入力します。
[Unit]
Description=Concourse CI web server
After=postgresql-9.6.service
[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web
[Install]
WantedBy=multi-user.target
ファイルを保存して閉じます。コンコースワーカーサービスの新しいサービスファイルを作成します。
sudo nano /etc/systemd/system/concourse-worker.service
ファイルに入力します。
[Unit]
Description=Concourse CI worker process
After=concourse-web.service
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker
[Install]
WantedBy=multi-user.target
これで、次のコマンドを実行して、Webサービスとワーカーサービスを直接開始できます。
sudo systemctl start concourse-web concourse-worker
ワーカーとWebプロセスが起動時に自動的に開始するようにするには、次のコマンドを実行します。
sudo systemctl enable concourse-worker concourse-web
サービスのステータスを確認するには、次のコマンドを実行します。
sudo systemctl status concourse-worker concourse-web
サービスが開始されていない場合、またはFAILED
状態にある場合は、/tmp
ディレクトリからキャッシュを削除します。
sudo rm -rf /tmp/*
サービスを再起動します。
sudo systemctl restart concourse-worker concourse-web
今回はサービスが正しく開始されていることに注意してください。サービスのステータスを確認したときの出力は類似しています。
[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
Main PID: 3037 (concourse)
CGroup: /system.slice/concourse-worker.service
└─3037 /usr/bin/concourse worker
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}
...
● concourse-web.service - Concourse CI web server
Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
Main PID: 3036 (concourse)
CGroup: /system.slice/concourse-web.service
└─3036 /usr/bin/concourse web
Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.
ファイアウォールを調整して、ATSが実行されているポート8080とTSAが実行されているポート2222を許可します。
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
サーバーが起動すると、Concourse CIのWebインターフェースhttp://192.0.2.1:8080
に任意のブラウザーでからアクセスできます。環境ファイルで提供されているユーザー名とパスワードを使用してログインします。
Flyを使用してサーバーに接続するには、次のコマンドを実行します。
fly -t my-ci login -c http://192.0.2.1:8080
上記のコマンドは、サーバーへの最初のログインに使用されます。-t
ターゲット名を提供するために使用されます。my-ci
目的のターゲット名に置き換えます。上記のコマンドは、デフォルトのチームにログインしますmain
。環境ファイルで提供されたユーザー名とパスワードを要求します。
出力は次のようになります。
[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'
username: admin
password:
target saved
ターゲットログインは1日間保存されます。その後、有効期限が切れます。
すぐにログアウトします。
fly -t my-ci logout
flyは、ネットワーク外のサーバーへのログインに使用できますが、サーバーにパブリックIPアドレスがあり、ネットワーク外からアクセスできる場合のみです。WindowsまたはMacOSバイナリは、ダウンロードサイトまたはサーバーのWeb UIからダウンロードできます。
ログイン、およびWeb UIを介してConcourseサーバーに送信されるその他の情報は保護されません。接続は暗号化されていません。Nginxリバースプロキシは、Let's Encryptの無料SSLを使用して設定できます。
Nginx Webサーバーと、Let's Encrypt CAのクライアントアプリケーションであるCertbotをインストールします。
sudo yum -y install certbot-nginx nginx
起動時にNginxを起動して自動的に起動するようにします。
sudo systemctl start nginx
sudo systemctl enable nginx
証明書を要求する前に、ポート80と443、または標準のHTTPおよびHTTPSサービスをファイアウォール経由で有効にする必要があります。証明書ボットは、証明書を発行する前にドメイン認証局をチェックします。
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
Concourseが標準のHTTPSポートで実行されるようになったため、ポート8080はファイアウォールを通過する必要がなくなりました。ファイアウォールエントリを削除して、ポート8080を許可します。
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload
注意
Let's Encrypt CAから証明書を取得するには、証明書を生成するドメインをサーバーに向ける必要があります。そうでない場合は、ドメインのDNSレコードに必要な変更を加え、DNSが伝播するのを待ってから、証明書要求を再度行ってください。証明書ボットは、証明書を提供する前にドメイン認証局をチェックします。
SSL証明書を生成します。
sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com
生成された証明書は、/etc/letsencrypt/live/ci.example.com/
ディレクトリに格納される可能性があります。SSL証明書はとして保存されfullchain.pem
、秘密鍵はとして保存されprivkey.pem
ます。
証明書を暗号化しましょう90日で期限が切れますので、cronjobsを使用して証明書の自動更新を設定することをお勧めします。Cronは、定期的なタスクを実行するために使用されるシステムサービスです。
cronジョブファイルを開きます。
sudo crontab -e
ファイルの最後に次の行を追加します。
30 5 * * 1 /usr/bin/certbot renew --quiet
上記のcronジョブは、毎週月曜日の午前5時30分に実行されます。証明書の有効期限が切れる場合、証明書は自動的に更新されます。
新しい仮想ホストを作成します。
sudo nano /etc/nginx/conf.d/concourse-ssl.conf
ファイルに入力します。
server {
listen 80;
server_name ci.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name ci.example.com;
ssl_certificate /etc/letsencrypt/live/ci.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ci.example.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/concourse.access.log;
location / {
proxy_set_header Host $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_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://ci.example.com;
}
}
注:ci.example.com
実際のドメインに置き換えてください。
コンコースWeb用に作成された環境ファイルを編集します。
sudo nano /opt/concourse/web.env
の値を変更しCONCOURSE_EXTERNAL_URL
、ファイルの最後に2行追加します。
CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080
ファイルを保存して、Concourse Web、Worker、およびNginx Webサーバーを再起動します。
sudo systemctl restart concourse-worker concourse-web nginx
ブラウザとの間で送受信されるすべてのデータは、SSL暗号化で保護されています。
CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。
CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。
CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。
CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。
FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。
サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。
CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。
Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。
CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。
WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。
FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。
Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。
ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。