LoginSignup
7
9

More than 3 years have passed since last update.

Snipe IT Install

Last updated at Posted at 2019-09-13

追記

(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から初期設定

ブラウザからアクセスすると初期設定画面が出てきて、
指示の通りに登録を済ませれば完了です。おつかれさまでした。

7
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9