laravel:docker搭建lnmp+使用deployer部署

本地環(huán)境是mac请毛。使用iTerm2+ohMyZsh
服務(wù)器環(huán)境是阿里云的ecs盒延,綠色純凈centos7一只.

step1. 通過ssh登上服務(wù)器咙崎。配置免密登錄桩盲。
step2. 服務(wù)器上安裝docker和php(還有g(shù)it、composer)湃番。
step3. docker分別配置mysql夭织、php、nginx吠撮。目標(biāo)是能正常訪問phpinfo尊惰。
step4. 本地安裝deployer。
step5. git相關(guān)泥兰,創(chuàng)建一個(gè)laravel新項(xiàng)目弄屡。
step6. 配置deployer部署項(xiàng)目。目標(biāo)是能正常訪問laravel歡迎頁(yè)以及正常使用laravel orm鞋诗。

哇哦膀捷,看著6步,好像蠻少哦削彬,坑超級(jí)多- - 一趟趟坑踩下來(lái)全庸,快把自己蠢哭了秀仲。

step1. 「ssh登服務(wù)器」。

這一步所有操作都在本地壶笼,云服務(wù)器上不做任何改動(dòng)神僵。登進(jìn)去后可輸入exit回車退出,也可ctrl+D退出覆劈。

阿里云登上控制臺(tái)保礼,云服務(wù)器ECS查看示例有個(gè)公網(wǎng)ip,就這個(gè)公網(wǎng)ip

// 在本地命令行執(zhí)行
ssh root@{你的云服務(wù)器公網(wǎng) IP}

配置免密登錄墩崩,在ECS管理面板中找到密鑰對(duì)氓英,點(diǎn)進(jìn)去侯勉,創(chuàng)建密鑰對(duì)鹦筹。
『密鑰對(duì)名稱』,我填的是aen233址貌,『創(chuàng)建類型』選擇『自動(dòng)新建密鑰對(duì)』然后點(diǎn)擊『確定』按鈕:頁(yè)面會(huì)彈出一個(gè)下載框下載 aen233.pem 文件铐拐,這個(gè)文件需要妥善保存,我把它放在~/.ssh下面了练对,配過git ssh的小伙伴應(yīng)該都知道這個(gè)目錄, 同時(shí) SSH 命令要求密鑰的訪問權(quán)限必須是 600遍蟋。

# 這個(gè)我忘記當(dāng)時(shí)走這步?jīng)]了,macOS好像木有需要改訪問權(quán)限螟凭,如果是Linux就需要改權(quán)限虚青。
chmod 600 ~/.ssh/aen233.pem

這時(shí)候可以免密登錄了,但是要加 -i 參數(shù)

$ ssh root@{你的服務(wù)器公網(wǎng) IP} -i ~/.ssh/aen233.pem

其中 -i 參數(shù)是告知 SSH 要用后面這個(gè)文件作為密鑰登錄螺男。不出意外的話會(huì)看到詢問是否信任該服務(wù)器棒厘,輸入yes,登進(jìn)下隧。
為了不用每次登錄都得加上 -i 參數(shù)奢人, 編輯ssh的配置文件,如果沒有的話淆院,需要新建何乎。

# 本地環(huán)境,不是服務(wù)器上的
vim ~/.ssh/config

macOS環(huán)境我用的atom編輯器土辩。vim或atom都可以啦支救,總之編輯成下面這樣

Host {你的云服務(wù)器公網(wǎng) IP} 
    PubkeyAuthentication yes
    IdentityFile ~/.ssh/aen233.pem

藍(lán)后step1配置完成。

step2. 「服務(wù)器上安裝docker和php」拷淘。

這一步操作都在云服務(wù)器上各墨。

安裝docker

Docker要求64位的系統(tǒng)且內(nèi)核版本至少為3.10。
執(zhí)行以下命令辕棚。

# 添加yum源欲主。
yum install epel-release –y
yum clean all
yum list

# 安裝并運(yùn)行Docker邓厕。
yum install docker-io –y
systemctl start docker

# 檢查安裝結(jié)果。
docker info
安裝php和git扁瓢、composer

