部署web項目的過程記錄,包括laravel,redis,mongodb,workerman的配置過程

系統LAMP基礎環境是已經搭建好,記錄要將web項目部署到線上的過程以下,方便後續部署新項目時參考:php

laravel項目
ubuntu 16.04
php 7.0html

克隆項目到服務器

(1)咱們使用 your@email.com的帳號來在服務器中git下來項目

在gitlab中要部署的項目加上your@email.com成員。前端

(2)在服務器上建立your@email.com帳號ssh鑰匙對。

若是服務器中該帳號的鑰匙對已經存在,而且已經將ssh key放到該帳號的SSH Key gitlab設置中,能夠跳過這一步。linux

$ sudo ssh-keygen -C  "your@email.com" -t rsa
// 直接按下一步,若是想要爲祕鑰對更更名字,能夠在這一步中作
$ sudo su
$ cd ~/.ssh
$ cat id_rsa.pub
// 複製公鑰將其填入到gitlab的SSH Key中

配置apache

(3)進入到/var/www目錄下,克隆項目,並更改相關的文件權限

$ cd /var/www
// 切回普通帳號
$ su ubuntu
$ sudo git clone git@yourprojecturl.com/yourproject.git 
$ cd yourproject
// laravel 須要更改storage文件夾的權限和bootstrap權限
$ sudo chmod -R 777 storage/ 
$ cd bootstrap/
$ sudo chmod -R 777 cache

(4)更改apache的DocumentRoot,將/var/www做爲訪問目錄

$ cd /etc/apache2/sites-available
$ sudo vi 000-default.conf
// 修改 "DocumentRoot /var/www/html" 爲 "DocumentRoot /var/www"
// 保存後重啓apache
$ sudo service apache2 restart

(5)接下來,在瀏覽器中輸入服務器ip地址,發現服務器能夠顯示目錄文件,須要禁用目錄列表,而且容許url重定向

$ sudo vi /etc/apache2/sites-available/000-default.conf

//增長禁用目錄列表,並容許支持url rewirte,在DocumentRoot下增長以下配置
<Directory "/var/www">
    Options +Includes -Indexes
    AllowOverride All
    Order Deny,Allow
    Allow from all
</Directory> 

//開啓apache rewrite 模塊
$ sudo a2enmod rewrite

// 重啓apache
$ sudo service apache2 restart

安裝配置Redis

(6)因爲項目用到redis,須要安裝redis

因爲使用redis作消息隊列,稍後須要開啓監聽消息隊列,下面再作說明。laravel

// 安裝redis
$ sudo apt-get install redis-server
// 查看是否安裝成功
$ ps aux | grep redis

//配置遠程登陸,默認redis是不容許遠程登陸的,須要咱們配置,
//但若是應用服務器和redis安裝在同個服務器中,則不須要作這一步。

//編輯redis配置文件
$ sudo vi /etc/redis/redis.conf
//註釋掉下面這一行。
# bind 127.0.0.1

//配置密碼登陸

//編輯redis配置文件
$ sudo vi /etc/redis/redis.conf
//找到下面這一行並去除註釋
# requirepass foobared #未修改以前
//修改以後,123456是設置的redis密碼
requirepass 123456

//重啓redis server
sudo service redis-server restart

安裝配置mongodb

(7)項目中使用了mongodb,須要安裝mongodb和mongo擴展

// 導入 MongoDB public GPG Key
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

// Create a list file for MongoDB
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

//Reload local package database
$ sudo apt-get update

//Install the MongoDB packages
$ sudo apt-get install -y mongodb-org

該系統的ubuntu版本爲16.04,其餘版本的能夠查看
https://docs.mongodb.com/manu...
中的其餘配置方法git

安裝完成後,mongodb的日誌文件和配置文件分別在如下路徑中github

/var/log/mongodbweb

/etc/mongod.confredis

先用不驗證帳號密碼的方式開啓mongodb,在mongodb中建立表和用戶mongodb

//查看是否安裝成功
$ mongod --version
//查詢是否啓動mongodb
$ ps aux | grep mongod
//沒有相應的進程,則啓動
$ sudo mongod --logpath=/var/log/mongodb/mongod.log --fork 

//若是啓動不成功,查看一下日誌,發現提示exception in initAndListen: 29 Data directory /data/db not found.
//咱們建立這個目錄
$ sudo mkdir -p /data/db
//再從新啓動mongo

咱們須要建立相應的數據庫數據表和用戶

