#追記
(2019/09/13):NginxのFastCGIの設定により、TOPページ以外開けない可能性があります。
現時点で参考情報として扱ってください。
#追記
(2019/11/29):php72->php7.0
MySQL8.0 ->5.6
#はじめに
https://snipeitapp.com/
オープンソースである資産管理ツール「Snipe IT」をインストールする機会があったのでメモ。
Cent OS 7 + Nginx + PHP 7.0(php-fpm) + MySQL 8.0 (+redis)の組み合わせです。
今回は社内等のFirewall環境下等の「安全な場所」にサーバーを構築する前提で行います。
ゆえにFirewall無効、SE Linux無効等行っておりますので、
各自の環境に合わせて適切なセキュリティの設定をしてください。
実行するコマンド(断りがない限りこの黒枠の部分はコピペ可)
実行結果(または強調)
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
##nginxの実行ユーザを作成
セキュリティ上の理由からNologinにしておきます。
useradd -s /sbin/nologin www
##"いつもの"(任意)
私独自の「初期設定」です。
Firewall無効、SE Linux無効、Swap無効等しております。
やらなくても良いですが、Firewall無効をしない場合は後述のPort開放を行う必要があります。
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl stop NetworkManager
systemctl disable NetworkManager
setenforce 0
sed -i 's/SELINUX=enforcing/#SELINUX=enforcing/g' /etc/selinux/config
sed -i 'N;/#SELINUX=enforcing/i\SELINUX=disabled' /etc/selinux/config
sestatus
sed -i 's/# End of file//g' /etc/security/limits.conf
cat >> /etc/security/limits.conf << EOF
* soft nproc 655350
* hard nproc 655350
* soft nofile 655350
* hard nofile 655350
# End of file
EOF
sed -i 's/4096/655350/g' /etc/security/limits.d/20-nproc.conf
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
##Firewall無効(任意)
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --reload
Nginx
Nginx install
yum -y install nginx
NginxのConf設定
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org
cat >> /etc/nginx/nginx.conf << EOF
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html/snipeit/public;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /snipeit/public/index.php$is_args$args;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location ~ \.php$ {
root /var/www/html/snipeit/public;
fastcgi_pass unix:/dev/shm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
EOF
##testファイル配置
mkdir -p /var/www/html/snipeit/public
touch /var/www/html/snipeit/public/index.html
echo testtestteeeeeeeeeeest >> /var/www/html/snipeit/public/index.html
chown -R www:www /var/www/html/*
systemctl start nginx
systemctl enable nginx
この時点でChrome等WebブラウザからWebページが見れるはずです。
#PHP
##PHP install
その他もろもろも一緒にインストール
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install -y php70 php70-php php70-php-gd php70-php-mbstring php70-php-intl php70-php-fpm php70-php-opcache php70-php-json php70-php-mysqlnd php70-php-xml php70-php-xmlrpc php70-php-ldap php70-php-pecl-zip php70-php-pecl-redis php70-php-pecl-apcu php70-php-process php70-php-bcmath php70-php-pecl-imagick php70-php-pdo php70php-mcrypt
##シンボリックリンク作成して起動
ln -s /opt/remi/php70/root/usr/bin/php /usr/bin/
systemctl start php70-php-fpm
systemctl enable php70-php-fpm
##PHPの設定①
#backup
cp /etc/opt/remi/php70/php.d/40-apcu.ini /etc/opt/remi/php70/php.d/40-apcu.ini.org
cat /etc/opt/remi/php70/php.d/40-apcu.ini | grep enabled=1
上記catの実行結果が
apc.enabled=1
でなかった場合は
vim /etc/opt/remi/php70/php.d/40-apcu.ini
で1に変更してください。
##PHPの設定②
cp /etc/opt/remi/php70/php.d/10-opcache.ini /etc/opt/remi/php70/php.d/10-opcache.ini.org
vim /etc/opt/remi/php70/php.d/10-opcache.ini
下記それぞれの値が
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1
であることを確認、値が違う場合は上記の通り変更します。
また上記の該当行がコメントアウトされていないこと(行の先頭に;がついていない)を確認してください。
##PHPの設定③
#backup
mv /etc/opt/remi/php70/php-fpm.d/www.conf /etc/opt/remi/php70/php-fpm.d/www.conf.org
cat >> /etc/opt/remi/php70/php-fpm.d/www.conf << EOF
[www]
user = www
group = www
listen = /dev/shm/php-fpm.sock
listen.backlog = 20480
listen.owner = www
listen.group = www
listen.mode = 0666
;pm = static
pm.max_children = 200
pm = dynamic
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 100
pm.process_idle_timeout = 10s;
pm.max_requests = 1024
pm.status_path = /status_phpfpm
ping.path = /ping
ping.response = pong
slowlog = /var/opt/remi/php70/log/php-fpm/www-slow.log
clear_env = no
php_admin_value[error_log] = /var/opt/remi/php70/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/opt/remi/php70/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/opt/remi/php70/lib/php/wsdlcache
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379"
EOF
##PHPの設定④
cp /etc/opt/remi/php70/php.ini /etc/opt/remi/php70/php.ini.org
vim /etc/opt/remi/php70/php.ini
下記それぞれの値が
post_max_size = 16M max_execution_time = 300 date.timezone =Asia/Tokyo
であることを確認、値が違う場合は上記の通り変更します。
また上記の該当行がコメントアウトされていないこと(行の先頭に;がついていない)を確認してください。
フォルダ作成&所有者を変更してPHPをRestart
mkdir -p /var/log/php-fpm
chown www:www -R /var/log/php-fpm
chown www:www -R /var/lib/nginx
chown www:www -R /var/opt/remi/php70/lib/php/*
systemctl restart php70-php-fpm
##testファイル作成
touch /var/www/html/snipeit/public/index.php
echo " <?php var_dump( phpinfo() ); ?> " >> /var/www/html/snipeit/public/index.php
chown -R www:www /var/www/html/*
この時点でChrome等Webブラウザから
http://nginxをインストールしたPCのIPaddress/index.php
にアクセスするとphpの詳細が表示されるWebページが見れるはずです。
ダウンロードが始まった方はphpのSocketやSELinux等でつまづいている可能性があります。
#MySQL Install
##Maria姫とお別れ
Maria DBが最初から入っている可能性があるので、ある場合は別れを告げます。
すでにMaria DBを利用している場合、DBの中身が消えるのでバックアップ等とってください
すでにMaria DBを利用している場合、DBの中身が消えるのでバックアップ等とってください
すでにMaria DBを利用している場合、DBの中身が消えるのでバックアップ等とってください
大切なことなので3回言いました。
rpm -qa | grep maria
mariadb-libs-5.5.64-1.el7.x86_64
等レスポンスがあった場合はMaria姫がいらっしゃるので
yum remove mariadb-libs
rm -rf /var/lib/mysql/
##リポジトリ追加&インストール
#MySQL5.6を指定してインストール
#yum-util install
yum -y install yum-utils
#MySQLのレポジトリをインストール
yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
MySQL5.6をインストールするよう設定
yum-config-manager --disable mysql57-community
yum-config-manager --enable mysql56-community
MySQL5.6をインストールする設定になっているか確認
yum repolist all | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community enabled: 113 mysql-connectors-community-source MySQL Connectors Community - S disabled mysql-tools-community/x86_64 MySQL Tools Community enabled: 84 mysql-tools-community-source MySQL Tools Community - Source disabled mysql55-community/x86_64 MySQL 5.5 Community Server disabled mysql55-community-source MySQL 5.5 Community Server - S disabled mysql56-community/x86_64 MySQL 5.6 Community Server enabled: 549 mysql56-community-source MySQL 5.6 Community Server - S disabled mysql57-community/x86_64 MySQL 5.7 Community Server disabled mysql57-community-source MySQL 5.7 Community Server - S disabled
5.6のところがenableになっていればOK
#MySQL Install
yum install -y mysql-community-devel mysql-community-server
##MySQL設定①
#設定ファイルbackup
cp /etc/my.cnf /etc/my.cnf.org
#ログのタイムゾーンの設定(初期値:UTC)
echo log_timestamps=SYSTEM >> /etc/my.cnf
#クライアントの文字セットの設定を無視する
echo skip-character-set-client-handshake >> /etc/my.cnf
#認証方法の変更
echo default_authentication_plugin= mysql_native_password >> /etc/my.cnf
##MySQL起動
systemctl start mysqld
systemctl enable mysqld
##MySQLへログインする
###まず初期パスワードを調べる
grep password /var/log/mysqld.log
実行すると
2019-08-25T17:30:31.014991+09:00 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: pnR,e5,j;!0dZ
という実行結果が得られる。上記の場合、初期パスワードは行末尾の
pnR,e5,j;!0dZ
となる。これをメモする。
###MySQL初期化
mysql_secure_installation --use-default
Securing the MySQL server deployment.
Enter password for user root:
と聞かれるので、先程メモしたパスワードを入力し、Enter
The existing password for the user account root has expired. Please set a new password.
New password:
新しいパスワードを入力してくださいと言われたので、任意のパスワードを入力してEnter
。
なお、確認のためもう一度パスワードの入力を求められるのでこれも入力してEnter
。
ずら~とでて
All done!
と表示されれば完了
なおパスワードが「Pasword123」くらい"弱すぎる"と怒られて先に進めません。
英数字に加えて記号をを入力しないとだいたい怒られます。
回避方法がありますがここでは解説しません。
###MySQLにログイン
mysql -u root -p
先程入力した任意のパスワードを入力し、Enter
。
パスワードがあっていれば
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.17 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
と、コンソールがmysql>
に変わり、MySQLへのログインが完了した。
###MySQLのユーザ追加
コンソールがmysql>
の状態で下記4つのコマンドを実行する。
注意点として
・今回ユーザ名とデータベース名をwordpress
としていますが、任意の名前に変更が可能です。こだわりがなければwordpress
でよいと思います。
・@@@@@@@@@@@@
の部分は任意のパスワードを入力してください。先程と同様、"弱いパスワード"だと怒られます。これも回避方法がありますが、同様に今回は解説しません。
・(quitを除く)上記コマンド実行ごとにQuery OK, 0 rows affected (0.01 sec)
等と表示されていれば成功です。
CREATE USER `snipeit`@`localhost` IDENTIFIED WITH mysql_native_password BY '@@@@@@@@@@@';
CREATE DATABASE snipeit CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON snipeit.* TO `snipeit`@`localhost` WITH GRANT OPTION;
flush privileges;
quit
#Snipe IT install
##Snipe IT Download
公式ページに各バージョンのリンクがあります。
https://snipeitapp.com/download
2019年9月12日時点の最新バージョンは4.7.7、結局Githubに飛ばされるので、Gitを使います。
###Git install
yum -y install git
###Snipe ITをDownload (git clone)
nginxのホームディレクトリが/var/www/html/なので、ここにダウンロードします。
git clone https://github.com/snipe/snipe-it /var/www/html//snipeit
おそらく最新Versionがダウンロードされるはずですが、
気になるようでしたら
cat /var/www/html/snipeit/config/version.php | grep app.version
'app_version' => 'v4.7.7',
でバージョンを確認するとよいと思います。
##Snipe IT 初期設定
cd /var/www/html/snipeit/
cat >> .env << EOF
# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
APP_ENV=production
APP_DEBUG=false
APP_KEY=ChangeMe
APP_URL=null
APP_TIMEZONE='Asia/Tokyo'
APP_LOCALE=ja
MAX_RESULTS=500
# --------------------------------------------
# REQUIRED: DATABASE SETTINGS
# --------------------------------------------
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=@@@@@@@@@@@@@@@@
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
# --------------------------------------------
# OPTIONAL: SSL DATABASE SETTINGS
# --------------------------------------------
DB_SSL=false
DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
MAIL_DRIVER=smtp
MAIL_HOST=email-smtp.us-west-2.amazonaws.com
MAIL_PORT=587
MAIL_USERNAME=YOURUSERNAME
MAIL_PASSWORD=YOURPASSWORD
MAIL_ENCRYPTION=null
MAIL_FROM_ADDR=you@example.com
MAIL_FROM_NAME='Snipe-IT'
MAIL_REPLYTO_ADDR=you@example.com
MAIL_REPLYTO_NAME='Snipe-IT'
MAIL_BACKUP_NOTIFICATION_ADDRESS=you@example.com
# --------------------------------------------
# REQUIRED: IMAGE LIBRARY
# This should be gd or imagick
# --------------------------------------------
IMAGE_LIB=gd
# --------------------------------------------
# OPTIONAL: SESSION SETTINGS
# --------------------------------------------
SESSION_LIFETIME=12000
EXPIRE_ON_CLOSE=false
ENCRYPT=false
COOKIE_NAME=snipeit_session
COOKIE_DOMAIN=null
SECURE_COOKIES=false
# --------------------------------------------
# OPTIONAL: SECURITY HEADER SETTINGS
# --------------------------------------------
APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1
ALLOW_IFRAMING=false
REFERRER_POLICY=same-origin
ENABLE_CSP=false
CORS_ALLOWED_ORIGINS=null
# --------------------------------------------
# OPTIONAL: CACHE SETTINGS
# --------------------------------------------
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
CACHE_PREFIX=snipeit
# --------------------------------------------
# OPTIONAL: REDIS SETTINGS
# --------------------------------------------
REDIS_HOST=null
REDIS_PASSWORD=null
REDIS_PORT=null
# --------------------------------------------
# OPTIONAL: MEMCACHED SETTINGS
# --------------------------------------------
MEMCACHED_HOST=null
MEMCACHED_PORT=null
# --------------------------------------------
# OPTIONAL: AWS S3 SETTINGS
# --------------------------------------------
AWS_SECRET=null
AWS_KEY=null
AWS_REGION=null
AWS_BUCKET=null
# --------------------------------------------
# OPTIONAL: LOGIN THROTTLING
# --------------------------------------------
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_DURATION=60
# --------------------------------------------
# OPTIONAL: MISC
# --------------------------------------------
APP_LOG=single
APP_LOG_MAX_FILES=10
APP_LOCKED=false
FILESYSTEM_DISK=local
APP_CIPHER=AES-256-CBC
GOOGLE_MAPS_API=
BACKUP_ENV=true
EOF
DB_PASSWORD=@@@@@@@@@@@@@@@@の@の部分はMySQLで設定したパスワードと同一のものに置き換えてください。
##パーミッション設定
chown -R www:www /var/www/html/
chmod -R 755 public/uploads
chmod -R 755 storage
chmod -R 755 storage/private_uploads
##composer download & insatll
しばらくかかりますのでコーヒーでも。
curl -sS https://getcomposer.org/installer | php
php composer.phar install --no-dev --prefer-source
##app key生成
php artisan key:generate
本当に実行するの・・??と聞かれるので"yes"と答えましょう。
Application key [base64:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@] set successfully.
と表示されたら成功です。
この生成されたKeyは先程操作した.envに書き込まれます。
##.env Backup (任意)
Keyが書き込まれた.envを適当な場所にコピー等してBackupすることをオヌヌメします。
このKeyがなくなると「えらい目」に合います。
cp .env /home/
chmod 400 /home/.env
#Webから初期設定
ブラウザからアクセスすると初期設定画面が出てきて、
指示の通りに登録を済ませれば完了です。おつかれさまでした。