雖然docker也會(huì)創(chuàng)建php容器详恼,但是服務(wù)器也需要php,而且必須要求php7.1.3+引几,因?yàn)閐eployer中的映射目錄在服務(wù)器昧互,不在docker中,這里就必須要git和composer伟桅。
如果php7.0及以下敞掘,執(zhí)行l(wèi)aravel項(xiàng)目的時(shí)候,會(huì)報(bào)laravel require php7.1.3+ 這樣的錯(cuò)誤楣铁。
阿里云的centos7鏡像中玖雁,php好像還是5.4還是5.6的版本,要先刪掉盖腕,愚蠢如我赫冬,先下了7.0的版本,報(bào)錯(cuò)溃列,又刪了7.0的版本劲厌,安裝了7.2的版本。
卸載php

yum list installed | grep php
yum remove php*

安裝php7.2

# 首先獲取rpm:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm   
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm    

# 然后可以利用 sudo yum list php*查看目前都有php的什么版本了听隐,可以發(fā)現(xiàn)從4-7.2的版本都有补鼻,7.2版本名為72w,因此安裝該版本即可:
sudo yum -y install php72w

# 但安裝完畢后雅任,輸入php -v發(fā)現(xiàn)并沒有該命令风范,因?yàn)閜hp72w只是安裝了php最小的庫(kù),一些應(yīng)用還未安裝椿访,因此安裝一些拓展包即可:
yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-mbstring

然后是composer

// 下載composer
curl -sS https://getcomposer.org/installer | php

// 將composer.phar文件移動(dòng)到bin目錄以便全局使用composer命令
mv composer.phar /usr/local/bin/composer

// 切換國(guó)內(nèi)源
composer config -g repo.packagist composer https://packagist.phpcomposer.com

step3. 「docker分別配置mysql乌企、php、nginx」成玫。

雖然有l(wèi)nmp一鍵包加酵,也有l(wèi)aradock很方便,還是打算分開開哭当,好查錯(cuò)好維護(hù)猪腕。

先拉取3個(gè)鏡像:這一步不分順序,3個(gè)鏡像拉取下來(lái)備用
// 獲取mysql鏡像
docker pull mysql:5.7

// 獲取php7.2鏡像
docker pull php:7.2-fpm

// 拉取nginx鏡像
docker pull ngixn:1.12.2
創(chuàng)建3個(gè)容器:注意先后順序钦勘,先mysql陋葡,再php,最后nginx
# 創(chuàng)建mysql容器
docker run -d -p 3306:3306 -v /var/docker/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name aen233_mysql mysql:5.7
/*  參數(shù)解釋:
-p:端口映射彻采,映射容器的3306. 例如:3307:3306:將容器的3306端口映射到主機(jī)的3307端口 
-v:/var/docker/mysql:/var/lib/mysql 將主機(jī)目錄/var/docker/mysql掛載到容器的目錄/var/lib/mysql,這個(gè)目錄是mysql的數(shù)據(jù)目錄腐缤,如果docker容器刪除捌归,數(shù)據(jù)還在。
-e:MYSQL_ROOT_PASSWORD=123456 初始化root用戶的密碼 
-it:運(yùn)行交互式的容器岭粤,讓docker運(yùn)行的容器實(shí)現(xiàn)"對(duì)話"的能力 
-d:后臺(tái)運(yùn)行容器惜索,并返回容器ID 
--name:命名容器
*/
--------------------------------------------------------
# 創(chuàng)建PHPfpm容器
docker run -d -v /var/www/html:/var/www/html -p 9000:9000 --link aen233_mysql:mysql --name aen233_phpfpm php:7.2-fpm
/*  參數(shù)解釋:
-v 前面是主機(jī)的目錄:映射容器的目錄,這里需要和nginx容器中一致
--link:掛上msyql。因?yàn)閜hp需掛載mysql剃浇,所以mysql需要在php之前巾兆。
*/
--------------------------------------------------------
# 創(chuàng)建nginx容器
docker run -d -p 80:80 --name aen233_nginx -v /var/www/html:/var/www/html -v /var/docker/nginx/conf.d:/etc/nginx/conf.d --link aen233_phpfpm:phpfpm --name aen233_nginx nginx:1.12.2
/*  參數(shù)解釋:
-p:映射80端口
-v:/var/www/html:/var/www/html  這個(gè)目錄和php容器中一致。
-v /var/docker/nginx/conf.d:/etc/nginx/conf.d  映射nginx配置目錄虎囚,可以不用進(jìn)docker容器(容器中就不需要安裝vim等)角塑,直接在云服務(wù)器上修改nginx配置。
--name:容器名
--link:跟PHP關(guān)聯(lián),所以nginx容器創(chuàng)建要在php容器創(chuàng)建之后淘讥。
*/
接下來(lái)是配置docker中的mysql圃伶、php、nginx适揉。以及測(cè)試目錄映射是否生效留攒。

