在Ubuntu安裝swift3.0并部署Vapor

Linux 安裝 swift3.0

  • 我的環(huán)境是 阿里云服務(wù)器 系統(tǒng) Ubuntu14.04 64位 選擇的按量計(jì)費(fèi) 100M帶寬 當(dāng)然你也可以選擇 包月的 或者弄臺(tái)pc安裝Ubuntu
  • 下載swift3.0 和簽名文件 下載地址:swift.org 下載對(duì)應(yīng)的版本 我的服務(wù)器是Ubuntu14.04
    QQ20161018-0.png
  • 如何在服務(wù)器下載
    • 首先使用 ssh 登錄服務(wù)器


      QQ20161018-1.png
    • 由于是純終端操作 我選擇了 wget 工具下載 如果你沒有安裝 則需要安裝 wget
   // 首先更新下源
 sudo apt-get update
 // 安裝wget
sudo apt-get install wget
// 安裝完了如何使用 wget 下載 很簡(jiǎn)單 wget 下載鏈接
// 首先 新建一個(gè)文件
mkdir Swift3.0
// 進(jìn)入文件夾
cd Swift3.0 
// 下載Swift3.0
wget https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-10-14-a/swift-DEVELOPMENT-SNAPSHOT-2016-10-14-a-ubuntu14.04.tar.gz
// 下載簽名
wget https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-10-14-a/swift-DEVELOPMENT-SNAPSHOT-2016-10-14-a-ubuntu14.04.tar.gz.sig
QQ20161018-2.png

進(jìn)入安裝步驟 跟著 swift.org 的教程走

  • 首先需要 安裝一些 clang
 sudo apt-get install clang libicu-dev
  • 導(dǎo)入PGP密匙到你的密匙環(huán) 提供了兩種方式
// 第一種
gpg --keyserver hkp://pool.sks-keyservers.net \\\\
      --recv-keys \\\\
      '7463 A81A 4B2E EA1B 551F  FBCF D441 C977 412B 37AD' \\\\
      '1BE1 E29A 084C B305 F397  D62A 9F59 7F4D 21A5 6D5F' \\\\
      'A3BA FD35 56A5 9079 C068  94BD 63BC 1CFE 91D3 06C6'

// 第二種
wget -q -O - https://swift.org/keys/all-keys.asc | \\\\
  gpg --import -
  • 驗(yàn)證PGP密匙 同樣提供兩種方式
gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift

OR

// 這種是用下載的文件驗(yàn)證
gpg --verify swift-<VERSION>-<PLATFORM>.tar.gz.sig

// 會(huì)輸出如下信息等等
...
gpg: Good signature from "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>"
  • 解壓Swift3.0 文件
tar xzf swift-<VERSION>-<PLATFORM>.tar.gz
  • 配置命令path
cd ~ 
// .bashrc 是一個(gè)隱藏文件
vi .bashrc

// 在最底部配置swift3.0 的路徑
# Swift
export PATH=~/Swift3.0/swift-3.0-RELEASE-ubuntu14.04/usr/bin:"${PATH}"
// 保存退出
  • Swift已經(jīng)算是安裝好了 這個(gè)時(shí)候在終端 輸入 swift --version 會(huì)輸出 swift2.3 ,這時(shí)候你是不是會(huì)納悶,我明明下載的swift3.0 為啥輸出2.3呢 我一開始也是懵逼的 這個(gè)時(shí)候你只需關(guān)掉鏈接 在登錄一次就可以了
QQ20161018-3.png

方便管理代碼還需要安裝下 git

  • 安裝git 很簡(jiǎn)單
sudo apt-get install git

安裝toolbox vapor官方提供的一個(gè)終端工具

curl -sL toolbox.qutheory.io | bash

// 可能會(huì)報(bào)錯(cuò) 找不到 curl 命令 安裝一下就好了
sudo apt-get install curl

// 安裝curl再執(zhí)行上面的命令 有點(diǎn)慢

// 安裝完toolbox 輸入 vapor 回車會(huì)有相應(yīng)的提示
vapor new hello 在當(dāng)前目錄創(chuàng)建一個(gè)工程
vapor build 編譯工程
vapor xcode 生成xcode項(xiàng)目
QQ20161018-4.png
  • 生成的項(xiàng)目結(jié)構(gòu)
