Where to put the php artisan migrate command

后端 未结 3 392
被撕碎了的回忆
被撕碎了的回忆 2020-12-09 10:07

Trying to deploy the laravel application on docker stack .What I am confused or not able to figure out is where can I run this php artisan migrate:fresh t

相关标签:
3条回答
  • 2020-12-09 10:11

    To run all migrate you need to be inside your container, for that you need to run your containers with docker-compose up, here u need to be with terminal in the directory where your docker-compose.yml file is.

    after that, and with the same place of docker-compose.yml file, run this command to be inside your container:

    docker exec -it name_of_container bash
    

    and when you will be inside your container, go to your shared app inside the container, I think here is the app so cd app.

    after all of this run:

    php artisan migrate
    
    0 讨论(0)
  • 2020-12-09 10:24

    This is how I solved it .Created a bash script called run.sh and added the php artisan migrations commands followed by the php serve command.

    run.sh

    #!/bin/sh
    
    cd /app  
    php artisan migrate:fresh --seed
    php artisan serve --host=0.0.0.0 --port=$APP_PORT
    

    Added entrypoint to the Dockerfile removing the CMD in the end which will run the commands desired.

    copy ./run.sh /tmp    
    ENTRYPOINT ["/tmp/run.sh"]
    

    Remove the command from the docker-compose.yml

    0 讨论(0)
  • 2020-12-09 10:30

    Yes, special script. I try to build deploy and testing throw docker-compose, so i run migrations in script before starting supervisor in docker-service "jobs":

    #!/bin/sh
    
    cd /var/www
    php artisan migrate --seed
    
    /usr/bin/supervisord -n -c /etc/supervisord.conf
    

    And piece from my deploy-docker-compose.yml:

    services:
        nginx:
            depends_on:
                - phpfpm ## NOT START BEFORE PHPFPM
    
        phpfpm:
            depends_on: 
                - jobs ## NOT START BEFORE MIGRATION
        jobs:
            # ....
    

    This schema is not started in production yet;

    UPD1

    i had to create simple laravel command wait_db_alive:

    public function handle()
    {
        $i = 1;
        $ret = 1;
        while($i <= 10){
            echo 'connecting to host:'.config('database.connections.'.config('database.default').'.host').' try '.$i.'..';
            try {
                DB::connection()->getPdo();
                echo 'ok'.PHP_EOL;
                $ret = 0;
                break;
            } catch (\Exception $e) {
                echo 'error:' . $e->getMessage() .PHP_EOL;
                sleep(1);
                $i++;
            }
        }
        return $ret;
    }
    

    and edit init.sh to

    #!/bin/sh
    
    php artisan wait_db_alive && php artisan migrate --seed && /usr/bin/supervisord -n -c /etc/supervisord.conf
    

    so, log for jobs:

    jobs_1      | connecting to host:db try 1..error:SQLSTATE[HY000] [2002] Connection refused
    jobs_1      | connecting to host:db try 2..error:SQLSTATE[HY000] [2002] Connection refused
    jobs_1      | connecting to host:db try 3..ok
    jobs_1      | Nothing to migrate.
    jobs_1      | Seeding: ServicesTableSeeder
    ...
    jobs_1      | Database seeding completed successfully.
    jobs_1      | 2020-11-22 05:33:43,653 CRIT Supervisor is running as root.
    

    UPD2

    In some cases we need to start container without .env-file, then better init.sh for this:

    #!/bin/sh
    php artisan wait_db_alive && php artisan migrate --seed 
    /usr/bin/supervisord -n -c /etc/supervisord.conf
    
    0 讨论(0)
提交回复
热议问题