接下來(lái)要進(jìn)入docker容器了

配置mysql 允許遠(yuǎn)程登錄

這樣就可以在本地通過navicat、SequelPro這些數(shù)據(jù)庫(kù)管理工具登進(jìn)去了

# 進(jìn)入容器 (可以用name也可以用容器id)
docker exec -it aen233_mysql bash

# 在容器內(nèi)登陸mysql
root@74a6c7997285:/  mysql -uroot -p

# 為root分配權(quán)限嫉嘀,以便可以遠(yuǎn)程連接
mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
mysql> exit;
配置php的擴(kuò)展安裝
# 進(jìn)入到PHP容器 (可以用name也可以用容器id)
docker exec -it aen233_phpfpm /bin/bash

# php安裝pdo_mysql,不走這一步,laravel會(huì)報(bào) can not find driver 錯(cuò)誤
docker-php-ext-install pdo_mysql(curl ...)

# 要安裝php-redis的話魄揉,需要另外下載,執(zhí)行下面這個(gè)命令就可以了剪侮,有問就no或者空格就好
pecl install redis && docker-php-ext-enable redis

# 安裝后 php-m  發(fā)現(xiàn)就都有了哦

劃重點(diǎn):安裝之后需要docker restart aen233_phpfpm。
劃重點(diǎn):安裝之后需要docker restart aen233_phpfpm洛退。
劃重點(diǎn):安裝之后需要docker restart aen233_phpfpm瓣俯。

配置Nginx容器,讓他支持PHP

先在云服務(wù)器修改配置文件default.conf,如果沒有改文件就先創(chuàng)建兵怯。

# 這個(gè)文件也可以本地寫好彩匕,然后通過scp命令傳到云服務(wù)器上
vi /var/docker/nginx/conf.d/default.conf

