vim 的virsual mode , 如何滑鼠按右鍵就複製
其實我也很不懂vim的v-mode , virsual mode , 反正屎用docker時候, 好多container 需要另外安裝vim ,
安裝結束後, 我就卡關了 XD ,
因為我習慣按滑鼠右鍵, 就把複製的文字貼上去 , 但是常常出現(insert) virsual 錯誤無法貼上
網上找了好久, 找到一種方式, 輸入 set mouse-=a , 就可以解決了
其實我也很不懂vim的v-mode , virsual mode , 反正屎用docker時候, 好多container 需要另外安裝vim ,
安裝結束後, 我就卡關了 XD ,
因為我習慣按滑鼠右鍵, 就把複製的文字貼上去 , 但是常常出現(insert) virsual 錯誤無法貼上
網上找了好久, 找到一種方式, 輸入 set mouse-=a , 就可以解決了
前陣子弄了docker image postfixad , 可以讓我簡單架設可與網域主控站整合的郵件服務器.
既然有了郵件服務器, 通常還要提供roundcube這類的webmail ,
但是我不想使用webmail的最大問題: 就是帳號跟郵件不一致
登入webmail的帳號與email不相同時, 就很麻煩, 例如:
登入的帳號是 001 , 可是emai卻變成 001@kafeiou.pw , 而不是網域在mail屬性建立的william@kafeiou.pw
這困擾我很久, 甚至想要自己寫一個roundcube的plugin , 想要登入的時候, 改寫email,
後來發現roundcube有個plugin很好用, 就是 new_user_dialog , 啟用後,第一次登入,會強迫設定名字與email, 雖然帳號與email不相同, 就讓麻瓜自行更改吧, 哈
以下列出docker 安裝roundcube方式
docker run --restart always --name roundcubemail -e ROUNDCUBEMAIL_DEFAULT_HOST=tls://<郵件主機> -e ROUNDCUBEMAIL_SMTP_SERVER=tls://<郵件主機> -p 8080:80 -d roundcube/roundcubemail
以前安裝wordpress(包括目前這個網站)都只用陽春功能, 沒遇到什麼問題,也可以一直更新到最新版.
直到最近想要幫公司裝一個簡單的內部訊息公告網站, 需要安裝兩個插件, 但其中一個插件需要額外安裝php 7.x extension ,
安裝extension這倒是沒什麼問題, 問題是官方的wordpress居然安裝失敗, 要用很多方法才能解決, 實在有夠麻煩.
這個插件就是用來新訊息公告的時候, 可以自動發信給相關的人 , 請參考 mailpoet , 這個插件乾脆就自己弄一個wordpress, 直接將相關的插件都裝起來
雖然mailpoet對於安裝沒有過多的著墨, 其實就跟自己手動安裝一樣簡單, 交由wordrepss wizard就可以了
貼上自己簡單的安裝方式
1. 安裝mariadb container(name:mariadb)
安裝完畢記得新增一個database名稱叫做wordpress
create database wordperss character set utf8mb4 collate utf8mb4_unicode_ci
2. 安裝mailpoet/wordpress
docker volume create wp-content
docker run --name mywordpress -v wp-content:/var/www/html/wp-content -p 8080:80 \\
-d --restart always mailpoet/wordpress:wp-5.4_php7.4_20200617.1
3. 停用mywordpress , mariadb
docker stop mywordperss
4. 讓mywordpress與mariadb成為羈絆
docker network connect myNetwork mariadb
docker network connect myNetwork mywordpress
5. 啟用mywordpress, mariadb , 進入網頁的wizard , 就可以輸入mariadb的名字進行安裝了
docker start mariadb
docker start mywordpress
安裝非官方的wordpress(mailpoet/wordpress) , 發現指定mysql的ip失敗(一樣是docker) , 原來是忘了將mysql與wordpress這兩個container 綁定相同網路, 這樣兩個container可以互相ping對方的名字, 也可以互相認識了
docker network connect myNetwork <container name>
myNetwork 可修改
ftp server很老了, 這個系統傳統上使用tcp port 20(資料傳輸),21(命令) , 稱為active mode(主動模式), 後來進化多了“被動模式”就不再限於20,21, 而且加上tls加密功能就更穩固了.
可是我要談的不是這個, 要談的是有些用了2,30年的工具機,例如cnc加工機, 內建ftp client功能, 而且還是停留在傳統的主動模式,
但隨著服務器作業系統的升級, 有可能讓cnc這種工具機無法相容使用, 因此必須要考慮新作業系統裡面, 加裝傳統的ftp系統,
解法很簡單就是裝個docker ftp server,
安裝如下:
1. 建立使用者空間與使用者帳密資料庫 docker volume create --name ftp-user-db docker volume create --name ftp-user-file 2. 啟動ftp server docker run -d --restart always --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" -v ftp-user-db:/etc/pure-ftpd/passwd -v ftp-user-file:/home/ftpusers stilliard/pure-ftpd 3. 新增使用者 docker exec -it ftpd_server /bin/bash pure-pw useradd <帳號> -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/<帳號> 4. 防火牆 firewall-cmd --add-port=20/tcp --permanent firewall-cmd --add-port=21/tcp --permanent firewall-cmd --reload ps. docker 網站 https://hub.docker.com/r/stilliard/pure-ftpd
jitsi 大名鼎鼎, 我們公司用了10年的openfire內部即時通訊(xmpp server), 用戶端就是用jitsi(我都簡稱神燈巨人).
多年前發現 jitsi 有meet套件可以套用在openfire裡面, 使用結果好爛幾乎不能用, 用ubuntu安裝,也一直很不穩定, 改版很頻繁.
隨著新冠病毒出現, 節神 丟出開源視訊這個議題,我才想起應該是時候,要再測試看看了, 試用結果還不錯,可以讓公司的人使用.
**經過多次測試, 建議使用 “虛擬機加單個對外ip網卡” (非docker,無nat) 才能真正穩定 – 2020/05/06
https://github.com/jitsi/docker-jitsi-meet # 先想好要用哪個主機名稱, 先把letsencrypt搞定 certbot-auto certonly --standalone --preferred-challenges http -d <full host name> 1. # root # 下載最新的版本, 複製預設的設定檔案 git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet cp env.example .env 1.1 安全性增加了 ./gen-passwords.sh 2.修改 .env , 視自己docker狀況調整以下參數 CONFIG=~/.jitsi-meet-cfg # Exposed HTTP port HTTP_PORT=8000 # Exposed HTTPS port HTTPS_PORT=8443 # System time zone # 這我調整taipei TZ=Asia/Taipei # Public URL for the web service # 這我是沒調整,因為我是用httpd reverse proxy #PUBLIC_URL=https://<full host name> ENABLE_LETSENCRYPT=1 # 告訴 jitsi 說我的letsencrypt是什麼 LETSENCRYPT_DOMAIN=<full host name> 3.依照.env的 CONFIG 參數, 建立相關目錄 mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb} 4.視情況修改 docker-compose.yml volumes: - ${CONFIG}/web:/config - /etc/letsencrypt:/etc/letsencrypt - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts 5.上線兼啟動(這部份讓人產生錯覺,很快網頁可以連線,但實際上要5分鐘才正常,畢竟用了4個container) docker-compose up -d 6.修改解析度(這我沒怎麼測試,預設是720,為了頻寬著想,所以改480) # ~/.jitsi-meet-cfg 這個目錄依剛開始安裝的.env設定而不同 cd ~/.jitsi-meet-cfg/web vi config.js ## constraints: { video: { aspectRatio: 16 / 9, height: { ideal: 480, max: 480, min: 240 } } },
Optional
1. 啟用認證 # 修改 .env 啟用登入認證(我使用最基本的內部認證, ldap怎麼都不成功...XD) # Enable authentication ENABLE_AUTH=1 # Enable guest access ENABLE_GUESTS=0 # Select authentication type: internal, jwt or ldap AUTH_TYPE=internal 1.1 啟用內部認證後,如何新增使用者 # 進入container docker exec -it docker-jitsi-meet_prosody_1 bash # 建立使用者,後面那串meet.jitsi不需要修改哦 prosodyctl --config /config/prosody.cfg.lua register <使用者名稱> meet.jitsi
2. 增加google日曆功能
1 先想好使用哪個google 帳號讓大家能自由存取,可個人帳號也可使用g suite帳號 建議該帳號的calendar只用來預約會議室使用 2 登入進入 https://console.cloud.google.com/apis/dashboard 新增project,進入Credentials新增 OAuth 2.0 client IDs , 新增後會給你一個client id,記下來 xxxx.apps.googleusercontent.com 3 進入 AAuth consent screen , 設定該 auth 的使用範圍 4 修改 vi ~/.jitsi-meet-cfg/web/config.js 啟用google calendar , 加上先前的client id, enableCalendarIntegration: true, googleApiApplicationClientID:”xxx.apps.googleusercontent.com”, 5.重啟 cd ~/docker-jitsi-meet/ ; docker-compose restart 6 登入jitsi meet 進行相關授權, 若出現未經允許存取calendar,就不管了,允許吧. https://github.com/jitsi/jitsi-meet/blob/master/doc/integrations.md
iredmail 是一個很強大的軟件,看文件開發者應該是大陸人,很牛!
我12年前就開始用這個軟件, 而且現在還在用!
雖說免費版不支持微軟的AD, 但很多小公司本來就沒有這些配置, 所以沒差.
目前這系統現在已經很穩定很成熟, 非常很適合小公司使用, 大推薦,
而且最近我才發現一位應該是俄羅斯人有持續提供docker安裝方式. https://hub.docker.com/r/lejmr/iredmail , 又更方便了.
以下是我安裝的心得, 有空會持續更新
1. 用volume的方式與docker建立對應, 方便以後備份升級 2. 與官網建議的不同,我移除灰名單模組,這東西又愛又恨,愛的是擋廣告很猛,恨的是要對方重發信,常常被使用者罵收信很慢. 3. 安裝後, 輸入 https://ip:8443/iredadmin 就可以用postmaster@<網域> 登入, 接下來就可以新增網域,或是使用者. 4. 輸入https://ip:8443/mail , 或是 https://ip:8443/sogo 使用者登入@<網域> 就可以收發信了 5. 使用管理者也可以收信, 最初系統自行發送的三封信很重要, 例如要dns設定DKIM之類的 6. 我有將/etc/letsencrypt 對應到iRedMal,打算用來取代自簽的證書
docker volume create iredmail_mysql docker volume create iredmail_vmail docker volume create iredmail_clamav docker volume create iredmail_log docker volume create iredmail_postfix_conf docker volume create iredmail_amavisd_conf docker run -p 8443:443 -p 110:110 -p 25:25 -p 587:587 -p 143:143 -p 993:993 -p 995:995 \ -h <主機名稱(含網域),hostname.domain> \ -d --restart always \ -e "MYSQL_ROOT_PASSWORD=password" \ -e "SOGO_WORKERS=1" \ -e "TZ=Asia/Taipei" \ -e "POSTMASTER_PASSWORD={PLAIN}password" \ -e "IREDAPD_PLUGINS=['reject_null_sender', 'reject_sender_login_mismatch', 'throttle', 'amavisd_wblist', 'sql_alias_access_policy']" \ -v iredmail_mysql:/var/lib/mysql \ -v iredmail_vmail:/var/vmail \ -v iredmail_clamav:/var/lib/clamav \ -v iredmail_log:/var/log \ -v iredmail_postfix_conf:/etc/postfix \ -v iredmail_amavisd_conf:/etc/amavisd \ -v /etc/letsencrypt:/etc/letsencrypt \ -v /etc/letsencrypt/live/<主機網域>/privkey.pem:/etc/ssl/private/iRedMail.key \ -v /etc/letsencrypt/live/<主機網域>/fullchain.pem:/etc/pki/tls/certs/iRedMail.crt \ --name=iredmail lejmr/iredmail:mysql-latest
經過試用一個月, 有一個目前無法解決的問題,就是重開docker時,dovecot或mysql會殘留舊的pid,造成dovecot與mysql啟動失敗的狀況, 此時只能手動刪除 /var/run/dovecot/master.pd or /var/lib/mysql/mysql.sock 等檔案, 然後再切換目錄到/services 找出重啟的shell scripts ,才能解決問題
好消息是官方也著手進行iredmail docker官方版 https://hub.docker.com/r/iredmail/mariadb 目前還是beta狀態,不適合正式上戰場,但我很期待 - 2020/05/06
第一次安裝CentOS 8 , 也第一次在上面安裝docker-ce版本,因此記錄下來版本不一致衝突的解決方式
簡單的敘述就是 CentOS 8 目前的containerd-io 版本低於 1.2.2-3 , 無法安裝docker-ce 19版本 , 處理方式就是先手動安裝大於1.2.2-3的containerd-io
dnf install -y epel-release dnf update dnf install -y yum-utils device-mapper-persistent-data lvm2 dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo ## containerd.io-1.2.2-3以上 wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm rpm -Uvh containerd.io-1.2.6-3.3.el7.x86_64.rpm dnf -y install docker-ce-cli docker-ce --nobest systemctl enable docker systemctl start docker ################################################ ## 安裝完畢,請更改預設存放路徑 ## 編輯 /lib/systemd/system/docker.service ## 找出 ## ExecStart=/usr/bin/docker ## 改成 ## ExecStart=/usr/bin/docker --data-root <你的新路徑> ################################################
新版安裝方式請到這裡查看
——————-以下是舊版安裝方式——————-
建立volume
docker volume create nextcloud-www docker volume create nextcloud-app docker volume create nextcloud-config docker volume create nextcloud-data docker volume create nextcloud-theme
確認 mariadb 資料庫伺服器是否準備好
執行docker指令
docker run -d -p <對應的port>:80 -v nextcloud-www:/var/www/html -v nextcloud-app:/var/www/html/custom_apps -v nextcloud-config:/var/www/html/config -v nextcloud-data:/var/www/html/data -v nextcloud-theme:/var/www/html/themes/mycustom --link <docker資料庫名稱>:mysql -e MYSQL_DATABASE=nextcloud -e MYSQL_USER=root -e MYSQL_PASSWORD=<密碼> -e MYSQL_HOST=mysql --restart=always --name nextcloud nextcloud
若有apache或是nginx作為反向proxy, 將https帶到nextcloud, 需設定trust_domain(網站會提醒)
httpd設定
# for CalDav RewriteEngine On RemoteIPHeader X-Forwarded-For RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
# form redirect <VirtualHost *:80> ServerName <server name> Redirect permanent / https://<server name>/ </VirtualHost> <VirtualHost *:443> # form security <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> </VirtualHost>
nextcloud config設定
若使用httpd proxy 的方式需要加入以下設定, 以免登入轉圈圈無法進入頁面, 修改 config.php 檔案
'overwritehost' => '<主機名稱>', 'overwriteprotocol' => 'https',
執行command
docker exec --user www-data <CONTAINER_ID> php occ 例入遇到上傳檔案失敗, 或是一些檔案錯誤可執行 docker exec --user www-data <container id> php occ files:scan --all
** 2022/11/29
因多人使用限制, 想從onlyoffice轉回來Collabora Online , 但沒想到這邊也限制人數, 無論如何以下的設定已經過時,先不要用
collabora online 加上 nextcloud 或 owncloud 可以實現線上協同編輯的功能, 很猛!
docker run -t -d -p 9980:9980 -e "domain=<your-dot-escaped-domain>" -e "username=admin" -e "password=your_password" --restart always --name collabora collabora/code EX: docker run -t -d -p 9980:9980 -e "domain=next\\.test\\.com" -e "username=admin" -e "password=your_password" --restart always --name collabora collabora/code
以上安裝collabora online 指令中, domain=nextcloud\\.fromtw\\.com代表允許next.fromtw.com這個網址使用協同編輯,
若需要多個網址,請加上 |
記得搭配 letsencrypt 讓collabora 擁有 https 加密功能 , 安裝完畢,
ps. 網址https://collabora.test.com/loleaflet/dist/admin/admin.html , 可查詢是否成功.(需輸入以上設定帳密)
**nextcloud,
找出 collabora online app 並安裝 , 並設定collabora online的https網址, 這樣就能實現文件線上協同編輯的功能.
**owncloud,
需要到 https://marketplace.owncloud.com/apps/richdocuments 這個地方下載, 然後複製到owncloud app區解開才能安裝, 安裝後找出設定,把collabor的網址輸入進去就可以使用了
ps. 若collabora online 為內部service, 需要透過對外的httpd proxy接應, 因此httpd proxy的設定如下:
<VirtualHost *:443> ServerName collabora.fromtw.com:443 Options -Indexes # SSL configuration, you may want to take the easy route instead and use Lets Encrypt! SSLEngine on SSLCertificateFile /etc/letsencrypt/live/collabora.fromtw.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/collabora.fromtw.com/privkey.pem SSLCACertificateFile /etc/letsencrypt/live/collabora.fromtw.com/fullchain.pem SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS SSLHonorCipherOrder on # Encoded slashes need to be allowed AllowEncodedSlashes NoDecode # Container uses a unique non-signed certificate SSLProxyEngine On SSLProxyVerify None SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off # keep the host ProxyPreserveHost On # static html, js, images, etc. served from loolwsd # loleaflet is the client part of Collabora Online ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0 ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet # WOPI discovery URL ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery # Capabilities ProxyPass /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0 ProxyPassReverse /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities # Main websocket ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon # Admin Console websocket ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws # Download as, Fullscreen presentation and Image upload operations ProxyPass /lool https://127.0.0.1:9980/lool ProxyPassReverse /lool https://127.0.0.1:9980/lool ProxyPass / https://localhost:9980/ ProxyPassReverse / https://localhost:9980/ </VirtualHost>