博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
部署web项目的过程记录,包括laravel,redis,mongodb,workerman的配置过程
阅读量:6449 次
发布时间:2019-06-23

本文共 5969 字,大约阅读时间需要 19 分钟。

系统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 serversudo 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,其他版本的可以查看

中的其他配置方法

安装完成后,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这个是你自己要绑定的ipbindIp: [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 | 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)02dcommand=php /var/www/yourproject/artisan queue:work --queue=GetAllPlatformOrder --daemondirectory=/var/www/yourprojectautostart=trueautorestart=truenumprocs=4stdout_logfile=/var/www/yourproject/storage/logs/laravel_redis_queue.log//进程数numprocs由自己确定//开启进程sudo service supervisor startsudo supervisorctl updatesudo supervisorctl rereadsudo supervisorctl start laravel_queue_order//可以使用htop查看进程是否正确运行中$ htop//如果有出现command为php /var/www/yourproject/artisan queue:work --queue=GetAllPlatformOrder --daemon的进程,代表进程启动成功

上线数据库

(10)数据库更新到线上。

后续再进行补充Supervisor做守护队列监听进程和git push自动部署到服务器的说明。

转载地址:http://jrlwo.baihongyu.com/

你可能感兴趣的文章
线程安全性的文档化(70)
查看>>
日常运维(Ⅱ)——firewalld、iptables
查看>>
lvm
查看>>
iptables规则备份和恢复、firewalld的9个zone以及操作和service的操作
查看>>
dubbo详解
查看>>
通过DataWorks数据集成归档日志服务数据至MaxCompute进行离线分析
查看>>
阿里云积极落实等级保护制度,政务云全国首个通过等保2.0合规评测
查看>>
本地Git与远程Gitblit 服务器相关操作
查看>>
学习Python编程的最好的几本书
查看>>
仿抖音底部导航效果(二)
查看>>
再看JVM:垃圾回收那些事
查看>>
【翻译】CodeMix使用的语言和框架(三):Python
查看>>
【Infragistics教程】使用可重复使用的自定义组件更快地创建原型
查看>>
4.31-35nginx相关的一些补充
查看>>
Java 中的异常和处理详解
查看>>
不是技术牛人,如何拿到国内IT巨头的Offer
查看>>
centos7安装mysql
查看>>
Xmind教程之五种主题
查看>>
cs224d 课程学习第一课
查看>>
Linux 挂载光盘:mount: you must specify the filesystem
查看>>