WindowsでCURLが使えると知り、早速dos窓で「curl –version」とコマンドを打ったところ、”curl : リモート名を解決できませんでした。・・・”のエラーが出た。
curlが認識できなく、curl.exeなら認識できるらしい。「curl.exe –version」とコマンドを打ったところ素直にバージョンが表示された。
環境依存かもしれないが参考まで。
外資系の小売りの会社で社内SEとして勤務。
システムは日本独自で構築し、現在は内製中。
既婚で子育て真っ只中。時間もお金もない生活を送っています。。。
保有資格:
応用情報技術者
ネットワークスペシャリスト
情報セキュリティスペシャリスト
TOEIC 760
WindowsでCURLが使えると知り、早速dos窓で「curl –version」とコマンドを打ったところ、”curl : リモート名を解決できませんでした。・・・”のエラーが出た。
curlが認識できなく、curl.exeなら認識できるらしい。「curl.exe –version」とコマンドを打ったところ素直にバージョンが表示された。
環境依存かもしれないが参考まで。
家で2つほどサーバ的なものを建てている。1つはUbuntu22だが、1つはWindows 7である。Windows 7なんかやめたいのだが、録画サーバとして設置してあり、諸事情で10にもできずそのままになっている。もうほとんど録画もしていないが、稀に録画することがあり、手仕舞いできない。
そんなWin7の録画サーバの調子が悪い。HDDが古くディスクエラーが頻発しているので、SSDに乗り換えることにした。
Win7の現在のHDDの構成は300GBでCドライブに80GBを充てていて、これをWindowsの「バックアップと復元」で新しい128GBのSSDに載せ替えるつもりだったが、「ディスク容量不足」でどうしてもできない。Cドライブだけではなく、HDD全容量以上のディスクが必要らしい。あれやこれややってみたがうまく行かない。
仕方ないので、Ubuntu 22をUSBから起動(インストールディスクから「try ubuntu」)して対応した。手順としては、SSD側でfdiskでパーティション作成、HDDからSSDにパーティション単位でddコピー、SSDでWindows7起動確認後、ついでにgpartedで容量を80GBから128GBまで拡張した。
以下、備忘録として手順を示す。HDDは/dev/sda、SDDは/dev/sdbとする。
下準備
# ルートで作業 sudo su - # なんとインストールできる!次回起動しても有効! apt install ntfs-3g
手順1:/dev/sdaの現在のパーティション容量確認コマンド
#このコマンドの結果出てくる、/dev/sda1と/dev/sda2をコピーすることになる。 #そのため、コピー先に同じパーティション容量の/dev/sdb1と/dev/sdb2を作成する必要があるため、ここで/dev/sda1と/dev/sda2の容量を控えておく。 fdisk -l /dev/sda # あまり覚えていないが以下のような感じで出てくる。 # 2048から9602のパーティションと96043から999999のパーティションを/dev/sdbに作成する。 /dev/sda1 * 2048 96042 123456 7 NTFS /dev/sda2 96043 999999 123456 7 NTFS
手順2:/dev/sdbにパーティション作成。(NTFSではなく、sdb1はFAT32 (LBA))で作成する。)最後のwコマンドをするまで、実際には書き込まれないので安心して作業する。
fdisk /dev/sdb コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p # 基本pらしい 領域番号 (1-4): 1 #sda1のコピー先なので1 最初 シリンダ (1-652, default 1): 2048 # 上で控えた開始 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-652, default 652): 96042 # 上で控えた終了 # 2つ目を作成 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 2 #sda2のコピー先なので2 # 上で控えた開始と終了の位置 最初 シリンダ (1-652, default 1): 96043 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-652, default 652): 9999999 コマンド (m でヘルプ): t 選択した領域 1 16進数コード (L コマンドでコードリスト表示): c # FAT32 (LBA) コマンド (m でヘルプ): t 選択した領域 2 16進数コード (L コマンドでコードリスト表示): 7 # NTFS # 起動パーティション指定 コマンド (m でヘルプ): a Partition number (1-4): 1 # 現在の状況確認 コマンド (m でヘルプ): p # なんか色々出る。 # 書き込み コマンド (m でヘルプ): w
手順3:パーティションコピー bsオプションは値を上げればコピーが早くなるわけではないらしい。32Mとか64Mあたりでやる。
# sda1はすぐ終わる dd bs=32M if=/dev/sda1 of=/dev/sdb1 # こっちは長い・・・ dd bs=32M if=/dev/sda2 of=/dev/sdb2
これでSSDから起動してみて起動できればOKである。NGだった場合は、fdisk -l /dev/sdbをよく見てみる。MBRの調整などは基本不要である。コピーが失敗していないか、ファイルシステムが違わないか、起動(boot)パーティションが指定されているかを確認する。
このあとはやらなくても良い(起動しなくなるリスク有り)のだが、gpartedを起動してパーティションサイズを拡張した。gpartedは必ずsudoコマンドで起動すること。
sudo gparted
GUIなので説明は割愛。対象のディスクを選んで、リサイズを選択してからドラッグしてリサイズする。
ローカルネットの中だけのサーバだが、そのうちセキュリティの問題でsambaが他のデバイスから繋がらなくなりそう。そうなったら破棄するか何かで対応しよう。。。
Pixel 6aがgoogle storeで42,900円まで下がっていたので購入し、今まで使っていたiPhone SE 2から乗り換えた。
乗り換えてまだ1週間程度だが、概ね快適である。iPhoneの廉価版からPixelの廉価版へ乗り換えた貧乏人だが、5万前後の端末なら、iPhoneより圧倒的にPixelを勧めたい。迷っている人の参考に、個人的な主観で良い点、悪い点を以下に少しまとめたい。
今のところこんなところであろうか。移行は大変だったが、いつも使っている10~20のアプリだけなら、1時間ぐらいで移行が終わり、後は必要なときに都度入れている。移行でLINEの過去のやり取りが消え多少痛かったが、そもそも読み返すこともないし、すぐに諦めがついた。
もう数ヶ月使ったところでさらに良い点/悪い点を追記してみたい。
別システムからバッチなどでファイルを作成、そのファイルをNextCloudにアップし、NextCloudの内部リンクを取得したいケースがあった。参考までに方法を示す。
CURLでNextCloudのAPIコマンドをたたき、アップしてFileIDを取得する。
PHPのプログラムで書くと以下の感じとなる。
/** * ローカルのファイルをNextCloudにアップロードし、内部リンクを取得する。 * * @param string $upFileFullPath アップしたいファイルのフルパス * @param string $dstFolder NextClodu上のアップしたいフォルダー(ファイル名は$upFileFullPathのファイル名を使用) * @param string $nextCloudURL NextCloudのURL * @param string $userName NextCloudのログインユーザー * @param string $password NextCloudのログインユーザーのパスワード(アプリパスワード) * @return string|bool ファイルアップ後の内部リンクを返す。falseの場合はエラー */ function upFileAndGetInternalLink($upFileFullPath, $dstFolder, $nextCloudURL, $userName, $password){ if (!is_file($upFileFullPath)){ return false; } $fileName = basename($upFileFullPath); if (substr($nextCloudURL, -1) != '/'){ $nextCloudURL .= '/'; } if (substr($dstFolder, -1) != '/'){ $dstFolder .= '/'; } $apiOfTheUpFile = $nextCloudURL . 'remote.php/dav/files/' . $dstFolder . $fileName; //libxml_use_internal_errors(true); $cmd = "curl -T '" . $upFileFullPath . "' -u '" . $userName . ":" . $password . "' '" . $apiOfTheUpFile . "'"; echo $cmd; $ret = exec($cmd, $aryOutput, $resultCode); if ($ret === false || $resultCode != 0){ return false; } $cmd = "curl -u '" . $userName . ":" . $password . "' '" . $apiOfTheUpFile . "' -X PROPFIND --data '<?xml version=\"1.0\" encoding=\"UTF-8\"?> <d:propfind xmlns:d=\"DAV:\"> <d:prop xmlns:oc=\"http://owncloud.org/ns\"> <oc:fileid /> </d:prop> </d:propfind>'"; $ret = exec($cmd, $aryOutput, $resultCode); if ($ret === false || $resultCode != 0){ return false; } $ret = str_replace(':','',$ret); $xml = simplexml_load_string($ret); $fileId = (string)$xml->dresponse->dpropstat->dprop->ocfileid; return $nextCloudURL . "index.php/f/" . $fileId; }
使用する感じは以下。
$upFileFullPath = '/td/dl/hogehoge.xlsx'; $nextCloudURL = 'https://yourNextCloud.com/'; $dstFolder = '/yourName/All/'; // NextCloudの"data"フォルダ以下を指定。ユーザ名が最初のフォルダ階層になるはず。 $userName = 'YourName'; $password = 'xH6Jk-Hkdje-OPalkd-J4PCn-mqxMW'; echo upFileAndGetInternalLink($upFileFullPath, $dstFolder, $nextCloudURL, $userName, $password);
Collabora Onlineをアップデートしたら、NextCloudで”ドキュメントの読み込みに失敗 NextCloud Officeが読み込めませんでした – しばらく後でもう一度試してください”というエラーが表示され、Office系のファイルが開けなくなった。
エラーの内容としては以下の感じである。
WRN Waking up dead poll thread [HttpSynReqPoll], started: false, fin ished: false| net/Socket.hpp:725 ERR #30: Read failed, have 0 buffered bytes (EPIPE: Broken pipe) ERR #30: Socket write returned -1 (EPIPE: Broken pipe) ERR loading document exception: WOPI::CheckFileInfo failed: ERR Failed to add session to [https://hogehoge.com:443/index. php/apps/richdocuments/wopi/files/52797_ocic20zydkap] with URI [https://hogehoge.com/index.php/apps/richdocuments/wopi/files/52797_ocic20zydkap?access_token=dcy91ZZq9mSvxv1XsGrW2ucmp8CmFcu4&access_tok en_ttl=0]: WOPI::CheckFileInfo failed:
この「Failed to add session to」はCollaboraがNextCloudに接続できないときに出力されるエラーで、例えば上なら、「hogehoge.com」の名前解決が出来ていないケースが多く、/etc/hostsやらDNSやらで名前解決すれば動くことが多い。だが、今回はアップデート前は動いていたため、名前解決のエラーではない。
結論から言うとIPv6を無効にすると無事動作した。
諸事情で、このサーバの設定では、ポートをLISTENするプログラムは徹底してIPv4のみ有効として設定した。Collaboraも設定ファイルのnet.protにIPv4を設定しIPv4のみ有効とした。
通常のサーバならIPv6も有効にするところだが、本サーバはさくらの専用サーバで、さくらの専用サーバはIPv6の提供をやめてしまっており、IPv4でしか接続できない。なのでIPv6をLISTENするソケットは可能な限り削除した。
1日いろいろ設定をいじりまわって、Collaboraを別サーバで動かすことまで考えて、最後のあがきでIPv6を無効にしたところするっと動作した。理由はわからないが、CollaboraがIPv6でNextCloudに接続しようとしていて、接続エラーとなっていたと思われる。
同じような人がいるかもしれないので、ご参考まで。
Ubuntu 22でIPv6を仮で無効にするには以下のコマンド。
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1 sysctl -w net.ipv6.conf.lo.disable_ipv6=1
これで動くようになればIPv6が原因である。原因がIPv6であれば以下のコマンドで恒久的にIPv6を無効にする。(ubuntu 20以下だと以下のコマンドはバグで動作しないので注意。)
vi /etc/sysctl.d/60-custom.conf --- net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 -- sysctl -p systemctl restart procps
Ubuntu serverではwww-dataというユーザがいて、WEB系のプログラムを動作させるときのデフォルトユーザとなっている。
このwww-dataにSSHでログインしようとしたら手間取ったため、以下に方法を示す。
# rootで作業 sudo su - # www-dataをログインユーザにする。 mkdir -p /home/www-data chown www-data:www-data /home/www-data chmod 755 /home/www-data usermod -s /bin/bash www-data passwd www-data # 適当なパスワードを指定 su - www-data # sshの認証鍵を作成 cd .ssh ssh-keygen -t rsa chmod 600 ./* chmod 744 ~/.ssh # sshの設定に合わせて・・ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys exit # sshの設定を変更(必要であれば) vi /etc/ssh/sshd_config --- # AllowUsersを設定してなければ不要 AllowUsers www-data ---
これでwww-dataのid_rsaを使ってSSHでログインできるようになる。ホームディレクトリの権限が755じゃないとSSHで”Permission denied (publickey)”となりはじかれるので注意。(ここがわからず時間がかかってしまった。。)
NextCloudをそのまま使うと日本語ファイルが文字化けすることがある。Windowsで昔作ったテキストファイルの文字コードがSJISになっているためである。
ググるとTEXTアプリのソースを2箇所修正する方法が出てくるのだが、最近のNextCloudのTEXTアプリは自前でエンコード変換するプログラムがあり、それを修正するほうが簡単で本筋である。(エンコード変換のプログラムで日本語の優先順が低いため、SJISのファイルがうまく変換されていないのである。)
修正ファイルは以下のファイルとなる。
(NextCloudインストールフォルダ)/apps/text/lib/Service/EncodingService.php
このファイルの上部のエンコード一覧(変数名:COMMON_ENCODINGS)の配列の先頭にSJISを加える。(NextCloud 24.0.5では29行目)
// コメントが元のソース 'UTF-8'の前に、'SJIS-win', 'SJIS', を追加 // public const COMMON_ENCODINGS = [ 'UTF-8', 'GB2312', 'GBK', 'BIG-5', 'SJIS-win', 'EUC-JP', 'Windows-1252', 'ISO-8859-15', 'ISO-8859-1', 'ASCII']; public const COMMON_ENCODINGS = [ 'SJIS-win', 'SJIS', 'UTF-8', 'GB2312', 'GBK', 'BIG-5', 'SJIS-win', 'EUC-JP', 'Windows-1252', 'ISO-8859-15', 'ISO-8859-1', 'ASCII'];
これでSJISのファイルが文字化けせずに表示されるようになる。(中国語のGB2312テキストファイルが今度は文字化けするかもしれないが、そこは考えない。考えるならブラウザの表示言語でエンコードの優先度を変更するなどで実用上は賄えそう。)
PHPを高速で動作させるopenLiteSpeedでNextCloudとcollabora onlineの設定を行った。NextCloudが重いと悩んでいる方は軽くなるので、お試しあれ。
(2022年9月現在の最新パッケージでの構築方法だが、古い環境でも構築方法はほぼ変わらないので参考になるかと思う。)
DB設定 使用するDB環境にNextCloud用のDBを作成しておく。
CREATE DATABASE nc; CREATE USER 'nextcloud'@'127.0.0.1' IDENTIFIED BY 'yourPassWord'; GRANT ALL ON nc.* TO 'nc'@'127.0.0.1'; FLUSH PRIVILEGES;
rootユーザに変更(以下は基本rootで設定)
sudo su -
hostsを変更
vi /etc/hosts --- 127.0.0.1 localhost nc.you.com lool.you.com 127.0.1.1 nc.you.com lool.you.com ---
Redis インストール
apt install redis-server -y vi /etc/redis/redis.conf --- supervised systemd maxmemory 16mb maxmemory-policy volatile-lfu unixsocket /var/run/redis/redis-server.sock unixsocketperm 777 timeout 60 --- usermod -a -G redis www-data systemctl enable redis-server systemctl restart redis.service systemctl status redis-server
その他インストール
# 入っていない場合に備えて apt install -y cron vim build-essential systemctl start cron systemctl enable cron
OpenLiteSpeed + php 8.1 インストール
wget -O - https://repo.litespeed.sh > enable_lst_debian_repo.sh bash enable_lst_debian_repo.sh apt update apt install openlitespeed -y systemctl status lshttpd systemctl enable lshttpd systemctl start lshttpd # 公開フォルダ作成 mkdir /var/www/{nextcloud,80} chown -R www-data:www-data /var/www/ # vertual hostの設定保存先 mkdir -p /usr/local/lsws/conf/vhosts/{nextcloud,httpPort,loolProxy} chown www-data:www-data /usr/local/lsws/conf/vhosts/{nextcloud,httpPort,loolProxy} # vertual hostのrootフォルダー mkdir -p /usr/local/lsws/vhosts/{nextcloud,httpPort,loolProxy} chown www-data:www-data /usr/local/lsws/vhosts/{nextcloud,httpPort,loolProxy} # PHP 8.1 apt install -y lsphp81 lsphp81-curl lsphp81-dev lsphp81-mysql lsphp81-redis lsphp81-apcu lsphp81-intl lsphp81-imagick # php-imagickの警告削除のため。 apt install -y libmagickcore-6.q16-6-extra # 設定ファイル 変更部分のみ vi /usr/local/lsws/conf/httpd_config.conf --- serverName nc.you.com #user nobody #group nogroup user www-data group www-data #indexFiles index.html, index.php indexFiles index.html, index.php, index.htm #path lsphp73/bin/lsphp path lsphp81/bin/lsphp --- # 実行ユーザを変更した場合、必ず再インストール apt -y install --reinstall openlitespeed # 管理画面へのパスワード設定 /usr/local/lsws/admin/misc/admpass.sh User name [admin]: your Name Password: yourPassword Retype password: yourPassword # ramディスク作成 mkdir /tmp/ram mount -t tmpfs -o size=8m /dev/shm /tmp/ram vi /etc/fstab --- tmpfs /tmp/ram tmpfs defaults,noatime,size=8m 0 0 --- # php設定 変更部分のみ vi /usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini --- memory_limit = 512M upload_max_filesize = 64M max_file_uploads = 100 post_max_size = 40M output_buffering = Off date.timezone = "Asia/Tokyo" [Pdo_mysql] # 環境に合わせて pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock [opcache] opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=32 opcache.max_accelerated_files=1000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1 opcache.jit=on opcache.jit_buffer_size=128M apc.enabled=1 apc.enable_cli = 1 apc.shm_size=64M apc.ttl=3600 apc.gc_ttl=3600 --- # デフォルトユーザnobodyで作られるので一旦削除 rm -rf /tmp/lshttpd # openLiteSpeed adminパネルの設定 vi /usr/local/lsws/admin/conf/admin_config.conf --- # 以下の個所を以下のように修正 listener adminListener { address *:7080 secure 0 keyFile /etc/letsencrypt/live/nc.you.com/privkey.pem certFile /etc/letsencrypt/live/nc.you.com/fullchain.pem clientVerify 0 } --- systemctl restart lshttpd # www-dataでphpを簡単に扱えるように.bashrcのaliasを追加 su - www-data vi ~/.bash_profile --- if [ -f ~/.bashrc ]; then . ~/.bashrc fi --- vi ~/.bashrc --- alias lsphp='/usr/local/lsws/lsphp81/bin/php -c /usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini' --- source ~/.bashrc exit # rootユーザも vi ~/.bashrc --- # 以下1行を追加 alias lsphp='/usr/local/lsws/lsphp81/bin/php -c /usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini' --- source ~/.bashrc
http://nc.you.com:7080/にアクセスし、port80が動くようにする。
ファイルから設定する場合は以下。
vi /usr/local/lsws/conf/httpd_config.conf --- # 追加する。 virtualhost httpPort { vhRoot $SERVER_ROOT/vhosts/$VH_NAME/ configFile $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf allowSymbolLink 1 enableScript 0 restrained 1 } # 修正する。 listener Default { address *:80 secure 0 map httpPort nc.you.com, lool.you.com } --- # 新規作成 vi /usr/local/lsws/conf/vhosts/httpPort/vhconf.conf --- docRoot /var/www/80/ errorlog $SERVER_ROOT/logs/$VH_NAME_error.log { useServer 0 logLevel ERROR rollingSize 10k keepDays 90 } accesslog $SERVER_ROOT/logs/$VH_NAME_access.log { useServer 0 logFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" rollingSize 10k keepDays 90 } --- chown lsadm:www-data /usr/local/lsws/conf/vhosts/httpPort/vhconf.conf
LetsEncrypt (メールアドレス部分は変更のこと)
apt install certbot -y # メールアドレスは自分のものに変更のこと certbot certonly --non-interactive --agree-tos -m yourmail@mail.com --webroot -w /var/www/80/ -d nc.you.com -d lool.you.com vi /etc/cron.d/certbot --- # 変更 #0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --deploy-hook "systemctl restart lshttpd" ---
https://nc.you.com:7080/にアクセス可能なように変更。
vi /usr/local/lsws/admin/conf/admin_config.conf --- listener adminListener { address *:7080 # この行から下3行を変更 secure 1 keyFile /etc/letsencrypt/live/nc.you.com/privkey.pem certFile /etc/letsencrypt/live/nc.you.com/fullchain.pem clientVerify 0 } ---
https://nc.you.com:7080/にアクセスし、以下を変更
[一般タブ] 統計出力ディレクトリ => /tmp/ram/
[一般タブ] 自動インデックス => いいえ
[ログタブ] ログレベル => WARNING
[外部アプリケーション] LiteSpeed SAPI を以下のように編集
最大接続数 => 200
環境の「PHP_LSAPI_CHILDREN」の値を200に変更
ファイルから変更する場合は以下
vi /usr/local/lsws/conf/httpd_config.conf --- # 上部のグローバルなエリア(user/groupの設定)のあたりに追加 statDir /tmp/ram/ # 真ん中ぐらい・・ indexFiles index.html, index.phpi, index.htm autoIndex 0 # このセクションの以下3行をなければ追加、あれば修正 extprocessor lsphp { maxConns 200 env PHP_LSAPI_CHILDREN=200 env LSAPI_AVOID_FORK=200M } ---
ソースをダウンロードし配置。
mkdir ~/src/ cd ~/src/ # 環境は最新のものを選んで。以下は24.0.4のケース wget https://download.nextcloud.com/server/releases/nextcloud-24.0.4.tar.bz2 tar xf nextcloud-24.0.4.tar.bz2 cp -r ./nextcloud/. /var/www/nextcloud/ mkdir /var/www/nextcloud/{data,.well-known} mkdir /var/www/nextcloud/.well-known/{carddav,caldav,webfinger,nodeinfo} chown -R www-data:www-data /var/www/nextcloud/
NextCloud configファイル設定(追加/修正箇所のみ。最後の2行は.htaccessの更新用)
vi /var/www/nextcloud/config/config.php --- # 修正箇所のみ $CONFIG = array ( 'memcache.local' => '\\OC\\Memcache\\APCu', 'memcache.distributed' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '/var/run/redis/redis-server.sock', 'port' => 0, 'timeout' => 0.0, ), 'memcache.locking' => '\\OC\\Memcache\\Redis', 'overwrite.cli.url' => 'https://nc.you.com/', 'htaccess.RewriteBase' => '/', ---
.htaccessを以下のコマンドで更新
su - www-data lsphp /var/www/nextcloud/occ maintenance:update:htaccess exit
生成された、/var/www/nextcloud/.htaccess ファイルを開き、何か所かある<IfModule mod_rewrite.c>のセクションを下のOpenLiteSpeedのvirtual hostのrewrite => rulesに追加。(下の設定ファイルを参考のほど。最初2行:RewriteRule ^/data/.*$ – [F,L]とRewriteRule ^/config/.*$ – [F,L]の下に追加する。RewriteEngine onやmod_envのセクションが内部に含まれる場合はその箇所はコピーしないこと。またRewriteRuleの先頭が^のものは^/に変更すること。.htaccessに限り、Apacheと記述ルールが若干違う。)
OpenLiteSpeedにvirtual hostを設定
vi /usr/local/lsws/conf/httpd_config.conf --- # お尻のほうに以下を追加 virtualhost nextcloud { vhRoot $SERVER_ROOT/vhosts/$VH_NAME/ configFile $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf allowSymbolLink 1 enableScript 1 restrained 1 } listener nextcloud { address *:443 secure 1 keyFile /etc/letsencrypt/live/nc.you.com/privkey.pem certFile /etc/letsencrypt/live/nc.you.com/fullchain.pem map nextcloud nc.you.com } --- vi /usr/local/lsws/conf/vhosts/nextcloud/vhconf.conf --- docRoot /var/www/nextcloud/ enableGzip 1 errorlog $SERVER_ROOT/logs/nextcloud_error.log { useServer 0 logLevel ERROR rollingSize 10M keepDays 30 } accesslog $SERVER_ROOT/logs/nextcloud_access.log { useServer 0 logFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" rollingSize 10M keepDays 30 } index { useServer 0 } errorpage 403 { url / } errorpage 404 { url / } context / { allowBrowse 1 extraHeaders Strict-Transport-Security "max-age=15552000; includeSubDomains;preload" rewrite { } addDefaultCharset off phpIniOverride { } } rewrite { enable 1 autoLoadHtaccess 0 rules <<<END_rules RewriteRule ^/data/.*$ - [F,L] RewriteRule ^/config/.*$ - [F,L] RewriteCond %{HTTP_USER_AGENT} DavClnt RewriteRule ^$ /remote.php/webdav/ [L,R=302] RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteRule ^/\.well-known/carddav /remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/caldav /remote.php/dav/ [R=301,L] RewriteRule ^/remote/(.*) remote.php [QSA,L] RewriteRule ^/(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L] RewriteRule ^/\.well-known/(?!acme-challenge|pki-validation) /index.php [QSA,L] RewriteRule ^/(?:\.(?!well-known)|autotest|occ|issue|indie|db_|console).* - [R=404,L] RewriteRule ^/core/js/oc.js$ index.php [PT,E=PATH_INFO:$1] RewriteRule ^/core/preview.png$ index.php [PT,E=PATH_INFO:$1] RewriteCond %{REQUEST_FILENAME} !\.(css|js|svg|gif|png|html|ttf|woff2?|ico|jpg|jpeg|map|webm|mp4|mp3|ogg|wav|wasm|tflite)$ RewriteCond %{REQUEST_FILENAME} !/core/ajax/update\.php RewriteCond %{REQUEST_FILENAME} !/core/img/(favicon\.ico|manifest\.json)$ RewriteCond %{REQUEST_FILENAME} !/(cron|public|remote|status)\.php RewriteCond %{REQUEST_FILENAME} !/ocs/v(1|2)\.php RewriteCond %{REQUEST_FILENAME} !/robots\.txt RewriteCond %{REQUEST_FILENAME} !/(ocm-provider|ocs-provider|updater)/ RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.* RewriteCond %{REQUEST_FILENAME} !/richdocumentscode(_arm64)?/proxy.php$ RewriteRule . index.php [PT,E=PATH_INFO:$1] END_rules } --- # check the config files /usr/local/lsws/bin/openlitespeed -t systemctl restart lshttpd
インストール
cd /usr/share/keyrings sudo wget https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg # ファイル作成 vi /etc/apt/sources.list.d/collaboraonline.sources --- Types: deb URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu2204 Suites: ./ Signed-By: /usr/share/keyrings/collaboraonline-release-keyring.gpg --- # インストール apt update apt install coolwsd code-brand -y # 設定 loolconfig set ssl.enable false loolconfig set ssl.termination true loolconfig set storage.wopi.host nc.you.com loolconfig set server_name lool.you.com # adminパスワードを設定 loolconfig set-admin-password # 設定ファイル修正 vi /etc/coolwsd/coolwsd.xml --- # 修正は3か所 # net.protoをipv4のみに変更 # num_prespawn_childrenを10に変更 # allowed_languagesをen_USのみに変更 --- systemctl enable coolwsd systemctl start coolwsd # 動作しているか確認 systemctl status coolwsd
OpenLiteSpeedにvirtual hostを設定 (Reverse Proxyを設定 WebSocketも)
vi /usr/local/lsws/conf/httpd_config.conf --- # お尻のほうに以下を追加 virtualhost loolProxy { vhRoot $SERVER_ROOT/vhosts/$VH_NAME/ configFile $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf allowSymbolLink 1 enableScript 1 restrained 1 } # 以下の箇所は修正(最後の1行を追加) listener nextcloud { address *:443 secure 1 keyFile /etc/letsencrypt/live/nc.you.com/privkey.pem certFile /etc/letsencrypt/live/nc.you.com/fullchain.pem map nextcloud nc.you.com map loolProxy lool.you.com } --- vi /usr/local/lsws/conf/vhosts/loolProxy/vhconf.conf --- docRoot /var/www/80 errorlog $SERVER_ROOT/logs/$VH_NAME_error.log { useServer 0 logLevel ERROR rollingSize 10M keepDays 30 } accesslog $SERVER_ROOT/logs/$VH_NAME_access.log { useServer 0 logFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" rollingSize 10M keepDays 30 } extprocessor lool { type proxy address 127.0.0.1:9980 maxConns 100 pcKeepAliveTimeout 60 initTimeout 60 retryTimeout 0 respBuffer 0 } context / { type proxy handler lool addDefaultCharset off } websocket / { address 127.0.0.1:9980 } ---
これでNextCloudとCollabora onlineが動作するはずである。
https://nc.you.com/にアクセスし、初期設定を行った後、管理者の[オフィス]設定から、[自前のサーバを使用する]をチェックし、「https://lool.you.com/」を設定すればExcelなどのオフィスファイルがブラウザで開けるようになる。
NextCloudの初期設定では、推奨アプリを入れるか聞かれるが、推奨アプリは入れず、後から、Nextcloud officeアプリだけ入れることをお勧めする。要らないアプリを要れないことでNextCloudは軽くなる。
その他、NextCloudが重たくなる設定ポイントがいくつあるが、[共有]設定のクラウド共有関係はすべてチェックを外すと履歴関係は軽くなる。あとはDBが同じサーバにあるなら、configのdbhostを「127.0.0.1:/var/run/mysqld/mysqld.sock」でソケットに直接アクセスさせるなども有効。
セキュリティが気になるなら、ufwとfail2banで不正なログインがあったらアクセス禁止にする対策をする。
記載はしなかったが、
Outlookのメールだけならドラッグ&ドロップすれば、Windowsのフォルダへコピー可能だが、フォルダ毎ドラッグしてもWindowsのファイルシステムへコピーすることはできない。
これを実現するにはマクロでコピーするしかない。こんなこと通常やる必要は全くないのだが、ボケた上役の命令でやる機会があったので一応記録を残しておく。
Outlookでマクロを有効にための事前準備は以下。
ここまでで、左側のパネルでModule1という箇所が選択され、右側のパネルにVBAのプログラムが書けるようになるので、以下のプログラムをコピペする。
Dim objFSO As Scripting.FileSystemObject Sub ExportOutlookFolders() Dim objFolder As Outlook.Folder Dim strFolderPath As String strFolderPath = SelectAnExportFolder() If strFolderPath = "" Then MsgBox "出力するフォルダを選択してください。", vbInformation + vbOKOnly, "フォルダ選択" Else Set objFSO = New Scripting.FileSystemObject Set objFolder = Outlook.Application.ActiveExplorer.CurrentFolder ExportAnOutlookFolder objFolder, strFolderPath End If Set objFolder = Nothing Set objFSO = Nothing End Sub Sub ExportAnOutlookFolder(ByVal OutlookFolder As Outlook.Folder, strFolderPath As String) Dim objSubFld As Outlook.Folder Dim objItem As Object Dim strPath As String Dim strFilePath As String Dim strSubject As String Dim strFilename As String Dim strRecievedTime As String Dim nCount As Long On Error Resume Next strPath = strFolderPath & "\" & ReplaceInvalidCharacters(OutlookFolder.Name) If Dir(strPath, 16) = Empty Then MkDir strPath nCount = 0 For Each objItem In OutlookFolder.Items strSubject = ReplaceInvalidCharacters(objItem.Subject) If strSubject = "" Then strSubject = "notitle" End If strRecievedTime = Format(objItem.ReceivedTime, "yyyymmddhhnnss") strFilename = strRecievedTime & "_" & strSubject & ".msg" strFilePath = strPath & "\" & strFilename If objFSO.FileExists(strFilePath) Then nCount = nCount + 1 strFilename = strRecievedTime & "_" & strSubject & " (" & nCount & ").msg" strFilePath = strPath & "\" & strFilename End If objItem.SaveAs strFilePath, olMSG DoEvents Next For Each objSubFld In OutlookFolder.Folders ExportAnOutlookFolder objSubFld, strPath Next Set OutlookFolder = Nothing Set objItem = Nothing End Sub Function SelectAnExportFolder() As String Dim objSelFolder As Object Dim objShell As Object Set objShell = CreateObject("Shell.Application") Set objSelFolder = objShell.BrowseForFolder(0, "Select a folder", 0, 0) If Not TypeName(objSelFolder) = "Nothing" Then SelectAnExportFolder = objSelFolder.self.Path End If Set objSelFolder = Nothing Set objShell = Nothing End Function Function ReplaceInvalidCharacters(Str As String) As String Dim objRegEx As Object Set objRegEx = CreateObject("vbscript.regexp") objRegEx.Global = True objRegEx.IgnoreCase = False objRegEx.Pattern = "\||\/|\<|\>|""|:|\*|\\|\?" ReplaceInvalidCharacters = objRegEx.Replace(Str, "_") Set objRegEx = Nothing End Function
ここまでが終わったら、
プログラムとしては、「今Outlookで選択されているフォルダを、指定のフォルダに出力する」という処理を行っている。出力されるファイル名は「メールの受け取り時刻+件名」になる。
NextCloudのインストール時にcollabora onlineのインストールも行ったのだが、デフォルトの設定では遅く、設定を修正しパフォーマンスを上げた。
以下その記録。
collabora online自体は、proxyの背後で、フロントから127.0.0.1:9980に接続。SSLは以下の設定でオフ。(proxyがSSL処理)
loolconfig set ssl.enable false loolconfig set ssl.termination true loolconfig set storage.wopi.host your.nextcloud.domain
公式のガイドもproxy前提のようなので、proxyで設定している。
要点としては、設定XMLの以下3箇所を修正する。
以下のXMLファイルを直接編集する。
vi /etc/coolwsd/coolwsd.xml
XMLファイルの修正点は以下。(修正箇所のみ抜粋)
<!-- 1箇所目 元は以下 --> <!-- allowed_languages default="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru" desc="List of supported languages of Writing Aids (spell checker, grammar checker, thesaurus, hyphenation) on this instance. Allowing too many has negative effect on startup performance.">de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</allowed_languages --> <allowed_languages default="en_US" desc="List of supported languages of Writing Aids (spell checker, grammar checker, thesaurus, hyphenation) on this instance. Allowing too many has negative effect on startup performance.">en_US</allowed_languages> <!-- 2箇所目 元は以下 --> <!--proto default="all" desc="Protocol to use IPv4, IPv6 or all for both" type="string">all</proto--> <proto default="all" desc="Protocol to use IPv4, IPv6 or all for both" type="string">IPv4</proto> <!-- 3箇所目 元は以下 10人ぐらいしか同時接続しないとみて、1から10に変更--> <!-- num_prespawn_children default="1" desc="Number of child processes to keep started in advance and waiting for new clients." type="uint">1</num_prespawn_children--> <num_prespawn_children default="1" desc="Number of child processes to keep started in advance and waiting for new clients." type="uint">10</num_prespawn_children>