在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 工具下載 如果你沒(méi)有安裝 則需要安裝 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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容