既存サーバーを複製して、webアプリケーションが動くサーバーを作ることになりました。
しかし、既存サーバーはXAMPPで構築されていました。
ホスティング会社も異なるため、単純な複製もできません。
この記事では、一からVPSにXAMPPサーバーを建てるまでのフローを紹介します。
また、記録していたメモが消えてしまい、一部リンクの紹介になっている箇所があります。
御了承ください。
イントロダクション
この記事で得られる事
- XAMPPでwebサーバーを公開できる。
環境
XAMPPは7.2.2
をインストールします。
種類 | バージョン |
---|---|
OS | CentOS 6.5 |
apache | 2.4.29 |
MariaDB | 10.1.30 |
php | 7.2.2 |
サーバは、さくらのVPSです。 vps.sakura.ad.jp
手順
- XAMPPのインストール
- XAMPP起動
- XAMPPのスクリプト設定
- XAMMPの初期設定
- CentOSにPATHを通す
- apacheの公開設定
- MySQLの初期設定
- phpの初期設定
サーバー要件
インストールを進める上で、下記の要件を満たせる環境を作ります。
- 作業ユーザーのhomeディレクトリを公開ディレクトリに変更
- laravelが使える環境
XAMPPのインストール
最新バージョンの確認
公式ページにアクセスします。
2018/3/11現在でのバージョンは7.2.2
でした。
公式ページから、「Linux向けXAMPP」のボタンのリンクをコピーします。
ソースをダウンロードしてインストール
先ほどコピーしたURLからlinuxのrun
ファイルをダウンロードします。
linuxのファイルなので、ダウンロードしたファイルを実行するとインストールが始まります。
$ wget https://www.apachefriends.org/XAMPP-files/7.2.2/XAMPP-linux-x64-7.2.2-0-installer.run $ ./XAMPP-linux-x64-7.2.2-0-installer.run
これで、/opt/lampp
配下に、XAMPPのファイルが作られます。
XAMPP起動
lampの起動ファイルは/opt/lampp/lampp
にありますので、次のコマンドで起動します。
$ /opt/lampp/lampp start Starting XAMPP for Linux 7.1.14-0... XAMPP: Starting Apache...ok. XAMPP: Starting MySQL...ok.
これでXAMPPの、apache、mysql、phpが使えるようになります。
もし、libc.so.6が足りない場合
(ブログ用にまとめていたのですが、途中で消えてしまいました…)
筆者の場合は発生したのですが、libc.so.6
がないとエラーに弾かれる事があります。
足りないモジュールがないか、yum provides libc.so.6
で確認してもおそらく問題がないと思います。
その場合、ABIのバージョンが使用している、libc.so.6がないという意味です。 同じモジュールでも、ABIのバージョンごとに、ディレクトリが別れます。
$ more /proc/version Linux version 2.6.32-696.20.1.el6.x86_64 (mockbuild@x86_64_01.bsys.centos.org) ( gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Fri Jan 26 17:51:45 UTC 2018
根本的な解決にはなりませんが、解決方法はあります。
既存のlibc.so.6
が想定しているABIのバージョンまで上げます。
XAMPPでLD_ASSUME_KERNEL
をしている箇所がありますので、そこを書き換えます。
解決方法については、次のサイトを参照してください。
CentOS 6.9 (64bit) に xampp linux x64 5.6.31 をインストール « 宮腰ブログ
XAMPPのスクリプト設定
実行ファイルを/etc/rc.d/init.d/
に置く事で、service
で呼び出せるようになります。
$ cp /opt/lampp/lampp /etc/rc.d/init.d/
以降、lamppの実行は、service lampp <lamppオプション>
のように実行が可能です。
次のコマンドは、lamppの起動コマンドです。
$ service lampp start
自動起動設定
システムの根幹にXAMPPがあって、再起動等で止まってしまうと困るので、自動起動設定をします。
$ chekconfig add lampp
XAMMPの初期設定
デフォルトの状態だと、後悔するのには怖い状態ですのでリスクをなるべく減らします。
セキュリティ設定
$ service lampp security
設定値については…大変恐縮ですが、記録し忘れてしまいました。
参考までに、参考にしたサイトを記載します。
XAMPP for LINUXを初心者が導入してみた セキュリティ・Apache設定編 | 株式会社まちいろ
ftp接続を停止
ftpの接続を拒否します。
$ service lampp stopftp
apacheの公開設定
現状だと、XAMPPのappacheが設定しているドキュメントルートのページを表示しています。
そのため、デフォルトのドキュメントルート設定は/opt/lampp/htdocs
です。
今回の構成は、作業ユーザーのディレクトリを公開設定にしたいので、/home/<作業ユーザー>
にしていきます。
まずhttpd.conf
を変更していきます。
lamppのconfigは/opt/lampp/etc/httpd.conf
にあります。
DocumentRootを、指定するディレクトリに変えます。
/opt/lampp/etc/httpd.conf
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/home/<作業ユーザー>" <Directory "/home/<作業ユーザー>">
次に、apache本体で設定しているconfigを変更します。
htaccessの有効と、ファイル一覧を非表示を設定します。
/opt/lampp/apache2/conf/httpd.conf
<Directory "/home/<作業ユーザー>">
Options -Indexes +FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
最後に、sslの設定をします。
後回しにしても良いのですが、忘れそうなので今のうちにやっておきます。
/opt/lampp/etc/extra/httpd-ssl.conf
# General setup for the virtual host DocumentRoot "/home/<作業ユーザー>" ServerName www.example.com:443 ServerAdmin you@example.com ErrorLog "/opt/lampp/logs/error_log" TransferLog "/opt/lampp/logs/access_log"
XAMPP(apache)の再起動
apacheの再起動をします。XAMPPの場合はXAMPP自体に再起動のコマンドが用意されているので、今回はそれを使用します。
前述した、serviceへの登録が済んで入れば次のコマンドで実行できると思います。
$ service lampp restart
作業ディレクトリのパーミッション変更
apacheは起動しているので、これで外部とIPは繋がっています。
しかし、ディレクトリが外部から出見れる権限になっていませんので、権限を変更します。
$ chmod 755 home/<作業ユーザー>
これで、IPをブラウザに打ち込めば表示できるようになります。
CentOSにPATHを通す
次に、インストールしたミドルウェアをコマンドラインから実行しやすく設定します。
XAMPPのミドルウェアは、/opt/lampp/bin
にまとまっています。
そのため、XAMPPのミドルウェアをコマンドラインから動かす場合は、パスを通します。
$ touch ~/etc/profile.d/XAMPP.sh $ export PATH="$PATH:/opt/lampp/bin" > ~/etc/profile.d/XAMPP.sh $ source ~/etc/profile
これで、今後はphp、mysqlはXAMPPと同じものを使う事ができます。
$ php -v php -v PHP 7.1.14 (cli) (built: Feb 15 2018 18:28:23) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
$ mysql … MariaDB [(none)]>
以上の方法は、全ユーザーを対象としていますが、個別でユーザーにパスを通す事も可能です。
今回はやりません。
また、既にyumでミドルウェアをインストールした場合、おそらくミドルウェアがバッティングします。
今回は、XAMPPのミドルウェアを使う前提なので、yumでインストールしているミドルウェアは消した状態です。
消し方については、私が以前記載した次の記事を参照してください。
MySQLの初期設定
laravelを動かす想定ですので、MySQL(MariaDB)は使える状態が必須です。
デフォルトのままだと、リスクがありますので設定を行います。
初期設定を行うには、mysql_secure_installation
を行い、次の設定を行います。
- rootユーザーのパスワード設定
- anonimousユーザー削除
- rootユーザーのリモートログインを禁止
- testデータベースの削除
$ mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we\'ll need the current password for the root user. If you\'ve just installed MariaDB, and you haven\'t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer \'n\'.
rootユーザーのパスワード設定
Change the root password? [Y/n] Y (パスワードの変更をするかの設定) New password: <rootのパスワード入力> Re-enter new password: <rootのパスワード入力> Password updated successfully! Reloading privilege tables.. ... Success!
anonimousユーザー削除
By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB 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? [Y/n] Y (anonymousユーザーの削除) ... Success!
rootユーザーのリモートログインを禁止
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? [Y/n] Y (rootユーザーのリモートログイン禁止) ... Success!
testデータベースの削除
By default, MariaDB 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? [Y/n] Y (testデータベースの削除) - 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? [Y/n] Y (今すぐ同期するかの確認) ... Success! Cleaning up... All done! If you\'ve completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
ログイン確認
これで設定は終わりです。
念のため、rootログインできるか確認します。
$ mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 20 Server version: 10.1.30-MariaDB Source distribution Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type \'help;\' or \'\h\' for help. Type \'\c\' to clear the current input statement. MariaDB [(none)]>
これで、MySQLの初期設定は終わりです。
後は、必要に応じてデータベース作ったり、ユーザーを追加したりしてください。
phpの初期設定
タイムゾーンを変更
php.iniのdate.timezone
を変更します。
おそらく、デフォルトはEurope/Berlin
なので、Asia/Tokyo
に変更します。
/opt/lampp/etc/php.ini
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone=Asia/Tokyo
設定したら、文法チェックをして再起動します。
$ apachectl configtest
Syntax OK
$ service lampp restart
XAMPP: Stopping Apache...ok.
XAMPP: Stopping MySQL...ok.
XAMPP: Starting Apache...ok.
XAMPP: Starting MySQL...ok.
タイムゾーンの確認
次のコマンドで、現在設定されているtimezoneを確認します。
確認すると、Asia/Tokyo
が選ばれているので反映されています。
$ php -i | grep timezone Default timezone => Asia/Tokyo date.timezone => Asia/Tokyo => Asia/Tokyo