今天最佳化了一下,學著用docker-compose,將dockerfiles和deploy檔案放在一起,
docker-compose.yml和nginx的配置檔案透過scp命令傳到伺服器上,
執行docker-compose up -d,然後裝pdo_mysql的擴充套件,
最後在本地執行dep deploy。結束,正常訪問。
在 mysql + php + nginx 的基礎上增加了 redis 和 adminer。
5個檔案,5個命令,5個docker容器
5個檔案
|-- deploy-iu
|-- deploy
|-- .artisan_env
|-- .env
|-- deploy.php
|-- dockerfiles
|-- nginx
|-- default.conf
|-- docker-compose.yml
5個命令
// 本地
scp -r ~/Sites/deploy-iu/dockerfiles root@111.22.3.4:/var/www/html/iu-docker
// 伺服器(cd /var/www/html/iu-docker/dockerfiles)
docker-compose up -d
docker-compose exec iu_phpfpm docker-php-ext-install pdo_mysql
docker-compose restart iu_phpfpm
// 本地(cd ~/Sites/deploy-iu/deploy)
dep deploy
5個容器
mysql
redis
php
nginx
adminer
其它筆記
// 進入redis容器
docker exec -it 51 redis-cli
docker-compose 需要注意的:
(筆記來源:使用docker-compose 大殺器來部署服務
1. 不要把 docker 當做資料容器來使用,資料一定要用 volumes 放在容器外面
2. 不要把 docker-compose 檔案暴露給別人, 因為上面有你的伺服器資訊
3. 多用 docker-compose 的命令去操作, 不要用 docker 手動命令&docker-compose 去同時操作
4. 寫一個指令碼類的東西,自動備份docker 對映出來的資料。
5. 不要把所有服務都放在一個 docker 容器裡面
docker-compose.yml
version: '3'
services:
iu_mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
volumes:
- /var/www/html/iu-docker/data/mysql:/var/lib/mysql
container_name: iu_mysql
iu_redis:
image: "redis"
ports:
- "6379:6379"
volumes:
- /var/www/html/iu-docker/data/redis:/data
container_name: iu_redis
iu_phpfpm:
image: php:7.2-fpm
ports:
- "9000:9000"
volumes:
- /var/www/html/iu-deployer:/var/www/html/iu-deployer
links:
- iu_mysql:mysql
- iu_redis:redis
container_name: iu_phpfpm
iu_nginx:
image: nginx:1.12.2
ports:
- "80:80"
volumes:
- /var/www/html/iu-deployer:/var/www/html/iu-deployer
- /var/www/html/iu-docker/dockerfiles/nginx:/etc/nginx/conf.d
links:
- iu_phpfpm:phpfpm
container_name: iu_nginx
iu_adminer:
image: adminer
ports:
- "8080:8080"
links:
- iu_mysql:db
container_name: iu_adminer
deploy.php
<?php
namespace Deployer;
require 'recipe/laravel.php';
set('repository', 'https://github.com/aen233/iu.git');
add('shared_files', []);
add('shared_dirs', []);
add('writable_dirs', []);
// 順便把 composer 的 vendor 目錄也加進來
add('copy_dirs', ['node_modules', 'vendor']);
host('111.22.3.4')
->user('root')// 使用 root 賬號登入
->identityFile('~/.ssh/aen233.pem')// 指定登入金鑰檔案路徑
->set('deploy_path', '/var/www/html/iu-deployer'); // 指定部署目錄
// 定義一個上傳 .artisan_env 檔案的任務
desc('Upload .artisan_env file');
task('artisan_env:upload', function () {
// 將本地的 .env 檔案上傳到程式碼目錄的 .env
upload('.artisan_env', '{{release_path}}/.env');
});
// 定義一個上傳 .env 檔案的任務
desc('Upload .env file');
task('env:upload', function () {
// 將本地的 .env 檔案上傳到程式碼目錄的 .env
upload('.env', '{{release_path}}/.env');
});
task('chmod', function () {
run('cd {{release_path}} && chmod 777 -R storage/');
});
// 在 deploy:vendors 之前呼叫 deploy:copy_dirs
before('deploy:vendors', 'deploy:copy_dirs');
before('artisan:storage:link', 'artisan:migrate');
before('artisan:migrate', 'artisan_env:upload');
after('artisan:migrate', 'env:upload');
after('deploy:failed', 'deploy:unlock');
after('cleanup', 'chmod');
git地址: https://github.com/aen233/deploy-iu
本作品採用《CC 協議》,轉載必須註明作者和本文連結