首先上一节,我们讲述了怎么在 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/

推荐几个国内的镜像源:

安装 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
  • 配置服务器(阿里云)

    • 开放端口 80443
  • 域名解析
    在域名管理中设置解析值www@的记录值为服务器的 ip 地址

出现的问题

  1. 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

  2. apache 错误信息:

    SSLProtocol: Protocol 'TLSv1.2' overrides already set parameter(s). Check if a +/- prefix is missing.

    解决办法:
    SSL 配置中的 SSLProtocol 去除 TLSv1.2

  3. 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,然后注释掉。来源

  4. 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,然后注释掉。来源

  5. 仍然有三个错误信息,没有解决,但是已经不影响使用了

    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'

wtto00
147 声望1 粉丝