本文記錄最近實際工作中部署laravel項目到服務器的全部流程。採用docker部署項目,docker鏡像是同事上傳到阿里雲的一個鏡像。
1 首先安裝docker
~$ sudo apt-get install docker.io
安裝完成後查看版本
~$ docker -v
Docker version 18.06.1-ce, build e68fc7a
2 安裝docker-compose
~$ sudo apt-get install docker-compose
驗證安裝成功:
docker-compose -v
docker-compose version 1.18.0, build 8dd22a9
3 拉取docker鏡像到本地
首先登錄docker鏡像:
~$ docker login [email protected] registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /home/lzj/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
登錄成功後再拉取鏡像到本地:
~$ docker pull registry.cn-hangzhou.aliyuncs.com/lnmpswoole/sleep:v1.0
v1.0: Pulling from lnmpswoole/sleep
4 創建工作目錄
新建一個文件夾 /data,在其中新建一個文件docker-compose.yml,內容:
docker-compose.yml:
version: "2"
services:
# MySQL 5.7: https://hub.docker.com/_/mysql/
mysql:
container_name: mysql
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: "root"
MYSQL_USER: "youwo"
MYSQL_PASSWORD: "123456"
MYSQL_DATABASE: "youwo_dliao"
volumes:
- /data/docker/mysql:/var/lib/mysql
ports:
- "13306:3306"
redis:
container_name: redis
image: redis:3.2.10
volumes:
- /data/docker/redis:/data
ports:
- "16379:6379"
sleep:
container_name: sleep
image: registry.cn-hangzhou.aliyuncs.com/lnmpswoole/sleep:v1.0
links:
- mysql
- redis
volumes:
- /data/docker_user/sleep:/data
ports:
- "10191:8084"
- "10192:80"
這裏配置了docker鏡像中的mysql,redis,sleep三個容器。sleep是laravel項目名稱,它在本地位置在/data/docker_user/sleep目錄下,這個目錄映射到docker鏡像中的/data目錄下面。sleep使用的本地端口是10192,它將映射到鏡像中的80端口。
mysql數據庫在本地機中的位置在/data/docker/mysql目錄下,端口13306映射到3306端口下。redis數據庫本地位置/data/docker/redis映射到/data目錄下,端口16379映射到6379。
所以需要在/data目錄下新建倆個目錄docker和docker_user。
/data$ ls
docker docker-compose.yml docker_user
5 啓動docker鏡像
在/data目錄下執行命令:
/data$ sudo docker-compose up -d
Starting redis ...
Starting redis ... done
Starting sleep ... done
然後查看docker容器:
/data$ docker container ls
4e012efe06e1 registry.cn-hangzhou.aliyuncs.com/lnmpswoole/sleep:v1.0 "docker-php-entrypoi…" 44 hours ago Up 44 seconds 22/tcp, 8083/tcp, 9093/tcp, 0.0.0.0:10192->80/tcp, 0.0.0.0:10191->8084/tcp sleep
71c08b17e847 mysql:5.7 "docker-entrypoint.s…" 44 hours ago Up 57 seconds 33060/tcp, 0.0.0.0:13306->3306/tcp mysql
e1cdebd66249 redis:3.2.10 "docker-entrypoint.s…" 44 hours ago Up 57 seconds 0.0.0.0:16379->6379/tcp redis
可以看到sleep容器的id是4e012efe06e1,現在進入這個容器去進行配置。
/data$ docker exec -it 4e012efe06e1 bash
root@4e012efe06e1:/# ls
bin data etc lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
root@4e012efe06e1:/#
已經進入docker鏡像了。
6 配置docker鏡像
配置鏡像中的nginx。
cd /etc/nginx/conf.d/
root@4e012efe06e1:/etc/nginx/conf.d# ls
api.conf boss_admin.conf
root@4e012efe06e1:/etc/nginx/conf.d# cat api.conf
server {
listen 80;
server_name 192.168.1.48;
root /data/sleep/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 unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
這裏192.168.1.48是本機的ip。然後啓動nginx:
/etc/nginx/conf.d# service nginx start
然後啓動php:
/etc/nginx/conf.d# service php7.1-fpm start
7 拷貝laveral工程源碼
重新打開一個客戶端,將larabel工程源碼拷貝到/data/docker_user/sleep目錄下,
/data/docker_user/sleep$ ls
sleep
並將sleep目錄更改權限:
/data/docker_user/sleep$ sudo chmod -R 777 sleep/
進入工程目錄,修改.env配置文件:
APP_URL=192.168.1.48:10192
8 使用composer初始化lavaral工程
安裝composer軟件:
/data/docker_user/sleep/sleep$ sudo apt-get install composer
先確保sleep目錄下有composer.json文件,然後執行命令:
/data/docker_user/sleep/sleep$ composer install
這個命令會下載許多php插件,等成功後,會在當前目錄下生成vendor文件夾。
9 安裝成功
打開瀏覽器,輸入http://192.168.1.48:10192/,可以看到laravel的界面: