[Linux] Let’s Encrypt 換成 ZeroSSL

export ACCOUNT_EMAIL="OOO@XXX.XXX"
/usr/local/acme.sh/acme.sh --set-default-ca --server zerossl

如果站點沒有順利更換過去,乾脆vhost重建,再重選需要 SSL

  1. sudo -i
  2. lnmp vhost del XXX.xxx.com.tw
  3. lnmp vhost add XXX.xxx.com.tw
  4. 添加301轉址進去 conf
server {
	listen	80;
	server_name yourname.com;
	return 301 https://$server_name$request_uri;
補充:
# 不好的方法:
rewrite ^/(.*)$ http://example.com/$1 permanent;
# 好的方法:
rewrite ^ http://example.com$request_uri? permanent;
# 更好的方法:
return 301 http://example.com$request_uri;

[Python] 將Python打包成exe執行檔

介紹:

寫完Python Code後,為了在任何一台windows電腦可以順利執行,可以安裝用PyInstaller 這個Package來達成這項任務,這樣就不會每一台電腦都安裝Python相關程式和套件了!

PyInstaller 可以將 Python 轉成 exe 執行檔,好在windows執行。

套件說明:https://pyinstaller.readthedocs.io/en/stable/

以下是安裝與使用過程:

  1. 安裝好 miniconda後,打開命令視窗,安裝套件
pip install pyinstaller

2. 找到要轉檔的資料夾位置,然後下指令

pyinstaller -F XXX.py

3. 就可以完成打包,會產生幾個資料夾,其中dist 資料夾內會有轉檔後的 exe 檔。

[Python] 設定密碼來取代token

Starting at notebook version 5.0, you can enter and store a password for your notebook server with a single command. jupyter notebook password will prompt you for your password and record the hashed password in your jupyter_notebook_config.json.

  1. 打開 jupyterlab,新建一個Notebook,然後開一個cell輸入:
from notebook.auth import passwd
passwd()
  1. 輸入兩次密碼後,重開 docker,之後就可以使用密碼取代token。
    記得 docker restart ,容器重開。

常用指令補充:

1. Docker,重開機後,當下次想進去容器使用命令列時:

$ docker exec -it miniconda /bin/bash
可以開第二個終端機,進去進行pip安裝套件等工作
-i:互動模式
-t:終端機
-d:在背景執行

2. Docker,進去容器裡面設定conda相關套件:

開始設定環境(假如是linux的話,可以輸入以下指令即可:)

# 啟動環境
$ conda activate 999

# 關閉環境
$ conda deactivate 

3. Docker,get the notebook token from the logs:

docker logs --tail 3 notebook

[Linux] UniFi Controller and Docker

簡單做個筆記:

以下都是使用一般user權限,不用root。畢竟一開始也有將某個user開通docker使用權限了。(參考上篇)

$ cd /home
$ mkdir -p unifi/data
$ mkdir -p unifi/log

# 測試指令:
$ docker run --rm --init -p 8080:8080 -p 8443:8443 -p 3478:3478/udp -e TZ='Asia/Taipei' -v /home/unifi:/unifi --name unifi jacobalberty/unifi:latest
 
     --rm:其用途就是在我們執行完指令後,可以不用再下 docker rm 的指令去刪除容器,直接在執行完指令後, Docker可以自動幫我們刪除容器。
     latest:本來要裝穩定版,但原本就有運作的UniFi Controller,他已經升級到最新版本,所以這邊也跟著抓最新版本
 

# 實際上線指令:
$ docker run -d \
     --restart=unless-stopped \
     --net=host \
     --name=unifi \
     -e TZ='Asia/Taipei' \
     -e RUNAS_UID0=false \
     -v /home/unifi:/unifi \
     jacobalberty/unifi:latest

     --net=host:是為了允許L2發現。如果不需要L2發現,只需映射Port即可。
     -e RUNAS_UID0 改成 false,讓 Controller 不要用 root 身份運作。


# 未來我該如何升級呢?
 $ docker pull jacobalberty/unifi:stable
 $ docker stop unifi
 $ docker rename unifi unifi.save

然後再做一次run指令,跟上面相同
 $  docker run -d \
     --restart=unless-stopped \
     --net=host \
     --name=unifi \
     -e TZ='Asia/Taipei' \
     -e RUNAS_UID0=false \
     -v /home/unifi:/unifi \
     jacobalberty/unifi:latest