オンプレ利用のゆるい設定です。
- ruby2.6
- redmine-4.0.3
80番, 443番を開けます。
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --reload
yumで必要なものをインストール
yum -y groupinstall "base" "Development tools" yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel yum -y install postgresql-server postgresql-devel yum -y install httpd httpd-devel yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts yum -y install mysql-devel
ruby2.6.2のインストール
# wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.2.tar.gz # tar zxvf ruby-*.tar.gz # cd ruby-* # ./configure --disable-install-doc # make # make install
# ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
gemのbundlerのインストール
# gem install bundler
もくじ
PostgreSQLセットアップ
初期化
# postgresql-setup initdb
# vi /var/lib/pgsql/data/pg_hba.conf ・・・ ※最終行付近を下記のようにする # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 password ←●passwordに変更 # IPv6 local connections: host all all ::1/128 password ←●passwordに変更 # Allow replication connections from localhost, by a user with the # replication privilege. #local replication postgres peer #host replication postgres 127.0.0.1/32 ident #host replication postgres ::1/128 ident ※●下記を追加 host redmine redmine ::1/128 password host redmine redmine 127.0.0.1/32 password
反映させる
systemctl restart postgresql systemctl enable postgresql systemctl status postgresql
# sudo adduser redmine # sudo -u postgres createuser -P redmine 新しいロールのためのパスワード:※「redminepass」を入力 もう一度入力してください:※「redminepass」を入力
# cd /var/lib/pgsql # sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
ユーザ確認
# su - postgres 最終ログイン: 2019/04/02 (火) 16:11:03 JST日時 pts/0 -bash-4.2$ psql -l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+----------+------------------+-------------+-------------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | redmine | redmine | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 行) -bash-4.2$ exit ログアウト
Redmineのインストール
# cd # wget http://www.redmine.org/releases/redmine-4.0.3.zip # unzip redmine-4.0.3.zip # mv redmine-4.0.3 /var/lib/redmine # cp /var/lib/redmine/config/database.yml.example /var/lib/redmine/config/database.yml
# vi /var/lib/redmine/config/database.yml ・・・ production: adapter: mysql2 database: redmine host: localhost username: root password: "" encoding: utf8 ↓変更 production: adapter: postgresql database: redmine host: localhost username: redmine password: "redminepass" encoding: utf8 ・・・
# cp /var/lib/redmine/config/configuration.yml.example /var/lib/redmine/config/configuration.yml
# vi /var/lib/redmine/config/configuration.yml production: ↓変更 production: email_delivery: delivery_method: :smtp smtp_settings: address: <メールサーバホスト名> port: 587 domain: <メールサーバホスト名> authentication: :login user_name: <メールユーザ> password: <メールパスワード> enable_starttls_auto: rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
# cd /var/lib/redmine/
※rootで実行してはいけないもののようですが、外部には公開しないので。
# bundle install --without development test --path vendor/bundle
初期設定
# bundle exec rake generate_secret_token # RAILS_ENV=production bundle exec rake db:migrate # RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data Default configuration data loaded. これが出たらOK!
# gem install passenger # passenger-install-apache2-module --auto --languages ruby
# passenger-install-apache2-module --snippet LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-6.0.2/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-6.0.2 PassengerDefaultRuby /usr/local/bin/ruby </IfModule>
出力結果をメモに控える
# vi /etc/httpd/conf.d/redmine.conf <Directory "/var/lib/redmine/public"> Require all granted </Directory> # passenger-install-apache2-module --snippet で表示された設定を記述。 LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-6.0.2/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-6.0.2 PassengerDefaultRuby /usr/local/bin/ruby </IfModule> # 必要に応じてPassengerのチューニングのための設定を追加(任意)。 # 詳しくはPhusion Passenger users guide(https://www.phusionpassenger.com/library/config/apache/reference/)参照。 PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 864000 PassengerStatThrottleRate 10 Header always unset "X-Powered-By" Header always unset "X-Runtime"
# vi /etc/httpd/conf/httpd.conf #DocumentRoot "/var/www/html" DocumentRoot "/var/lib/redmine/public"
# chown -R apache:apache /var/lib/redmine
systemctl restart httpd systemctl enable httpd systemctl status httpd
http://IPアドレス/
- ユーザ:admin
- パスワード:admin
ここでおしまい。
ドメインアクセスでの設定をする
- IPでのアクセスを禁止する。
- サブディレクトリでの公開を行う
- HTTPSに対応する
vi /etc/httpd/conf.d/redmine.conf <Directory "/var/lib/redmine/public"> Require all granted </Directory> # passenger-install-apache2-module --snippet で表示された設定を記述。 LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-6.0.2/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-6.0.2 PassengerDefaultRuby /usr/local/bin/ruby </IfModule> # 必要に応じてPassengerのチューニングのための設定を追加(任意)。 # 詳しくはPhusion Passenger users guide(https://www.phusionpassenger.com/library/config/apache/reference/)参照。 PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 864000 PassengerStatThrottleRate 10 Header always unset "X-Powered-By" Header always unset "X-Runtime"
# vi /etc/httpd/conf.d/app.example.com.conf <VirtualHost *:80> DocumentRoot /var/www/vhosts/app.example.com ServerName app.example.com <Directory "/var/lib/redmine/public"> Require all granted Allowoverride All </Directory> </VirtualHost>
# vi /etc/httpd/conf/httpd.conf <IfModule dir_module> DirectoryIndex index.php index.html ←●DirectooryIndexにindex.phpを加える </IfModule> ※最終行に追加 # Apache version Hide ServerTokens ProductOnly ServerSignature off
反映する
# systemctl reload httpd
IPでの直接アクセスを制限する
# vi /etc/httpd/conf.d/ignoreDirectIpAccess.conf <VirtualHost *:80> ServerName any <Location /> Order Deny,Allow Deny from all </Location> </VirtualHost> <VirtualHost *:443> ServerName any <Location /> Order Deny,Allow Deny from all </Location> </VirtualHost>
反映する
# systemctl reload httpd
Indexに載るのは防止する
# yum -y install php # systemctl restart httpd
# vi /var/www/vhosts/app.exmple.com/index.php <?php header("HTTP/1.1 404 Not Found"); include ('404.php'); exit;
# mkdir -p /var/www/vhosts/app.example.com
# vi /var/www/vhosts/app.example.com/index.html app.example.com
# mkdir /var/www/htpasswd
# cd /var/www/htpasswd # htpasswd -c .htpasswd <ユーザ名>
# chown -R apache:apache /var/lib/redmine
反映
systemctl restart httpd systemctl enable httpd systemctl status httpd
Let’s Encrypt 無料証明書
cd /usr/local/src git clone https://github.com/certbot/certbot cd certbot/ ./certbot-auto -n
一旦Apacheを止める
# systemctl stop httpd
証明書発行
# ./certbot-auto certonly --standalone -d app.example.com -m info@example.com --agree-tos -n
# systemctl start httpd
# vi /etc/httpd/conf.d/app.example.com.conf <VirtualHost *:80> DocumentRoot /var/www/vhosts/app.example.com ServerName app.example.com <Directory "/var/lib/redmine/"> Require all granted Allowoverride All </Directory> <Location /naishodayo> PassengerBaseURI /naishodayo PassengerAppRoot /var/lib/redmine AuthUserfile /var/www/htpasswd/.htpasswd AuthGroupfile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user </Location> <ifModule mod_rewrite.c> RewriteEngine On LogLevel alert rewrite:trace3 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </ifModule> </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/vhosts/app.example.com ServerName app.example.com:443 <Location /naishodayo> PassengerBaseURI /naishodayo PassengerAppRoot /var/lib/redmine AuthUserfile /var/www/htpasswd/.htpasswd AuthGroupfile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user </Location> <Directory "/var/lib/redmine/"> Require all granted Allowoverride All </Directory> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/letsencrypt/live/app.example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/app.example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/app.example.com/chain.pem <Directory "/var/lib/redmine/public"> Require all granted Allowoverride All </Directory> </VirtualHost>
# httpd -t
反映する
systemctl restart httpd systemctl enable httpd systemctl status httpd
自動更新
# vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO='' # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed # Let's Encrypt 証明書自動更新 0 4 1 * * root /bin/systemctl stop httpd && /usr/local/src/certbot/certbot-auto renew --force-renewal && /bin/systemctl start httpd
# systemctl restart crond
# reboot now
https://ドメイン/naishodayo