ここに書くような事は割と色々やってるんですが、余裕が無くて久々。
で、今回は会社の別グループの人に頼まれて、クラウドストレージを作る事に。
今所属している会社はIT音痴だらけなんで、使い易いようにNextCloudでオブジェクトストレージを連結したトコロ、好評だったようで別グループのも立てる事になりました。
そんなワケそのメモ。
目次
Amazon Lightsail に NextCloud
今回の環境はAmazon Lightsail。
使って見たかったんですよねー。安いし。
OSはubuntu 20.04
nextcloudは21.0.2
でやっていきます。
では行きます。
最初のお約束
# passwd root New password: Retype new password:
rootにパスワードを設定。
パスワードログインは許可して無いけど。
# apt-get update # apt-get upgrade # apt-get dist-upgrade # reboot # apt-get install ubuntu-release-upgrader-core # do-release-upgrade
アップデート系をやって。
# ufw allow OpenSSH # ufw enable # ufw status //確認 Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) // httpとhttpsのポートも解放しておく # ufw allow 80,443/tcp
Firewallの設定。
なんでか443のポートが開かなかったので、Lightsailのコンソールで開けた。
apache2 から nextcloud のインストールまで
apache2とかモロモロ
# apt install apache2 mariadb-server libapache2-mod-php7.4 # apt install php7.4-gd php7.4-mysql php7.4-curl php7.4-mbstring php7.4-intl # apt install php7.4-gmp php7.4-bcmath php-imagick php7.4-xml php7.4-zip
apache2とかモロモロのインストール。
SQLの設定
# /etc/init.d/mysql start # mysql -uroot -p MariaDB [(none)]> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'username'@'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> quit;
SQLの設定。
NextCloudのダウンロードから設置
# wget https://download.nextcloud.com/server/releases/nextcloud-21.0.2.tar.bz2 # tar -xjvf nextcloud-21.0.2.tar.bz2 # cp -r nextcloud /var/www
apache2 の設定
nextcloud.conf の設定
# vim /etc/apache2/sites-available/nextcloud.conf Alias /nextcloud "/var/www/nextcloud/" <Directory /var/www/nextcloud/> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory> <VirtualHost *:80> DocumentRoot /var/www/nextcloud/ ServerName your.server.com <Directory /var/www/nextcloud/> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory> </VirtualHost>
設定ファイルの反映とか
# a2ensite nextcloud.conf # a2enmod rewrite # a2enmod headers # a2enmod env # a2enmod dir # a2enmod mime # a2enmod setenvif # Satisfy Any # service apache2 restart
userとgroupの変更
上までの流れでnextcloudにアクセス出来るはず。
と思ってたら何故かエラー。
ログを確認したらpermissionがなんちゃらと書いてあるんで、
userを調べたらrootになってた。
なので
# chown -hR www-data:www-data /var/www/nextcloud
で www-data に変更。
これでnextcloudに入ってDBと結びつけを出来ます。
SSLの設定
今の時代SSL必須なので、「Let’s Encrypt」でSSL化します。
# apt install certbot python3-certbot-apache # vim /etc/apache2/sites-available/nextcloud.conf ... ServerName your_domain ServerAlias www.your_domain ... # certbot --apache //アドレスを設定 Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): youraddress@address.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - (Y)es/(N)o: N
そんな感じで流れに沿ってやればSSL出来る。
//チェック # systemctl status certbot.timer ~~~~ Active: active (waiting) since Tue 2021-06-22 10:58:55 UTC; 9min ago Trigger: Tue 2021-06-22 17:47:42 UTC; 6h left Triggers: ● certbot.service ~~~~~
自動化のチェック。
Nextcloud の設定と最適化
cronの設定
//設定 # crontab -u www-data -e */5 * * * * php -f /var/www/nextcloud/cron.php //確認 # crontab -u www-data -l */5 * * * * php -f /var/www/nextcloud/cron.php # service cron restart
cronを設定する。
phpiniの設定
# vim /etc/php/7.4/apache2/php.ini memory_limit = 512M upload_max_filesize = 16G post_max_size = 16G # service apache2 restart
memory_limit を上げないとNextcloudに怒られます・
upload_max_filesize とかも上げとく。せっかくのクラウドストレージですからね。
“Strict-Transport-Security”の修正
“Strict-Transport-Security” HTTPヘッダが最低でも “15552000” 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。
と怒られるので修正。
# vim /etc/apache2/sites-available/nextcloud-le-ssl.conf //追記する <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> # service apache2 restart
ご使用のシステムには、デフォルトの電話地域が設定されていません。の修正
これも修正。
# vim /var/www/nextcloud/config/config.php //これを配列内に追記。 'default_phone_region' => 'JP',
メモリキャッシュの設定
メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
と怒られるので設定します。
# apt install memcached # apt install php7.4-memcached # vim /etc/php/7.4/cli/conf.d/10-opcache.ini //追記 opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1 # apt install php7.4-apcu #vim /var/www/nextcloud/config/config.php //これを配列内に追記。 'memcache.local' => '\OC\Memcache\APCu', 'memcache.distributed' => '\OC\Memcache\Memcached', 'memcache.locking' => '\OC\Memcache\Memcached', # service apache2 restart
こんな感じ。
php-imagickモジュールのインストール。
このインスタンスのphp-imagickモジュールはSVGをサポートしていません。互換性の向上のために、インストールすることをお勧めします。
と怒られるのでインスト。
# apt install php-imagick imagemagick
mysql.cnfの設定
nextcloudのデベロッパーページのままの設定。
vim /etc/mysql/conf.d/mysql.cnf //サーバーのメモリが豊富ならもっと上げて良いのだと思う。 innodb_buffer_pool_size=1G innodb_io_capacity=4000 # systemctl restart mysql
タイムゾーンの設定やらないと mariadb の時間ズレてしまいました。
defaultはOSの設定を使うようなのでタイムゾーンの設定やります。
# timedatectl set-timezone Asia/Tokyo # timedatectl Local time: Mon 2021-10-20 19:48:26 JST Universal time: Mon 2021-10-20 10:48:26 UTC RTC time: Mon 2021-10-20 10:48:27 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no //SQLが立ち上がってたら再起動 # systemctl restart mysql
AWS S3連結
ストレージをAWS S3に連結します。
コレでストレージは無制限になり、膨大に保存出来ますね。
AWSのIAMでユーザーを作り、S3にプログラムからアクセス出来るようにしておく事が前提です。
#vim /var/www/nextcloud/config/config.php //配列内に追記 'objectstore' => array( 'class' => 'OC\\Files\\ObjectStore\\S3', 'arguments' => array( 'bucket' => '<バケット名>', 'autocreate' => true, 'region' => '<S3のリージョン>', 'key' => '<20文字の大文字英数字のアクセスキー>', 'secret' => '<40文字の英数字記号のシークレットキー>', 'use_ssl' => true, 'use_path_style'=> false, ), ),
これでファイルをアップロードしてみて、S3にデータが出来ていれば終わりです。
お疲れ様でした。
自分用メモなんで、適当でスイマセン。