配置并部署 laravel 10 项目到 ubuntu 22.04.2 服务器

laravel

ubuntu 镜像下载与安装

ubuntu 官方可免费下载服务器版本的 iso 镜像文件,我们使用本镜像进行最小化安装即可。我自己的操作是把镜像交给我们公司的网络运维工程师,让他给我那这个镜像开了个虚机,分配了一个内网 IP 用来测试。

记得跟网络运维工程师说一下让服务器通互联网,再配置一下阿里云的源

系统必要的配置

系统默认没初始化 root 账号,使用下方指令初始化:

1
sudo passwd root

然后定一个安全好记的密码就行,我们之后的操作都在 root 账号下执行。

接下来就是升级 ubuntu 系统

1
2
apt update
apt upgrade

然后我们安装 vim 编辑器,方便编辑文件

1
apt install vim

然后我们安装 screen 工具,保证我们的操作不因关闭终端而终止

1
apt install screen

至此该配置的都配置好了

安装并配置 oneinstack

oneinstack 是一款自动化部署 lnmp 环境的组件工具,百度并访问官网,选择自动安装,选好你需要的配置后,复制好安装的命令,后面用

安装 lnmp 环境之前,我们新建一个 screen 窗口,保证我们的安装不因窗口关闭而终止:

1
screen -S lnmp

下面是一些常用操作,可以参考:

1
2
3
ctrl a + d    // 暂退当前的 screen 窗口
screen -r lnmp // 恢复名为 lnmp 的 screen 窗口
screen -ls // 查看当前的所有 screen 窗口信息

回到话题,配置好 screen 就可以开始安装 lnmp 环境啦,用上面的你复制的 oneinstack 生成的指令到你的终端,回车,然后等待安装完毕并重启服务器即可。

此过程一般没问题,若出现报错,安装会终止并提示错误信息,建议重新执行一遍。再有故障那就要自行解决了。

创建数据库

根据 oneinstack 安装时配置的数据库密码,我们通过访问咱们主机的 ip 进入 oneinstack 默认页面,然后找到 phpmyadmin ,使用 root 和刚才说的密码进入数据库中,新建一个所需的空白数据库。

部署项目

假设你的 laravel 10 项目在 github 中,代码通过 git 进行版本控制。

接下来我们前往网站目录,并将代码 clone 到本地

1
2
3
cd /date/wwwroot
mv default default_back
git clone [ 你的远端 git 地址 ] jiepade

php 配置

我们需要将部分的 php 默认禁用的函数方法打开,方便使用诸如 composer 之类的命令,具体操作为:

1
2
cd /usr/local/php/etc/
vim php.ini

然后找到如下这行:

1
2
3
4
; This directive allows you to disable certain functions.
; It receives a comma-delimited list of function names.
; https://php.net/disable-functions
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen

修改为:

1
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,ini_alter,ini_restore,dl,readlink,popepassthru,stream_socket_server,fsocket,popen

保存退出后,重启 php—fpm 服务

1
service php-fpm restart

composer 安装与执行

回到项目根目录,安装 composer,若已安装,直接配置下一步

1
2
3
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
mv composer.phar /usr/local/bin/composer

若以上指令报错 php 无法找到,请检查path路径是否添加了php的bin目录,具体百度即可。不可能是没装 php,oneinstack 已经给你装好了,这个问题基本上是ubuntu下一般账号能跑 php,但 root 不行。小问题的。

我们不使用阿里云的 composer 镜像,因为国内镜像的composer各依赖版本不够新,影响使用,用国外原版镜像慢点,但是稳定且最新。

安装好后,在项目根目录执行 composer i 指令,安装项目所需的依赖

1
composer i

laravel 初始化配置

接下来就可以进行基础的 laravel 配置了,首先我们复制根目录下的 .env 一份出来

1
cp .env.example .env

然后生成密钥

1
php artisan key:generate

然后修改 .env 为项目实际需要调整的内容,具体需要咨询开发人员要改哪些。

完成上述环节后,就可以进行数据库填充工作

1
php artisan migrate:refresh --seed && php artisan admin:install 

之后你可能需要借助数据库程序,连接到服务器,把一些你备份的项目初始化数据库填充到项目中,具体自行操作即可,推荐使用 Dbeaver,开源且免费,官方也在更新,别用盗版的 navicat 辣

配置 nginx

这时候你访问网址是无法看到你的项目的,需要对 nginx 配置,首先找到配置文件

1
2
cd /usr/local/nginx/conf/
vim nginx.conf

修改如下的几个值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
######################## default ############################
server {
listen 2333; <------------------here,change it
server_name _;
access_log /data/wwwlogs/access_nginx.log combined;
root /data/wwwroot/default/public; <------------------here,change it
index index.html index.htm index.php;
#error_page 404 /404.html;
#error_page 502 /502.html;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
deny all;
}
location /.well-known {
allow all;
}
location / { <------------------here,add it
try_files $uri $uri/ /index.php?$query_string;
}
}

保存退出后,重启 nginx 使之生效

1
service nginx restart

文件权限调整

我们需要对项目的文件提权,允许项目进行诸如存储文件等操作。

1
2
3
4
5
6
chmod -R 777 default
chown -R www-data:www-data default

cd default
chgrp -R www storage bootstrap/cache
chmod -R ug+rwx storage bootstrap/cache

之后访问 http://[你的 IP 地址]:2333/ 就可以看到你的项目辣,项目部署到此结束