git
apt update
apt install git
docker
安装
# 官方镜像安装(但是有时候下载很慢,甚至没法下载。建议使用下面的国内镜像安装)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 国内镜像安装docker
curl -sSL https://get.daocloud.io/docker | sh
配置镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像地址"],
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
EOF
systemctl daemon-reload
systemctl restart docker
laradock
Laradock 是为 PHP 提供的完整 Docker 本地开发环境,有助于在 Docker 上运行 PHP 应用程序,和 Homestead 一样提供了一系列打包好(包括配置)的 Docker Image(例如Nginx,MySQL,Redis等等)。
安装
mkdir /docker
cd /docker
git clone https://github.com/Laradock/laradock.git
cd laradock/
cp .env.example .env
修改.env配置
vim .env
####修改如下配置
APP_CODE_PATH_HOST=../hyperf_project/ #项目代码的地址
CHANGE_SOURCE=true #是否使用国内加速
MYSQL_VERSION=8.0.32 #mysql版本
MYSQL_DATABASE=default
MYSQL_USER=username #用户名
MYSQL_PASSWORD=password #密码
MYSQL_PORT=3306 #端口
MYSQL_ROOT_PASSWORD=rootpassword #root用户密码
启动Nginx,MySQL
docker compose up -d nginx mysql
配置MySQL
# 进入容器
docker-compose exec mysql env LANG=C.UTF-8 /bin/bash
进入mysql
mysql -uroot -p
# 查看权限
mysql> select Host,User from mysql.user;
# 删除root远程访问权限
mysql> delete from mysql.user where User='root' and Host='%';
#创建数据库
mysql> create database youjie;
#修改权限
mysql> GRANT ALL PRIVILEGES ON `youjie`.* TO 'username'@'%';
mysql> flush privileges;
配置Nginx
cd /docker/laradocker
# 配置后台
vim nginx/sites/youjie_admin.conf
upstream admin {
# Hyperf HTTP Server 的 IP 及 端口
server hyperf:9501;
}
server {
listen 80 ;
server_name test.ysr.uninote.com.cn;
# server_name localhost;
location / {
# 将客户端的 Host 和 IP 信息一并转发到对应节点
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 转发Cookie,设置 SameSite
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
# 执行代理访问真实服务器
proxy_pass http://admin;
}
}
# 配置C端API
vim nginx/sites/youjie.conf
upstream api {
# Hyperf HTTP Server 的 IP 及 端口
server hyperf:9502;
}
server {
listen 80 ;
server_name api.ysr.uninote.com.cn;
# server_name localhost;
location / {
# 将客户端的 Host 和 IP 信息一并转发到对应节点
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 转发Cookie,设置 SameSite
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
# 执行代理访问真实服务器
proxy_pass http://api;
}
}
# 配置图片服务器
vim nginx/sites/youjie_image.conf
server {
listen 80 ;
server_name file.ysr.uninote.com.cn;
root /var/www/ysr_api/public/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
}
# 配置后台前端代码(前端代码上传了放在 /docker/hyperf_project 下面)
vim nginx/sites/yj_admin_front.conf
server {
listen 81;
server_name localhost;
root /var/www/admin_front/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ @router;
}
location @router {
rewrite ^.*$ /index.html last;
}
}
# 重启Nginx服务 让配置生效
compose restart nginx
项目配置
clone代码
cd /doker
mkdir hyperf_project
cd hyperf_project
git clone git@git.uninote.com.cn:ysr/ysr_api.git
修改配置文件
cd ysr_api
vim .env
运行hyperf 镜像
docker run --name hyperf \
-v /docker/hyperf_project:/data/project \
--network laradock_backend \ #laradock 启动的时候会创建这个网络,需要把hyperf容器也加入到网络中,不然访问不到mysql
-p 9501:9501 \
-p 9502:9502 \
-p 9503:9503 \
-p 9504:9504 -it \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:8.0-alpine-v3.15-swoole
hyperf容器内配置
以下在镜像内运行:
cd /data/project/ysr_api/
# 安装依赖
composer install
配置supervisor
vim /etc/apk/repositories
将:
https://dl-cdn.alpinelinux.org/alpine/v3.14/main #版本会变化 跟着变就行了
https://dl-cdn.alpinelinux.org/alpine/v3.14/community
修改为:
https://mirrors.aliyun.com/alpine/v3.14/main
https://mirrors.aliyun.com/alpine/v3.14/community
apk update
#安装
apk add supervisor
# 生成配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
# 修改/etc/supervisor/supervisord.conf文件内容
vim /etc/supervisord.conf
[unix_http_server]
;file=/tmp/supervisor.sock ; the path to the socket file
file=/var/run/supervisor.sock ; the path to the socket file
[supervisord]
;logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile=/var/log/supervisor.log ; main log file; default $CWD/supervisord.log
[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
sudo vim /var/log/supervisor.log
sudo chmod 777 /var/log/supervisor.log
mkdir /etc/supervisor/conf.d
vi /etc/supervisor/conf.d/ysr.conf
# 新建一个应用并设置一个名称,这里设置为ysr_server
[program:ysr_server]
# 设置命令在指定的目录内执行
directory=/data/project/ysr_api/
# 这里为您要管理的项目的启动命令
command=php ./bin/hyperf.php start
# 以哪个用户来运行该进程
user=root
# supervisor 启动时自动该应用
autostart=true
# 进程退出后自动重启进程
autorestart=true
# 进程持续运行多久才认为是启动成功
startsecs=1
# 重试次数
startretries=3
# stderr 日志输出位置
stderr_logfile=/data/project/ysr_api/runtime/stderr.log
# stdout 日志输出位置
stdout_logfile=/data/project/ysr_api/runtime/stdout.log
[supervisord]
supervisord -c /etc/supervisord.conf