系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考:
laravel项目
ubuntu 16.04php 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自动部署到服务器的说明。