小白折腾服务器(三):docker-compose+Dockerfile
想着加多站点配置,之前将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 down
、docker ps -a
、docker-compose up -d
, nginx一直是exit(1),好想哭啊
小白如我,服务器上没弄域名,多站点除了多端口以外我不知道还能怎么弄了- -怎么公用80端口啊?
好了晚安(月亮)
本作品采用《CC 协议》,转载必须注明作者和本文链接