基礎(chǔ)的default.conf如下

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    location / {
       root   /var/www/html;
       index  index.php index.html index.htm;

       # 如果沒有以下4行,laravel將只能訪問首頁(yè)媒区,其他頁(yè)面都是404
       try_files $uri $uri/ /index.php?$query_string;
       if (!-e $request_filename){  
           rewrite ^/(.*) /index.php last;  
       }
       # 如果沒有以上4行驼仪,laravel將只能訪問首頁(yè),其他頁(yè)面都是404

    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    # location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    # }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html;
        index          index.php index.html;
        # 坑在這里袜漩,需將原有的127.0.0.1:9000替換成phpfpm:9000
        fastcgi_pass   phpfpm:9000;      
        # 坑在這里绪爸,需將原有的127.0.0.1:9000替換成phpfpm:9000
        fastcgi_index  index.php;
        # 下面這行也改了  中間的$document_root
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

然后進(jìn)如nginx容器,敲一個(gè)命令“nginx -s reload”宙攻,退出即可奠货。

# 進(jìn)入Nginx容器:
docker exec -it aen233_nginx /bin/bash
# 重新加載Nginx
nginx -s reload
測(cè)試目錄映射,訪問phpinfo座掘。

先在云服務(wù)器的主機(jī) /var/www/html目錄下新建index.php递惋。

<?php
    echo phpinfo();

然后瀏覽器輸入你的公網(wǎng)ip柔滔,不出意外就是phpinfo頁(yè)面啦。
這里要重點(diǎn)去找pdo萍虽,查看它的mysql是否是enable狀態(tài)廊遍。
如果你配php擴(kuò)展執(zhí)行了“docker-php-ext-install pdo_mysql”,但是沒有重啟php容器的話贩挣,你在容器中php -m喉前,是能查看到pdo_mysql擴(kuò)展的,但是在phpinfo中是pdo里是沒有mysql的王财。laravel就會(huì)報(bào)can not find driver 錯(cuò)誤卵迂。

step4. 「本地安裝deployer」

deployer是安裝在本地的。愚蠢如我绒净,第一遍把它裝在服務(wù)器上了

curl -LO https://deployer.org/deployer.phar

mv deployer.phar /usr/local/bin/dep

chmod +x /usr/local/bin/dep

這樣就好了见咒。執(zhí)行dep 就能看到了

step5.「git相關(guān),創(chuàng)建一個(gè)laravel新項(xiàng)目」

首先 要有g(shù)it賬號(hào)挂疆、然后要配好ssh key改览,再然后建立一個(gè)倉(cāng)庫(kù)、這個(gè)倉(cāng)庫(kù)可以是一個(gè)laravel新項(xiàng)目缤言,隨便寫一個(gè)路由宝当,控制器的方法中加一行 return User::all();用來(lái)測(cè)試laravel的orm。
我的項(xiàng)目叫iu胆萧。

step6. 「配置deployer部署項(xiàng)目」

創(chuàng)建部署腳本

在本地macOS中創(chuàng)建一個(gè)目錄用于放置部署腳本:

我創(chuàng)建的目錄在 ~/Sites/deploy-iu

$ cd ~/Sites/deploy-iu
$ dep init

dep init 命令用來(lái)創(chuàng)建一個(gè)部署腳本庆揩,會(huì)詢問我們項(xiàng)目類型,我們是 Laravel 項(xiàng)目所以輸入 1 然后回車跌穗;接下來(lái)詢問 Repository 也就是我們代碼倉(cāng)庫(kù)的地址订晌,填入自己的 github 倉(cāng)庫(kù)地址即可。
Deployer 在當(dāng)前目錄下創(chuàng)建了一個(gè)名為 deploy.php 的文件蚌吸。
我最終的deploy.php如下锈拨。

<?php
namespace Deployer;

require 'recipe/laravel.php';

set('repository', 'https://github.com/aen233/iu.git');
add('shared_files', []);
add('shared_dirs', []);
add('writable_dirs', []);
// 順便把 composer 的 vendor 目錄也加進(jìn)來(lái)
add('copy_dirs', ['node_modules', 'vendor']);


host('111.22.3.4')
    ->user('root') // 使用 root 賬號(hào)登錄
    ->identityFile('~/.ssh/aen233.pem') // 指定登錄密鑰文件路徑
    ->set('deploy_path', '/var/www/html/iu-deployer'); // 指定部署目錄

// 定義一個(gè)上傳 .artisan_env 文件的任務(wù)
desc('Upload .artisan_env file');
task('artisan_env:upload', function() {
    // 將本地的 .env 文件上傳到代碼目錄的 .env
    upload('.artisan_env', '{{release_path}}/.env');
});

// 定義一個(gè)上傳 .env 文件的任務(wù)
desc('Upload .env file');
task('env:upload', function() {
    // 將本地的 .env 文件上傳到代碼目錄的 .env
    upload('.env', '{{release_path}}/.env');
});


// 在 deploy:vendors 之前調(diào)用 deploy:copy_dirs
before('deploy:vendors', 'deploy:copy_dirs');
before('deploy:symlink', 'artisan:migrate');

// 定義一個(gè)后置鉤子,在 deploy:shared 之后執(zhí)行 env:update 任務(wù)
after('deploy:shared', 'artisan_env:upload');
after('artisan:migrate', 'env:upload');
after('env:upload', 'artisan:config:cache');
after('artisan:config:cache', 'artisan:route:cache');
after('deploy:failed', 'deploy:unlock');

定義了兩個(gè)上傳任務(wù)羹唠,artisan_env:upload和env:upload奕枢,是因?yàn)閳?zhí)行migrate時(shí),.env中的DB_HOST=127.0.0.1肉迫,但是執(zhí)行migrate之后验辞,.env的DB_HOST=mysql。
否則laravel會(huì)報(bào)SQLSTATE[HY000] [2002] Connection refused錯(cuò)誤喊衫。
deploy執(zhí)行migrate任務(wù)時(shí)跌造,是在云服務(wù)器上操作,但是訪問laravel頁(yè)面時(shí),是docker中的nginx和php和mysql交流壳贪。每個(gè)docker運(yùn)行的容器都是隔離的陵珍,這里的host應(yīng)該填php容器link的mysql容器。