//登陸mongodb
$ mongo 127.0.0.1:27017
//咱們先在admin數據庫建立一個帳號
> use admin
//建立一個管理員帳號
> db.createUser({user:"admin",pwd:"123456","customData":{description:"管理員用戶"},roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
//能夠用show users查看是否建立成功
> show users

//咱們系統使用了yourdb數據庫,切換yourdb數據庫,爲yourdb添加帳號
> use yourdb
> db.createUser({user:"youruser",pwd:"12345678","customData":{description:"管理員用戶"},roles:[{role:"dbOwner",db:"yourdb"}]})

//建立數據表(集合)
> db.createCollection("erp_records") 
//查看是否建立成功
> show collections

爲了安全,咱們要開啓mongodb用戶驗證,綁定指定的ip,不容許全部ip鏈接

// 編輯mongodb配置文件
$ sudo vi /etc/mongod.conf
//將文件中的相應內容更改,121.232.33.33這個是你本身要綁定的ip
bindIp: [127.0.0.1,121.232.33.33]
authorization:enabled
//保存配置文件

//關閉mongod進程,從新以驗證的方式開啓
$ sudo killall -9 mongod
$ sudo mongod --logpath=/var/log/mongodb/mongod.log --auth --fork

//這時候咱們再測試登陸
$ mongo 127.0.0.1:27017
> use yourdb
> show collections
// 若是提示沒有驗證,那麼證實已經開啓了驗證,那麼驗證以前設置的帳號密碼是否正確
> db.auth("youruser","12345678")
// 若是顯示1,表明驗證經過
//退出登陸
> exit

接下來,咱們就要安裝mongodb的php擴展

//咱們是服務器是php7,若是不肯定能夠裝什麼擴展,能夠用如下命令查看
$ sudo apt-cache search php7
$ sudo apt-get install php-mongodb
//重啓apache2
$ sudo service apache2 restart

安裝配置workerman

(8)項目有使用workerman,負責websocket鏈接監聽推送消息。

該程序對於php環境的要求是:

php cli >= 5.4,能夠運行命令 php -v查看版本

linux系統要求php安裝了posix和pcntl擴展。

可使用 curl -Ss http://www.workerman.net/chec... | php 來檢測當前環境是否符合要求。若是不符合,須要根據提示安裝必要的擴展。

若是支持更大的併發鏈接數,建議安裝event擴展或者libevent擴展(兩者做用相同,二選一便可),

咱們的php版本爲7.0,安裝event

//若是沒有pecl,須要先安裝
$ sudo apt-get install php-pear php7.0-dev libevent-dev
//提示ERROR: `phpize' failed
$ pecl install event

// 當出現Include libevent OpenSSL support [yes] :時,輸入no

//切換到root用戶,添加event.so到php-cli的php-ini文件中。
$ sudo su

$ echo extension=event.so > /etc/php/7.0/cli/conf.d/event.ini

//切換回普通用戶,切換到要保存項目的目錄,clone web-msg-sender項目
$ su ubuntu

$ cd /var/www

$ git clone https://github.com/walkor/web-msg-sender.git

使用composer安裝,若是沒有安裝composer,請先安裝。

// 下載composer

$ curl -sS https://getcomposer.org/installer | php

// 設置全局

$ sudo mv composer.phar /usr/local/bin/composer

// 查看是否安裝成功,若是有版本信息顯示,則說明安裝成功

$ composer -v

// 更新一下

$ composer self-update

// 進入到 web-msg-sender 項目中,使用composer進行安裝

$ cd /var/www/web-msg-sender/

$ composer install

開啓服務器監聽

進入該項目文件,啓動服務(以守護進程方式)

$ php start.php start -d

中止服務

$ php start.php stop

服務狀態

$ php start.php status

==注意要將前端websoket的鏈接和應用程序curl workerman監聽的服務的鏈接ip
更改成對應workerman所在的服務器ip中==

開啓隊列監聽

(9)開啓消息隊列監聽

咱們的隊列名稱爲GetAllPlatformOrder

//進入到項目下
$ cd /var/www/yourproject

$ php artisan queue:work --queue=GetAllPlatformOrder  --daemon

queue:work --daemon 只要運行着,就能一直接受請求,不同的地方是在這個運行模式下,當新的請求到來的時候,不從新加載整個框架,而是直接 fire 動做。

可是並不能作後臺守護進程,關閉終端進程也會退出,須要再借助一些進程控制工具,譬如Supervisor。

//若是沒有安裝supervisor,要先安裝,已經安裝的跳過這一步
$ sudo apt-get install supervisor

$ cd /etc/supervisor/conf.d
//建立一個進程配置文件
$ sudo vi laravel_queue_order.conf 

//內容以下:
[program:laravel_queue_order]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/yourproject/artisan queue:work --queue=GetAllPlatformOrder --daemon
directory=/var/www/yourproject
autostart=true
autorestart=true
numprocs=4
stdout_logfile=/var/www/yourproject/storage/logs/laravel_redis_queue.log

//進程數numprocs由本身肯定


//開啓進程
sudo service supervisor start
sudo supervisorctl update
sudo supervisorctl reread
sudo supervisorctl start laravel_queue_order

//可使用htop查看進程是否正確運行中
$ htop
//若是有出現command爲php /var/www/yourproject/artisan queue:work --queue=GetAllPlatformOrder --daemon的進程,表明進程啓動成功

上線數據庫

(10)數據庫更新到線上。

後續再進行補充Supervisor作守護隊列監聽進程和git push自動部署到服務器的說明。

相關文章
相關標籤/搜索