小白折騰伺服器(三):docker-compose+Dockerfile

aen233發表於2018-11-30

想著加多站點配置,之前將docker-compose和deployer放在一起了,想了想docker配的是環境,deployer部署的是專案。嗯還是得分開寫分開放。

然後加了Dockerfile去裝php的擴充套件,

之前是5條命令+5個檔案部署單站點。
這下是3條命令+7個檔案部署多站點。
基本上不需要敲多的命令了,或者上伺服器vim了

7個檔案包括

  • 3個deployer檔案,木有變
  • 2個nginx的站點配置檔案
  • 1個docker-compose.yml檔案
  • 1個Dockerfile檔案(用來裝php擴充套件)

比之前多1個nginx的配置檔案和一個Dockerfile檔案。

3條命令

其實scp命令應該都不算,其實就是自己偷懶- -

scp -r ~/Sites/aen233-dnmp  root@111.22.3.4:~  
docker-compose up -d
dep deploy

省略掉的兩條命令,就是安裝pdo_mysql擴充套件以及重啟phpfpm容器。

docker-compose exec iu_phpfpm docker-php-ext-install pdo_mysql
docker-compose restart  iu_phpfpm

現在看好像差不太多,不過以後要是新增其它擴充套件,一條一條敲命令就不太愉快了- -
Dockerfile還是方便~~~~

新的docker-compose.yml

nginx多開了一個埠。
因為是配環境,字首把專案名換掉了,之前是iu,下個專案叫pikachu~
aen233,是“阿嗯”233,23333333~~~~
nginx站點配置的連結目錄改成/conf/conf.d了,是因為想著以後php和mysql的配置也需要放在conf目錄下,統一檢視和管理比較方便。
參考大大的dnmp,好像還寫了rw,ro等許可權,
還有networks我也沒配,反正它會用預設的配置

version: '3'
services:
  aen233-mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
    - "3306:3306"
    volumes:
    - ./mysql:/var/lib/mysql
    container_name: aen233-mysql

  aen233-redis:
    image: redis:alpine
    ports:
    - "6379:6379"
    volumes:
    - ./redis:/data
    container_name: aen233-redis

  aen233-phpfpm:
    build: .
    ports:
    - "9000:9000"
    volumes:
    - /var/www/html:/var/www/html
    links:
    - aen233-mysql:mysql
    - aen233-redis:redis
    container_name: aen233-phpfpm

  aen233-nginx:
    image: nginx:alpine
    ports:
    - "80:80"
    - "8888:8888"
    volumes:
    - /var/www/html:/var/www/html
    - ./conf/conf.d:/etc/nginx/conf.d
    links:
    - aen233-phpfpm:phpfpm
    container_name: aen233-nginx

  aen233-adminer:
    image: adminer
    ports:
    - "8080:8080"
    links:
    - aen233-mysql:db
    container_name: aen233-adminer

新加的Dockerfile檔案

Dockerfile和docker-compose.yml我在同級目錄放著,
Dockerfile用的地方其實就是docker-compose.yml中php-fpm容器之前是image,現在換成build了。
build 後面的點其實是Dockerfile的路徑,同級目錄用點就可以了。
build其實還有context、args引數,不過我都沒有用,就最基礎的,先跑起來再說~
其實就兩行,不過以後新增swoole擴充套件應該也是這裡

FROM php:7.2-fpm

RUN docker-php-ext-install pdo_mysql

新的nginx站點配置檔案

預設的default.conf中修改root要改兩處,這裡給提出來了,以後只在上面改一個root地址就好了
在docker-compose.yml同級新建目錄conf/conf.d,兩個站點配置檔案都在這裡,區別只是最上面的監聽埠和根目錄。
docker-compose.yml中nginx開放了兩個埠80和8888,另一個站點的listen改成8888,再改個root就好了。

server {
    listen       80;
    server_name  localhost;
    root   /var/www/html/iu-deployer/current/public;
    index  index.php index.html index.htm;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    location / {
       try_files $uri $uri/ /index.php?$query_string;
       if (!-e $request_filename){
           rewrite ^/(.*) /index.php last;
       }
    }

    #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$ {
        fastcgi_pass   phpfpm:9000;
        fastcgi_index  index.php;
        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;
    #}
}

不是強迫症患者,所以root使用者也ok,不過下次應該試著換個使用者組。
還有就是配置 Supervisor 來啟動 Horizon。佇列和定時任務- -
還有就是配githook,這樣deployer就完全自動化部署了
swoole用的時候再裝吧- -

都是最基礎的用法,個人也比較喜歡簡單粗暴- -
剛剛還在想deployer怎麼可以只發布dev環境,翻前輩帖子就翻到了 dep deploy dev 愉快~~~~

記下坑,今天最大的坑來自phpstorm。refactor->rename資料夾時,它自動給全部替換了- -
nginx配置檔案裡 nginx全改成conf.d了我很晚才發現- -
一直docker-compose downdocker ps -adocker-compose up -d, nginx一直是exit(1),好想哭啊

小白如我,伺服器上沒弄域名,多站點除了多埠以外我不知道還能怎麼弄了- -怎麼公用80埠啊?

好了晚安(月亮)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章