首先上一节,我们讲述了怎么在 centos8 上面安装 LAMP 环境 传送门
下面我们来说说怎么从零开始部署一个现有的 laravel 项目
安装 Git
-
安装 Git
yum install git git --version # git version 2.18.2
-
配置 Git
git config --global user.name "xxx" git config --global user.email "xxx@xxx.xxx" git config --list # user.name=xxx # user.email=xxx@xxx.xxx
-
生成公钥
ssh-keygen -t rsa -C "xxx@xxx.xxx" # 一直回车 不要设置密码,否则不能配置免密登录
- 复制公钥并添加到仓库的可部署公钥中
公钥文件在~/.ssh/id_rsa.pub
访问项目的仓库地址:例如https://gitee.com/name/laravel-project
,然后在项目的管理-部署公钥管理
中添加服务器中id_rsa.pub
文件中的公钥
安装 composer 工具
curl -sS https://getcomposer.org/installer | php
# All settings correct for using Composer
# Downloading...
# Composer (version 1.9.3) successfully installed to: /root/composer.phar
# Use it: php composer.phar
mv composer.phar /usr/local/bin/composer
composer -V
# Composer version 1.9.3 2020-02-04 12:58:49
curl 下载比较慢,可以换以下方式:
wget https://getcomposer.org/installer
php installer
mv composer.phar /usr/local/bin/composer
更改国内的镜像源:
# 全局模式(推荐)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 单独项目
# composer config repo.packagist composer https://mirrors.aliyun.com/composer/
推荐几个国内的镜像源:
- 阿里云 Composer 全量镜像(推荐)
镜像类型:全量镜像
更新时间:1 分钟
镜像地址:https://mirrors.aliyun.com/co...
官方地址:https://mirrors.aliyun.com/co...\
镜像说明:阿里云 CDN 加速,更新速度快,推荐使用 - Composer 中文网
镜像类型:全量镜像
更新时间:1 分钟
镜像地址:https://packagist.phpcomposer...
官方地址:https://pkg.phpcomposer.com/
镜像说明:无 - 安畅网络镜像
镜像类型:全量镜像
更新时间:1 分钟
镜像地址:https://php.cnpkg.org
官方地址:https://php.cnpkg.org
镜像说明:此 Composer 镜像由安畅网络赞助,目前支持元数据、下载包全量代理。 - 交通大学镜像
镜像类型:非全量镜像
镜像地址:https://packagist.mirrors.sjt...\
官方地址:https://mirrors.sjtug.sjtu.ed...\
镜像说明:上海交通大学提供的 composer 镜像,稳定、快速、现代的镜像服务,推荐使用。
安装 Redis
Laravel
缓存以及队列我设置的用的 Redis
-
安装 Redis
# 查看可用的 Redis 版本 dnf module list redis # CentOS-8 - AppStream # Name Stream Profiles Summary # redis 5 [d] common [d] Redis persistent key-value database # Remi's Modular repository for Enterprise Linux 8 - x86_64 # Name Stream Profiles Summary # redis remi-5.0 common [d] Redis persistent key-value database # Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled # 安装 Redis dnf install redis
-
设置开机自启
systemctl enable redis # Created symlink /etc/systemd/system/multi-user.target.wants/redis.service → /usr/lib/systemd/system/redis.service.
-
配置 Redis
nano /etc/redis.conf # ctrl+w 搜索requirepass,然后添加设置redis密码
-
启动相关命令
# 启动 Redis 服务 systemctl start redis # 关闭 Redis 服务 systemctl stop redis # 查看 Redis 服务状态 systemctl status redis # 重启 Redis 服务 systemctl restart redis
安装 Nodejs
websock 广播使用的是 node 的库laravel-echo-server
-
安装 nodejs
# 查看可用的 Nodejs 版本 dnf module list nodejs # CentOS-8 - AppStream # Name Stream Profiles Summary # nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime # nodejs 12 common, development, minimal, s2i Javascript runtime # Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled # 重置 nodejs 模块 dnf module reset nodejs # 启用nodejs12版本 dnf module enable nodejs:12 # 安装 dnf install nodejs # 验证 node -v # v12.13.1
-
安装 laravel-echo-server
// 安装库 npm install laravel-echo-server -g cd /var/www/html/laravel-project laravel-echo-server init // ? Do you want to run this server in development mode? No // ? Which port would you like to serve from? 6001 // ? Which database would you like to use to store presence channel members? redis // ? Enter the host of your Laravel authentication server. https://www.domain.net // ? Will you be serving on http or https? https // ? Enter the path to your SSL cert file. /path/to/fiel.crt // ? Enter the path to your SSL key file. /path/to/fiel.key // ? Do you want to generate a client ID/Key for HTTP API? Yes // ? Do you want to setup cross domain access to the API? Yes // ? Specify the URI that may access the API: https://www.domain.net // ? Enter the HTTP methods that are allowed for CORS: GET // ? Enter the HTTP headers that are allowed for CORS: Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id // ? What do you want this config to be saved as? laravel-echo-server.json // appId: xxxxxx // key: xxxxxxxxxxxxxxxxxxxxxx // Configuration file saved. Run laravel-echo-server start to run server. // 由于redis服务安装时设置了密码,所以这里要配置redis服务信息 nano laravel-echo-server.json // 在databaseConfig.redis的对象中添加如下信息 "port": "6379", "host": "127.0.0.1", "password": "password" // 启动服务监听广播 laravel-echo-server start // 停止服务监听广播 laravel-echo-server stop // 暂时不用启动,后续添加开机自启服务
laravel-echo-server 默认使用的是 6001 端口,所以要事先在服务器开启此端口
部署代码
-
clone 代码
cd /var/www/html/ git clone git@gitee.com:name/laravel-project.git
-
安装项目依赖
cd /var/www/html/laravel-project composer install
-
创建并编辑 .env 文件
cp .env.example .env
-
一些必要的命令
php artisan key:generate php artisan storage:link
-
更改目录权限
cd /var/www/html/laravel-project chown -R apache:apache storage/
-
配置 PHP
默认配置即可# php查看已安装模块的命令: php -m # 支付宝支付需要用到bcmath扩展 yum list php-bcmath yum install php-bcmath # 更改上传文件的大小限制 nano /etc/php.ini # 找到 upload_max_filesize 更改为 20M # 更改完成后一定要重启php服务 systemctl restart php-fpm
php扩展是自动加载的,不需要配置加载,只要安装了php的一些扩展模块,就会自动加载。扩展模块的目录在
/usr/lib64/php/modules/
-
配置 Apache
-
安装 ssl 模块
yum install mod_ssl
-
配置虚拟域名
新建文件/etc/httpd/conf.d/vhost.conf
<VirtualHost *:443> ServerName 域名:443 DocumentRoot "域名对应的文件夹" SSLCertificateFile /路径/public.crt SSLCertificateKeyFile /路径/*.key SSLCertificateChainFile /路径/chain.crt </VirtualHost>
-
开启 rewrite 模块
# 虽然目录 conf.modules.d 中没有 rewrite.conf 来加载rewrite模块 # 但是 00-base.conf 中已经加载了 rewrite 模块 # 所以我们不需要再次创建加载 rewrite 的配置文件 # 创建rewrite配置文件 并配置rewrite规则 nano /etc/httpd/conf.d/rewrite.conf # 输入以下信息 RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} !^/tz.php RewriteRule (.*) https://%{SERVER_NAME}$1 [R] # 重启apache服务 systemctl restart httpd
-
- MySQL 数据库导入
-
所有相关服务启动
# apache php-fpm mysql redis都是开机自启的,这里不再重复启动 # laravel-echo-server 以及 队列监听 # 由于这两个任务是要保持窗口活动的,所以需要创建后台任务保证运行 nano /etc/rc.d/rc.local # 添加以下内容 cd /var/www/html/ysmj-laravel nohup laravel-echo-server start --force > /var/www/html/laravel-project/laravel-echo-server.out 2>&1 & nohup php artisan queue:listen > /var/www/html/laravel-project/queue-listen.out 2>&1 & # 保存文件。然后设置权限使其开机自启 chmod +x /etc/rc.d/rc.local
-
配置服务器(阿里云)
- 开放端口
80
和443
- 开放端口
- 域名解析
在域名管理中设置解析值www
和@
的记录值为服务器的ip
地址
出现的问题
-
apache 错误信息:
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
解决办法:
打开/etc/httpd/conf/httpd.conf
,添加一句ServerName localhost:80
-
apache 错误信息:
SSLProtocol: Protocol 'TLSv1.2' overrides already set parameter(s). Check if a +/- prefix is missing.
解决办法:
SSL 配置中的 SSLProtocol 去除 TLSv1.2 -
apache 错误信息:
No slotmem from mod_heartmonitor
解决办法:
在文件/etc/httpd/conf.modules.d/00-proxy.conf
中注释掉LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
这一行。即这一行前面就一个#
。如果还不能解决问题,尝试查找apache
其他配置文件中的heartbeat
,然后注释掉。来源 -
apache 错误信息:
suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
解决办法:
在文件/etc/httpd/conf.modules.d/00-base.conf
中注释掉LoadModule suexec_module modules/mod_suexec.so
这一行。即这一行前面就一个#
。如果还不能解决问题,尝试查找apache
其他配置文件中的suexec
,然后注释掉。来源 -
仍然有三个错误信息,没有解决,但是已经不影响使用了
caught SIGWINCH, shutting down gracefully Apache/2.4.37 (centos) OpenSSL/1.1.1c configured -- resuming normal operations Command line: '/usr/sbin/httpd -D FOREGROUND'
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。