今までは研究室内の各種引継ぎ情報や機密情報などは研究室専用のWiki(Seesaa Wiki )に記載して共有していたのですが、機密情報を外部サービスに公開するのはあまり良くないと以前から話題になっていました。
そこで、研究室内からのみアクセスできるローカルサーバーをたてることになりました。
この記事では、ubuntuにWEBサーバー(apache2)を構築し、そこにwordpressを入れるまでの過程を備忘録として記載します。
今回ファイアウォール設定がされていたり、既にGitlabサーバーが起動していて80番ポートが使えなかったりと色々な問題が発生しましたが、これらの部分は読み飛ばしても構いません。
逆にすでに何らかのサーバー、サービスが起動している状態のパソコンにApacheを導入したい場合などは参考にしてみてください。
目次
実行環境
- Ubuntu 18.04 LTS
下準備
パッケージの更新
まずは以下を実行
su - root //管理者権限を与える、以下のコマンドは全て管理者権限で行っている
apt-get update
apt-get upgrade
しかし、ここで
Temporary failure resolving ‘jp.archive.ubuntu.com’
というエラーがでる。 調べてみるとどうやらDNSに関する問題らしい。
そこで、DNSを Google Public DNS に変更してみる。
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
もう一度 “apt-get update” を実行するがうまくいかない。
ここでファイアウォール設定(ufw)がされていることに気づく。
一旦ファイアウォールを無効化する。
もう一度 “apt-get update” を実行すると上手くいった。
sysv-rc-conf のインストール
続いてサーバ起動時にApacheを自動起動させるためのツールをインストールする。
sudo apt-get install sysv-rc-conf
しかし、またここでエラー
E: Unable to locate package sysv-rc-conf
どうやらパッケージが存在しないらしい。こちらに関しても調べてみるとUbuntu17.04からapt-getでインストールすることができなくなっているとのこと
(今回自分が使用しているOSはUbuntu18.04)
よって、こちらのサイトを参考に以下のようにインストール
まずは、makeするためのツールと依存関係のライブラリーをインストール
apt install make
apt install libcurses-ui-perl libterm-readkey-perl libcurses-perl
sysv-rc-conf をダウンロード&インストール
wget http://archive.ubuntu.com/ubuntu/pool/universe/s/sysv-rc-conf/sysv-rc-conf_0.99.orig.tar.gz
tar zxvf sysv-rc-conf_0.99.orig.tar.gz
cd sysv-rc-conf-0.99
make
make install
最後に動作確認
sysv-rc-conf
Mysql
まずは、インストール
apt install -y mysql-server
今回はローカルのみでしか使用しないので、セキュリティー設定は行わない
ちなみにセキュリティー設定を行いたい場合は以下のコマンドを実行する
mysql_secure_installation
次にワードプレスで使用するデータベースの設定を行う。
mysql -u root -p
ログインしたらまずはMySQLのパスワードを設定
※パスワードは大文字小文字を含む英字、数字、特殊文字の3つを含ませないとエラーが出る。
mysql> update user set authentication_string=password("パスワードを入力") where user='root';
mysql> flush privileges;
次にwordpress という名前のデータベースを作成
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
一応確認してMySQLをログアウト
mysql> show databases;
mysql> exit;
サービスの自動起動を有効化
sysv-rc-conf mysqld on
Apache2の導入
まずは Apache2 をインストール
apt install -y apache2
しかし、またまたエラーが出る
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
invoke-rc.d: initscript apache2, action "start" failed.
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
mqapache2-systemd.conf
Active: failed (Result: exit-code) since Fri 2019-11-08 15:58:15 UTC; 10ms ago
Process: 18243 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: no listening sockets available, shutting down
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: AH00015: Unable to open logs
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: Action 'start' failed.
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: The Apache error log may have more information.
Nov 08 15:58:15 hrlb-gitlab systemd[1]: apache2.service: Control process exited, code=exited status=1
Nov 08 15:58:15 hrlb-gitlab systemd[1]: apache2.service: Failed with result 'exit-code'.
Nov 08 15:58:15 hrlb-gitlab systemd[1]: Failed to start The Apache HTTP Server.
インストールはできているようだが、apache2が起動していない
アパッチを再起動してみる
systemctl restart apache2
がやはり起動しない。
エラーメッセージを確認してみる
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
まずはこのエラーについて調べてみる。
こちらのサイトによると
このエラーは、 /etc/hosts にlocalhost以外に自分で設定したホスト名が、Apacheの設定ファイルに定義されていないために発生する。
https://mk-55.hatenablog.com/entry/2014/07/07/004510
とのことなので以下のコマンドを実行し、 Apacheの設定ファイルにホスト名 を記述する。
echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
a2enconf fqdn
もう一度再起動してみるがダメ
次に2つ目のエラーメッセージを確認してみる
Nov 08 15:58:15 hrlb-gitlab apachectl[18243]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
80番ポートがすでに使われているらしい
80番ポートを使用しているサービスを確認
netstat -lnp | grep :80
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 9770/unicorn worker
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29053/nginx: master
tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 29105/sidekiq 5.2.7
tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 29053/nginx: master
nginx? このパソコンでGitlabを稼働していたためその影響かと思われる
この 80番ポート を停止してしまえばいいが、Gitlabが停止してしまう可能性が高そう
ということで、アパッチのポート番号を変更することに
アパッチのポート設定は /etc/apache2/ports.conf に記載されているのでとりあえずこのファイルを編集してみる。
vi /etc/apache2/ports.conf
ファイル内容は以下の通り
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Listen 80 と記載されているところがポート番号なのでこの数字を81に変更
もう一度アパッチを再起動してステータス確認
systemctl restart apache2
systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
mqapache2-systemd.conf
Active: active (running) since Fri 2019-11-08 16:26:25 UTC; 34min ago
Process: 22083 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 22096 (apache2)
Tasks: 55 (limit: 4322)
CGroup: /system.slice/apache2.service
tq22096 /usr/sbin/apache2 -k start
tq22098 /usr/sbin/apache2 -k start
mq22099 /usr/sbin/apache2 -k start
Nov 08 16:26:25 hrlb-gitlab systemd[1]: Starting The Apache HTTP Server...
Nov 08 16:26:25 hrlb-gitlab systemd[1]: Started The Apache HTTP Server.
動いた
サービスの自動起動を有効化
sudo sysv-rc-conf apache2 on
WordPressの導入
PHP のインストール
phpとphpのモジュールをインストール
apt install -y php libapache2-mod-php php-mysql php-mbstring php-curl php-gd
Apache設定
アパッチの設定ファイルを編集するので設定ファイルのバックアップを行う
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.original
アパッチの設定ファイルを編集
vi /etc/apache2/apache2.conf
以下の文を追記
<Directory /var/www/html/wordpress>
AllowOverride All
</Directory>
追記する場所はどこでもいいが、自分はここにした。
# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
#<Directory /srv/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
<Directory /var/www/html/wordpress>
AllowOverride All
</Directory>
編集した設定ファイルに問題がないか確認
# apache2ctl configtest
Syntax OK
アパッチのモジュールを有効化 し、再起動
a2enmod rewrite
systemctl restart apache2
WordPressのインストール
まず、コマンド操作のみでワードプレスを導入できるようにWP-CLIをインストール
cd
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
パスを通し、動作確認
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info
ワードプレスをダウンロード
sudo su -
wp core download --locale=ja --path=/var/www/html/wordpress --allow-root
アパッチ設定ファイル作成
touch /var/www/html/wordpress/.htaccess
chmod 660 /var/www/html/wordpress/.htaccess
権限変更
mkdir /var/www/html/wordpress/wp-content/upgrade
chown -R [ログインユーザ名]:www-data /var/www/html/wordpress
chmod g+w /var/www/html/wordpress/wp-content
chmod -R g+w /var/www/html/wordpress/wp-content/themes
chmod -R g+w /var/www/html/wordpress/wp-content/plugins
chmod -R g+w /var/www/html/wordpress/wp-content/upgrade
chmod -R g+w /var/www/html/wordpress/wp-content/languages
ワードプレスの設定ファイル (wp-config.php)を作成
wp core config --dbname=wordpress --dbuser=root --dbpass=<設定したMySQLのパスワード> --dbhost=localhost --path=/var/www/html/wordpress --allow-root
以下のコマンドでwp-config.phpを開き、
vi /var/www/html/wordpress/wp-config.php
以下を追記( これがないとプラグイン更新時に問題が発生するらしい )
define('FS_METHOD', 'direct');
サイト有効化のための設定ファイル作成・編集
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/wordpress.conf
vi /etc/apache2/sites-available/wordpress.conf
DocumentRootの行を以下のように修正
DocumentRoot /var/www/html/
↓
DocumentRoot /var/www/html/wordpress
また、自分の場合は前述のとおり80番ポートは既にGitlabサーバーで使用しているので、
<VirtualHost *:80>
↓
<VirtualHost *:81>
と変更
設定ファイルのチェック を行い、
# apache2ctl configtest
Syntax OK
デフォルトの000-defaultファイルの設定を無効化、wordpressファイルの設定を有効化し、アパッチを再起動
a2dissite 000-default
a2ensite wordpress
systemctl restart apache2
動作確認
ローカルネットワークに接続している他のパソコンから
192.168.xxx.xxx:81
にアクセスしてみると
データベース接続確立エラー
との表示が
自分の場合は Mysqlの認証プラグインに問題があり、この認証プラグインを変更したら正常に動作しました。
もしデータベース接続確立エラーとなってしまった場合は以下の記事を参考に修正してください。
全然すんなりと導入できず、エラーばかりであきらめかけましたが何とか動作させることができました。丸一日かかってしまいましたが、Apacheやwordpressに関して少し詳しくなった気がする。もう少し Apache について勉強します。