公司派我去作一個外省的項目, 這個項目人員比較緊缺因此我負責後端部分, 而且你們手頭都有其餘任務致使工做很辛苦, 這個項目裏面使用的是nest
框架來編寫後端代碼, 因爲同事都不在一塊兒致使溝通不便仍是踩了不少坑的, 我但願你們可以避開我踩過的坑因此編寫這個系列文章。前端
咱們的項目要求操做gitlab
因此這裏我也會詳細介紹如何快速搭建一套gitlab平臺
並調用它的api
, 以及docker
的簡易操做, 還有typeorm
官網上沒有舉過的操做數據庫的具體例子。node
因爲我是從自學前端轉全棧的, 我更理解沒有服務端基礎的同窗想知道什麼, 因此這個系列文章也很適合沒有後端開發經驗
的前端同窗
由於相關知識我都會之前端聽得懂的方式講明白, 若是你也想了解nest
框架的話那我就帶你研究。nginx
注: nest
的官網寫的真的很不錯, 但咱們這篇更偏實戰。git
因爲相關內容不少, 因此第一篇咱們只作最基本的功能, 以及gitlab
的搭建, 後面都會詳細聊各類操做。docker
nest
nest
與koa
等框架都差很少,我不扯什麼大的概念, 我們直接開始實戰使用, 最後咱們再一塊兒總結nest
到底有什麼特色。數據庫
node 與 npm 我們前端必備 很少說了npm
第一步: 全局安裝cli
工具, 而且生成項目。json
$ npm i -g @nestjs/cli $ nest new 項目名
我這邊初始了一個名爲share
的工程, 讓咱們以開發模式運行它, 下一章會介紹調試模式運行。後端
cd share yarn start:dev // 這樣你每次作出改變代碼能夠當即生效
默認是3000端口能夠訪問:
api
nest
有不少好用又智能的命令, 方便咱們建立一些模塊, 命令我先列在這裏, 後面你們能夠來這邊查看。
因爲推薦把各個模塊都放到 src/modules裏面, 因此下面寫的是完整的路徑。
命令 | 效果 |
---|---|
nest g controller modules/名 | 創建控制器 |
nest g service modules/名 | 建立服務器 |
nest g module modules/名 | 建立模塊 |
nest g guard 名 | 建立守衛 |
nest g interceptor 名 | 建立攔截器 |
咱們先建立一個users
控制器, 負責接受'xxxx/users' 相關的路由。
nest g controller modules/users
測試文件咱們先無論它, 這個xxxxxx.controller.ts
文件之後咱們專門用來處理路由
如何分配以及一些對參數的裝飾器處理。
import { Controller, Get } from '@nestjs/common'; @Controller('users') export class UsersController { @Get() getUsersList() { return '獲取用戶列表'; } }
@Get()
這個裝飾器就是接收get請求
的意思, 它是從@nestjs/common
獲取的。getUsersList
這個函數名只是描述這個函數的用途便可。@Controller('users')
指定了路由的匹配。讓咱們看看效果:
service
執行具體的操做 咱們固然不能用Controller
執行具體的操做, 須要service
這個小夥伴來執行了, 咱們仍然能夠經過命令行建立它。
nest g service modules/users
import { Injectable } from '@nestjs/common'; @Injectable() export class UsersService { getUsersList(){ return [{ name:'張三', }, { name:'李四' }] } }
controller
調用service
share/src/modules/users/users.controller.ts
修改以下:
import { Controller, Get } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('users') export class UsersController { constructor( private readonly usersService: UsersService ) { } @Get() getUsersList() { return this.usersService.getUsersList(); } }
注意: 是在constructor
的參數裏面聲明的usersService
, 而且使用this.usersService
調用裏面的方法。
nest
默認處理返回值類型爲promise
的狀況 nest
框架會自動把咱們返回給用戶的promise
轉換爲具體的結果, 因此下面三種寫法用戶收到的返回值是相同的。
固然你也能夠選擇虛擬機
, 我這邊是直接在騰訊雲買了一個月的服務器, 這裏要強調一點, gitlab
的搭建對配置是有要求的, 1核1G
會很卡的, 我配置的是2核4G
依然會出現卡頓的現象但勉強能夠正常使用了, 個人是CentOS 7.6
。
docker
只會前端知識的同窗也沒關係, docker
只是個工具而已, 你能夠認爲他是一種功能上相似cli
的插件, 你們把寫好的代碼與配置好的環境上傳到docker
上面, 咱們就能夠用它獲取到一套有nginx
、MySQL
、 後端服務
、前端服務
的完整系統, 接下來咱們實戰一下。
$ yum -y install docker-io
systemctl start docker $ docker version
啓動以後你會看到兩個版本信息, 客戶端與服務端(C/S)架構的程序, 簡單理解爲你的操做也就是輸入的命令與執行命令是分開的, 這樣就能夠作到你輸入的命令指定某個特定的server
執行, 這裏不用過度糾結。
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-‘EOF’ { "registry-mirrors":["https://fwvjnv59.mirror.aliyuncs.com"] } EOF
上面命令的意思就是把 內容插入到daemon.json
裏面。
docker
下載gitlab
鏡像 上面說的docker
配置弄完後, 咱們就能夠用使用它來拉取gitlab
的鏡像了。
推薦先來官網看看docker搭建gitlab官網
上述代碼咱們要改動一下:
sudo docker run --detach \ --hostname 服務器的ip地址 \ --publish 443:443 --publish 13800:80 --publish 13822:22 \ --name 隨便命個名 \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
hostname
改爲本身的服務器ip
。name
隨便命名, 方便之後咱們用docker
管理。gitlab-ee
改爲gitlab-ce
, 能夠認爲ce
是社區版, 足夠咱們學習使用了。docker image ls
docker container ps
我把name
設爲了"gitlab_lulu", 下一篇咱們會用到這個名字去設置gitlab-runner
。
當前還沒法訪問13800
端口, 須要去雲控制檯配置一下。
因爲我沒有單獨搞防火牆因此直接在騰訊這裏設置就好了, 若是是安裝了防火牆的機器請執行下面的語句。
firewall-cmd --add-port=13800/tcp —-permanent firewall-cmd —-reload
等兩分鐘就能夠訪問你的服務器ip:13800
。
初始帳號是root, 密碼你隨便設置吧。
拉到最下面
設置週一是每週的第一天
實際開發中咱們確定不用root帳號開發, 咱們註冊一個小號。
雖然現實註冊成功, 可是你使用這個號仍然登陸不上去, 由於你還要用root經過如下帳號的註冊申請。
作完這些就能夠正常訪問了。
下一篇咱們要修改gitlab的配置以及使用gitlab-runner, 使咱們的gitlab也能夠走ci/cd流程, 而且正式開始調用gitlab的api,是否是也不是那麼難, 接下來咱們也要進入nest
的正式開發了, 此次就是這樣, 但願和你一塊兒進步。