资讯专栏INFORMATION COLUMN

部署web项目的过程记录,包括laravel,redis,mongodb,workerman的配置过

xuexiangjys / 3212人阅读

摘要:如果服务器中该账号的钥匙对已经存在,并且已经将放到该账号的设置中,可以跳过这一步。如果不符合,需要根据提示安装必要的扩展。后续再进行补充做守护队列监听进程和自动部署到服务器的说明。

系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考:

laravel项目
ubuntu 16.04
php 7.0

克隆项目到服务器 (1)我们使用 your@email.com的账号来在服务器中git下来项目

在gitlab中要部署的项目加上your@email.com成员。

(2)在服务器上创建your@email.com账号ssh钥匙对。

如果服务器中该账号的钥匙对已经存在,并且已经将ssh key放到该账号的SSH Key gitlab设置中,可以跳过这一步。

$ 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下增加如下配置

    Options +Includes -Indexes
    AllowOverride All
    Order Deny,Allow
    Allow from all
 

//开启apache rewrite 模块
$ sudo a2enmod rewrite

// 重启apache
$ sudo service apache2 restart
安装配置Redis (6)由于项目用到redis,需要安装redis

由于使用redis做消息队列,稍后需要开启监听消息队列,下面再做说明。

// 安装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...
中的其他配置方法

安装完成后,mongodb的日志文件和配置文件分别在以下路径中

/var/log/mongodb

/etc/mongod.conf

先用不验证账号密码的方式开启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自动部署到服务器的说明。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19075.html

相关文章

  • 部署web项目记录包括laravelredismongodbworkerman配置

    摘要:如果服务器中该账号的钥匙对已经存在,并且已经将放到该账号的设置中,可以跳过这一步。如果不符合,需要根据提示安装必要的扩展。后续再进行补充做守护队列监听进程和自动部署到服务器的说明。 系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考: laravel项目ubuntu 16.04php 7.0 克隆项目到服务器 (1)我们使用 your@e...

    bluesky 评论0 收藏0
  • GatewayWorker/Workerman搭建Websocket微服务

    摘要:背景最近在一些项目需要用到实时推送给分组的用户,前端需要传输给后端的信息比较少,通过多方考虑选择了通过框架基于搭建微服务。拥有定时器异步客户端异步异步异步异步消息队列等众多高性能组件。配合的定时器,也可以定时推送数据。 背景 最近在一些项目需要用到Websocket实时推送给分组的用户,前端需要传输给后端的信息比较少,通过多方考虑选择了通过GatewayWorker框架(基于Worke...

    QLQ 评论0 收藏0
  • PHP新手开发者路线建议

    摘要:年开发者应该熟练使用,并且知道版本更新内容。对开发和运维人员来说,最希望的就是一次性创建或配置,可以在任意地方正常运行。是标准规范,是开发的实践标准。对开发者来说语言推荐和,全栈的选择非常多,推荐热门的 前言 在前天(2018-08-02)已经发布了PHP 7.3.0.beta1 Released 如果你还没有使用 PHP7 ,那真的很遗憾。2018年PHP开发者应该熟练使用 PHP7...

    klinson 评论0 收藏0

发表评论

0条评论

xuexiangjys

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<