在Ubuntu安裝swift3.0并部署Vapor

Linux 安裝 swift3.0

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


      QQ20161018-1.png
    • 由于是純終端操作 我選擇了 wget 工具下載 如果你沒有安裝 則需要安裝 wget
   // 首先更新下源
 sudo apt-get update
 // 安裝wget
sudo apt-get install wget
// 安裝完了如何使用 wget 下載 很簡單 wget 下載鏈接
// 首先 新建一個文件
mkdir Swift3.0
// 進入文件夾
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

進入安裝步驟 跟著 swift.org 的教程走

  • 首先需要 安裝一些 clang
 sudo apt-get install clang libicu-dev
  • 導入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 -
  • 驗證PGP密匙 同樣提供兩種方式
gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift

OR

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

// 會輸出如下信息等等
...
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 是一個隱藏文件
vi .bashrc

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

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

  • 安裝git 很簡單
sudo apt-get install git

安裝toolbox vapor官方提供的一個終端工具

curl -sL toolbox.qutheory.io | bash

// 可能會報錯 找不到 curl 命令 安裝一下就好了
sudo apt-get install curl

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

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

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

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

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

  • Linux 安裝 MySQL
 // 在官網(wǎng)獲取MySQL的APT倉庫 如果報錯 請執(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安裝成功!
// 在安裝下面的 不然可能會出現(xiàn) MySQL頭文件找不到
apt-get install libmysqlclient-dev 
/**常用命令:
 啟動
 1、使用 service 啟動:service mysql start 
 2、使用 mysqld 腳本啟動:/etc/inint.d/mysql start 
 3、使用 safe_mysqld 啟動:safe_mysql& 
停止 
1、使用 service 啟動:service mysql stop 
2、使用 mysqld 腳本啟動:/etc/inint.d/mysql stop 
3、mysqladmin shutdown
 重啟 
1、使用 service 啟動:service mysql restart 
2、使用 mysqld 腳本啟動:/etc/inint.d/mysql restart 
// 添加賬戶 
grant all privileges on *.* to "username"@"hostname" identified by "passwd"; 
// 上面命令在5.7執(zhí)行可能會報錯 
// 解決: 先退出 MySQL 執(zhí)行下面命令 
mysql_upgrade -u root -p 
// 重啟MySQL 
service mysql restart 
*/
  • 如何在代碼中連接MySQL
// 首先需要為項目添加MySQL 依賴 在Package.swift 中加入下面代碼 然后執(zhí)行 vapor build 會自動安裝好依賴
.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ù)庫用戶名
    static let PWD = "King" // 用戶名密碼
    static let DATABASE = "SJWeather" // 數(shù)據(jù)庫 請先在你的數(shù)據(jù)庫中創(chuàng)建 要使用的數(shù)據(jù)庫
}
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)建一個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
    // 直接返回一個html 頁面
    return try app.view.make("README.html")
}

app.run()

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

在Ubuntu服務器部署運行

  • 首先使用git clone 我的代碼
  • 執(zhí)行 vapor build 會先安裝依賴 因為git 上傳 忽略了 Xcode的工程文件 .build 目錄(隱藏目錄) Packages 目錄
  • build 成功后 執(zhí)行 vapor run 這命令在 Linux 啟動不了 則使用 .build/debug/App 啟動 顯示如下信息則啟動成功
QQ20161018-6.png
  • 代碼里使用 print函數(shù)的打印結(jié)果 以及每一次請求都會在終端顯示出來
QQ20161018-8.png
QQ20161018-9.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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

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