GCP:VMインスタンス LAMPサーバ構築・ネットワーク設定

GCPのVMインスタンスにLAMPサーバを構築します。
インスタンスのメモリは1.6G、SWAPメモリとして4Gを割り当てています。
初めにデータベースサーバとしてMariaDBをインストール、その後Apache、PHPとPHPのApache関連モジュールをインストールします。

パッケージリストのアップデートとシステムアップデート

$ sudo apt update
$ sudo apt upgrade

MariaDBのインストール

$ sudo apt-get -y install mariadb-server mariadb-client

$ sudo mysql_secure_installation

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

ApacheとApache機能拡張モジュール、PHP,PHP機能拡張モジュールのインストール

$ sudo apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap phpmyadmin php7.2-cli php7.2-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl memcached php-memcache php-imagick php-gettext php7.2-zip php7.2-mbstring php-soap php7.2-soap

Apache機能拡張モジュールの有効化

$ sudo a2enmod suexec rewrite ssl actions include cgi

Apache httproxyモジュールの設定追加

$ sudo pico /etc/apache2/conf-available/httproxy.conf

<IfModule mod_headers.c>
    RequestHeader unset Proxy early
</IfModule>

$ sudo a2enconf httproxy
$ sudo service apache2 restart

PHP機能拡張モジュールのインストール

$ sudo apt-get -y install php7.2-opcache php-apcu
$ sudo service apache2 restart
$ sudo apt-get -y install php7.2-fpm
$ sudo a2enmod actions proxy_fcgi alias
$ sudo service apache2 restart

MariaDB管理者ユーザの登録( 例)ユーザ名:admin、パスワード:howtoforge )

$ sudo mysql -u root -p

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

Letsencryptの導入(Let’s Encryptの導入記事参照)

$ sudo apt-get -y install python3-certbot-apache
$ sudo pico /etc/apache2/sites-enabled/000-default.conf
$ sudo certbot --apache -d ficusonline.myvnc.com
$ sudo certbot renew --dry-run

MariaDB Innodbの設定

$ cd /etc/mysql/mariadb.conf.d
$ sudo pico 50-server.cnf

# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_large_prefix = 1
innodb_file_per_table = 1

$ sudo service mariadb restart

PHPの設定(メモリー容量など任意)

$ sudo pico /etc/php/7.2/apache2/php.ini
$ sudo service apache2 restart

php7.2におけるphpMyadminエラー対応

$ sudo mv /usr/share/phpmyadmin/ /usr/share/phpmyadmin.bak
$ sudo mkdir /usr/share/phpmyadmin/
$ cd /usr/share/phpmyadmin/
$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.tar.gz
$ sudo tar xzf phpMyAdmin-4.8.5-all-languages.tar.gz
$ sudo mv phpMyAdmin-4.8.5-all-languages/* /usr/share/phpmyadmin

以下ファイルの内容変更

$ sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php

define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');

define('CONFIG_DIR', '/etc/phpmyadmin/');

クリーンアップ

$ sudo rm /usr/share/phpmyadmin/phpMyAdmin-4.8.5-all-languages.tar.gz
$ sudo rm -rf /usr/share/phpmyadmin/phpMyAdmin-4.8.5-all-languages
$ sudo rm -rf /usr/share/phpmyadmin.bak

開発環境インストール

$ sudo apt-get install build-essential

タイムゾーンの確認

$ timedatectl

              Local time: Mon 2019-05-27 12:35:04 UTC
              Universal time: Mon 2019-05-27 12:35:04 UTC
              RTC time: Mon 2019-05-27 12:35:05
              Time zone: Etc/UTC (UTC, +0000)
              System clock synchronized: yes
              systemd-timesyncd.service active: yes
              RTC in local TZ: no

タイムゾーンの変更

$ sudo timedatectl set-timezone Asia/Tokyo

GCPファイヤーウォール設定

VPCネットワーク・ファイヤーウォールルールの設定

以下メイン画面左上のバーガーメニューからVPCネットワークからファイヤーウォールを選択、

または、GCP:VMインスタンスのドットプルダウンメニューの “ネットワークの詳細の表示” をクリックしてファイヤーウォールを選択します。

デフォルトではTCP,UDPの1-65534ポートが開放されていますが、VMプロジェクト内のローカルネットワーク内限定(10.128.0.0/9)なので特に問題はない(外部からのアクセスは制限されています)。リモートデスクトップで使用するポート3389は必要なければ削除可。
外部からのアクセスに必要なポートはここで設定(ターゲット記述)すること。各インスタンスへのポート開放はターゲットを指定することで行います。