Kubernetes自动化部署Laravel

网友投稿 731 2022-11-03

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Kubernetes自动化部署Laravel

我直接在Gitea上创建一个名字为projectLaravel仓库,然后Drone激活连接到这个仓库,然后本地准备了一份Laravel代码,放到我们刚刚创建的这个仓库,然后在项目目录下,我们创建一个文件名为.gitignore的文件,我们将不上传到仓库的信息放到这个文件,详细如下

/node_modules/public/hot/public/storage/storage/*.key/vendor.env.env.backup.phpunit.result.cachedocker-compose.override.ymlHomestead.jsonHomestead.yamlnpm-debug.logyarn-error.log/.idea/.vscode

我在服务器路径/home/k8s/project下创建了projectLaravel目录用于存放部署配置信息,我们先创建configmap.yaml,这个文件用于存放Laravel项目.env所有配置,因为我们在打包镜像的时候.env文件是不打包到镜像,所以需要用到这个配置来存放.env文件所有的配置信息,详细如下

kind: ConfigMapapiVersion: v1metadata: name: project-laravel-configdata: .env: | APP_NAME=测试项目 APP_ENV=production APP_KEY=base64:wJHVxWqHwlhJHDi8RLRAXesLuKDXnO0GZsVLhM3hUyA=

然后我们先执行以下命令,初始化生效

cd home/k8s/project/projectLaravelkubectl apply -f configmap.yaml

然后我们在/home/k8s/project/projectLaravel目录下创建laravel-deployment.yaml文件,用于部署服务,详细如下

#设置持久卷apiVersion: v1kind: PersistentVolumeClaimmetadata: name: drone-laravel-pv-claimspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi---#部署Laravel服务apiVersion: apps/v1kind: Deploymentmetadata: name: drone-laravel-deploymentspec: selector: matchLabels: app: drone-laravel replicas: 2 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: drone-laravel spec: containers: - name: drone-laravel image: 【镜像地址,需要替换】 imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: env #ENV配置 mountPath: /var/www/html/.env subPath: .env - name: uploads #上传数据 mountPath: /var/www/html/public/uploads volumes: - name: env configMap: name: project-laravel-config defaultMode: 420 - name: uploads persistentVolumeClaim: claimName: drone-laravel-pv-claim---#暴露对外端口apiVersion: v1kind: Servicemetadata: name: drone-laravel-service labels: app: drone-laravelspec: type: NodePort selector: app: drone-laravel ports: - port: 80 targetPort: 80 nodePort: 30088

大家根据实际情况,将镜像地址替换成自己的laravel镜像地址。

我们在项目目录下创建一个default.conf文件,用于Nginx代理配置,详细如下

server { listen 80; server_name localhost; #charset koi8-r; location { root var/www/html/public; index index.php index.html index.htm; # 如果没有以下4行,laravel将只能访问首页,其他页面都是404 try_files $uri $uri/ index.php?$query_string; if (!-e $request_filename){ rewrite ^/(.*) index.php last; } # 如果没有以上4行,laravel将只能访问首页,其他页面都是404 } #error_page 404 404.html; # redirect server error pages to the static page 50x.html # error_page 500 502 503 504 50x.html; location = 50x.html { root usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # # location ~ \.php$ { # proxy_pass http://127.0.0.1; # } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root var/www/html/public; index index.php index.html; # 坑在这里,需将原有的127.0.0.1:9000替换成phpfpm:9000 fastcgi_pass 127.0.0.1:9000; # 坑在这里,需将原有的127.0.0.1:9000替换成phpfpm:9000 fastcgi_index index.php; # 下面这行也改了 中间的$document_root fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ \.ht { # deny all; #}}

然后我们同样在项目目录中创建Dockerfile文件,用于构建我们的Laravel镜像

FROM evan886/alpine_nginx_php7.4:v3.14#复制项目代码至运行目录ADD default.conf etc/nginx/conf.d/ADD .env.example var/www/html/.envADD . var/www/html/#设置权限RUN chown www-data:www-data -R var/www/html/storageRUN chown www-data:www-data -R var/www/html/bootstrap#初始化密钥RUN cd var/www/html && php artisan key:generate

根据Drone的规则,我们在项目目录下创建一个文件名为.drone.yml,用于代码提交后触发自动化构建部署,详细如下

kind: pipelinetype: kubernetesname: project-laravel#构建步骤steps:#安装Laravel扩展- name: backend pull: if-not-exists image: laradock/workspace:latest-7.3 commands: - cp .env.example .env - composer install --prefer-dist - php artisan key:generate# - php artisan migrate volumes: - name: cache path: /cache#推送镜像至镜像仓库- name: publish image: plugins/docker mirrors: #镜像仓库加速地址,不需要加速,可以直接删除 from_secret: registry_mirrors settings: purge: false registry: #镜像仓库域名 from_secret: registry repo: #镜像仓库详细地址 from_secret: repo use_cache: true tags: - latest username: #镜像仓库账户 from_secret: registry_user_name password: #镜像仓库密码 from_secret: registry_password volumes: - name: cache path: /cache#部署服务- name: ssh commands image: appleboy/drone-ssh settings: host: from_secret: ssh_ip port: 22 username: from_secret: ssh_user_name password: from_secret: ssh_password script: - cd /home/k8s/project/projectLaravel - kubectl apply -f laravel-deployment.yaml - kubectl rollout restart deployment drone-laravel-deployment#通知到telegram- name: notification image: appleboy/drone-telegram settings: token: from_secret: telegram_token to: from_secret: telegram_user_id message: > {{#success build.status}} {{repo.name}} 第{{build.number}} 次自动部署成功 耗时 {{since build.started}} 提交分支 {{commit.branch}} 详情 {{ build.link }} {{else}} {{repo.name}} 第{{build.number}} 次自动部署失败 耗时{{since build.started}} 提交分支 {{commit.branch}} 详情 {{ build.link }} {{/success}}volumes: - name: cache host: path: /home/droneCache

由于我们为了保证重要信息不泄露出去,我在.drone.yml文件所用到的重要信息都放到Drone仓库管理面板上,详细如下

完成以上操作,我们提交代码到远程仓库,触发构建,出现如下效果

我的电报收到通知信息

浏览访问部署服务IP:30088,出现如下效果

我们修改Laravel项目routes\api.php文件,新增一条路由,代码如下

get('/user', function (Request $request) { return $request->user();});Route::get('/home', function (Request $request) { echo "自动化部署Laravel项目".$_ENV['APP_NAME'];});

然后我们再次提交代码后,等待自动化部署构建完成后,浏览器访问部署服务IP:30088/api/home,出现如下效果

这样我们就成功的使用Gitea+Drone自动化部署Laravel,以下我贴出我的Laravel项目结构,以及新增的几个配置文件

上一篇:软件测试培训之测试工程师日常工作需要关注的问题
下一篇:软件测试培训之测试中的团队建设
相关文章

 发表评论

暂时没有评论,来抢沙发吧~