创建一个LAMP环境(Debian 9 + PHP 7.1 + Apache 2.4 + MariaDB 10.1)
有一天,GCE实例突然停止工作了,并且无法恢复,考虑到重新创建实例比排查原因更加快捷,所以我们选择了重新创建实例。而且,Jessie的支持也已经终止了。
由于我打算在另一篇文章中仔细阐述原因,所以这次我将只写关于在GCE上搭建WordPress环境的步骤。
这可以被视为之前博客中内容的最新版本。
由于本文将个人言论等内容放在了脚注中,所以基本上可以不必阅读脚注。
连接到GCE实例的SSH
由于作业机器是Windows,首先将其配置为可以使用PuTTY进行操作。
- PuTTYで公開鍵認証方式でのSSH接続を行う手順まとめ
更改端口号
-
- 簡単に管理できるufwを使う
ufwを使って簡単にファイアウォールを設定する
UbuntuでSSHとSSHに関するファイアウォールの設定をする
まず他のポートを開けて、接続できる事を確認してから22番を閉じる
セッション閉じずに複数セッションで確認するとより安全
– ファイアウォールだけでなくSSHの設定も変更する
80番、443番も開ける
GCEの場合はWebの管理画面からもファイアウォール ルールの変更が必要なので注意
RDPなど使わない物は閉じてOK
sudo apt install ufw
sudo ufw allow 22/tcp <- 後で消す
sudo ufw allow XXX/tcp <- 変更したいポート番号
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo vi /etc/ssh/sshd_config <- ポート番号を書き換える
sudo service sshd restart
交换领域的形成
调优可以稍后进行,但是(在f1-micro情况下)创建swap需要在编译PHP之前完成,所以最好先进行创建。
如果是f1-micro,大约需要2GB的空间就可以了。
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo mkswap /swapfile
sudo swapon /swapfile
sudo vi /etc/fstab
/swapfile none swap sw 0 0
提前准备好是个不错的选择
sudo apt install git
sudo apt install unzip
sudo apt install xsel
其他根据你的喜好来选择。3 4
安装MariaDB
- Google Compute Engine で MySQL をセットアップする方法
不要忘记运行sudo mysql_secure_installation命令。基本上,您需要全部回答yes。
root的初始密码为空。
将已备份的SQL文件加载进来
从MariaDB开始,似乎必须使用sudo才能登录。
sudo mysql -u root -p
create database wordpress;
exit
sudo mysql -u root -p wordpress < filename.sql
创建WordPress用户
create user username@localhost identified by 'password';
grant all on wordpress.* to username@localhost;
select Host, User, Password from mysql.user; # 確認
安装Apache
- 基本的な Apache ウェブサーバーの実行
sudo apt update && sudo apt install apache2 -y
sudo apt install apache2-dev # PHP動かすのに必要(と思う)
激活所需的模块。
在WordPress中,必须使用mod_rewrite。
sudo a2enmod rewrite
sudo a2enmod expires
sudo a2enmod headers
SSL的配置
sudo a2enmod ssl
请参阅Google Cloud Platform上的独特域名相关总结以获取更详细信息。
如果使用SSL,需要在配置文件中指定证书,所以请注意。
可以使用sudo apachectl configtest对Apache配置文件进行语法检查。
完成后,请使用SSL服务器测试进行检查。
如果在使用Chrome查看网站时被强制重定向到HTTPS而感到困扰,可以删除HSTS设置。
- Chromeでhttpからhttpsへ強制リダイレクトされる場合の対処法
安装PHP
如果不使用MPM事件。
只需要一个选项,以下是用中文原生的方式改写:
安装这个包是最好的选择。
https://packages.debian.org/sid/php7.1
在源列表中,添加离服务器位置较近的镜像。
deb http://ftp.us.debian.org/debian sid main
sudo apt install php7.1
sudo apt install php7.1-mysql php7.1-xml php7.1-curl # 必要なものは適宜
如果使用MPM事件的话
需要自己编译线程安全的PHP。
- PHP7.1を関連ライブラリと共にインストール(ソースからコンパイル)for Apache2.4+CentOS7.4
如果你的内存较少或需要加快速度,MPM Event是必需的吗?
如果您可以检查以前的环境,您可以使用 php -i | grep configure 或 php -m 进行查询。
请安装必要的库文件。
sudo apt install libbz2-dev
sudo apt install libxml2-dev
sudo apt install libc-client-dev
sudo apt install libcurl4-openssl-dev
sudo apt install libjpeg-dev
sudo apt install libpng-dev
sudo apt install libfreetype6-dev
sudo apt install libxpm-dev
sudo apt install libgd-dev #GD
sudo apt install libkrb5-dev # Kerberos
sudo apt install libmcrypt-dev
sudo apt install libgmp-dev
sudo apt install libpspell-dev
sudo apt install libreadline-dev
编译和安装
wget --trust-server-names http://jp2.php.net/get/php-7.1.16.tar.gz/from/this/mirror
tar xvzf php-7.1.16.tar.gz
cd php-7.1.16
./configure --disable-dba --disable-rpath --enable-calendar --enable-cgi --enable-exif --enable-ftp --enable-gd-native-ttf --enable-gd-jis-conv --enable-huge-code-pages --enable-maintainer-zts --enable-debug --enable-mbstring --enable-mbregex --enable-fpm --enable-bcmath --enable-opcache --enable-pcntl --enable-inline-optimization --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-wddx --enable-zip --with-apxs2=/usr/bin/apxs2 --with-bz2 --with-curl=/usr/local --with-gmp --with-mhash --with-pcre-regex --with-fpm-user=www-data --with-fpm-group=www-data --with-gd=/usr/include --with-freetype-dir=/usr/local/src/phpmodule/freetype-2.7 --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local --with-iconv-dir=/usr/local --with-libxml-dir=/usr/local --with-mcrypt=/usr/local --with-tsrm-pthreads --with-openssl --with-pspell --with-readline --with-xpm-dir=/usr --with-gettext --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-kerberos --with-zlib --with-zlib-dir=/usr --without-pear
sudo make
sudo make install
在中文中,apxs2的位置可以通过whereis apxs2来查找。其他库也可以类似地进行查找。
如果出现类似于 [Makefile:297: sapi/cli/php] Error 1 的错误,请先运行 sudo make clean 再重新执行。
最后在/usr/local/lib目录下创建php.ini文件。
sudo cp php.ini-production /usr/local/lib/php.ini
将PHP配置到Apache上。
如果保持这样,配置文件将不完整,PHP将无法在服务器上运行。
复制(或重命名)可以作为软件包安装的PHP7.1配置文件.
sudo a2dismod php7
sudo a2enmod php7
请将其加载。
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
Require all denied
</FilesMatch>
<FilesMatch "^\.ph(ar|p|ps|tml)$">
Require all denied
</FilesMatch>
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
mbstring的配置
如果你不自己组建的话,就安装它。
sudo apt install php7.1-mbstring
无论哪种情况,都需要在php.ini中设置mbstring。
- 日本語環境の設定 – mbstring
调音
MySQL的调优
鉴于目前使用较多的是MyISAM,建议增加缓冲区大小,根据需要还可能需要考虑缓存等。
set global key_buffer_size = 256 * 1024 * 1024;
set global query_cache_limit = 16 * 1024 * 1024;
聽說在MySQL 8中不能使用查詢快取。
调整PHP的内存限制
memory_limit = 256M
realpath_cache_size = 8192k
realpath_cache_ttl = 300
define('WP_MEMORY_LIMIT', '128M');
define('WP_MAX_MEMORY_LIMIT', '256M');
PHP-FPM和FastCGI
※根据我的环境,启用FPM
您的服务器上的 PHP 看来无法使用 WordPress 所需的 MySQL 扩展。
由于WordPress出现了这个错误,所以我暂时只使用FastCGI(CGI/FastCGI)来运行。
- FastCGI PHP の設定方法 と mod_php とのパフォーマンスの比較(Apache httpd)
安装mod_fcgid。
sudo apt install libapache2-mod-fcgid
创建脚本。
sudo vi /usr/local/bin/php-wrapper
#!/bin/sh
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=0
exec /usr/local/bin/php-cgi
权限更改。
sudo chown www-data /usr/local/bin/php-wrapper
sudo chmod u+x /usr/local/bin/php-wrapper
禁用模块版。
sudo a2dismod php7
编辑Apache的配置文件。
Options に ExecCGI を追加
AddHandler を指定
FcgidWrapper を指定
FcgidMaxRequestsPerProcess を指定
请参考以下链接以获取更详细信息。
安装并启用PHP-FPM。
sudo apt install php7.1-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.1-fpm
若以 phpinfo() 函数查看到的 Server API 为FPM/FastCGI,则表示正常。
MPM 活动
我有很多煩惱,但是我自己寫了一篇文章(完全忘記了…)。
- GCEにWordPress乗っけたらメモリが足りなかった件(解決済み)
<IfModule mpm_event_module>
StartServers 1
ServerLimit 8
ThreadLimit 4
ThreadsPerChild 4
MinSpareThreads 4
MaxSpareThreads 16
MaxRequestWorkers 32
MaxConnectionsPerChild 0
</IfModule>
OPcache 原生的中文解释为”操作代码缓存”。
- OPcache導入してみた!(速さ検証もあるよ!)
如果不加载opcache.so,则无法启用。
为什么不从一开始就将它写入文件呢?
zend_extension=opcache.so
我喜欢使用opcache-gui这个工具来进行GUI检查。
内存缓存
设置中。
- PHPでmemcachedを使うときのモジュールパフォーマンス比較
sudo apt install memcached
sudo service memcached start
sudo apt install php-memcached
ession.save_handler = memcache
WordPress的设置
-
- WPのフォルダの所有権をApacheに変えておく
wp-config.phpなどはアクセス権もチェックする
Googleなどのログイン認証はやり直しになる
自動バックアップ等の設定は要見直し
由于无法登陆实例,所以这个实例似乎会变成黑匣子。而且这个博客是另一个CMS,所以还没有恢复…。
尽管我更换了启动磁盘,但不知何故Linux用户(想使用不同于Google帐号名称的用户名)和身份验证信息仍然存在。如果在同一项目中,即使在其他实例中也可以共享吗?但是我在快照中没有找到其他用户,这真是个谜。
在关于git方面,在GCP的存储库中无法进行推送,可能需要重新构建。尽管没有使用自签名证书之类的东西…
在推进其他工作的同时,我推测这可能只是暂时的问题,因为后来可以进行推送。