after('env:upload', 'artisan:config:cache');
在上傳env后违施,要執(zhí)行artisan:config:cache互纯。

執(zhí)行部署命令

藍(lán)后 在 ~/Sites/deploy-iu執(zhí)行:

dep deploy
如果deployer執(zhí)行composer項(xiàng)目時(shí)報(bào)錯(cuò):

Failed to download laravel/laravel from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /etc/php.ini

# 解決辦法: 在服務(wù)器上
yum install zip unzip
藍(lán)后需要修改下nginx配置

deployer會(huì)將current指向當(dāng)前部署的代碼目錄。

# 將default.conf中的兩處root 改成如下
 root   /var/www/html/iu-deployer/current/public;
訪問頁(yè)面磕蒲,如果是提示沒有權(quán)限留潦。報(bào)錯(cuò):

The stream or file "/var/www/html/iu/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied

# 解決辦法:
chmod 777 -R storage/
在iu目錄下,給storage 777權(quán)限

還會(huì)遇到的報(bào)錯(cuò)辣往,can not find driver兔院,說(shuō)過了,php容器要有pdo_mysql擴(kuò)展
SQLSTATE[HY000] [2002] Connection refused站削,也說(shuō)過了坊萝,.env中的DB_HOST要修改成mysql的docker容器,就是php容器 link的名字许起。
我自己還遇到一個(gè)很想哭的問題十偶,View [welcome] not found. 這個(gè)是因?yàn)橐婚_始創(chuàng)建容器是,映射的目錄是-v /var/nginx/www/html:/var/www/html,而deployer會(huì)把storage共享出來(lái)园细,deployer的配置文件可能就寫死了/var/nginx/www/html惦积,而nginx訪問的目錄是/var/www/html,所以就找不到了珊肃。后來(lái)我將服務(wù)器荣刑、php、nginx的映射目錄都統(tǒng)一寫成/var/www/html伦乔。就好了。

應(yīng)該可以咯董习。
phpstorm code + commit + push烈和。
iterm2 執(zhí)行命令dep deploy。

自動(dòng)就發(fā)布咯皿淋。

參考的教程主要有:
leo電商進(jìn)階教程 第8章
bestcyt 這篇centos下使用docker搭建lnmp
田勇這篇deployer 實(shí)戰(zhàn)經(jīng)驗(yàn)分享

謝謝謝謝謝~~~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末招刹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窝趣,更是在濱河造成了極大的恐慌疯暑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哑舒,死亡現(xiàn)場(chǎng)離奇詭異妇拯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門越锈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仗嗦,“玉大人,你說(shuō)我怎么就攤上這事甘凭∠」眨” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵丹弱,是天一觀的道長(zhǎng)德撬。 經(jīng)常有香客問我,道長(zhǎng)躲胳,這世上最難降的妖魔是什么蜓洪? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮泛鸟,結(jié)果婚禮上蝠咆,老公的妹妹穿的比我還像新娘。我一直安慰自己北滥,他們只是感情好刚操,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著再芋,像睡著了一般菊霜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上济赎,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天鉴逞,我揣著相機(jī)與錄音,去河邊找鬼司训。 笑死构捡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的壳猜。 我是一名探鬼主播勾徽,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼统扳!你這毒婦竟也來(lái)了喘帚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咒钟,失蹤者是張志新(化名)和其女友劉穎吹由,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱嘴,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倾鲫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片级乍。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舌劳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玫荣,到底是詐尸還是另有隱情甚淡,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布捅厂,位于F島的核電站贯卦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏焙贷。R本人自食惡果不足惜撵割,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辙芍。 院中可真熱鬧啡彬,春花似錦、人聲如沸故硅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吃衅。三九已至往踢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徘层,已是汗流浹背峻呕。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趣效,地道東北人瘦癌。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跷敬,于是被迫代替她去往敵國(guó)和親佩憾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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