作者: paul

Python相關學習資源(待閱讀)- Python , Nose , Testing..

Python相關學習資源(待閱讀)- Python , Nose , Testing..

http://webcache.googleusercontent.com/search?q=cache:DUqkgFQ2irkJ:www.cnblogs.com/liaofeifight/p/5148717.html+&cd=1&hl=zh-TW&ct=clnk&gl=tw

https://segmentfault.com/a/1190000002965620

http://www.chinesepython.org/pythonfoundry/marrpydoc/python1.htm

https://chrisarndt.de/talks/rupy/2008/output/slides.html : https://read01.com/JooyP.html

http://webcache.googleusercontent.com/search?q=cache:Mbml-raWdOEJ:www.wklken.me/posts/2015/08/29/python-source-memory-1.html+&cd=11&hl=zh-TW&ct=clnk&gl=tw

nose introduction

http://www.cnblogs.com/soaringEveryday/p/5044007.html

Nosql之Cassandra 的Docker 除錯歷程,schema重置大法

Nosql之Cassandra 的Docker 除錯歷程,schema重置大法

早上因為自己的vm容量不太夠,所以開始關機調配了一下相關設定,重啟vm後,照慣例是要restart相關docker服務,結果就馬上遇到下面的狀況
Cassandra掛掉了…,restart數次都這樣,跑了二分鐘後,就exit
sudo docker ps -a
一開始我只知道看log的指令,先看看是遇到什麼鬼問題吧…
sudo docker logs {{containner id}}
如下圖log顯示,commitlog異常,讀取失敗,導致cassandra爆掉…,但log上寫的全部都是containner內部的相對位置,我怎麼追查呀?重開一個containner是很簡單…但資料因為沒有獨立出來,所以有一些設計的schema若重啟一個是不是會不見呀?想到這邊,還是覺得這是一種逃避,決定下海來找原因
以往ap跑不起來,我比較知道的查詢的方式,是必須shell進去 container,然後在runtime環境查問題。但containner根本跑不起來…怎麼辦?
然後當初是透過dokcerfile(吧?)跑指令,所以無從知道這個containner有沒有綁定volumn,若沒有的話,我該怎麼去追查cassandra的問題呢?
查了一小多小時,有一個command露出了一線曙光
我们可以使用docker inspect命令找到Volume在主机上的存储位置:
$ sudo docker inspect -f {{.Volumes}} container-test
以cassandra 異常,為例:我們可以透過docker得知預設volumn的位置,這些位置其實可以在起始指令的時候進行綁定
部分指令好位置的我覺得沒問題,dockerfile也應該查的到,但沒有dockerfile可以 參考的,我們就可以透過這個指定看到containner現況的所有相關資訊
 “Mounts”: [
            {
                “Name”: “31a88f59c57b5a75b98f9c4e6a539e4140cb226760fc540b15b930d96010a84c”,
                “Source”: “/var/lib/docker/volumes/31a88f59c57b5a75b98f9c4e6a539e4140cb226760fc540b15b930d96010a84c/_data“,
                “Destination”: “/var/lib/cassandra”,
                “Driver”: “local”,
                “Mode”: “”,
                “RW”: true,
                “Propagation”: “”
            }
檢查其下的volumns路徑,發現data/我的keyspace下怎麼這麼多這個file,原來是我先前透過工具去clone TABLE的時候,其實都會記錄下來…封存在這邊,這邊我先不管了,先把那些我rename過的目錄都刪掉…
docker restart 後以後,還是死掉…,到這邊,我想到…log中寫的是commitlog異常,我看到cassandra的volumn根目錄下有一個commitlog的目錄,我直接把裡面的檔案mv到/backup,再重啟一次…終於正常了,schema回來了
但…資料不見了?  shit!!所以這些commitlog才是跟資料有關,data則是只有schema??神奇啊…至目前為止,還好我是測試資料…schema比較重要,至於正式資料的環境我覺得根本不能這樣搞,但為何commitlog會讓cassandra掛掉,無法啟動,我還是不知道,至少這次經驗,成功重啟了,我猜測原因可能是我對cassandra建立了很多blob field,根本原因,等我有空再來研究看看,這些log裡面到是在賣什麼藥,幸好我有把commitlog備份出來…
先繼續其他nosql的測試了
透過Docker安裝mysql + phpmyadmin + nginx + php7 + wordpress

透過Docker安裝mysql + phpmyadmin + nginx + php7 + wordpress

最近開始熟悉使用Docker建置環境,索性希望透過一個平台可以記錄自己曾經待過的坑。原本是存在Evernote,但我希望一半程度可以透過公開平台來展現自己的經歷,這是一部分私心,但記錄下來總是對於自己曾經參與過的一個重新組織與整理的機會。

話不多說…立刻來指令安裝,這次的虛擬環境:從Azure上租了一個新台幣$800元左右/月的小小vm,只有單核,0.75G,但只用ssh,沒有什麼影像處理、大量運算的需求,先硬著頭皮用下去了吧,至於Linux Ubuntu Server版本,好像是16版的,一開始若沒安裝Docker的,可以透過以下指令安裝Linux上的Docker

sudo apt-get install docker.io

這次安裝過程中需要3個Containner,一個放db,二個放web server

安裝Mariadb

MariaDB是Mysql的Opensoure分支,最大的好處就是免費授權。不過mysql是否會遇到什麼授權問題其實我也不是太清楚,日後有機會再來研究。
有許多官網公司出的Docker/Images其實都很方便,wiki都建的好好的,單一無腦啟用或是微調設定上,資訊已經很足夠用了。

sudo docker pull mariadb:latest

sudo docker run --name mariadb \
-p 3306:3306 \
-v /mnt/mariadb/data:/var/lib/mysql \
-v /mnt/mariadb/config:/etc/mysql/conf.d \
 -e MYSQL_ROOT_PASSWORD=123456 \
  -d mariadb

-p代表port的對外開放。通常用:隔開,前者是使用端的port,後者是容器內port,因此假如你起了一個80的Docker Containner,但你希望綁到你對外主機domain 8080 port的話,就設定成-p 8080:80, 也可以給一樣的

-v代表volumns,代表要從外部掛載資料卷,外部資料卷會直接同步containner的內容。因此當你指定的位置內檔案有異動,containner會即時讀取到最新的檔案。

-e代表環境變數,通常是dockerfile內定義,預先初始化可以帶入的參數。這邊的例子是預設定root的密碼

這邊我就不註記所有的參數用途了,有興趣請到docker從入門到實踐

安裝好DataBase,接著來順便安裝一下PhpMyadmin,這個是我從大學時期就很愛用的Mysql管理介面,最棒的是他有web版本,方便至上

sudo docker pull phpmyadmin/phpmyadmin:latest
sudo docker run -d -P –name mariadbMyAdmin –link mariadb:db phpmyadmin/phpmyadmin

-d代表在background執行

–link代表containner之間建立連線,透過:隔開,前者為來源containner名稱,後者為別名,其原理其實為在此Containner的環境的/etc/hosts下建立ip別名,透過這樣,才能讓設定檔保持一致,不用因為每次取得新的虛擬ip後,程式相關的檔案又要再度調整。

這樣設定以後,就可以直接連到該畫面了,預設的port是32768

http://xxx.xxx.xxx.xxx:32768

可以使用一開始對mariadb設定的ip進行

下載Wordpress

wget https://tw.wordpress.org/wordpress-4.7.4-zh_TW.tar.gz

複製到指定的Application目錄

tar -xzpvf wordpress-4.7.4-zh_TW.tar.gz

將該解壓縮後的檔案目錄,直接複製到一個Application的目錄,這個目錄下再切一個Wordpress目錄放置所有解壓的內容。

wordpress設定檔位置:

wordpress/we-config.php

// ** MySQL 設定 – 您可以從主機服務提供商獲取相關資訊。 ** //
/** WordPress 的資料庫名稱,請更改 “database_name_here” */
define(‘DB_NAME’, ‘wordpress’);

/** MySQL 資料庫使用者名稱,請更改 “username_here” */
define(‘DB_USER’, ‘wordpressuser’);

/** MySQL 資料庫密碼,請更改 “password_here” */
define(‘DB_PASSWORD’, ‘Abc123’);

/** MySQL 主機位址 */
define(‘DB_HOST’, ‘mariadb’);

/** 建立資料表時預設的文字編碼 */
define(‘DB_CHARSET’, ‘utf8’);

/** 資料庫對照型態。如果不確定請勿更改。 */
define(‘DB_COLLATE’, ‘utf8_unicode_ci’);

我這邊我先將db的路徑先直接改成我等下預計要建立link的名稱:mariadb,然後帳密先設定一下就好,另外我有設一個,認證金鑰,相關取得方式config都有說明,一併複製到config檔裡面就好

安裝nginx+php+php_mysql模組

特別說一下,這次使用的docker組合是已經有大神Docker連結,將php7+NGINX打包好,我將剛剛下載解壓的wordpress放到application目錄中,然後一樣透過-v配置到容器中,同時指定link到mariadb。(我自己試著裝php7,可以正常使用php,偏偏少了mysql的extension,卡了半天,先投降,日後再努力orz)

sudo docker run –name nginx -p 80:80 -v /home/paul/nginx-php/application:/data/www –link mariadb:mariadb -d skiychan/nginx-php7

建立起來以後,直接連到ip的80 port,記得vm的firewall要開,不然怎樣都連不進去

苦手坑談

曾經想自已分別安裝nginx與php-fpm模組。會這樣想純粹是因為好像有了Docker任何安裝問題都解決了,想裝什麼就裝什麼…所以我透過Docker-Compose.yml玩了一個上午,透過配置的方式,驅動Docker建置,但當環境愈來愈複雜時,包含DB跟App的分離,Php模組需要做調整設定,不同Containner之間要Link,還分為外部link跟內部link,事實上我苦腦於Compose的配置如何跟已存在的containner作link,這段也還沒研究出來,看來還有很長的路要走,但至少現在有一個開始,所以才有辦法發這篇文章呀XD