iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 24
1

穩固了前端技能後,就可以開始眼觀前端,意在後端。

慢慢的蠶食鯨吞與前端connect的各部門經驗後,你會有很多機會看到後端的程式碼,並且修改它。尤其在MVC架構下,你一定有機會看到後端的程式碼。


這時候千萬不能太急,我們先從最簡單的CRUD開始。
CRUD
CRUD就是對資料做Create(創建), Read(讀取), Update(更新), 和Delete(刪除)。

使用python就能簡單練習。使用sqlite當資料庫。

import sqlite3

def db_insert():
    db=sqlite3.connect('test.db')
    print("Opened database successfully")
    try:
        c=db.cursor()
        c.execute('''CREATE TABLE STUDENT
            (ID INTEGER PRIMARY KEY  AUTOINCREMENT,
            NAME           TEXT  NOT NULL,
            AGE            INT   NOT NULL);''')
        print("Table created successfully")
        c.execute('''INSERT INTO STUDENT (NAME, AGE) values('Ivan','30');''')
        db.commit()
        print("one record added successfully")
    except:
        print("error in operation")
        db.rollback()
    db.close()


if __name__ == '__main__':
    db_insert()

以上就是簡單的創建(Create)資料表與插入一筆新的資料。資料庫操作不明白就找一本大學用書吧。


再來就是自己搞一台Server,我們課程是放到免費雲端空間Heroku,但其實任何有電腦的人都可以自己架站。
平常把local的node或python flask程式跑起來,它就是一個server,只是IP位置是在內網(192.168.x.x),除非你自己家有對外固定IP,用Reverse Proxy導到內部IP;如果是動態IP,則可以找免費的名稱伺服器做DDNS,比如No-IP這個免費軟體,動態轉到固定的DNS

然後再設定Server的Firewall Rules與Privileges。

<Directory />
    AllowOverride All
    Options None
    Require all granted
</Directory>

CORS跨域設定

<Directory />
    AllowOverride All
    Options None
    Require all granted
    Header set Access-Control-Allow-Origin *
</Directory>

不知道網際網路協議, TCP/IP, http/https協定是什麼的,請一樣參考大學用書。
網際網路應用實務
或者網路上很久的鳥哥也講得很清楚。http://linux.vbird.org/linux_server/0110network_basic.php

然後一定要自己搞一遍nginx/apache/tomcat或者iis伺服器的設定,就會知道上述那些。


在自己架的server上搞定一切該自動化(automation)的東西,可以的話就盡量不要用套裝軟體,而是寫shell script練習,包含但不限於:

  1. CI/CD
    自動測試在Nginx server,CI使用Travis CI

設定如何在travis上啟動nginx:

#!/bin/bash
sudo lsof /var/lib/dpkg/lock
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo apt-get install nginx
sudo cp -f nginx.conf /etc/nginx/
/etc/init.d/nginx restart

travis執行script .travis.yml:

install:
  - npm install -g frisby
  - npm install -g jasmine-node
  - sudo apt-get install libcurl4-openssl-dev
  - sudo apt-get install libssl-dev
after_success:
  - cd src/bin/Debug
  - ls -al
  - cp diagnose.xml /tmp/
  - ./exeServer > log & 
  - cd test/frisby
  - jasmine-node ./

https://ithelp.ithome.com.tw/upload/images/20191009/20005722MhgTXPHLa2.png

  1. 設定CronJob跑資料庫自動備份 & 資料異地備份
    寫一個backup.py
    	db=sqlite3.connect('data.db')
        db.commit()
        time_in_s = time.time()
        time_in_us = int(time_in_s * 1e6)        
        with open('dump_'+str(time_in_us)+'.sql', 'w') as f:
            for line in db.iterdump():
                f.write('%s\n' % line)

編輯crobtab
crontab -e

#每天凌晨 4 點備份,CI使用Travis CI
0 4 */1 * * python ./backup.py cronjob:dbbackup
  1. 自動檢測service是否還活著
#!/bin/sh

LOG=`systemctl status $APPLICATION_NAME`
RESULT=`systemctl status $APPLICATION_NAME | sed -n 's/[ ]*Active: \(.*\) (.*/\1/p'`

if [[ "$RESULT" =~ "active" ]]; then
    printf "$LOG"
    exit 0
else
    printf "$LOG"
    exit 1
fi
  1. Server主動發送訊息機制串接(Firebase)
    可使用很多種方式,可以用web socket, .net也有出SignalR。
    或者可使用FCM(firebase cloud messaging)+redis,請看這篇: 連結
    自動推播訊息。

  2. cache緩存設定
    nginx的設定如下:

#緩存到365天後才過期,才需要再訪問一次
location ~* \.(jpg|jpeg|png|css|js)$ {  
    expires 365d;  
}

最後去study一些server的架構設計, CDN, load balancing, serverless, AWS lambda等。

整個後端學習的路徑是更深更遠,應該更要穩扎穩打。

10/10連假到來,終於可以再有時間多study後端。


上一篇
[破] 前端以正合,以奇勝: 前端技術突破(二)
下一篇
[破] 心存全端,徐圖進取: 後端技術突破(二)
系列文
30天全端手把手學徒計畫-前後端整合之旅33

尚未有邦友留言

立即登入留言