QQ20161018-5.png
  • 所有的代碼應(yīng)該放在Sources/App目錄下 main.swift 為整個(gè)程序的入口

  • 進(jìn)入目錄 執(zhí)行 vapor build 如果是第一次執(zhí)行 首先會(huì)創(chuàng)建一個(gè)Packages目錄,然后根據(jù) Package.swift 安裝相關(guān)依賴 第一次有點(diǎn)慢,這個(gè)時(shí)候你可以看看我的第一篇文章 Vapor簡(jiǎn)單使用

  • 我現(xiàn)在主要是還是用xcode編寫代碼 代碼放在github SJWeatherServer 在服務(wù)使用git更新代碼

SJWeatherServer 是一個(gè)對(duì)MobAPI天氣數(shù)據(jù)的轉(zhuǎn)發(fā) 以及在 vapor中使用MySQL

  • Linux 安裝 MySQL
 // 在官網(wǎng)獲取MySQL的APT倉(cāng)庫(kù) 如果報(bào)錯(cuò) 請(qǐng)執(zhí)行 sudo apt-get install wget
 wget http://repo.mysql.com//mysql-apt-config_0.6.0-1_all.deb 
// 安裝
 dpkg -i mysql-apt-config_0.6.0-1_all.deb 
// 回車后出現(xiàn)如下界面:選擇最新版本5.7 // 選擇5.7后,選擇apply 
// 更新下apt-get update
 // 移除原先安裝mysql 
apt-get remove mysql-server 
apt-get remove mysql-client 
apt-get autoremove 
// 安裝新的 
sudo apt-get install mysql-server
// OK,5.7版本的mysql安裝成功矫付!
// 在安裝下面的 不然可能會(huì)出現(xiàn) MySQL頭文件找不到
apt-get install libmysqlclient-dev 
/**常用命令:
 啟動(dòng)
 1落追、使用 service 啟動(dòng):service mysql start 
 2搔扁、使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysql start 
 3诽俯、使用 safe_mysqld 啟動(dòng):safe_mysql& 
停止 
1敲才、使用 service 啟動(dòng):service mysql stop 
2晦墙、使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysql stop 
3、mysqladmin shutdown
 重啟 
1歧斟、使用 service 啟動(dòng):service mysql restart 
2纯丸、使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysql restart 
// 添加賬戶 
grant all privileges on *.* to "username"@"hostname" identified by "passwd"; 
// 上面命令在5.7執(zhí)行可能會(huì)報(bào)錯(cuò) 
// 解決: 先退出 MySQL 執(zhí)行下面命令 
mysql_upgrade -u root -p 
// 重啟MySQL 
service mysql restart 
*/
  • 如何在代碼中連接MySQL
// 首先需要為項(xiàng)目添加MySQL 依賴 在Package.swift 中加入下面代碼 然后執(zhí)行 vapor build 會(huì)自動(dòng)安裝好依賴
.Package(url: "https://github.com/qutheory/mysql.git", majorVersion: 1, minor: 0)
class DBConfig {
    static let HOST = "118.178.90.225" // 數(shù)據(jù)地址 本地環(huán)境 則是 127.0.0.1
    static let USER = "king" // 數(shù)據(jù)庫(kù)用戶名
    static let PWD = "King" // 用戶名密碼
    static let DATABASE = "SJWeather" // 數(shù)據(jù)庫(kù) 請(qǐng)先在你的數(shù)據(jù)庫(kù)中創(chuàng)建 要使用的數(shù)據(jù)庫(kù)
}
import MySQL

class DBManager {
    
    private static var instance: DBManager!
    private var databaseConnectionStatus = false
    @discardableResult
    static func share() -> DBManager {
        
        if instance == nil {
            instance = DBManager()
        }
        return instance
    }
    
    private var mysql: MySQL.Database!
    
    init() {
        setUp()
    }
    
    private func setUp() {
        
        do {
           // 3306 為數(shù)據(jù)端口
            mysql = try MySQL.Database(
                host: DBConfig.HOST,
                user: DBConfig.USER,
                password: DBConfig.PWD,
                database: DBConfig.DATABASE,
                port: 3306
            )
            print("MySQL connect success")
            databaseConnectionStatus = true
        } catch {
            print("MySQL connect failed")
            databaseConnectionStatus = false
        }
    }
  • 處理接口
import Vapor
import HTTP

let app = Droplet()

// 創(chuàng)建一個(gè)API組
app.group("/v1") { api in
    
    api.get("registered.json") { request in
        
        return try RequestHandler.handlerRegistered(request: request)
    }
    
    api.get("login.json") { request in
        
        return try RequestHandler.handlerLogin(request: request)
    }
    
    api.get("logout.json") { request in
        
        return try RequestHandler.handlerLogout(request: request)
    }
    
    api.get("citylist.json") { request in
        
        return try RequestHandler.handlerGetCityList(request: request)
    }
    
    api.get("query.json") { request in
        
        return try RequestHandler.handlerQuery(request: request)
    }
    
    api.get("type.json") { request in
        
        return try RequestHandler.handlerWeatherType(request: request)
    }
}

app.get("/") { request in
    // 直接返回一個(gè)html 頁(yè)面
    return try app.view.make("README.html")
}

app.run()

