さくらVPSにjenkinsを導入した
はじめに
- さくらVPSにjenkins載せてみたけど仮想環境とかのほうがセキュリティ上よさそう
- 導入方法だけ一応メモとして残しておこうとおもっている
Javaのインストール
sudo yum install -y java-1.7.0-openjdk
Jenkinsのレポジトリをyumに追加
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
jenkinsをインストール
sudo yum install -y jenkins
Nginxを使ってベーシック認証時のjenkins側の設定
- jenkinsの設定ファイルのバックアップ作成
sudo cp /var/lib/jenkins/config.xml /var/lib/jenkins/config.xml.org
- jenkins設定ファイルを開く(ベーシック認証を行う場合)
sudo vim /var/lib/jenkins/config.xml
- 以下のように設定を変更
<useSecurity>true</useSecurity> ↓ <useSecurity>flases</useSecurity>
jenkinsで利用するポートを変更したい場合
- sudo vim /etc/sysconfig/jenkins
JENKINS_PORT="8080" ↓ 例:JENKINS_PORT="利用したいポート番号"
ファイヤーウォールで許可するポートの追加
sudo firewall-cmd --zone=public --add-port=利用したいポート番号/tcp --permanent
ファイヤーウォールを再起動
sudo firewall-cmd --reload
jenkinsのセットアップ
- jenkinsのinstallAdminPasswordを用意する
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- IP:利用したいポート番号にブラウザでアクセス
- AdminPasswordに上記コマンドで出したPasswordを貼り付ける
- Install suggested pluginsをクリック(オススメのプラグイン)
- デフォルトユーザの作成を行う
Nginxの設定
- 導入は以下
- confファイルを変更する
sudo vim /etc/nginx/conf.d/jenkins.conf
- confの設定を記述する
server { listen 80; server_name jenkins.ドメイン名; location / { proxy_pass http://localhost:利用したいポート番号; auth_basic "Restricted"; # 認証時に表示されるメッセージ auth_basic_user_file /etc/nginx/.htpasswd; # .htpasswdファイルのパス proxy_set_header Authorization ""; } }
jenkinsの起動
sudo systemctl start jenkins
nginxの起動
sudo systemctl start nginx
確認方法
- jenkins.ドメイン名にブラウザからアクセスしてみる
- ログイン画面が表示されていたら導入完了。
【僕のメモ】許可するポートの追加と削除
sudo firewall-cmd --zone=public --add-port=利用したいポート番号/tcp --permanent sudo firewall-cmd --zone=public --remove-port=利用したいポート番号/tcp --permanent
おもったこと
- 外にServiceとして出すならともかく出したくないものを制御するのむずかしい
- ベーシック認証も総当たり攻撃等されたらすぐ死にそうだしセキュアにする難しい
- IP固定も考えたけど家と外で使う回線が違うのでなんだか微妙なかんじがした
- セキュリティ周りとネットワークをもっとしっかり学習しないといけない(真顔)
さくらVPSにNginxとPHP7が動作する環境を作成する
前提
- 独自ドメイン持ってる
- DNSの設定済み
NginxとPHP7の動作環境を作成する
- 実際に開発サーバにデフォルトで利用するPHP導入手順
Nginxの導入
phpの導入
# PHP7の導入 sudo yum install -y epel-release.noarch sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo yum install -y --enablerepo=remi --enablerepo=remi-php70 php php-opcache php-devel php-fpm php-gd php-pdo php-dom php-mbstring php-mcrypt php-mysqlnd php-mssql php-pecl-xdebug php-openssl php-json php-pecl-apcu php-pdo_sqlite php-pdo_mysql php-pecl-memcached php-bcmath php-msgpack php-ldap php-pecl-imagick php-pgsql php-pecl-pthreads php-pecl-msgpack
設定ファイルの作成
- 設定ファイルを作成する
sudo vim /etc/nginx/conf.d/設定ファイル名.conf
- 以下サンプル
server { # listenするポート番号を記述する listen 80; # バーチャルホスト名を記述する server_name 独自ドメイン; # ドキュメントパスを記述する root 公開したいServiceのパス; # デフォルト要求ファイル名を記述する index index.php; # 末尾が.phpの要求を対象とする設定 location ~* \.php$ { # /usr/local/php7/etc/php-fpm.d/www.confに設定しているIPとポートを指定する # (例)listen = 127.0.0.1:9000 fastcgi_pass 127.0.0.1:9000; # FastCGIサーバは自動index付与をサポートしていない # その為、Nginx側が末尾が"/"だった場合fastcgi_indexの値を末尾に付与する fastcgi_index index.php; # PHP-FPMに渡されるドキュメントパス fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # ベーシック認証 auth_basic "Restricted"; # 認証時に表示されるメッセージ auth_basic_user_file /etc/nginx/.htpasswd; # .htpasswdファイルのパス # その他のFastCGI関連の設定は以下に追加 include fastcgi_params; } }
設定ファイルのテストをする
sudo nginx -t
Nginxとphp-fpmを起動する
sudo systemctl start nginx sudo systemctl start php-fpm
Nginxとphp-fpmを自動起動する
sudo chkconfig nginx on sudo chkconfig php-fpm on
さいごに
- 独自ドメインはじめて手に入れた
- jenkinsとmysqlとredmineも近々入れてみる
さくらVPSにいれたNginxでベーシック認証をやってみた
パッケージのインストール
sudo yum install -y httpd-tools
.htpasswdファイルの作成
- 作成したいユーザの名前を入れてる
sudo htpasswd -c /etc/nginx/.htpasswd username
- 作成したユーザのパスワードを入れる
New password: password Re-type new password: password Adding password for user username
Nginxの設定ファイルを変更する
- 対象のconfファイルを開く
vim /etc/nginx/conf.d/対象のファイル.conf
- locationの中にベーシック認証の設定を入れる
location / { auth_basic "認証時に表示されるメッセージ"; # .htpasswdファイルのパス auth_basic_user_file /etc/nginx/.htpasswd; }
サーバの再起動を行う
sudo systemctl restart nginx
最後に
- 簡単にベーシック認証できるのでオススメ
参考元
僕の理想とするNginxの導入方法ができた
はじめに
- ソースビルドもやったしパッケージもやった
- でも、本当にこれでいいのかなぁ・・・ってもやもやがあった
- 今回は考えたもやもやと出した結論と解決した方法をまとめておく
- いい方法があればぜひ知りたい・・・
ソースビルとパッケージのメリット・デメリット
ソースビルドのメリット(すぐおもいついたもの)
- 拡張性と柔軟性がある
ソースビルドのデメリット(すぐおもいついたもの)
- 必要な設定はすべて自分で行う必要があるのでめんどくさい
- RPM等のパッケージマネージャで管理できない
パッケージのメリット(すぐおもいついたもの)
- インストールした瞬間から設定済みなので即時利用可能
- RPM等のパッケージマネージャで管理できている
パッケージのデメリット(すぐおもいついたもの)
- 拡張性と柔軟性にかける
思ったこと
- 拡張性を常に意識した作りにしたい
- パッケージマネージャーで管理したい
- めんどくさい設定はやりたくない
結論
いいとこどりしたやつ作ればええやんってなりました
僕が目指す理想形
- めんどくさい設定は全部終わっててほしい
- 設定系はデファクトスタンダートがいい
- 拡張性はソースビルド並にほしい
- パッケージマネージャーで管理したい
- インストールもアンインストールもコマンド1発がいい
ないならつくるしかないので作ります
RPMのコンパイルオプションを指定して拡張性の高いNginxを導入する
- 利用するパッケージをインストールしておく
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ncurses-devel perl-devel perl-ExtUtils-Embed GeoIP-devel libxslt-devel gd-devel rpm-build yum-utils
- rpmbuild 実行用の「builder」ユーザを作成
sudo useradd builder
- sudo権限を付与する
sudo usermod -G wheel builder
- builderのパスワードを設定する
sudo passwd builder
- builderユーザに切り替える
sudo su builder
- NginxのSRPMSを取得する
curl -O http://nginx.org/packages/centos/6/SRPMS/nginx-1.10.0-1.el6.ngx.src.rpm
- RPMパッケージのインストールの進行状況と詳細を出しながらインストールする
rpm -ivh nginx-1.10.0-1.el6.ngx.src.rpm
- ./configureオプションが記述されているファイルを開く
vim ~/rpmbuild/SPECS/nginx.spec
- ./configureオプションは以下になります
- デフォルトでいれたいものが全て入ってました
82 %define COMMON_CONFIGURE_ARGS $(echo "\ 83 --prefix=%{_sysconfdir}/nginx \ 84 --sbin-path=%{_sbindir}/nginx \ 85 --modules-path=%{_libdir}/nginx/modules \ 86 --conf-path=%{_sysconfdir}/nginx/nginx.conf \ 87 --error-log-path=%{_localstatedir}/log/nginx/error.log \ 88 --http-log-path=%{_localstatedir}/log/nginx/access.log \ 89 --pid-path=%{_localstatedir}/run/nginx.pid \ 90 --lock-path=%{_localstatedir}/run/nginx.lock \ 91 --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp \ 92 --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp \ 93 --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp \ 94 --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp \ 95 --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp \ 96 --user=%{nginx_user} \ 97 --group=%{nginx_group} \ 98 --with-http_ssl_module \ 99 --with-http_realip_module \ 100 --with-http_addition_module \ 101 --with-http_sub_module \ 102 --with-http_dav_module \ 103 --with-http_flv_module \ 104 --with-http_mp4_module \ 105 --with-http_gunzip_module \ 106 --with-http_gzip_static_module \ 107 --with-http_random_index_module \ 108 --with-http_secure_link_module \ 109 --with-http_stub_status_module \ 110 --with-http_auth_request_module \ 111 --with-http_xslt_module=dynamic \ 112 --with-http_image_filter_module=dynamic \ 113 --with-http_geoip_module=dynamic \ 114 --with-http_perl_module=dynamic \ 115 --add-dynamic-module=njs-%{module_njs_shaid}/nginx \ 116 --with-threads \ 117 --with-stream \ 118 --with-stream_ssl_module \ 119 --with-http_slice_module \ 120 --with-mail \ 121 --with-mail_ssl_module \ 122 --with-file-aio \ 123 --with-ipv6 \ 124 %{?with_http2:--with-http_v2_module}")
- RPMを再構築
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
- 再構築したRPMをインストール
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/nginx-1.10.0-1.el7.centos.ngx.x86_64.rpm
最後に
- 一旦これで僕が求めてた理想形を手にすることはできた
- ひとまず、これで使ってみて改善点があればまたいじってみようとおもう
さくらVPSにソースビルドでいれたNginxをアンインストールする
ソースビルドで入れたNginxをアンインストールする
- 一旦Nginxを止める
sudo service nginx stop
- nginxのソースファイル以外の場所を確認する
sudo find / -name "nginx".*
- prefixがデフォルトの状態だと全て
/usr/local/nginx/
配下にいるため消す
sudo rm -rf /usr/local/nginx/
nginxユーザを削除する
sudo userdel nginx
ユーザが存在しないことを確認する
cat /etc/passwd | grep nginx
起動スクリプトを削除する
sudo rm /etc/init.d/nginx
最後に
- ソースファイルを消して終わり
さくらVPSの初期設定後にまっさきにいれたツール
パッケージツールの更新
- 更新コマンド
sudo yum update -y
利用するツールを入れる
- 今回導入するツール
入れるもの | 用途 |
---|---|
git | バージョン管理 |
tmux | ターミナルの多重化ソフト |
vim | エディタ |
- インストールコマンド
sudo yum install -y git tmux vim
gitのバージョンを確認する
- 確認コマンド
git --version git version 1.8.3.1
githubに疎通確認する
- 上記のようにさくらVPSにログインした場合はすでにMacで設定した鍵でgithubと疎通が取れます。
- 疎通確認コマンド
ssh -T git@github.com
- アカウント名が返ってきたら成功
gitで疎通テスト時に警告が出る時の対処
ssh -T git@github.com
で疎通テストを行うと以下のエラーが出る
added the RSA host key for IP address 'IPアドレス' to the list of known hosts.
- 以下のコマンドで警告を消す
ssh-keygen -R IPアドレス
tmuxのバージョンを確認する
- 確認コマンド
tmux -V tmux 1.8
tigを入れる
必要なもの | 用途 |
---|---|
wget | HTTPやFTP経由のファイル取得を行えるツール |
ncurses-devel | インストール・コンパイルの為 |
- インストールコマンド
sudo yum install -y wget ncurses-devel wget http://jonas.nitro.dk/tig/releases/tig-2.1.tar.gz tar -zxvf tig-2.1.tar.gz cd tig-2.1 ./configure make sudo make install
tigのバージョンを確認する
- 確認コマンド
tig -v tig version 2.1
さくらVPSでPHPのバージョンを管理する
phpenv + php-buildでphpのバージョンを管理する環境を作る
- EPELリポジトリを追加
sudo yum install -y epel-release.noarch
- phpenvとphp-buildを入れる
curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash git clone git://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build cd .phpenv/plugins/php-build/ sudo sh install.sh
- 必要なパッケージを入れる
sudo yum install -y libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel
- re2cを入れる
sudo wget -P /usr/share/ https://sourceforge.net/projects/re2c/files/0.16/re2c-0.16.tar.gz cd /usr/share sudo tar zxvf re2c-0.16.tar.gz -C /usr/share/ cd re2c-0.16 ./configure sudo make install
好きなPHPのバージョンをインストールする
- PHP7を入れる
php-build --definitions php-build 7.0.7 ~/.phpenv/versions/7.0.7
- パスを通す
echo 'export PATH="$HOME/.phpenv/bin:$HOME/.phpenv/versions/7.0.7/sbin:$PATH"' >> ~/.bashrc echo 'eval "$(phpenv init -)"' >> ~/.bashrc exec $SHELL -l
- インストールしたことがあるphpのバージョンを確認する
phpenv versions 7.0.7
- phpenvで入れたphpを適用するディレクトリを作成する
mkdir -p workspace/php/7.0.7 && cd workspace/php/7.0.7
- 適用させるディレクトリに設定を反映させる
phpenv local 7.0.7 phpenv rehash
- phpのバージョンを確認する
php -v PHP 7.0.7 (cli) (built: Jun 2 2016 23:25:42) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
最後に
※ globalのphpのバージョンの設定方法とかありますが、今回省略しました
globalにphpのバージョンを設定したい場合は以下でいけます
phpenv global 7.0.7 phpenv rehash
- 別にこれいれたからどうってわけじゃないんだけど色々試すためにはやっぱり必要だった