采用将文件直接放入 wsl2 的 Ubuntu-22.04 系统中,减少文件转换

项目文件,可以放在 Windows 上任意位置,通过phpstorn自动部署的方式,将项目传输到 WSL2 里面去,也可以直接将项目放在 WSL2 里面,PHPStorm 直接打开WSL2里面的项目,以下主要说如何通过通过自动部署的方式

1、应用商店安装 Ubuntu

2、进入 Ubuntu

或者

进行各种配置,权限,用户,配置 SSH 等

# 如果遇到权限问题,请加 sudo
docker ps
sudo mkdir /www
cd /www
sudo vim test.php
cd
ssh-keygen -t ed25519 -C "yida_ubuntu"
cd .ssh/
cat id_ed25519.pub
sudo chmod -R 777 www/

# 也可以不用克隆项目,因为是本地开发,所以用 IDE 直接同步即可
git clone git@gitee.com:shuxiaoyuan/php_demo.git

3、打开 docker 的 WSL integration

如果没有显示,那么可能需要先执行第三步,进入 Ubuntu 系统进行初始化等工作

4、查看刚创建的文件

打开 Windows 资源管理器,输入 \\wsl.localhost\Ubuntu-22.04\www 即可看到刚刚创建的文件

5、拉取项目

cd /www
git clone git@gitee.com:shuxiaoyuan/php_demo.git

6、运行 Docker 挂载项目

注意:以下 PHP 和 Nginx 容器都是在进入 Ubuntu 系统内操作的,其他容器根据你的需求来

# 创建网络
docker network create -d bridge my-net

# 运行 PHP 容器
docker run --name php81 -d --network my-net --mount type=bind,source=/www,target=/www shuxiaoyuan/php:8.1.v2

创建 nginx 挂载文件夹

cd
mkdir -p docker/Nginx
cd docker/Nginx
mkdir -p www logs conf
vim www/index.html # 随便写点啥

找个 nginx.conf 配置文件,不想找就抄下面的vim conf/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80 default_server;
        # listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        location / {
            index index.html index.htm index.php;
        }
    }

    include /etc/nginx/conf.d/*.conf;
}

搞个站点文件vim conf/conf.d/php-demo-local.com.conf

server {
    listen        80;
    server_name  php-demo-local.com;
    root   /www/php_demo/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 你会经常在日志中看到找不到 favicon.ico.php找不到的500报错
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        # root           /www/php_demo;
        fastcgi_pass   php80:9000;
        # fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /www/php_demo/public$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

运行 Nginx 容器

# 根据你的实际情况来,这里为了方便观看拆成多行了,实际是一行
docker run
-dp 80:80
--name nginx
--network my-net
--mount type=bind,source=/home/shuxiaoyuan/docker/Nginx/www,target=/usr/share/nginx/html
--mount type=bind,source=/home/shuxiaoyuan/docker/Nginx/logs,target=/var/log/nginx
--mount type=bind,source=/home/shuxiaoyuan/docker/Nginx/conf/nginx.conf,target=/etc/nginx/nginx.conf
--mount type=bind,source=/home/shuxiaoyuan/docker/Nginx/conf/conf.d,target=/etc/nginx/conf.d
--mount type=bind,source=/www,target=/www
nginx:1.25.2

7、配置 phpstorm 自动同步

如果重写文件或文件夹失败,可能需要设置相应权限

缺点

  1. 本方案采用的是 IDE 自动同步代码,所以最好勾上“本地删除后删除远程文件”,这样切换分支的时候,就可以自动同步代码

如果嫌弃麻烦,可以直接打开