這一個月來做的一個電影下載網站項目總結
Date:2016-4-6 13:51:36 By:0x584A
前言
這一個月沒發生什么大事吧,首先就是把之前的工作辭了,去了漏洞盒子面試被項目經理虐趴了。慘~~~開始嚴重懷疑人生... 隨后'一蹶不振'在家一個月給人做網站,順帶休息(瞎扯淡,一個月根本沒出門好嗎!)。最后到手的錢呢,才夠買兩包煙。哎~明天開始出門找工作。
說說收獲吧,將《Web全棧工程師的自我修養》及《代碼之髓》閱讀完了,收獲良多,等有個時間寫下讀后感。
1. 項目架構
購了兩臺服務器,一臺阿貍的用于mysql服務器,隨便又買個一臺Web服務器(怕阿貍不讓架設這類型的站點)。
現在網站還在備案當中,可以預覽此地址查看:http://103.24.176.18:81/
服務器系統均為Debian8,Web服務則是Nginx,PHP框架選用的是ThinkPHP,數據庫老樣子是MySQL(本來打算在加個memcache緩存,最終協商在以后的版本中單獨做。當然,如果有以后的話)。
值得一提的是,我在網站的后臺管理中,采用了Bootstrap前端框架,算是一邊學習一邊運用至項目中吧。其好處就是,我不需要去花太多時間在視圖的布局及調試上,通過及自帶的組件與全局CSS就能實現。
同樣的,雖然優點很多,卻有得有失。
類似我這種后端程序員在使用時,如果想定制些好看的樣式,那么必須具備良好的CSS基礎(推薦書記:禪意花園),能在Bootstrap的樣式上進行擴展,或更改。
因為本上掉用組件就需要jQuery庫的支持,所以在控制頁面DOM的時候基本無差別。
最終的結果是,后臺比前臺好看.. 額~
2. 用到的技術
整站從后端,前端到運維,都是我一個人獨立完成的,總的來說成就感棒棒噠。
-
前端的技術優化
- 線上環境壓縮了js及css源文件體積,圖片顯示用了延遲加載
- 服務器端開啟了Gzip壓縮
- 在后臺運行了AJAX進行數據的CURD操作。(因為前臺的用戶交互操作較少,所以并沒運用上AJAX技術)
-
將網站靜態資源放置另一臺服務器上(該功能最終沒做,其用途是減少對當前Web服務器的HTTP請求處理)
-
后端的技術優化
- 源生ThinkPHP框架的文件緩存,及uri優化
- MySql針對每條sql做了索引優化
- 在數據庫服務器上定時腳本備份數據庫數據
- 定時清理ThinkPHP工作緩存目錄(通過計時任務及PHP腳本實現)
數據庫定時備份腳本(因為ThinkPHP的數據庫鏈接賬號是降權用戶,所有該腳本都是在服務器上運行,mysqlhotcopy只能在服務器上運行,遠端用戶并沒有該權限!)
<?php
// 定時腳本 每天三點半執行腳本
// 30 3 * * * php /home/mysqlbak/mysqlbak.php
// 獲取當前時間 用于創建文件夾及保存文件
$bakDate = date('Ymdhis',time());
$bakDay = date('Ymd',time());
// 新建當天的文件夾
exec("mkdir {$bakDay} && cd {$bakDay} && mkdir Database && mkdir TableSql && mkdir DataSql");
// 備份表結構
exec("mysqldump -u賬號 -p密碼 -d 數據庫名稱 > {$bakDay}/TableSql/{$bakDate}.sql");
// 備份表及數據
exec("mysqldump -u賬號 -p密碼 數據庫名稱 > {$bakDay}/DataSql/{$bakDate}.sql");
// 完整備份數據庫 運行在mysql服務器上
exec("mysqlhotcopy -u賬號 -p密碼 數據庫名稱 {$bakDay}/Database/");
Nginx的配置項如下:
server {
# 指定端口及IP沖突
listen 80 default_server;
listen [::]:80 default_server;
# 項目目錄地址
root /home/xjiek/www/dy;
# 默認首頁顯示頁面
index index.html index.htm index.php;
# 網站域名 默認請求127.0.0.1
server_name _;
# 站點顯示編碼集
charset utf-8;
# 重定向至服務器文件
location /Public/ {
alias /home/xjiek/www/dy/Public/;
}
location /public/ {
alias /home/xjiek/www/dy/Public/;
}
location /upload/ {
alias /home/xjiek/www/dy/upload/;
}
# 圖片緩存30天 用戶瀏覽器緩存
location ~.*\.(jpg|png|jpeg)$
{
expires 30d;
}
#js css緩存一小時 用戶瀏覽器緩存
location ~.*\.(js|css)?$
{
expires 1h;
}
# ThinkPHP 請求重寫 用于忽略入口文件
location / {
index index.php index.html index.html;
try_files $uri $uri/ /index.php?s=$uri;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 不啟用.htaccess文件配置
location ~ /\.ht {
deny all;
}
}