  • 這個(gè)demo 主要集中在 RequestHandler.swiftDBManager.swift
    • RequestHandler.swift 主要處理接收到的請(qǐng)求 提取參數(shù)返回對(duì)應(yīng)的數(shù)據(jù)
    • DBManager.swift 主要是對(duì) MySQL 的操作

在Ubuntu服務(wù)器部署運(yùn)行

  • 首先使用git clone 我的代碼
  • 執(zhí)行 vapor build 會(huì)先安裝依賴 因?yàn)間it 上傳 忽略了 Xcode的工程文件 .build 目錄(隱藏目錄) Packages 目錄
  • build 成功后 執(zhí)行 vapor run 這命令在 Linux 啟動(dòng)不了 則使用 .build/debug/App 啟動(dòng) 顯示如下信息則啟動(dòng)成功
QQ20161018-6.png
  • 代碼里使用 print函數(shù)的打印結(jié)果 以及每一次請(qǐng)求都會(huì)在終端顯示出來(lái)
QQ20161018-8.png
QQ20161018-9.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末静袖,一起剝皮案震驚了整個(gè)濱河市觉鼻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勾徽,老刑警劉巖滑凉,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件统扳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畅姊,警方通過(guò)查閱死者的電腦和手機(jī)咒钟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)若未,“玉大人朱嘴,你說(shuō)我怎么就攤上這事〈趾希” “怎么了萍嬉?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)隙疚。 經(jīng)常有香客問(wèn)我壤追,道長(zhǎng),這世上最難降的妖魔是什么供屉? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任行冰,我火速辦了婚禮,結(jié)果婚禮上伶丐,老公的妹妹穿的比我還像新娘悼做。我一直安慰自己,他們只是感情好哗魂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布肛走。 她就那樣靜靜地躺著,像睡著了一般录别。 火紅的嫁衣襯著肌膚如雪朽色。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天组题,我揣著相機(jī)與錄音纵搁,去河邊找鬼。 笑死往踢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徘层。 我是一名探鬼主播峻呕,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼趣效!你這毒婦竟也來(lái)了瘦癌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤跷敬,失蹤者是張志新(化名)和其女友劉穎讯私,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斤寇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年桶癣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娘锁。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牙寞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莫秆,到底是詐尸還是另有隱情间雀,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布镊屎,位于F島的核電站惹挟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缝驳。R本人自食惡果不足惜连锯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望党巾。 院中可真熱鬧萎庭,春花似錦、人聲如沸齿拂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)署海。三九已至吗购,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砸狞,已是汗流浹背捻勉。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刀森,地道東北人踱启。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像研底,于是被迫代替她去往敵國(guó)和親埠偿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)榜晦、插件冠蒋、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評(píng)論 4 62
  • “作者威爾·鮑溫,他發(fā)起的“不抱怨”活動(dòng)受到了全世界106個(gè)國(guó)家和地區(qū)乾胶、1800萬(wàn)人的熱情參與和呼應(yīng)抖剿。這項(xiàng)挑戰(zhàn)成功...
    瑜頭閱讀 212評(píng)論 0 0
  • 1.心情有點(diǎn)小激動(dòng) 今天接到訊息實(shí)在值得興奮到難以入眠吨掌。 堂妹領(lǐng)證了!結(jié)婚證脓恕! 每天都有無(wú)數(shù)人領(lǐng)證膜宋,至于這么興奮嗎...
    花貓貓閱讀 203評(píng)論 0 1
  • 昨天跟牟先生說(shuō)我迷茫了 今天就找我談話了 啰嗦一個(gè)多小時(shí) 最后被貶的一文不值 說(shuō)我不好好學(xué)習(xí) 不動(dòng)腦筋 沒有自信心...
    繆青霞閱讀 172評(píng)論 0 0
  • 一直信心滿滿自己一定會(huì)找到工作,結(jié)果現(xiàn)實(shí)很殘酷炼幔。 筆者二本程序狗秋茫,14年畢業(yè)后去了北京的一個(gè)外包公司工作,...
    灰心喪氣的銀子閱讀 238評(píng)論 2 2