instantSpaceCentOS72をつくってみた
instantSpaceCentOS72の情報
作った理由
- 環境を自由に切り替えながら開発がしたかった(今後このへんも対応予定)
- 毎回初回のセットアップがめんどくさかったので自動化した
なんでシェルスクリプトなの?
ちょっとした変更で利用者に学習コストを要求しないため
今後追加する機能
- rbenb
- bundler
- phpenv
- nvm
- apache
- jenkins
- java
今後の課題
- 鍵の扱いをもっといいかんじにしたい
- nginxをrpmで管理できるようにする
- windowsOSへの対応
- オプションで実行するシェルスクリプトの切り替え
最後に
- アプリケーションの開発がしたいからひとまずこのあたりでリリースしてみた
2016年前半の振り返り
前置き
- なんだかんだ2016年も半分終わってしまった
- この半年何を学んできて仕事で何してるのか振り返っておく
- 具体的なことはかけないのでざっくり
- 半年ぐらい何を独学したのかもざっくり
この半年何してたの?仕事編
去年から変わった点
- 今の部長になって業務でもコードを書かせてもらえてるので今度ちゃんとお礼を言わなきゃ
- ユーザに対してどうすればサービスの価値を当たり前のように提供できるか評価してもらえるかという考え
- 言えばだいたい何でもやらせてもらえてるので何やっても楽しい
プロジェクトの開発環境の構築
- 仮想環境で開発環境を作ったけどもっとよく出来る気がする
- コードだけではなくて環境も変化に強くあるべきだと痛感
- このへんはもう少し学習してよりよい環境を目指していきたい
プロジェクトの開発
- 仕事でコードかけるの最高に楽しい
- レビューで色々な知見を授けてもらえてるので幸せすぎて死にそう
既存サービス
- 色々書けないことが多い
- 改修するためのルール作りや仕組み作りなどをしていた
- 今後もサービスとして当たり前の価値をユーザに届けるだけではなくて、付加価値を評価してもらえるように改善しまくる予定
- 結局、僕達エンジニアが辛くないようにすればするほど要望に答えやすくなるし早く動けるので現在はその期間だとおもってる
- チーム文化を新しく作り直してる
今年の残りはなにするの?仕事編
- 従来の業務と平行してどんどん改善を続けていく
- 現チーム及びサービスで溜まった知見等は社内で共有
- 最終的には既存サービス全ての品質向上を目指したい(その為にまずは今見ているサービスから)
- 要望には早く対応できるようにする
- 過去の遺産や技術的負債を潰して今までよりも早く動けるようにしたい
この半年なにしてたの?プライベート
webアプリつくってた
- TwitterのAPIが実はもうなくなってるやつとしらなくて頓挫
Laravel5.1独学した
- なんだかんだ今年に入ってちゃんと触り始めた
- もっと触りまくって僕もLaravelと仲良くなりたい
開発環境構築の自動化
- Provisioningするためのシェル書いてた
- もう少しよりよくこのへんも知識がなくてもすぐに必要な環境が誰でも作れるってぐらいの使いやすさを目指したい
さくらVPSを契約した
- ネットワーク周りやセキュリティの勉強になった
- 仮想環境では得られなかった危機感を感じれた
- リテラシーが向上した
- どんどんせっかく借りてるので知見をためていくために使っていく
VirtualBoxでVagrantBoxを1から作った
- とても勉強になった
- 当たり前のことを当たり前に知れた
今年の半年はなにするの?プライベート
- 自分が使いたいものがあるのでLaravelをつかった開発
- 今年中にphpunitは普通にかけるようになりたいのでその辺りまで
- laravelのコアのコードを読んでみる
- ガンガンプライベートでもコードを書く(環境はできた)
まとめ
- 仕事たのしい
- 開発たのしい
- 環境作るのたのしい
不眠症辛い
成長しているというよりも今までの積み重ねだなーと感じた(振り返って)
CentOS72(1511)x64のVagrantBoxを作った
はじめに
- 作るきっかけは上記の一言です。
作業環境環境
環境 | バージョン |
---|---|
OS XEI Capitan | バージョン10.11.4 |
VirtualBox | バージョン5.0.24 |
Vagrant | バージョン1.8.1 |
入れておきたいVagrantのプラグイン
- vagrant-vbguest
目指す成果物
- 最小構成のCentOS72(1511)x64のbox
VirtualBoxで仮想マシンを作成する
- 仮想マシンの名前とメモリを設定する
- ハードディスクのタイプを選択し可変サイズで作成する
- 仮想マシンの設定を行っていく
- isoを読みこませる
- 読み込ませると以下になる
- オーディオを有効化のチェックを外す
- ネットワークのアダプター1を開きポートフォワーディングをクリックする
- 1レコードを作成する(以下)
- アダプター2を開きホストオンリーアダプターを選択する
- ポートを開きUSBをクリックしチェックを外す
- 設定後は以下になる
CentOS側の設定
- CentOS7をインストールする
- 言語を選択する
- 僕はUSキーボードなのでEnglish English(United States)を選択
- SOFTWARE
- INSTALLATION DESTINATIONの設定
- あとは以下の状態と同じ設定ができてればおk
- できていたら右下の青いボタンをクリック
- 設定完了後は右下の青いボタンを押して再起動
ユーザの情報
アカウント | Password | グループ |
---|---|---|
root | vagrant | wheel |
vagrant | vagrant |
Macのターミナルから作成した仮想マシンに接続する
ssh -p 2222 root@localhost
sudoコマンドの設定
vagrantユーザがパスワード無しでsudo実行可能とする。
- 設定ファイルを開く
visudo
- 設定を以下のように変更する
Defaults requiretty ↓ # Defaults requiretty %vagrant ALL=(ALL) NOPASSWD:ALL
selinuxの無効化
- 設定ファイルを変更する
vi /etc/sysconfig/selinux
- 以下のように設定を変更する
# enforcingからdisabledに変更 SELINUX=disabled
firewallを停止する
systemctl stop firewalld systemctl disable firewalld
sshの設定
mkdir /home/vagrant/.ssh chmod 700 /home/vagrant/.ssh curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys chmod 600 /home/vagrant/.ssh/authorized_keys chown -R vagrant:vagrant /home/vagrant/.ssh
パッケージマネージャーの更新
- パッケージマネージャーを更新する
yum update -y
- 仮想環境を再起動する
reboot
Guest Additionsインストール
Guest Additionsをインストールする
- VirtualBox(別ウィンドウで起動している)のメニューからDevicesを選択
- Devicesの中に
Install Guest Additions CD image...
をクリック
Guest Additionsをマウントするディレクトリを作成する
mkdir -p /mnt/cdrom
- Guest Additionsをマウントする
mount -r /dev/cdrom /mnt/cdrom
- VBoxLinuxAdditions.runを実行する
sh /mnt/cdrom/VBoxLinuxAdditions.run
- 以下のエラーは関係ないので無視
Could not find the X.Org or XFree86 Window System, skipping.
- マウントを解除する
umount /mnt/cdrom
- 仮想ドライブからディスクを除去する
- VirtualBox(別ウィンドウで起動している)のメニューからDevicesを選択
- Devicesの中に
Optical Drives
をクリック -
Remove disk from virtual drive
をクリック -
Force Unmount
をクリック
VagrantBox作成前のお掃除
- yumで利用したファイルのcacheを削除
yum clean all
vagrantはネットワークの設定をvagrantが行うので既存の設定ファイル等を削除する
- ifcfg-enp0s3の削除
rm /etc/sysconfig/network-scripts/ifcfg-enp0s3
- udevルールの削除
rm /etc/udev/rules.d/70-persistent-ipoib.rules
フラグメンテーションを解消
- box作成時の圧縮率をあげるため
dd if=/dev/zero of=/EMPTY bs=1M rm -f /EMPTY
- historyを削除する
history -c
仮想マシンを終了させる
shutdown -h now
Boxを作成する前に
作業をしやすくするために行ったポートフォワーディングの設定を削除する。
- 仮想マシンの設定を開く。
- ネットワークのアダプター1(NAT)を選択し、「高度」の内容を展開。
- 下部に表示される「ポートフォワーディング」ボタンを押してメニューを表示。
- 作成した項目を選択してDelキーを押して削除。その後下部のOKボタンを押す。
- 設定画面のOKボタンを押す。
boxの作成
- ※CentOS72(1511)x64って名前は使えないのでCentOS72x64に変更しておきます。
vagrant package --base "仮想マシンの名前" --output box名.box
今回作成したboxを使う方法は以下
- boxを登録
vagrant box add CentOS72x64 作成したboxのディレクトリのパス/CentOS72x64.box
- 設定ファイルの作成
vagrant init CentOS72x64
- 起動
vagrant up
- 接続
vagrant ssh
作るのめんどくせーからこの環境使わせろよって人向け
- boxを登録
vagrant box add raichel/CentOS72x64
- 設定ファイルの作成
vagrant init raichel/CentOS72x64;
- 起動
vagrant up
- 接続
vagrant ssh
最後に
- 技術者なんで自分で作りました。
さくらVPSに入れたMySQL5.7の初期設定を行った
MySQL5.7 のrootユーザーの初期パスワードを取得
- 以下コマンド
sudo cat /var/log/mysqld.log | grep root
- 結果は以下
[Note] A temporary password is generated for root@localhost:初期パスワード
MySQL5.7の初期設定
- 設定コマンド
mysql_secure_installation
- 以下対話しながら設定
Securing the MySQL server deployment. Enter password for user root:初期パスワード The existing password for the user account root has expired. Please set a new password. New password:8文字以上、英大文字小文字数字記号の4種類を含む Re-enter new password:8文字以上、英大文字小文字数字記号の4種類を含む The 'validate_password' plugin is installed on the server. The subsequent steps will run with the existing configuration of the plugin. Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : y New password:8文字以上、英大文字小文字数字記号の4種類を含む Re-enter new password:8文字以上、英大文字小文字数字記号の4種類を含む Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
MySQL5.7の設定ファイルによる設定の変更
- 設定ファイルを開く
sudo vim /etc/my.cnf
- 以下を[mysqld]配下の最後に追記
# MySQL サーバーのデータベースで利用する文字コードに UTF-8 を指定 character-set-server = utf8 # パスワード変更の有効期限を無効化 default_password_lifetime = 0
おもったこと
- ここしばらくセキュリティ周りを意識しはじめた
- パスワードなどは1Passwordで生成するようにしてる
参考元
さくらVPSにMySQL5.7を導入した
mariaDBを削除
CentOS 7 には mariaDB という MySQL 互換のデータベースサーバーがデフォルトでインストールされている場合がありますので、これからインストールする MySQL と競合を起こさないように削除しておきましょう。
sudo yum remove -y mariadb-libs
MySQL公式yumリポジトリの追加
- 以下コマンド
sudo yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yumに追加したパッケージが正しいか確認する
- 以下コマンド
sudo yum info mysql-community-server
- 結果は以下
名前 : mysql-community-server アーキテクチャー : x86_64 バージョン : 5.7.13 リリース : 1.el7 容量 : 151 M リポジトリー : mysql57-community/x86_64 要約 : A very fast and reliable SQL database server URL : http://www.mysql.com/ ライセンス : Copyright (c) 2000, 2016, Oracle and/or its
MySQL5.7をinstallする
- 以下コマンド
sudo yum -y install mysql-community-server
導入したMySQLのバージョンを確認する
- 以下コマンド
mysqld --version
- 結果は以下
mysqld Ver 5.7.13 for Linux on x86_64 (MySQL Community Server (GPL))
MySQLを起動
sudo systemctl start mysqld.service
MySQLを自動起動
sudo systemctl enable mysqld.service
さくら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も近々入れてみる