カテゴリー: 手順書,
インストールメモです。
CentOSバージョン確認
cat /etc/redhat-release
arch
結果
CentOS Linux release 8.2.2004 (Core)
x86_64
パーティション確認
df -hT
結果
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 17M 7.8G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/vda1 ext4 315G 2.0G 297G 1% /
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0
日本語環境に
localectl set-locale LANG=ja_JP.UTF-8
source /etc/locale.conf
echo $LANG
install -y langpacks-ja
サーバのタイムゾーンを変更
timedatectl status
timedatectl set-timezone Asia/Tokyo
アップデート
dnf check-update
dnf update
dnf clean all
自動更新設定。「apply_updates = yes」にする
dnf install dnf-automatic
vi /etc/dnf/automatic.conf
systemctl enable dnf-automatic.timer
systemctl start dnf-automatic.timer
systemctl status dnf-automatic.timer
すべて反映
dnf clean all
reboot
Firewall。最初に ssh:10022 http:80 https:443 の3つを開けておく。SSHのポートだけは20番から10022番へ変更する。
firewall-cmd --add-port=10022/tcp --zone=public
firewall-cmd --add-port=80/tcp --zone=public
firewall-cmd --add-port=443/tcp --zone=public
ポート開放状況を確認
firewall-cmd --list-all
成功しているなら恒久的に設定する
firewall-cmd --add-port=10022/tcp --zone=public --permanent
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --add-port=443/tcp --zone=public --permanent
再起動、最終確認の設定を確認
firewall-cmd --list-all
systemctl restart firewalld
systemctl enable firewalld
systemctl status firewalld
firewall-cmd --list-all
SELinux モード確認。
※「Current mode」の値
※ SELinux が有効時のみモードを変更できるっぽい
sestatus
※ SElinux を一時的に無効にするなら
setenforce 0
※ SElinux を有効にするなら
setenforce 1
SELinux ポート開放
dnf install -y policycoreutils-python-utils
semanage port -a -t ssh_port_t -p tcp 10022
systemctl restart sshd
semanage port --list | grep ssh
WEBサービス経由でDBアクセスを許可
※ httpd_can_network_connect がoffだと、管理ページの新規プラグイン追加画面でエラーが出る。httpd_can_network_connect_db は0でも不具合ないかもしれない。
setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect=on
getsebool httpd_can_network_connect_db
getsebool httpd_can_network_connect
FTP経由でアクセスしたい場合は許可にするらしい。SFTPなら不要
setsebool -P allow_ftpd_full_access 1
getsebool allow_ftpd_full_access
semanage port --list | grep ftp
タイプ変更、ファイル書き込み可
semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/example.com/public_html(/.*)?"
restorecon -R /usr/share/nginx/example.com/public_html/
vi /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<service name="https"/>
<service name="http"/>
<service name="ssh"/>
<port port="10022" protocol="tcp"/>
<port port="80" protocol="tcp"/>
<port port="443" protocol="tcp"/>
</zone>
ポート変更 sshd 10022 を"追加"
vi /etc/ssh/sshd_config
Port 22
Port 10022
再起動後に 10022 でSSH接続テスト、成功を確認してから 22 を削除する
systemctl restart sshd
;Port 22
Port 10022
なお、SELinux のポリシーから22を削除しようとすると、できませんになった。
semanage port --list | grep ssh
semanage port --delete --type ssh_port_t --proto tcp 22
ValueError: ポート tcp/22 はポリシー内で定義されているため、削除できません
AppStreamではなく、Nginx 公式のリポジトリを参照するようにする
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
インストールパッケージ角煮
dnf --disablerepo=AppStream info nginx
「Repository : nginx」になっているならok、インストール
dnf --disablerepo=AppStream -y install nginx
systemctl start nginx
systemctl enable nginx
systemctl status nginx
WEBサーバ設定(1)デフォルト。
初期設定は残しておきたいので変更せず
vi /etc/nginx/nginx.conf
WEBサーバ設定(2)ドメインごとに設定を分けておく
vi /etc/nginx/conf.d/example.com.conf
# Nginx設定 参考URL
# https://scratchpad.jp/nginx-cache-controller-1/
# https://scratchpad.jp/wordpress-on-nginx-settings/
server {
# wwwなしへリダイレクト
listen 80;
listen [::]:80;
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
server {
listen 80;
listen [::]:80;
server_name example.com;
root /usr/share/nginx/example.com/public_html;
# 他サイトからのインラインフレーム禁止
add_header X-Frame-Options SAMEORIGIN;
# WP での運用予定なので。
charset utf-8;
# アクセスログ
access_log /var/log/nginx/example.com-access.log main;
error_log /var/log/nginx/example.com-error.log;
# is_mobile用
set $is_mobile '';
# キャッシュを作成する場合のスマートフォンの判定処理
# theme や plugin で is_mobile() を作って合わせる
if ($http_user_agent ~* '(iPhone|iPod|Android.*Mobile|Windows.*Phone|mobile.*firefox|dream|CUPCAKE|blackberry9500|blackberry9530|blackberry9520|blackberry9550|blackberry9800|webOS|incognito|webmate|Silk|Kindle|NetFront|PSP|Opera Mini|Opera Mobi|Googlebot-Mobile)') {
set $is_mobile '@mobile';
}
# proxy_cacheを管理するためのキーを設定
set $proxy_cache_key " $scheme$proxy_host$request_uri";
# キャッシュ除外フラグ
set $do_not_cache 0;
# GET メソッド以外はキャッシュを作成しない
if ($request_method != GET) {
set $do_not_cache 1;
}
# 管理者クッキーがあるならキャッシュを利用しない
if ($http_cookie ~ ^.*(wordpress_logged_in|wordpress_test_cookie|wordpress_no_cache|wp-postpass).*$) {
set $do_not_cache 1;
}
# キャッシュ除外領域
if ($request_uri ~* "/wp-admin/|/wp-includes/|/no-cache/|/_vote/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $do_not_cache 1;
}
# インデックス設定
location / {
try_files $uri $uri/ @wordpress;
index index.html index.htm index.php;
if ($uri ~* \.(?:css|js|ico|png|jpe?g|gif)$) {
access_log off;
}
}
# php-fpm 設定
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
add_header F-Cache $upstream_cache_status;
fastcgi_cache MYZONE;
fastcgi_no_cache $do_not_cache;
fastcgi_cache_bypass $do_not_cache;
fastcgi_pass_header "X-Accel-Redirect";
fastcgi_pass_header "X-Accel-Expires";
fastcgi_cache_key "$scheme://$host$request_uri$is_mobile";
fastcgi_cache_valid 200 2h;
fastcgi_cache_valid 301 302 1h;
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid 500 1s;
fastcgi_cache_valid any 5m;
}
location @wordpress {
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/example.com/public_html/index.php;
include fastcgi_params;
add_header F-Cache $upstream_cache_status;
fastcgi_cache MYZONE;
fastcgi_no_cache $do_not_cache;
fastcgi_cache_bypass $do_not_cache;
fastcgi_pass_header "X-Accel-Redirect";
fastcgi_pass_header "X-Accel-Expires";
fastcgi_cache_key "$scheme://$host$request_uri$is_mobile";
fastcgi_cache_valid 200 2h;
fastcgi_cache_valid 301 302 1h;
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid 500 1s;
fastcgi_cache_valid any 5m;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
log_not_found off;
}
# Nginx のバージョンや使用している OS を隠蔽
server_tokens off;
# 誤って .htaccess が混入した場合を考え、読み取らせない
location ~ /\.ht {
deny all;
}
}
ログローテートの設定確認
vi /etc/logrotate.d/nginx
結果。ローテートするファイルはパーミッション640の nginx:adm で作成されるみたい。拡張子が「.log」のもののみが対象になっていた
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
ログディレクトリの所有者をnginxへ変更
chown -R nginx: /var/log/nginx
chown -R nginx:adm /var/log/nginx/example.com-access.log
chown -R nginx:adm /var/log/nginx/example.com-error.log
ログローテートをデバッグモードで確認。ローテートの対象となっているか、また実行プロセスと結果シミュレートがわかる。詳細
logrotate -d /etc/logrotate.conf
設定ファイルに構文エラーなどないかチェックし、反映
nginx -t
systemctl restart nginx
WEBサーバ動作確認。PATHを通してファイル作成、ブラウザで確認。PHPファイルはまだ動かないが、PHPをインストール後に確認する
mkdir /usr/share/nginx/example.com
mkdir /usr/share/nginx/example.com/public_html
echo testhtml >> /usr/share/nginx/example.com/public_html/index.html
echo testphp >> /usr/share/nginx/example.com/public_html/test.php
サイトファイルディレクトリの所有者をnginxへ変更
chown -R nginx: /usr/share/nginx/example.com/public_html
これだけは先にやっておこう
worker_processes auto;
dnf確認
dnf info php
結果
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:08:34 ago on Sat Jul 11 08:00:01 2020.
Available Packages
Name : php
Version : 7.2.24
Release : 1.module_el8.2.0+313+b04d0a66
Architecture : x86_64
Size : 1.5 M
Source : php-7.2.24-1.module_el8.2.0+313+b04d0a66.src.rpm
Repository : AppStream
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP and Zend and BSD and MIT and ASL 1.0
Description :
サードパーティ製リポジトリ3つ追加
dnf install -y epel-release
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
dnf install -y https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
PowerToolsを有効化。「enabled=1」にする
vi /etc/yum.repos.d/CentOS-PowerTools.repo
一覧確認
dnf repolist all
7.2ではなく7.4にしたいのでepel利用、インストール。
remiリポジトリには「remi」と「remi-safe」の2種類があった
dnf module list php
dnf info php74 --enablerepo=remi
dnf module install php:remi-7.4
dnf install php-fpm php-mysqlnd php-json php-xml php-gd php-mbstring php-pecl-zip php-pecl-imagick
dnf clean all
php-fpm でのユーザとグループは初期で apache なので nginx へ変更。
※ 「listen = /run/php-fpm/www.sock」のパスを目視しておく
vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx
~~~
listen = /run/php-fpm/www.sock
~~~
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
権限確認。nginx:nginxに。
ls -l /run/php-fpm/www.sock
chown -R nginx: /run/php-fpm/www.sock
php.ini 設定
vi /etc/php.ini
memory_limit = 256M
~~~
post_max_size = 10M
~~~
upload_max_filesize = 10M
~~~
date.timezone = Asia/Tokyo
~~~
mbstring.language = Japanese
再起動で反映
systemctl restart php-fpm
systemctl enable php-fpm
systemctl status php-fpm
アーキテクチャを確認
arch
今回の結果
x86_64
MariaDBの何かしらがインストールされていないか確認
dnf list installed | grep maria
アンインストールする場合は
dnf remove mariadb
リポジトリ確認
dnf info mariadb-server
今回はAppStreamで10.3.17をインストール。10.4系になるとgalera-4とその他のインストールが必須になるので今回は避けた。
dnf install mariadb-server
dnf clean all
AppStreamを無視し、バージョン指定でインストールする場合は下記のステップを踏む。
=====ここから=====
GPGキー取得
rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
リポジトリ新規作成
※ 以下のURLで最新版を確認してください
https://downloads.mariadb.org/mariadb/repositories/#mirror=biznetgio
http://yum.mariadb.org/
vi /etc/yum.repos.d/MariaDB.repo
以下は例。今日時点で最新のリポジトリ
# MariaDB 10.5 CentOS repository list - created 2020-07-08 19:31 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
dnf --disablerepo=AppStream info MariaDB-server
dnf --disablerepo=AppStream install MariaDB-server
dnf clean all
=====ここまで=====
文字コード変更。デフォルトが latin1 なので utf8 に
vi /etc/my.cnf.d/mariadb-server.cnf
[mariadb]
character-set-server=utf8
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
バージョン確認
rpm -qa | grep -i mariadb
初期設定開始
mysql_secure_installation
mysqlへログイン
mysql -u root -pWPpassword1234
WordPress用のデータベースを作成、権限ユーザーの作成
※ all privileges ・・・ GRANT(権限の付与)権限以外の 権限を全て付与
MariaDB [(none)]> create database if not exists wordpress default character set utf8mb4;
MariaDB [(none)]> grant all privileges on wordpress.* to wordpress@127.0.0.1 identified by 'WPpassword1234';
MariaDB [(none)]> show databases;
MariaDB [(none)]> select Host, User, Password from mysql.user;
MariaDB [(none)]> exit
Bye
これで下記の準備ができました。
最新パッケージをゲット
cd /usr/share/nginx/example.com/public_html
wget http://ja.wordpress.org/latest-ja.zip
unzip latest-ja.zip
mv wordpress wp
rm latest-ja.zip
cd wp
cp wp-config-sample.php wp-config.php
chown -R nginx: /usr/share/nginx/example.com/public_html
wp-config.php に情報を記入しアップロード、WordPressがあるディレクトリへブラウザでアクセス、インストールを済ませて動作確認 これでおしまい。
WPのバックグラウンド通信関連が上手く動かなかったので暫定対処した例
あと画像周りのプラグインに必要だったのでちょこっと
関連記事はまだありません