穩固了前端技能後,就可以開始眼觀前端,意在後端。
慢慢的蠶食鯨吞與前端connect的各部門經驗後,你會有很多機會看到後端的程式碼,並且修改它。尤其在MVC架構下,你一定有機會看到後端的程式碼。
這時候千萬不能太急,我們先從最簡單的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練習,包含但不限於:
設定如何在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 ./
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)
編輯crobtabcrontab -e
#每天凌晨 4 點備份,CI使用Travis CI
0 4 */1 * * python ./backup.py cronjob:dbbackup
#!/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
Server主動發送訊息機制串接(Firebase)
可使用很多種方式,可以用web socket, .net也有出SignalR。
或者可使用FCM(firebase cloud messaging)+redis,請看這篇: 連結
自動推播訊息。
cache緩存設定
nginx的設定如下:
#緩存到365天後才過期,才需要再訪問一次
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 365d;
}
最後去study一些server的架構設計, CDN, load balancing, serverless, AWS lambda等。
整個後端學習的路徑是更深更遠,應該更要穩扎穩打。
10/10連假到來,終於可以再有時間多study後端。